1、国家二级 C语言机试(操作题)模拟试卷 264及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是将 a和 b所指的两个字符串分别转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含 9个以下数字字符。 例如,主函数中输入字符串”32486”和”12345”,在主函数中输出的函数值为 44831。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。不得增行或删行,也不得更改程序的结构! 试题程序: 1 #includestdioh 2 #i
2、ncludestringh 3 #includectypeh 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:“); 2
3、5 gets(s1); 26 while(strlen(s1)N); 27 do 28 printf(“Input string s2:“); 29 gets(s2); 30 while(strlen(s2)N); 31 printf(“The result is:ldn“,fun(s1,s2); 32 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:计算 s所指字符串中含有 t所指字符串的数目,并作为函数值返回。 请改正程序中的错误或在下画线处填上正确的内容并把下画线删除,使它能得出正确的结果。 注意:不要改动 main函数,不得增行
4、或删行,也不得更改程序的结构! 试题程序: #includestdlibh #includeconioh #includestringh #includestdioh #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 e
5、nter string a:“); gets(a); printf(“nPlease enter substring b:“); gets(b); m=fun(a,b); printf(“nThe result is:m=dn“,m); (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN,int in),该函数的功能是使数组右上半三角元素中的值乘以 m。例如,若 m的值为 2,a 数组中的值为: 则返回主程序后 a数组中的值应为: (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷
6、264答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是将 a和 b所指的两个字符串分别转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含 9个以下数字字符。 例如,主函数中输入字符串”32486”和”12345”,在主函数中输出的函数值为 44831。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。不得增行或删行,也不得更改程序的结构! 试题程序: 1 #includestdioh 2 #includestringh 3 #incl
7、udectypeh 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 while(
8、strlen(s1)N); 27 do 28 printf(“Input string s2:“); 29 gets(s2); 30 while(strlen(s2)N); 31 printf(“The result is:ldn“,fun(s1,s2); 32 (分数:2.00)_正确答案:(正确答案:(1)0 (2)s+或+s (3)ctod(a)+etod(b)解析:解析:填空 1:isdigt(*s)这个函数表示检查*s 是否是数字(09),d=d*10+*s 一?表示的是要把字符串分别转换成面值相同的整数,因此本空应该填写0。 填空 2:*s 所代表的字符串中字符需要一个一个的字符进
9、行转换成整数,因此此空应该填写 s+或+s。 填空 3:题目要求把转换后的字符进行相加后作为函数的返回值,因此本空应该填写 ctod(a)+ctod(b)。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:计算 s所指字符串中含有 t所指字符串的数目,并作为函数值返回。 请改正程序中的错误或在下画线处填上正确的内容并把下画线删除,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlibh #includeconioh #includestringh #includestdioh #
10、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:“); gets(a); printf(“nPlease enter substring b:“); gets(b); m=fun(a,b);
11、 printf(“nThe result is:m=dn“,m); (分数:2.00)_正确答案:(正确答案:(1)r=t; (2)r=t;或 r=t0;)解析:解析:从字符串 s中找出子字符串的方法是:从第一个字符开始,对字符串进行遍历,若 s串的当前字符等于 t串的第一个字符,两字符串的指针自动加 1,继续比较下一个字符;若比较至字符串 t的末尾,则跳出循环;若 s串的字符与 t串的字符不对应相同,则继续对 s串的下一个字符进行处理。三、程序设计题(总题数:1,分数:2.00)3.下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN,int in),该函数的功能是使数组右上半三角元素中的值乘以 m。例如,若 m的值为 2,a 数组中的值为: 则返回主程序后 a数组中的值应为: (分数:2.00)_正确答案:(正确答案:void fun(int aN,int m) int i,j; for(j=0;jN;j+) for(i=0;i=j;i+) aij=aij*m; *右上半三角元素中的值乘以 m* )解析:解析:本程序实现将矩阵中右上半三角元素中的值乘以 m,使用循环语句遍历数组元素,第 1个循环用于控制行坐标,第 2个循环用于控制列下标。