国家二级C语言机试(操作题)模拟试卷307
程序填空题
1.给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。
例如,形参s所指的字符串为:abedefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgh。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<string.h>
#defiFte N 80
void fun(char*s,int n,char,*t)
{ intz len,i,j=0;
len=strlen(s);
/*********found*********/
if(n>=len)strcpy(【1】);
else {
/*********found*********/
for(i=len—n;i<=len-1;i++)
t[j++]=【2】;
/*********found*********/
t[j]=【3】;
}
}
main()
{char s[N],t[N];int n;
printf(\\
(1)t,s
(2)s[i]
(3)0或’\0’
解析:填空1:当给定的长度n大于该字符串s的长度,那么把该字符串直接拷贝到t就可以了,所以应填t,s。
填空2:使用for循环语句,把最右边n个字符依次添加到t中,所以应填s[i]。
填空3:字符串操作结束,需要给t加一个字符串结束符,所以应填0或’\0’。
程序修改题
2.下列给定程序中函数fun的功能是:把从主函数中输入的3个数,最大的数放在a中,中间的数放在b中,最小的数放在c中。
例如,若输入的数为:55 12 34,输出的结果应当是:a=55.0,b:34.0,c=12.0。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
void fun(float*a,float*b,float*c)
{
/*********found*********/
float*k;
if(*a<*b)
{
k=*a;
*a=*b;
*b=k;
}
/*********found*********/
if(*a>*c)
{
k=*c;
*c=*a;
*a=k;
}
if(*b<*c)
{
k=*b;
*b=*c;
*c=k;
}
}
main()
{
float a,b,c;
printf(\\
(1)noat k;
(2)if(*a<*c)
解析:(1)观察程序中的k,在赋值语句中,k是以变量的形式进行赋值而非指针,所以将k定义为指针是错误的。
(2)此处if语句是为了将小于*c的值放入*c中,所以改为if(*a<*c)。
程序设计题
3.编写函数fun,其功能是:求Fibonacci数列中大于t的最小的数,结果由函数返回。Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n一1)+F(n一2)
例如,当t=1000时,函数值为1597。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<conio.h>
#include<math.h>
#include<stdio.h>
int fun(int t)
{
}
main()
{
int n;
n=1000;
printf(\\
int fun(int t)
{
int f0=0,f1=1,f;
do{
/*根据Fibonacci数列的定义求数值*/
f=f0+f1;
f0=f1;f1=f;
}while(f<t);/*如果求的数值小于t则继续*/
return f;
}
解析:根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把f看成是前两项之和,而f0始终代表第n一2项,f1代表第n一1项。退出循环时得到的数f,就是大于指定数的最小的数。
本文档预览:3600字符,共2779字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载