1、国家二级( C语言)机试模拟试卷 364及答案与解析 一、程序填空题( 30分) 1 二、程序修改题( 30分) 2 给定程序 MODII C中函数 fun的功能是:从 s所指字符串中,找出与 t所指字符串相同的子串的个数作为函数值返回。 例如,当 s所指字符串中的内容为: ”abcdabfab”, t所指字符串的内容为: ”ab”,则函数返回整数 3。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include int fun (char *s, char *t) int n; char *p , *
2、r; n = 0; while (*s) p = s; r = t; while (*r) if (*r = *p) /*found*/ r+; p+ else break; /*found*/ if(*r=0) n+; s+; return n; main() char s100, t100; int m; printf(“nPlease enter string S:“); scanf(“%s“, s); printf(“nPlease enter substring t:“); scanf(“%s“, t); m = fun(s, t); printf(“nThe result is:
3、m = %dn“, m); 三、程序设计题( 40分) 3 函数 fun的功能是:将两个两位数的正整数 a、 b合并形成一个整数放在 c中。 合并的方式是:将 a数的十位和个位数依次放在 c数的个位和百位上, b数的十位和个位数依次放在 c数的千位和十位上。 例如,当 a=45, b=12时,调用该函数后, c=1524。 注意:部分源程序存在文件 PROGl C中。数据文件 in dat中的数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,仅在函 数 fun的花括号中填入你编写的若干语句。 #include void fun(int a, int b, long *c) mai
4、n() int a,b; long c; void NONO (); printf(“Input a, b:“); scanf(“%d,%d“, fun(a, b, printf(“The result is: %ldn“, c); NONO(); void NONO () /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i, a,b ; long c ; rf = fopen(“in.dat“, “r“); wf = fopen(“out.dat“,“w“); for(i = 0 ; i 10 ; i+) fscanf(rf,
5、 “%d,%d“, fun(a, b, fprintf(wf, “a=%d,b=%d,c=%ldn“, a, b, c); fclose(rf); fclose(wf); 国家二级( C语言)机试模拟试卷 364答案与解析 一、程序填空题( 30分) 1 【正确答案】 N N-1 0 【试题解析】 第一空:题目要求对每行元素中的值均右移 1个位置,故第一空处循环变量每次增 1,共循环 N次,完成对 N行的移位操作,因此第一空处应为“N”。 第二空: “x=ti_2_;”保存第 i行元素的最后一个元素 tiN-1,故第二空应为 “tiN-1”。 第三 空:此处是右边被移出矩阵的元素绕回左边,即将
6、 x内保存的元素放在每行的第一位置,故第三空应为 “0”。 二、程序修改题( 30分) 2 【正确答案】 r+; p+; if(*r=0) 【试题解析】 ( 1) C语言中,语句应该以 “;”结束,在第二个标识处, “p+”语句没有以 “;”结束,因此第一个标识处应该是 “r+; p+;”。 ( 2)根据审题分析,要判断指针 r是否指向串尾来结束内循环,而判断语句应该是 “if(*r=0)”。 三、程序设计题( 40分) 3 【正确答案】 *c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10); 【试题解析】 ( 1)分解两位数的正整数 n的个位和十位数,可用 n%10和 n/10实现。 ( 2)设 x0、 x1、 x2、 x3为一位数,则 x0、 x110、 x2100、 x31000,可以分别使 x0、 x1、 x2、 x3构成个、十、百、千带权数,而 x0+x110+x2100+x31000构成四位数。本题最多只考虑四位数。