1、国家二级 C语言机试(操作题)模拟试卷 624及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,人员的记录由编号和出生年、月、日组成, N名人员的数据已在主函数中存入结构体数组 std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源 程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #incl
2、ude stdio h #include string h #define N8 typedef struct char numi0; int year, rmonth, day; STU; *found* 【 1】 fun(STU*std, char*num) int i; STU a=“ “, 9999, 99, 99; for(i=0; i N; i+) *found* if(strcmp(【 2】 , num)=0) *found* retuEn(【 3】 ); return a; main() STU stdN=“111111“, 1984, 2, 15, “222222“, 198
3、3, 9, 21, “333333“,1984, 9, 1, “444444“, 1983, 7, 15, “555555“, 1984, 9, 28,“666666“, 1983, 11, 15, “777777“, l983, 6, 22, “888888“, 1984, 8,19; STU p; char n10=“666666“; p=fun(std, n); if(p num0=0) printf(“ nNot found! n“); else printf(“ nSucceed! n“); printf(“ S d- d- d n“, p num, p year, p month,
4、 p day); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决 方案。此解决方案的项目中包含一个源程序文件 modi1 C。在此程序中,函数 fun的功能是:计算 n!。 例如,给 n输入 5,则输出 120 000000。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include conio h double fun(int n) double result=1 0; *found* if n=0 return1 0; while(n 1&
5、n 170) *found* result=n-; return result; main() int n; printf(“Input N: “); scanf(“ d“, &n); printf(“ n n d!= if n n“, n, fun(n); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,编写函数 fun,其功能是:将 ss所指字符串中所有下标为奇数位上的字母转换为大写 (若该位置上不是字母,则不转换 )。 例如,若输入 “abc4EFg”,则应输出 “aBc4EFg”。 注意
6、:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h #include string h void fun(char*ss) void main(void) char tt51; printf(“ nPlease enter an character string within 50 characters: n“); gets(tt); printf(“ n nAfter changing, the string n s“, tt); fun(tt
7、); printf(“ nbecomes n s“, tt); 国家二级 C语言机试(操作题 )模拟试卷 624答案与解析 一、程序填空题 1 【正确答案】 (1)STU (2)stdi num (3)stdi 【试题解析】 填空 1:根据函数 fun的返回值类型可知,函数类型标识符应该是结构体类型的,所以填入 STU。 填空 2:根据题目说明,找出指定编号人员,并将其数据返回。通过 strcmp函数比较编号,若相同则函数值为 0,所以填入 stdi num。 填空 3:由题目可知,假如编号对应,则返回其编号对应数据,所以填入数据stdi。 二、程序修改题 2 【正确答案】 (1)if(n=0
8、) (2)result*=n-;或 result*=n; n-=; 【试题解析】 (1)这里是一个简单的格式错误, if条件判断语句应该加括号。 (2)根据阶乘的概念,从 n开始, n!=n*(n-1)!,直到 1,所以应该为 result*=n-;。 三、程序设计题 3 【正确答案】 void fun(char*ss) int i; for(i=0; ssi!= 0; i+) *将 ss所指字符串中所有下标为奇数位置的字母转换为大写 * if(i 2=1&ssi =a&ssi =z) ssi=ssi-32; 【试题解析】 将指定字符串中奇数位置的字母转换为大写,首先需要判断奇数位置,再判断该位置字符是不是小写字母,如果是小写字母,则将小写字母转换为大写字母。字母大小写转换操作中,只要将小写字母减去 32即可转换为大写字母。