1、国家二级 C语言机试(操作题)模拟试卷 164及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include void fun(char *s, int a, double f) *found* _1_ fp; c
2、har str100, str1100, str2100; int a1; double f1 ; fp=fopen(“file1 txt“, “w“); fprintf(fp, “ s d f n“, s, a, f); *found* _2_; fp=fopen(“filel txt“, “r“); *found* fscanf(_3_, “ s s s“, str, str1, str2); fclose(fp); a1=atoi(str1); f1=atof(str2); printf(“ nThe result : n n s d f n“, str, a1, f1); main()
3、 char a10=“Hello!“; int b=12345; double c=98 76; fun(a, b, c); 二、程序修改题 2 给定程序 MODIl C中函数 fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数 30800,则数字值为零的个数为 3,各位上数字值最大的是 8。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include int fun(unsigned n, int *zero
4、) int count=0, max=0, t; do t=n 10 ; *found* if(t=0) count+; if(maxt)max=t; n=n 10; while(n)? *found* zero=count; return max; main() unsigned n; int zero, max; printf(“ nInput n(unsgned): “); scarlf(“ d“, n); max=fun(n, zero); printf (“ nThe result: max= d zero= d n“, max, zero); 三、程序设计题 3 请编写函数 fun
5、,其功能是:计算并输出例如,在主函数中从键盘给 11输入20后,输出为: s=534 1 88884。 注意:要求 n的值大于 1但不大于 100。 部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include#includedouble fun(int n)main() int n; double s; printf(“ n nInput n: “); scanf(“ d“, n); s=fun(n); printf(“ n ns= f n n“, s); NONO(); NONO() *请在此函数内
6、打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE*rf,*wf; int n, i; double s; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0 ; i 国家二级 C语言机试(操作题)模拟试卷 164答案与解析 一、程序填空题 1 【正确答案】 (1)FILE* (2)fclose(fp) (3)fp 【试题解析】 第一空: “fp=fopen(“filel txt“, “w“); ”可知 fp是文件型指针,故第一空处 fp的定义应为 “FILE*”。 第二空:第二处的后面一句是 “fp=
7、fopen(“filel txt“, “r“): ”再次打开filel txt,因此在第二次打开 filel txt之前必须将文件关闭,故第二处是关闭文件,即 “fclose(fp)”。 第三空: fscanf的调用形式是: fscanf(fp,格式字符串,输入列表 ),因此第三空处应为 “fp”,从文件当中读出字符串、整数、浮点数。 二、程序修改题 2 【正确答 案】 (1)if(t=0) (2)*zero=count; 【试题解析】 (1)第一个标识下的 if语句是判断 t是否为 0,而原题给出的“if(t=0)”是将 0赋值给 t,所以将第一个标识下的 “if(t=0)”改为 “if(t=0)”。 (2)第二个标识下的 “zero=count; ”语句,根据 fun函数中 zero的定义为指针型。所以,第二个标识下 “zero=count; ”应该改为 “*zero=count; ”。 三、程序设计题 3 【正确答案】 int i; double fac=1 0: double sum=1 0; for(i=2; i=n; i+) fac+=sqrt(i); sum+=fac; return sum; 【试题解析】 (1)根据题干中给出的数列,推出每一项是在前一项的基础上加当前项数的平方根,第 n项的项数为 n。 (2)在循环中求得每一项,然后对其进行累加求和。