1、国家二级 C+机试(操作题)模拟试卷 181及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是将 a和 b所指的两个字符串分别转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含 9个以下数字字符。 例如,主函数中输入字符串 “32486“和 “12345“,在主函数中输出的函数值为44831。 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。不得增行或删行,也不得更改程序的结构 ! 试题程序 : #include #include #include #define N 9 long ctod(ch
2、ar*s) long d=0; while(*s) if(isdigit(*s) *found* d=d*10+*s-【 1】; *found* 【 2】; return d; long fun(char*a, char*b) *found* return【 3】; main() char s1N, s2N; do printf(“Input string s1: “); gets(s1); while(strlen(s1)N); do printf(“Input string s2: “); gets(s2); ) while(strlen(s2)N); printf(“The result
3、 is: Id n“, fun(s1, s2); 二、简单应用 题 2 下列给定的程序中,函数 fun的功能是:计算并输出 k以内最大的 10个能被 13或 17整除的自然数之和。 k的值由主函数传入,若 k的值为 500,则函数的值为4622。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #include int fun(int k) int m=0, mc=0, j; while(k=2)&(mc #define N 20 void N
4、ONO(); void fun(char*a, char*s) main() char s1N, *s2=“abcdefghijk“; fun(s1, s2); printf(“ s n“, s1); printf(“ s n“, s2); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf; int i; char s1256, s2256; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i10; i+) fgets(s2, 255, f
5、p); fun(s1, s2); fprintf(wf, “ s“, s1); fclose(fp); fclose(wf); 国家二级 C+机试(操作题)模拟试卷 181答案与解析 一、基本操作题 1 【正确答案】 (1)0(2)s+或 +s(3)ctod(a)+ctod(b) 【试题解析】 填空 1: isdigt(*s)这个函数表示检查 *s是否是数字 (0 9),d=d*10+*s一 ?表示的是要把字符串分别转换成面值相同的整数,因此本空应该填写 0。 填空 2: *s所代表的字 符串中字符需要一个一个的字符进行转换成整数,因此此空应该填写 s+或 +s。 填空 3:题目要求把转换后的
6、字符进行相加后作为函数的返回值,因此本空应该填写 ctod(a)+ctod(b)。 二、简单应用题 2 【正确答案】 (1)if(k 13=0) (k 17=0) (2)retum m: 【试题解析】 (1)C语言中, x能被 y整除的表示方法是 x y=0,而不是题目中所表示的 x y=0。所以, if(k 13=0) (k 17=0)修改后的结果应该是答案所示信息。 (2)程序中缺少程序完整所需的 “,此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比如丢失 “的错误信息是 ”Compound statement missing in function fun”。 三、综合应用题 3 【正确答案】 void fun(char*a, char*s) while(*s!= 0) *a=*s; a+; s+; *a= 0; 【试题解析】 要将 s所指的字符 串存入 a所指的字符串中,程序要求不能使用系统提供的字符串函数,本题可以使用循环语句,依次取出 a所指字符串中的元素,将其存入 s所指的字符串中,最后为 s所指的字符串添加结束标识 0。