1、国家二级 C语言机试(操作题)模拟试卷 25及答案与解析 一、程序填空题 1 给定程序的功能是:从键盘输入若干行文本 (每行不超过 80个字符 ),写到文件myfile4 txt中,用 1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数 ReadText和 WriteText实现。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。不得增行或删行,也不得更改程序的结构 ! #include #include #include void WriteText(FTLE*); VOid
2、ReadText(FTLE *); main() FTLE*fp; if(fp=fopen(“myfile4 txt”, “w”)=NULL) printf(“open fail! n”);exit(0); ) Write Text(fp); fclose(fp); if(fp=fopen(“myfile4 txt”, “r”)=NULL) printf(“open fail! n”); exit(0); ReadText(fp); fclose(fp); /*found*/ void WriteText(FZLE _1_) char str81; printf(“ nEnter string
3、 with一 1 to end: n”); gets(str); while(stromp(str, “一 1”)!=0) /*found*/ fputs(_2_, fw); fputs(“ n”, fw); gets(str); void ReadText(FILE*fr) char str81; printf(“ nRead file and output to screen : n”); fgets(str, 81, fr); whZe(!leof(fr) /*found*/ printf(“ s”, _3_ ); fgets(str, 81, fr); 二、程序修改题 2 给定程序 M
4、ODll C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数 fun的功能是将单向链表结点 (不包括头结点 )数据域为偶数的值累加起来,并且作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include typedef struct aa int data; struct aa *next; )NODE; int fun(NODE*h) int sum=0; NODE * P; /*found*/ p=h; while(P) i f(P一 data 2=0) s
5、um+=p一 data; /*found*/ p=h一 next; retumR sum; NODE * creatlink(int n) NODE *h, *P, *s; int i; h=p=(NODE*)malloc(sizeof(NODE); for(i=1; idata=rand() 16; s一 next=p一 next; P一 next=s ; p=P一 next ; P一 next=NULL; return h; outlink(NODE *h, FILE *pf) NODE *P; P=h一 next; fprintf pf, “n nTHE LIST: nn HEAD”);
6、 while(P) fprintf(pf, “一 d”, P一 data); p=p一 next; fprintf(pf, “ n”); outresult(int s, FILE *pf) fprintf(pf, “ nThe sum of even numbers: d n”, s); main() NODE *head; int even; head=creatlink(12); head一 data=9000; outlink(head, stdout); even=fun(head); printf(“ nThe result: n”); outresult(even, stdout
7、); 三、程序设计题 3 请编写函数 fun,函数的功能是:将大于形参 m且紧靠 m的 k个素数存入 xx所指的数组中。例如,若输入 17, 5,则应输出: 19, 23, 29, 31, 37。 注意:部分源程序 在文件 PROGl C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include Void fun(int m, int k, int xx) ) Main() int m, n, z z1 0 0 0; void NONO(); printf(“ nPlease enter two integers: ”); sc
8、anf(“ d d”, m, 将题目中要求的素数个数减 1 else break; 【试题解析】 (1)该程序功能是取大于整数 m且紧靠 m的 k个素数。其中,素数是指只能被 1和自身除尽的正整数 (1),所以判别 n是否为素数,只要用 2 n-1这些数逐个去除 n,判断余数是否为 0即可。只要有一次余数为 0, n就不是素数,否则 n为素数。 (2)从已给部分源程序的 main主函数开始入手,核心函数 “fun(m, n, zz); ”巾的参数由题目可知, zz存放素数, n为要求的素数个数。 解题思路 进入 fun函数,根据前面的分析: 首先,定义、初始化变量 sign,作为素数的标志;定义 r,初始化为存储素数数组的起始位。 然后,每判断一次 temp中的值是否为素数后,使 temp的值增 1,再次对 temp中新的值进行判断其是否为素数,不断循环此过程,直到 m的值等于指定的个数,即函数中的 k个数。