国家二级C语言机试(操作题)模拟试卷345
程序填空题
1.程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。
例如:b所指变量t中的学号、姓名、和三门课的成绩依次是:10002、’’ZhangQi’’、93、85、87,修改后输出t中的数据应为:10004、’’LiJie’’、93、85、87。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #include<string.h>
3 struct student {
4 long sno;
5 char name[10];
6 float score[3];
7 };
8 void fun(struct student *b)
9 {
10 /**********found**********/
11 b__1__=10004;
12 /**********found**********/
13 strcpy(b__2__,’’LiJie’’);
14 }
15 main()
16 { struct student t={10002,’’ZhangQi’’,93,85,87};
17 int i;
18 printf(’’\n\nThe original data:\n’’);
19 printf(’’\nNo:%id Name:%s\nScores:’’,t.sno,t.name);
20 for(i=0;i<3;i++)printf(’’%6.2f’’,t.score[i]);
21 printf(’’\n’’);
22 /**********found**********/
23 fun( __3__);
24 printf(’’\nThe data after modified:\n’’);
25 printf(’’\nNo:%id Name:%s\nScores:’’,t.sno,t.name);
26 for(i=0;i<3;i++) printf(’’%6.2f’’,t.score[i]);
27 printf(’’\n’’);
28 }
(1)->sno (2)->name(3)&t
解析:函数fun的功能是对形参b所指结构体变量中的数据进行修改。
第一空:“b __1__=10004;”等号右边是整型值,故这里是修改结构体成员sno的值,b是结构体指针,访问结构体数据成员时使用“->”运算符,因此第一空为“b->sno”。
第二空:“strcpy(b__2__,’’LiJie’’);”,strcpy是字符串拷贝函数,因此这里是修改结构体的name成员值,故第二空处为“b->name”。
第三空:fun函数的定义形式是:void fun(struct student *b),可知fun的参数是指针,因此主函数内调用fun函数时传入的参数是结构体t的地址,故第
三空处为“&t”。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:计算并输出high以内最大的10个素数之和。high的值由主函数传给fun函数。
若high的值为:100,则函数的值为:732。
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #include<math.h>
3 int fun(int high)
4 { int sum=0,n=0,j,yes;
5 /**********found**********/
6 while((high>=2)&&(n<10)
7 { yes=1;
8 for(j=2;j<=high/2;j++)
9 if(high%j==0) {
10 /**********found**********/
11 yes=0;break
12 }
13 if (yes) {sum+=high; n++;)
14 high–;
15 }
16 return sum;
17 }
18 main()
19 {
20 printf(’’%d\n’’,fun(100));
21 }
(1)while((2<=high)&&(n<10)) (2)yes=0; break;
解析:函数的功能是计算并输出high以内最大的10个素数之和。
(1)C语言中左右括弧必须成对出现,在第一个标识下“while((high>=2)&&(n<10)”中,显然缺少一个右括弧,应改为“while((2<=high)&&(n<10))”。
(2)在判断素数的循环过程中,只要被判断的数能被某数整除就不是素数,就会跳出判断循环,在C语言中使用break语句跳出循环,并且C语言中的语句使用分号为结尾。所以“break”应改为“break;”。
程序设计题
3.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。
注意:部分源程序在文件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 }
11 main()
12 { STREC s[N]={{’’CA05’’,85},{’’GA03’’,76},{’’GA02’’,69},{’’GA04’’,85),{’’GA01’’,91},{’’GA07’’,72},{’’GA08’’,64},{’’GA
06’’,87},{’’CA015’’,85},{’’CA013’’,91},{’’GA012’’,64},{’’GA014’’,91},{’’GA011’’,77},{’’GA017’’,64},{’’GA018’’,64},{’’GA016’’,72}};
13 STREC h[N];
14 int i,n;F
本文档预览:3600字符,共4387字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载