1、国家二级( C语言)机试模拟试卷 207及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include void fun(char *s, int a, double f) /*found*/ 【 1】 fp; char ch; fp = fopen(“file1.txt“, “w“); fp
2、rintf(fp, “%s %d %fn“, s, a, f); fclose(fp); fp = fopen(“file1.txt“, “r“); printf(“nThe result :nn“); ch = fgetc(fp); /*found*/ while (!feof(【 2】 ) /*found*/ putchar(【 3】 ); ch = fgetc(fp); putchar(n); fclose(fp); main() char a10=“Hello!“; int b=12345; double c= 98.76; fun(a,b,c); 二、程序修改题( 30分) 2 给定
3、程序 MODll C中函数 fun的功能是:将 s所指字符串中出现的与 t1所指字符串相同的子串全部 替换成 t2所指字符串,所形成的新串放在 w所指的数组中。在此处,要求 t1和 t2所指字符串的长度相同。 例如,当 s所指字符串中的内容为: ”abcdabfab”, t1所指子串中的内容为: ”ab”, t2所指子串中的内容为: ”99”时,结果在 W所指的数组中的内容应为: ”99cd99f99”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include void fun (char *s,
4、char *t1, char *t2 , char *w) char *p , *r, *a; strcpy(w, s); while (*w) p = w; r = t1; /*found*/ while(r) if (*r = *p) r+; p+; else break; if (*r = 0) a = w; r = t2; while (*r) /*found*/ *a=*r; a+; r+ w += strlen(t2); else w+; main() char s100, t1100, t2100, w100; printf(“nPlease enter string S:“);
5、 scanf(“%s“, s); printf(“nPlease enter substring t1:“); scanf(“%s“, t1); printf(“nPlease enter substring t2:“); scanf(“%s“, t2); if (strlen(t1)=strlen(t2) fun(s, t1, t2, w); printf(“nThe result is : %sn“, w); else printf(“Error : strlen(t1) != strlen(t2)n“); 三、程序 设计题( 40分) 3 请编写函数 fun,其功能是:将所有大于 1小于
6、整数 m的非素数存入 xx所指数组中,非素数的个数通过 k传回。 例如,若输入: 17,则应输出: 4 6 8 9 10 12 14 15 16。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include void fun(int m, int *k, int xx) main() int m, n, zz100; void NONO (); printf(“nPlease enter an integer number between 10 and 100: “); scanf(“%d“,
7、fun(n, printf(“nnThere are %d non-prime numbers less than %d:“, m, n); for(n = 0; n m; n+) printf(“n %4d“, zzn); NONO(); void NONO() /* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ int m, n, zz100; FILE *rf, *wf ; rf = fopen(“in.dat“,“r“); wf = fopen(“out.dat“,“w“); fscanf(rf, “%d“, fun(n, fprintf(wf,
8、“%dn%dn“, m, n); for(n = 0; n m; n+) fprintf(wf, “%dn“, zzn); fclose(rf); fclose(wf); 国家二级( C语言)机试模拟试卷 207答案与解析 一、程序填空题( 30分) 1 【正确答案】 FILE* fp ch 【试题解析】 第一空:由 “fp=fopen(“file1.txt“, “w“);”可知 fp是文件型指针,故第一空处的变量 fp定义类型为 “FILE *”。 第二空: “while (!feof(_2_)”是在没有达到文件未尾的时 候执行循环体内容,文件状态检测函数 feof的一般调用形式是: feo
9、f(fp),其中 fp是文件型指针,故第二空处应为 “fp”。 第三空:题干要求从文件当中逐个读入数据并显示在终端屏幕上,第三空处是将从文件当中读取的字符 ch显示在屏幕上,故第三空处应为 “ch”。 二、程序修改题( 30分) 2 【正确答案】 while(*r) *a=*r; a+; r+; 【试题解析】 ( 1)函数通过 while语句比较 r所指字符串是否和 p所指的子串相同,若有相同,会一直循环到 *r是 0才退出循环 。所以第二个标识下的“while(r)”改为 “while(*r)”。 ( 2) C语言中,语句应该以 “;”结束,在第二个标识处, “r+”语句没有以 “;”结束,
10、因此第二个标识处应该是 “*a=*r; a+; r+;”。 三、程序设计题( 40分) 3 【正确答案】 int i,j; int t=0; /初始化数组个数 for(i=2;im;i+) /循环判断小于 n的数是否为素数 j=2; while(ji) if(i%j=0) /如果 i不是素数 xxt=i; t+; break; j+; *k=t; 【试题解析】 ( 1)根据求素数的方法判断数 i是否为素数。 ( 2)把不是素数的数留下来,其方法是:如果该数是素数则不处理;如果不是素数则放到数组 xx中,并且把数组的下标加 1,为下一个不是素数的数放在数组中做准备。 ( 3)返回个数,把 xx数组中已经写入的数 的个数返回即可,即把数组 xx的最大下标加 1返回即可。