国家二级C语言机试(操作题)模拟试卷356
程序填空题
1.给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为: abcdef35adgh3kjsdf7。输出结果为:4。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
void fun (char *s, int *t)
{ int i,n;
n=0;
for(i=0; ____1____ !=0; 1++)
____3____ ;
}
main ( )
{ char s [80] =\\
(1)s[i]
(2)—9.
(3)* t=n
解析:搜索整个字符串,判断s[i]>=’0’且s[i]<=’9’,满足该条件后,计数变量加1,因此
第一空:循环终止条件是达到了字符串的尾部,字符串以“\\\\0”(或NULL)结束,故第一空处应为s[i]。
第二空:数字字符的判断是s[i]>=’0’且s[i]<=’9’,故第二空处应为“’9’”。
第三空:这里是将数字字符出现的次数存放在形参t里,n记录了数字字符的个数,而形参t是指针变量,故第三处应为“*t=n”。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。
例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。
请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
int fun (int *x,int y)
{
int t ;
return (y) ;
}
main ( )
{ int a =3,b= 8 ;
printf(\\
(1)t=* x;*x=y;
(2)return(t);
解析:(1)根据fun中x变量的定义,x为指针型变量,所以第一个错误标识下的“t=x;x=y;”改为“t=*x;*x=y;”。
(2)交换之后t中存放原来x的值,x存放原来y的值,这里应该是返回原来x的值,所以第二个标识下的“return (y); ”应该改为“return (t),”或者“return t;”。
指针作为函数的参数、函数的定义以及调用。
程序设计题
3.请编写函数fun,它的功能是:求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun (int *a,int *n)
{
}
main()
{int aa [1000], n, k ;
void NONO ();
fun (aa, &n);
for (k= 0 ; k< n ; k++)
if((k+1)00 10==0)printf(\\
1 int i;
2 *n=0;
3 for (1=7; 1<1000; 1++)
4 if(((1007) ==0 ||(10011) ==0)&&(i007 7)!=0) a[(* n)++]=i;
解析:进入fun函数,判断是否被7整除→判断是否被11整除→并且不被77整除→按要求返回计算结果,首先,*n置0.设置为累计器,计算符合条件的数的个数。然后,通过循环,判断小于1000的每一个整数是否符合题干中的要求。其中的判断条件能否被7或者被11整除为:i%7==0||i%11==0,不能被11和7同时整除为:i%771=0,它们之间的并关系就用&&连接,最后结果即为:(1%7==0||i%11==0)&&i%77!=0。最后,将符合条件的整数存入数组a中,同时对*n进行自加,返回结果。
本文档预览:3600字符,共2317字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载