1、国家二级 C语言机试(操作题)模拟试卷 19及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:找出 100999之间 (含 100和 999)所有整数中各位上数字之和为 X(x为一正整数 )的整数,然后输出;符合条件的整数个数作为函数值返回。 例如,当 X值为 5时, 100999之间各位上数字之和为 5的整数有: 104、 113、122、 131、 140、 203、 212、 221、 230、 302、 311、 320、 401、 410、 500。共有 15个。当 X值为 27时,各位数字之和为 27的整数是: 999。只 有 1个。 请在程序的下划线处填入正确的
2、内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #int fun(int x) int n, s1, s2, s3, t; n=0; t=100; /*found*/ while(t0): ”); scanf(“ d”, x); ) printf(“ nThe result is: d n”, fun(x); 二、程序修改题 2 给定程序 MODll C是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数 fun的作用是求出单向链表结点 (不包括头结点 )数据域中的最大
3、值,并且作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include typedef Struct aa int data; StruCt as *next; NODE; int fun(NODE *h) int max=一 1; NODE *P; /*found*/ p=h; while(P) if(P一 datamax) raax=p一 data ; /*found*/ p=h一 next; return max: outresult(int S, FILE *Pf)
4、 fprintf(Pf, “ nThe max in link: d n”, S); NODE *creatlink(int n, int m) NODE *h, *P, *S; int i; h=p=(NODE*)malloc(sizeof(NODE); h一 data=9999; for(i=1; idata=rand() m; 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, “ nTHE LIST
5、: n n HEAD”); while(P) ( fprintf(pf, “一 d”, P一 data); P=P一 next; fprintf(pf, “ n”); msin() NODE *head; int m; head=creatlink(12, 100); outlink(head, Stdout); m=fun(head); printf(“ nTHE RESULT: n”); outresult(m, Stdout); 三、程序设计题 3 请编写函数 fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间
6、由若干个空格隔开,一行的开始没有空格。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include #define N 80 int fun(char *S) main() char lineN;int hum=0; voidNONO(); printf(“Enter a string : n”); gets(line); hum=fun(line); printf(“The number of word is: d n n”, hum); NONO(); void NONO(
7、) *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE * rf, *wf; int i, num; char lineN, *P; rf=fopen(“in dat”, “r”); wf=fopen(“out dat”, “W”); for(i=0; inext; (2)p=p一 next; 【试题解析】 函数功能是求单向链表结点 (不包括头结点 )数据域中的最大值。其中,单链表查找最大值及最小值的方法主要是对单链表的遍历,并在遍历过程中将初始化的最大值、最小值与链表中的每一个结点的数据域进行比较。 (1)根据题干中求得除了头结点之外的结点数据域中的最
8、大值,头指针 h,工作指针 p指向头结点的下一个结点,所以第一个标识下的 “p=h; ”指向头结点应该改为指向下一个结点 “p=h-next; ”。 (2)工作指针 p,利用 p实现对链表的遍历, p表示指向链表的当前结点,所以指向下一个结点应该是 “p=p一 next: ”。 三、程序设计题 3 【正确答案】 int i, n=0;字符统计初始值设置为 0 for(i=0; i=a &si=z si+1 =|si+1= 0) 单词判断条件 n+; 单词统计计数器加 1 return n; 返回统计值 【试题解析】 该程序功能是统计一行字符串中单词的个数,作为函数值返回。单词之间以空格为分割,所以对单词个数的统计可以理解为对空格字符的统计,其中最后一个单词以字符串的结尾符为分割。 解题思路 (1)首先,求得字符串的长度。 (2)只要小于字符串的长度,就对字符进行循环判断。 (3)根据题干要求,只要字符是小写字母,并且下一个紧靠的字符是空格或者尾符,那么单词统计计数器就加 1。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1