1、国家二级 C语言机试(操作题)模拟试卷 649及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,人员的记录由编号和出生年、月、日组成, N名人员的数据已在主函数中存入结构体数组 std中。函数 fun的功能是:找出指定出生年份的人员,将其数据放在形参 k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程 序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #inc
2、lude stdio h #define N8 typedefstruct int num; int year, month, day; STU; int fun(STU*std, STU*k, int year) (int i, n=0; for(i=0; i N; i+) *found* if(【 1】 =year) *found* kn+=【 2】 ; *found* return(【 3】 ); main() STU stdN=1, 1984, 2, 15, 2, 1983, 9, 21, 3, 1984, 9, 1, 4,1983, 7, 15, 5, 1985, 9, 28, 6,
3、 1982, 11, 15, 7, 1982, 6, 22,8, 1984, 8, 19; STU kN; int i, n, year; printf(“Enter a year: “); scanf(“ d“, &year); n=fun(std, k, year); if(n=0) printf(“ nNo personwas born in d n“, year); else printf(“ nThese persons were born in d n“, year); for(i=0; i n; 1; i+) printf(“ d d- d- d n“, ki num, ki y
4、ear, ki month, ki day); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此 解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #inclucte stdlib h #include stdio h #include conio h void fun(char*s) int i, j; for(i=0, j=0;
5、 si!= 0; i+) if(si =0&si =9) *found* sj=si; *found* sj=“ 0“; void main() char item80; System(“CLS“); printf(“ nEnter a string: “); gets(item); printf(“ n nThe string is: s n“, item); fun(item); printf(“ n nThe string of changing is: s n“, item); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个
6、源程序文件 prog1 c。在此程序中,请编写一个函数,用来删除字符串中的所有空格。 例如,输入 asdafaaz67,则输出为 asdafaaz67。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序 : #include stdio h #include ctype h #include conio h #include stdlib h voidfun(char*sir) main() char sir81; char Msg=“Input a string: “; int n; FIL
7、E*out; printf(Msg); gets(sir); puts(str); fun(str); printf: f(“*sir: s n“, str); *found* out=fopen(“out dat“, “w“); fun(Msg); fprintf(out, “ s“, Hsg); fclose(out); *found* 国家二级 C语言机试(操作题)模拟试卷 649答案与解析 一、程序填空题 1 【正确答案】 (1)stdi year (2)stdi (3)n 【试题解析】 本题要求从给定的人员数据中找出与指定出生年份相同的记录存入k中,并返回符合条件的人数。 填空 1:
8、此空判断结构体变 量中的年份与 year是否相等,所以应填 stdi year。 填空 2:把符合条件记录依次存入实参 k中,所以应填耐 i。 填空 3:函数返回符合满足条件的人数,所以应填 n。 二、程序修改题 2 【正确答案】 (1)sj+=si; (2)sj= 0; 【试题解析】 题目要求依次取出字符串中所有的数字字符,因此将元素 si存入sj后要使 j加 1,为下次存储做准备。 sj=“ 0“;是一个语法错误。 三、程序设计题 3 【正确答案】 void fun(char*str) int i=0; char*p=str; while(*p) if(*p!= ) *删除空格 * stri+=*p; p+; stri= 0;木加上结束符 * 【试题解析】 本题要求删除所有空格,即保留除了空格以外的其他所有字符。由于 c语言中没有直接删除字符的操作,所以对不需要删除的字符采用 “保留 ”的操作。用指针 p指向字符串中的每一个字符,每指向到一个字符都判断其是否为空格,若不是空格则保存到 stri。