1、国家二级 C语言机试(操作题)模拟试卷 726及答案与解析 一、程序填空题 1 函数 fun的功能是:逆置数组元素中的值。例如:若 a所指数组中的数据依次为: 1、 2、 3、 4、 5、 6、 7、 8、 9,则逆置后依次为: 9、 8、 7、 6、 5、 4、 3、 2、1。形参 n给出数组中数据的个数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 void fun(int a, int n) 3 int i, t; 4 *
2、found* 5 for(i=0;i _1_; i+) 6 7 t=ai; 8 *found* 9 ai=an-1-_2_; 10 *found* 11 _3_=t; 12 13 14 main() 15 int b9=1, 2, 3, 4, 5, 6, 7, 8, 9, i; 16 printf( nThe original data: n); 17 for(i=0; i 9; i+) 18 printf( 4d, bi); 19 printf( n); 20 fun(b, 9); 21 printf( nThe data after invert: n); 22 for(i=0; i 9;
3、 i+) 23 printf( 4d, bi); 24 printf( n); 25 二、程序修改题 2 给定函数 MODI1 C中函数 fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含 5位八进制数字字符。 例如,若输入: 77777,则输出将是: 32767。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 1 #include stdio h 2 #include string h 3 #include stdlib h 4 int fun(char *p) 5
4、int n; 6 *found* 7 n=*p-o; 8 p+; 9 while(*P!=0) 10 *found* 11 n=n*8+*p-o; 12 p+; 13 14 return n; 15 16 main() 17 char s6; int i; int n; 18 printf(Enter a string (Ocatal digits): ); gets(s); 19 if(strlen(s) 5)printf(Error: StrLng too longer! n n);exit(0), 20 for(i=0; si; i+) 21 if(si 0 si 7) 22 print
5、f(Error: c not is ocatal digits! n n, si); exit(0); 23 rintf(The original string: ); puts(s); 24 n=fun(s); 25 printf( n s is convered to integer number: d n n, S, n); 26 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组 S中,请编写函数 fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置 -1,作为函数值返回
6、。 (用于字符串比较的函数是 strcmp)。 注意:部分 源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 #include string h 3 #define N 16 4 typedef struct 5 char num10; 6 int s; 7 STREC; 8 STREC fun(STREC *a, char *b) 9 10 11 12 main() 13 STREC sN=GA005, 85, GA003, 76, GA002, 69,GA004, 8
7、5, GA001, 91, GA007, 72, GA008, 64, GA006,87, GA015, 85, GA013, 91, GA012, 64, GA014, 91,GA011, 77, GA017, 64, GA018, 64, GA016, 72; 14 STREC h; 15 char m10; 16 int i; FILE *out; 17 printf(The original data: n); 18 for(i=0; i N; i+) 19 if(i 4=0)printf( n); 20 printf( s 3d, si num, si s); 21 22 print
8、f( n nEnter the number: ); gets(m); 23 h=fun(s, m); 24 printf(The data: ); 25 printf( n s 4d n, h hum, h s); 26 printf( n); 27 out=fopen(out dat, w); 28 h=fun(s, GA013); 29 fprintf(out, s %4d n, h num, h s); 30 fclose(out); 31 国家二级 C语言机试(操作题)模拟试卷 726答案与解析 一、程序填空题 1 【正确答案】 (1)n 2 (2)i (3)an-i-1 【试题解析
9、】 函数 fun的功能是将数组中的元素倒置。 第一空:由审题分析可知,总共交换 n 2次,故循环的终止条件为 i等于 n2,故第一空处应为 “n 2”。 第二空: a0和 an-1交换, a1和 an-2交换 ,因此, ai和 an-i-1交换,故第二空处应为 “i”。 第三空: “t=ai; ai=an-1-i; ”所以第三空处是把 t值赋值 an-1-i,故第三空处应为 “an-1-i。 二、程序修改题 2 【正确答案】 (1)n=*p-0; (2)n=n*8+*p-0; 【试题解析】 函数功能是实现八进制到十进制的转换。 (1)第一个标识下面:语句 “n=*p-o; ”中的 o不是数字零
10、,而是字母 o,根据前面的分析,因此改为: “n=*p-0; ”。 (2)第二个标识下面:语句 “n=n*8+*P-o”,首先进行同 (1)相同的修改,变量 P没有定义,根据题意要求这里应该是 “*p-0”,所以此句改为: “n=n*8+*p-0; ”。 三、程序设计题 3 【正确答案 】 1 STREC c; 2 int i; 3 c num0= 0; *置初始空串 * 4 c s=-1; *置成绩为 -1* 5 for(i=0; i N; i+) 6 if(stramp(ai num, b)=0) *判断学号是否相等 * 7 strcpy(c num, ai num); *相等,则对学号进行赋值 * 8 c s=ai s; *相等,则对成绩进行赋值 * 9 break; *退出循环体 * 10 11 return c; *返回结构 体变量 * 【试题解析】 该程序功能是函数返回指定学号的学生数据,指定的学号在主函数中输入。解题思路是在循环过程中,使用 if判断表达式,将输入的学号与所有的学号进行比较,如果找到该学号,将其赋值到指定变量,否则将空格赋值到指定变量,表明没有查找到该学号。