1、国家二级 C语言机试(操作题)模拟试卷 311及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:将形参 n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新数,作为函数值返回。 例如,从主函数输入一个整数 27638496,则函数返回值为 26846。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h unsigned long fun(unsigned long n) unsigned long x=0, s, i; in
2、t t; s=n; *found* i=【 1】 ; *found* while(【 2】 )t=s 10; if(t 2=0) *found* x=x+t*i; i=【 3】 ; s=s 10; return x; main() unsigned long n= 1; while(n 99999999n 0) printf(“Please input(0 n 100000000): “); scanf(“ ld“, n); printf(“ nThe result is: ld n“, fun(n); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:从 s所指字符串中,找出 t所指
3、字符串的个数作为函数值返回。例如,当 s所指字符串中的内容为 “abcdabfab”, t所指字符串的内容 为 “ab”,则函数返回整数 3。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h #include string h int fun(char*s, char*t) int n; char*p, *r; n=0; while(*s) p=s; r=t; while(*r) *found* if(*r=*p
4、)r+; p+ else break; *found* if(r= 0) n+; s+; return nj void main() char s100, t100; int: m; system(“CLS“); printf(“ nplease enter string s: “); Scanf(“ s“, s); printf(“ nPlease enter substring t: “); scanf(“ s“, t); m=fun(s, t); printf(“ nThe result is: m= d n“, m); 三、程序设计题 3 请编写函数 fun,其功能是:移动一维数组中的
5、内容,若数组中有 n个整数,要求把下标从 0 P(含 P, P小于等于 n1)的数组元素平移到数组的最后。 例如,一维数组中的原始内容为: 1、 2、 3、 4、 5、 6、 7、 8、 9、 10; P的值为3。移动后,一维数组中的内容应为: 5、 6、 7、 8、 9、 10、 1、 2、 3、 4。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #define N 80 void fun(int*w, int p, int n) main() int aN=1, 2,
6、 3, 4, 5, 6, 7, 8, 9, 1 0, 11, 12, 13, 14, 15); int i, P, n=15; printf(“The original data: n“); for(i=0; i n; i+) printf(“ 3d“, ai); printf(“ n nEnter P: “); scanf(“ d“, p); fun(a, P, n); printf(“ nThe data after mouing: n“); for(i=0 ; i n; i+) printf(“ 3 d“, ai); printf(“ n n“); 国家二级 C语言机试(操作题)模拟试卷
7、 311答案与解析 一、程序填空题 1 【正确答案】 (1)1 (2)s 0 (3)i*10 【试题解析】 填空 1:变量 i用来控制被取出的偶数在新数中的位置,应赋初值1。 填空 2: while语句的循环条件是 s 0。 填空 3:变量 i用来标识个位、百位和千位等。 二、程序修改题 2 【正确答案】 (1)if(*r=*p) r+; p+; ) (2)if(*r= 0) 【试题解析】 本题考查: if语句,考生需要根据题意确定 if语句的判断条件;字符串结束标识,所有的字符串都要以 0结尾,上机考试常考知识点,考生一定要牢记;复合赋值运算,常用于循环控制和变量的累加、累乘。 从字符串 s
8、中找出子串 t的方法是:从第 1个字符开始,对字符串进行遍历,若 s串的当前字符等于 t串的第 1个字符,两个字符串的指针自动加 1,继续比较下一个字符;若比较至字符串 t的结尾,则跳出循环;若 s串的字符与 t串的字符不对应相同,则继续对 s串的下一个字符进行处理。 三、程序设计题 3 【正确答案】 Void fun(int*w, int p, int n) int x, j, ch; for(x=0; x =p; x+) ch=w0; for(j=1; j n; j+) *通过 for循环语句,将 p+1到 n1(含 n一 1)之间的数组元素依次向前移动 p+1个存储单元 * wj一 1=wj; wn1=ch; *将 0到 p个数组元素逐一赋给数组 wn一 1* 【试题解析】 本题要求把下标从 0 p(含 p, p小于等于 n 1)的数组元素 平移到数组的最后,可以根据输入的 p值,通过 for循环语句,将 p+1 n l(含 n 1)之间的数组元素依次向前移动 p+1个存储单元,即 wj一 1=wj;,同时将 0 p个数组元素逐一赋给数组 wn 1,也就是通过语句 wn一 1=ch;来实现此操作的。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1