1、国家二级 C语言机试(操作题)模拟试卷 8及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:在形参 SS所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。 SS所指字符串数组中共有 N个字符串,且串长小于 M。程序中库函数 strstr(s1, s2)的功能是在 s1串中查找 s2子串,若没有,函数值为 0,若有,为非 0。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include Stdio h #in
2、clude String h #define N 5 #define M 15 void fun(char(*SS)M, char *substr) int i, find=0; *found* for(i=0; i _1_; i+) *found* if(strstr(ssi, _2_)!=NULL) find=1; puts(ssi); print f(“ n“); *found* if(find=_3_)printf(“ nDont found! n_); main() char xNM=“BASIC“, “C langwage“, “Java“, “QBASIC“, “Access“)
3、,strM; int i; printf(“ nThe original string n n“); for(i=0; i N; i+)puts(xi); printf(“ n“); printf(“ nEnter a string for search: “); gets(str); fun(x, str); 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:根据整型形参 m的值,计算如下公式的值。 例如,若 m中的值为: 5,则应输出:0 536389。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 !#inc
4、lude stdio h double fun (int m) double y=1 0; int i; *found* for(i=2; i m; i+) *found* y-=1 (i * i); return(y); main() int n=5; printf(“ nThe re sult is 1f n“, fun(n); 三、程序设计题 3 编写函数 fun,它的功能是计算下列级数和,和值由函数值返回。例如,当 n=10, x=0 3时,函数值为 1 349859。注 意:部分源程序在文件 PROG1 C文件中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括
5、号中填入你编写的若干语句。 #include stdio h#include math h double fun(double x, int n)main() void NONO (); printf(“f n“, fun(0 3, 10); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE *fp, *wf; int i, n; double s, x; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 10; i+) fscanf(fp, “ 1f,
6、 d“, &x, &n); s=fun(x, n); fprintf(wf, “ f n“, s); fciose(fp); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 8答案与解析 一、程序填空题 1 【正确答案】 (1)N (2)substr (3)0 【试题解析】 第一空: “for(i=0; i _1_; i+)”补充循环的结束条件, fun的参数 (*ss)M是指向 N行 M列的字符串数组,循环是逐行字符串是否含有 substr所指的子串,因此循环次数是 N次,故第一空处应为 “N”。 第二空: “if(strstr(ssi, _2_)!=NULL)”是判断字符串
7、 ssi是否含有 substr所指的子串,故第二空处为 “substr”。 第三空: “if(find=_3_)printf(“ nDont found! n“); “说明没有找到输出提示信息,如 果找到了 “find=1; puts(ssi); print“ n“); ”可知 find会变成 1,在没有找到的情况下 find为初值 0。故第三空处判断 find是否等于 0便可知是否找到了符合要求的字符串,因此第三空为 “0”。 二、程序修改题 2 【正确答案】 (1)for(i=2; i =m; i+) (2)y -=1 0 (i*i); 【试题解析】 (1)第一个标识下面, “for(i=
8、2; i m; i+)”中的循环条件根据题干中的公式,可以知道要计算的公式中应包括 i=m时的值,所以循环条件应该改 为“for(i=2; i =m; i+)”。 (2)第二个标识下面,因为 y被定义为浮点型, i被定义为整型,所以 “1 (i*i)”的计算结果为整型,即 “y-=1 (i*i); ”的返回值为整型,随着 i的增加,计算结果一直为 0,因此改为 “y-=1 0 (i*i); ”。 三、程序设计题 3 【正确答案】 double s =1 0, y=x ; int i; long k=1; for(i = 1 ; i =n ; i+) k=k*i j s += y k ; y *= x ; return s ; 【试题解析】 (1)根据题干中给出的数列,推出每一项分子是在前一项的基础上乘以 x,分母是每一项的阶乘,它可以在前一项的基础上乘以当前项的项数,即第n项是 n。 (2)在循环中求得每一项,然后对其进行累加求和。