1、国家二级 C语言机试(操作题)模拟试卷 264及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将 a和 b所指的两个字符串分别转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含 9个以下数字字符。 例如,主函数中输入字符串 ”32486”和 ”12345”,在主函数中输出的函数值为44831。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include string h 3 #include c
2、type h 4 #define N 9 5 long ctod(char*s) 6 long d=0; 7 while(*S) 8 if(isdigit(*s) 9 *found* 10 d=d*10+*s 【 1】 ; 11 *found* 12 【 2】 ; 13 14 return d; 15 16 long fun(char*a, char*b) 17 18 *found* 19 return 【 3】 ; j 20 21 main() 22 char s1N, s2N; 23 do 24 printf(“Input string s1: “); 25 gets(s1); 26 wh
3、ile(strlen(s1) N); 27 do 28 printf(“Input string s2: “); 29 gets(s2); 30 while(strlen(s2) N); 31 printf(“The result is: ld n“, fun(s1, s2); 32 二、程序修改题 2 下列给定程序中,函数 fun的功能是:计算 s所指字符串中含有 t所指字符串的数目,并作为函数值返回。 请改正程序中的错误或在下画线处填上正确的内容并把下画线删除,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include st
4、dlib h #include conio h #include string h #include stdio h #define N 80 int fun(char*s, char*t) int n; char*P, *r; n=0 ; *found* *r=t; while(*S) p=s ; while(*r) if(*r=*P) r+; p+; else break; if(*r= 0) n+; *found* 1; s+; return n; void main() char aN, bN; int m; printf(“ nPlease enter string a: “); g
5、ets(a); printf(“ nPlease enter substring b: “); gets(b); m=fun(a, b); printf(“ nThe result is: m= d n“, m); 三、程序设计题 3 下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN, int in),该函数的功能是使数组右上半三角元素中的值乘以 m。例如,若 m的值为 2, a数组中的值为: 则返回主程序后 a数组中的值应为:注意:部分源程序在文件 PROG1 C中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若
6、干语句。 试题程序: 1 #include conio h 2 #include stdio h 3 #include stdlib h 4 #include string h 5 #defitie N 56 void fun(int aN, int m)7 89 10 main()11 12 int aNN, m, i, j; 13 FILE*out; 14 printf(“*The array* n“); 15 for(i=0; iN; i+)16 for(j=0; j N; j+)17 aij=rand() 20; 18 printf(“ 4d“, aij);19 20 printf(“
7、 n“); 21 22 m=rand() 4; 23 printf(“m= 4d n“, m); 24 fun(a,m); 25 printf(“THE RESULT n“); 26 for(i=0; i N; i+)27 for(j=0; j N;j+)28 printf(“ 4 d“, aij); 29 printf(“ n“); 30 31 *found* 32 out=fopen(“out dat“, “w“); 33 for(i=0; i N;i+)34 for(j=0; j N; j+)35 aij=i*j; 36 fun(a, 8); 37 for(i=0; i N; i+)38
8、 for(j=0; j N; j+)39 fprintf(out, “ 4d“, aij); 40 fprintf(out, “ n“);41 42 fclose(out); 43 *found* 44 国家二级 C语言机试(操作题)模拟试卷 264答案与解析 一、程序填空题 1 【正确答案】 (1)0 (2)s+或 +s (3)ctod(a)+etod(b) 【试题解析】 填空 1: isdigt(*s)这个函数表示检查 *s是否是数字 (0 9),d=d*10+*s一 ?表示的是要把字符串分别转换成面值相同的整数,因此本空应该填写 0。 填空 2: *s所代表的字符串中字符需要一个一个的字
9、符进行转换成整数,因 此此空应该填写 s+或 +s。 填空 3:题目要求把转换后的字符进行相加后作为函数的返回值,因此本空应该填写 ctod(a)+ctod(b)。 二、程序修改题 2 【正确答案】 (1)r=t; (2)r=t;或 r= t0; 【试题解析】 从字符串 s中找出子字符串的方法是:从第一个字符开始,对字符串进行遍历,若 s串的当前字符等于 t串的第一个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串 t的末尾,则跳出循环;若 s串的字符与 t串的字符不对应相同,则继续对 s串的下一个字符进行处理。 三、程序设计题 3 【正确答案】 void fun(int aN, int m) int i, j; for(j=0; j N; j+) for(i=0; i =j; i+) aij=aij*m; *右上半三角元素中的值乘以 m* 【试题解析】 本程序实现将矩阵中右上半三角元素中的值乘以 m,使用循环语句遍历数组元素,第 1个循环用于控制行坐标,第 2个循环用于控制列下标。