1、国家二级 C语言机试(操作题)模拟试卷 270及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.程序通过定义学生结构体变量,存储学生的学号、姓名和三门课的成绩。函数 fun的功能是:将形参 a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。 例如,若传给形参 a的数据中学号、姓名和三门课的成绩依次是:10001、“ZhangSan”、95、80、88,修改后的数据应为:10002、“LiSi”、96、81、89。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不
2、得更改程序的结构! 试题程序: #includestdioh #includestringh struct Student long sno; char Flame10; float score3; ; *found* 【1】 fun(struct student a) int i; asno=10002; *found* strcpy( 【2】 ,“Lisi“); *found* for(i=0;i3;i+) 【3】 +=1; return a; main() struct stuclent s=10001,“ZhangSan“,95,80,88,t; int i; printf (“nnT
3、he original data:n“); printf(“nNo:ld Name:sn Scores:“,ssno,sname); for(i=0;i3;i+) printf(“62f“,sscorei); printf(“n“); t=fun(s); printf(“nThe data after modified:n“); printf(“nNo:ld Name:sn Scores:“,tsno,tname); for(i=0;i3;i+) printf(“62f“,tscorei); printf(“n“); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定
4、程序中,函数 fun的功能是:先从键盘上输入一个 3行、3 列的矩阵的各个元素的值,然后输出主对角线元素之和。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:1 #includeStdioh2 void fun()3 4 int a33,sum;5 int i,j;6 *found*7 sum=1;8 for(i=0;i3;i+)9 for(j=0;j3;j+)10 *found*11 scanf(“d“,aij);12 13 for(i=0;i3;i+)14 sum=sum+aii;15
5、 printf(“Sum=dn“,sum);16 17 void main()18 19 fun();20 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写一个函数,用来删除字符串中的所有空格。例如,输入 asd af aa z67,则输出为 asdafaaz67。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:1 #includestdioh2 #includectypeh3 #includeconioh4 #includestdlibh5 void fun(char
6、*str)6 78 9 main()10 11 char str81;12 char Nsg=“Input a string“;13 int n;14 FILE*out;15 printf(Nsg);16 gets(str);17 puts(str);18 fun(str);19 printf(“* str:sn“,str);20 *21 out=fopen(“outdat“,“w“);22 fun(Nsg);23 fprintf(out,“s“,Hsg);24 fclose(out);25 *26 (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 270答案解析(总分:6.00,做
7、题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.程序通过定义学生结构体变量,存储学生的学号、姓名和三门课的成绩。函数 fun的功能是:将形参 a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。 例如,若传给形参 a的数据中学号、姓名和三门课的成绩依次是:10001、“ZhangSan”、95、80、88,修改后的数据应为:10002、“LiSi”、96、81、89。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #includ
8、estringh struct Student long sno; char Flame10; float score3; ; *found* 【1】 fun(struct student a) int i; asno=10002; *found* strcpy( 【2】 ,“Lisi“); *found* for(i=0;i3;i+) 【3】 +=1; return a; main() struct stuclent s=10001,“ZhangSan“,95,80,88,t; int i; printf (“nnThe original data:n“); printf(“nNo:ld N
9、ame:sn Scores:“,ssno,sname); for(i=0;i3;i+) printf(“62f“,sscorei); printf(“n“); t=fun(s); printf(“nThe data after modified:n“); printf(“nNo:ld Name:sn Scores:“,tsno,tname); for(i=0;i3;i+) printf(“62f“,tscorei); printf(“n“); (分数:2.00)_正确答案:(正确答案:(1)struct student (2)aname (3)ascorei)解析:解析:填空 1:函数定义时,
10、类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。本题中,用结构类型定义函数类型。 填空 2和填空 3:此处考查结构体变量成员的表示方法,aname 和 ascorei分别表示学生的姓名和成绩。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:先从键盘上输入一个 3行、3 列的矩阵的各个元素的值,然后输出主对角线元素之和。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:1 #includeStdioh2 void fun()3 4 int
11、 a33,sum;5 int i,j;6 *found*7 sum=1;8 for(i=0;i3;i+)9 for(j=0;j3;j+)10 *found*11 scanf(“d“,aij);12 13 for(i=0;i3;i+)14 sum=sum+aii;15 printf(“Sum=dn“,sum);16 17 void main()18 19 fun();20 (分数:2.00)_正确答案:(正确答案:(1)sum=0; (2)seanf(“d“,&aij);)解析:解析:该题考查对循环语句的掌握和对数组概念的理解。本题的解题思路为:先从键盘输入一个33矩阵,然后循环累加,执行循环语
12、句中的 sum=sum+aii;。因为变量 sum用来存放累加后的结果,所以应对其初始化为 0。第二处错误考查标准输入函数 scanf的格式,被赋值的变量前要加上取地址符“&“。三、程序设计题(总题数:1,分数:2.00)3.请编写一个函数,用来删除字符串中的所有空格。例如,输入 asd af aa z67,则输出为 asdafaaz67。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:1 #includestdioh2 #includectypeh3 #includeconioh4 #incl
13、udestdlibh5 void fun(char*str)6 78 9 main()10 11 char str81;12 char Nsg=“Input a string“;13 int n;14 FILE*out;15 printf(Nsg);16 gets(str);17 puts(str);18 fun(str);19 printf(“* str:sn“,str);20 *21 out=fopen(“outdat“,“w“);22 fun(Nsg);23 fprintf(out,“s“,Hsg);24 fclose(out);25 *26 (分数:2.00)_正确答案:(正确答案:void fun(char*str) int i=0; char*p=str; while(*p) if(*p!= )*删除空格* stri+=*p ; p+; stri=0;*加上结束符* )解析:解析:本题要求删除所有空格,即保留除了空格以外的其他所有字符。由于 C语言中没有直接删除字符的操作,所以对不需要删除的字符采用“保留”的操作。用指针 p指向字符串中的每一个字符,每指向到一个字符都判断其是否为空格,若不是空格则保存到 stri。