1、国家二级 C语言机试(操作题)模拟试卷 342及答案与解析 一、程序填空题 1 函数 fun的功能是:在有 n个元素的结构体数组 std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。例如,主函数中给出了 4名学生的数据,则程序运行的结果为: 学号: N1002 学号: N1006 共有 2位学生有不及格科目 请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 typedef struct 3
2、char num8; 4 double score2; 5 *found* 6 _(1)_; 7 int fun(STU std, int n) 8 int i, k=0; 9 for(i=0; i n; i+) 10 *found* 11 if( stdi score0 60_(2)_stdi score1 60) 12 k+; printf (学号: s, stdi num); 13 *found* 14 return _(3)_; 15 16 main() 17 STU std4= N1001, 76 5, 82 0, N1002, 53 5, 73 0, N1005,80 5, 66
3、0, N1006, 81 0, 56 0; 18 printf( n共有 d位学生有不及格科目 n, fun(std, 4) ; 19 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:计算 S所指字符串中含有 t所指字符串的数目,并作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #include string h 3 #define N 80 4 int fun(char *s, char *t) 5 int n; 6 char *
4、p, *r; 7 n=0; 8 while(*s) 9 p=s; 10 *found* 11 r=p; 12 while(*r) 13 if(*r=*p) r+; p+; 14 else break; 15 *found* 16 if(*r=0) 17 n+; 18 s+; 19 20 return 0; 21 22 main() 23 char aN, bN; int m; 24 printf( nPlease enter stringa: ); gets(a); 25 printf( nPlease enter substring b: ); gets(b); 26 m=fun(a, b)
5、; 27 printf( nThe result is : m= d n, m); 28 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是:把分数最低的学生数据放在 b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。 注意:部分源程序在文件 PROG1 C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 #define N 16 3 typedef struct 4 char num10
6、; 5 int s; 6 STREC; 7 int fun(STREC *a, STREC *b) 8 9 10 main() 11 STREC sN=GA05, 85, GA03, 76, GA02, 69, GA04,85, CA01, 91, GA07, 72, (GA08, 64, GA06, 87, CA015,85, CA013, 91, GA012, 64, GA014, 91, GA011, 91,GAO17, 64, GA018, 64, CA016, 72; 12 STREC hN; 13 int i, n; FILE *out; 14 n=fun(s, h); 15 pr
7、intf(The d lowest score: n, n); 16 for(i=0; i n; i+) 17 printf( s 4d n, hi num, hi s); 18 printf( n); 19 out=fopen(out dat, w); 20 fprintf(out, d n, n); 21 for(i=0; i n; i+) 22 fprintf(out, 4d n, hi s); 23 fclose(out); 国家二级 C语言机试(操作题)模拟试卷 342答案与解析 一、程序填空题 1 【正确答案】 (1)STU (2) (3)k 【试题解析】 第一空: “ (1) ;
8、 ”这一空出现在定义结构体时,这里使用了typedef就是很明显地要声明结构体类型,而这里则是要填写结构体类型名。这里就要知道 typedef的作用了, typedef是用来命名已有类型的,相当于给已经知道的类型 (如 int float)一个新的类型名,而这里命名的是一个结构体,这不同于结构体的类型定义,大括号后面填写的不是变量名表列,而是结构体类型名,相当于给一个名称或者一种新的类型。而根据后面程序己给出的部分,我们能清楚的看到定义的结构体类型名是 STU,所以这一空应该填的是 “STU”。 第二空: “if(stdi score0 60_(2)_stdi score1 60); ”这一空
9、出现在 fun函数中的 if条件语句中,根据 if后面的执行语句我们可以看到执行的人数的统计,所以这里应该就是在判断学生学科分 数是否及格的条件语句。对于一开始的结构体定义我们能够发现成员 score是长度为 2的数组,所以每个学生应该是有两门学科的分数需要来判定和统计的,而这两门学科中任意一门分数不够的话都定义为不及格,然后统计进入人数中,这里所填空的两边是两门学科的分数低于 60分,既然前面说了是任意一门低于 60即进入统计,那这里就应该是 “或 ”符号才符合要求,所以这一空应该填 “”。 第三空: “return_(3)_; ”这一空出现在 fun函数中,这里要填写的是 fun函数执行后
10、的返回值。根据题目的要求函数是要查找不及格的科目 的学生,找到学生学号,然后返回学生的人数,这一空前面已经执行了查找,统计人数和学号的输出,所以这里应该返回的就是不及格学生的人数。而根据前面的定义,人数统计的变量名应该是 k,所以这一空应该要填写的是 “k”。 二、程序修改题 2 【正确答案】 (1)r=t; (2)if(*r=0) 【试题解析】 函数的功能是计算字符串中含有某子串的数目。 (1)根据 “while(*r)if(*r=*p)r+; p+; ”可知该循环是比较 r和 p指向的字符串是否相等,本题的要求是计算字符串中含 有某子串的数目, p指向的源字符串s,所以 r应指向的是字符串
11、 t,故第一标识下应改成 “r=t;”。 (2)根据题意第二标识下 “if(*r=0)”应该是判断 r是否指向字符串尾,在 C语言中,等于是用 “=”标识,因此第二标识下应改成 “if(*r=0)”。 三、程序设计题 3 【正确答案】 1 int i, j=0, min=a0 s; 2 for(i=0 ; i N; i+) 3 if(min ai s) 4 j=0; bj+=ai; min=ai s; 5 6 else if(min=ai s) 7 bj+=ai; 8 9 return j; 【试题解析】 (1)要把最低分数的学生数据放在数组中,首先求出最低分数,再使用一个 for循环把所有的成绩进行比较,找出最低的分数来。 (2)找出所有与最低分数相等的学生,并将最低分数的人数累加。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1