1、国家二级 C语言机试(操作题)模拟试卷 350及答案与解析 一、程序填空题 1 函数 fun的功能是:计算 直到。若 x=2 5,函数值为: 1 917915。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 !1 #includestdio h 2 #include math h 3 double fun(double x)4 double f, t; int n; 5 f=1 0+x; 6 *found* 7 t=_1_; 8 n=1; 9 do 10 n+;11 *fou
2、nd* 12 t*=(-1 0)*x _2_;13 f+=t; 14 15 *found* 16 while(_3_ =le-6); 17 return f;18 19 main()20 double x, y; 21 x=2 5; 22 y=fun(x); 23 printf( nThe result is : n); 24 printf(x= -12 6f y= -12 6f n, x, y); 25 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:根据整型形参 m,计算如下公式的值。 例如,若 m=2000,则应输出: 0 000160。 请改正程序中的语法错误,使它
3、能计算出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 !1 #include stdio h 2 *foundv 3 fun(int m)4 double y=0, d; 5 int i; 6 *found* 7 for(i=100, i =m, i+=100)8 d=(double)i*(double)i; 9 y+=1 0 d; 10 11 return(y); 12 13 main()14 int n=2000; 15 printf( nThe result is 1f n, fun(n); 16 三、程序设计题 3 假定输入的字符串中只包含字母和 *
4、号。请编写函数 fun,它的功能是:除了字符串前导的 *号 之外,将串中其它 “*”号全部删除。在编写函数时,不得使用 C语言提供的字符串函数。函数 fun中给出的语句仅供参考。 例如, 字符串中的内容为: *A*BC*DEF*G*,删除后字符串中的内容应当是: *ABCDEFG。 注意:部分源程序在文件 PROG1 C文件中。 请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio.h 2 void fun(char*a) 3 4 *以下 代码仅供参考 * 5 int i=0, k; 6 while(ai=*)i+;
5、 7 k=i; 8 while(ai!= 0) *以下程序段实现非 *字符前移 * 9 10 11 ak= 0; 12 13 main() 14 char s81; void NONO(); 15 printf(Enter a string: n); gets(s); 16 fun(s); 17 printf(The string after deleted: n); puts(s); 18 NONO(); 19 20 void NONO() 21 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * 22 FILE *in, *out; 23 int i ; char s81;
6、 24 in=fopen(in dat, r); 25 out=fopen(out dat, w); 26 for(i=0; i 10; i+) 27 fscanf(in, s, s); 28 fun(s); 29 fprintf(out, s n, s); 30 31 fclose(in); 32 fclose(out); 33 国家二级 C语言机试(操作题)模拟试卷 350答案与解析 一、程序填空题 1 【正确答案】 (1)x (2)n (3)fabs(t) 【试题解析】 函数 fun的功能是计算级数和。 第一空: “f=1 0+x;”f的初始化为级数的前两项之和, do while循环从
7、第三项 x2 2开始计算,第一空处是给 t赋初值, t表示级数项, “n+; t*=(-1 0)*x _2_; ”即第一次进入 do循环之后 n的值为 2,故 t的初值应该为 x,第一空处应为 “x”。 第二空:由审题分析可知,后一项乘以 (-1)*x除以 n,故第二空处应为 “n”。 第三空:循环的终止条件是 (x0n!)的绝对值小于 1e-6,即只要 (xn n!)大于等于 le-6, do循环就执行,故第三处应为 “fabs(t)”, fabs函数的功能是求绝对值。 二、程序修改题 2 【正确答案】 (1)double fun(int m) (2)for(i=100; i =m; i+=
8、100) 【试题解析】 函数为累计相加,计算公式的值。 (1)第一个标识下的 fun函数的定义,根据题干中给出的公式中的分数部分,可知应该具有 double类型返回值。所以应将 “fun(int m)”改为 “double fun(int m)”。 (2)第二个标识下的 for循环过程是实现对公式的求解, C语句中 for循环中的多个循环条件表达式是以分号为分隔符,所以第二个标识下 “for(i=100,i=m,i+=100)” 改为 “for(i=100; i =m; i+=100)”。 三、程序设计题 3 【正确答案】 2 void fun( char *a ) 3 int i=0, k;
9、 4 while(ai=*)i+; 5 k=i; 6 while(ai!= 0) 7 if(ai!=*) ak+=ai; 8 i+; 9 10 ak= 0; 11 【试题解析】 本题主函数中需要输入一个字符串,然后进 入 fun函数处理字符串,在 fun函数中,就要实现题目要求我们写出的功能了。首先是判断字符串的开始是否为 “*”,这里就用到 while函数 (这里因为有步骤的区别,所以这里用while比用 if好 ),判断开始的字符是否为 “*”,见程序第 5 6行,这里需要顺次进行,因为开始无论有多少个 “*”都不用删除,当出现字母时,就开始下一步了,因为已经出现了字母,所以后面出现的 “*”一律删除,而字母时不用管的,所以这里就又需要 if条件语句来判断是否为 “*”然后赋值为空,见程序第 9 12行,当程序进行到字符为空时代表字符串结束,程 序就终止,这里就要用到 while条件语句进行终止判断,见程序第 7行。这样循环进行就能保留字符串前面的 “*”并且删除后面出现的所有 “*”了,然后 fun函数执行完成就可以转到主函数中进行新字符串的输出了。