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