1、国家二级( C语言)机试模拟试卷 228及答案与解析 一、程序填空题( 30分) 1 函数 fun的功能是:统计长整数 n的各个位上出现数字 1、 2、 3的次数,并通过外部 (全局 )变量 c1, c2, c3返回主函数。例如:当 n=123114350时,结果应该为:c1=3 c2=lc3=2。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include int c1, c2, c3; void fun(10ng n) c1=c2=c3=0; whi1e(n) *
2、found* switch(【 1】 ) *found* case l: C1+;【 2】 ; *found* case 2: c2+;【 3】; case 3: c3+; n =10; main() long n=123114350L; fun(n); printf(“ nThe result: n“); printf(“n= ld cl= d c2= d c3= d n“, n, c1, c2, c3); 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:先将 s所指字符串中的字符按逆序存放到 t所指字符串中,然后把 s所指串中的字符按正序连接到 t所指串的后
3、面。 例如:当 s所指的字符串为: “ABCDE“时,则 t所指的字符串应为 :“EDCBAABCDE“。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include void fun(char*s, char*t) /*found*/ int i; s1=strlen(s); for(i=0 ; i #include #include #define N 100 void fun(char * str) void main() char aN; FlLE * out: printf(“Enter a
4、string: “); gets(a); printf(“The original string is: “); puts(a); fun(a); printf(“The string after modified: “); puts(a); strcpy(a, “Welcome!“); fun(a); out=fopen(“outfile dat“, “w“); fprintf(out, “ s“, a); fclose(out); 国家二级( C语言)机试 模拟试卷 228答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)n 10 (2)break (3)break 【试题解
5、析】 第一空: switch内部是统计数字 1、 2、 3的个数,因此 switch条件是 n的一位数。由 “n =10; “在循环中, n每次减小为以前的 1 10,即 n逐步往左边移出一个整数位,移出的整数位可由 n 10可求得,故第一空处应填 “n10“。 第二空: c语言中, case语句后都要加 “break“语句,否则会执行多个 case语句,因此第二空处应为 “brcak“。 第三空:理由同上,第三空处应填 “break“。 二、程序修改题( 30分) 2 【正确答案】 (1)int i, s1; (2)ti=ss1 i一 1; 【试题解析】 (1)根据 “s1=strlen(s
6、); “,可知变量 s1记录字符串 s的长度,是整型变量,在第一标识下没有定义 s1,故第一标识下应补充 s1的定义,应改为 “int i,s1; “。 (2)函数 fun中的第一个 for循环是求 s的逆序,并将其存放在 t串中。在求逆串时要注意第一个下标是 0,最后一个是 s1-1(s1是串的长度 ),第 i个对应下标的是s1-1-i,所以 “ti=strs1i; “改为 “ti=strs1-i-1; “。 三、程序设计题( 40分) 3 【正确答案】 char ch; int i, m, n; i=0; m=n=strlen(str)一 1; 求字符串 str长度 while(i(n+1) 2) 循环逆置交换 ch=stri; stri=strm; strm=ch; i+; m ; 【试题解析】 在 fun()函数中,首先求行字符串的长度,然后通过循环进行字符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在逆置前后的位置是没有改变的。