1、国家二级( C语言)机试模拟试卷 327及答案与解析 一、程序填空题( 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、程序 MODII C中函数 fun的功能是:求出 s所指字符串中最后一次出现的t所指子字符串的地址 ,通过函数值返回,在主函数中输出从此地址开始的字符串; 若未找到,则函数值为 NULL。 例如,当字符串中的内容为: ”abcdabfabcdx”, t中的内容为: ”ab”时,输出结果应是: abcdx。 当字符串中的内容为: ”abcdabfabcdx”, t中的内容为: ”abd”时,则程序输出未找到信息: notbe found!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include ch
4、ar * fun (char *s, char *t) char *p , *r, *a; /*found*/ a=Null; while (*s) p = s; r = t; while (*r) /*found*/ if(r=p) r+; p+; else break; if (*r = 0) a = s; s+; return a ; main() char s100, t100, *p; printf(“nPlease enter string S :“); scanf(“%s“, s); printf(“nPlease enter substring t :“); scanf(“%s
5、“, t); p = fun(s, t); if (p) printf(“nThe result is : %sn“, p); else printf(“nNot found !n“); 三、程序设计题( 40分) 3 请编写函数 fun,其功能是:将所有大于 1小于整数 m的非素数存入 xx所指数组中,非素数的个数通过 k传回。 例如,若输入: 17,则应输出: 4 6 8 9 10 12 14 15 16。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include void fun(int
6、 m, int *k, int xx) main() int m, n, zz100; void NONO (); printf(“nPlease enter an integer number between 10 and 100: “); scanf(“%d“, 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 函数,输出
7、数据,关闭文件。 */ int m, n, zz100; FILE *rf, *wf ; rf = fopen(“in.dat“,“r“); wf = fopen(“out.dat“,“w“); fscanf(rf, “%d“, fun(n, fprintf(wf, “%dn%dn“, m, n); for(n = 0; n m; n+) fprintf(wf, “%dn“, zzn); fclose(rf); fclose(wf); 国家二级( C语言)机试模拟试卷 327答案与解析 一、程序填空题( 30分) 1 【正确答案】 FILE* fp ch 【试题解析】 第一空:由 “fp=fo
8、pen(“file1.txt“, “w“);”可知 fp是文件型指针,故第一空处的变量 fp定义类型为 “FILE *”。 第二空: “while (!feof(_2_)”是在没有达到文件未尾的时 候执行循环体内容,文件状态检测函数 feof的一般调用形式是: feof(fp),其中 fp是文件型指针,故第二空处应为 “fp”。 第三空:题干要求从文件当中逐个读入数据并显示在终端屏幕上,第三空处是将从文件当中读取的字符 ch显示在屏幕上,故第三空处应为 “ch”。 二、程序修改题( 30分) 2 【正确答案】 a=NULL; if ( *r=*p ) 【试题解析】 ( 1)第一个标识下面:语句
9、 “a=Null;”中的 NuLL未定义。 NULL代表空值,但程序中写成了 NuLL。所以,改成 “a=NULL;”。 ( 2)程序的主体是二重循环,其中外循环使指针 s逐个指向字符串的字符,直到遇到串结束符退出循环,内循环检查指针 p与 r所指字符串是否匹配。因为这里p、 r是指针,如果使用判断表达式 “if(r=p)”,那么比较的是地址,而题目要求比较它们所指的字符。所以,改为: “if ( *r=*p )”。 三、程序设计题( 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返回即可。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1