国家二级C语言机试(操作题)模拟试卷342
程序填空题
1.函数fun的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。例如,主函数中给出了4名学生的数据,则程序运行的结果为:
学号:N1002 学号:N1006
共有2位学生有不及格科目
请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 typedef struct
3 {char num[8];
4 double score[2];
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( std[i].score[0]<60__(2)__std[i].score[1]<60)
12 { k++; printf (’’学号:%s’’,std[i].num);}
13 /**********found**********/
14 return __(3)__;
15 }
16 main()
17 {STU std[4]={ ’’N1001’’,76.5,82.0,’’N1002’’,53.5,73.0,’’N1005’’,80.5,66.0,’’N1006’’,81.0,56.0};
18 printf(’’\n共有%d位学生有不及格科目\n’’,fun(std,4) };
19 }
(1)STU (2)‖ (3)k
解析:第一空:“{… …}(1);”这一空出现在定义结构体时,这里使用了typedef就是很明显地要声明结构体类型,而这里则是要填写结构体类型名。这里就要知道typedef的作用了,typedef是用来命名已有类型的,相当于给已经知道的类型(如int float)一个新的类型名,而这里命名的是一个结构体,这不同于结构体的类型定义,大括号后面填写的不是变量名表列,而是结构体类型名,相当于给一个名称或者一种新的类型。而根据后面程序己给出的部分,我们能清楚的看到定义的结构体类型名是STU,所以这一空应该填的是“STU”。
第二空:“if(std[i].score[0]<60__(2)__std[i].score[1]<60);”这一空出现在fun函数中的if条件语句中,根据if后面的执行语句我们可以看到执行的人数的统计,所以这里应该就是在判断学生学科分数是否及格的条件语句。对于一开始的结构体定义我们能够发现成员score是长度为2的数组,所以每个学生应该是有两门学科的分数需要来判定和统计的,而这两门学科中任意一门分数不够的话都定义为不及格,然后统计进入人数中,这里所填空的两边是两门学科的分数低于60分,既然前面说了是任意一门低于60即进入统计,那这里就应该是“或”符号才符合要求,所以这一空应该填“‖”。
第三空:“return__(3)__;”这一空出现在fun函数中,这里要填写的是fun函数执行后的返回值。根据题目的要求函数是要查找不及格的科目的学生,找到学生学号,然后返回学生的人数,这一空前面已经执行了查找,统计人数和学号的输出,所以这里应该返回的就是不及格学生的人数。而根据前面的定义,人数统计的变量名应该是k,所以这一空应该要填写的是“k”。
程序修改题
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 *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 a[N],b[N];int m;
24 printf(’’\nPlease enter stringa:’’);gets(a);
25 printf(’’\nPlease enter substring b:’’);gets(b);
26 m=fun(a,b);
27 printf(’’\nThe result is :m=%d\n’’,m);
28 }
(1)r=t; (2)if(*r==0)
解析:函数的功能是计算字符串中含有某子串的数目。
(1)根据“while(*r)if(*r===*p){r++;p++;}”可知该循环是比较r和p指向的字符串是否相等,本题的要求是计算字符串中含有某子串的数目,p指向的源字符串s,所以r应指向的是字符串t,故第一标识下应改成“r==t;”。
(2)根据题意第二标识下“if(*r=0)”应该是判断r是否指向字符串尾,在C语言中,等于是用“==”标识,因此第二标识下应改成“if(*r==0)”。
程序设计题
3.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。
注意:部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
2 #define N 16
3 typedef struct
4 { char num[10];
5 int s;
6 } STREC;
7 int fun(STREC *a,STREC *b)
8 {
9 }
10 main()
11 {STREC s[N]={{’’GA05’’,85},{’’GA03’’,76},{’’GA02’’,69},{’’GA04’’,85},{’’CA01’’,91},{’’GA07’’
本文档预览:3600字符,共4531字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载