1、国家二级 C语言机试(操作题)模拟试卷 616及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的作用是:不断从终端读入整数,由变量 a统计大于 0的个数,用变量 c来统计小于 0的个数,当输入 0时结束输入,并通过形参 pa和 pb把统计的数据传回主函数进行输出。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:源程序存放在 BLANK1 C中。不得增行或删行,也不得更 改程序的结构 ! 试题程序: #include stdio h v
2、oid fun(int*px, int*py) *found* int【 1】 ; scarlf(“ d“, &k); *found* while【 2】 (if(k 0)a+; if(k 0)b+; *found* 【 3】 ; *px=a; *py=b; main() int x, y; fun(&x, &y); printf(“x= d y= d n“, x, y); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:用冒泡法对 6个字符串按由小到大的顺序进行排序。 请
3、改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include string h #include conio h #include stdio h #define NAXLINE20 fun(char*pstr6) int i, j; char*p; for(i=0; i 5; i+) *found* for(j=i+1, j 6, j+) if(strcmp(*(pstr+i), (pstr+j) 0) p=*(pstr+i); *found* *(pstr+i)= pstr
4、+j; *(pstr+j)=p; void main() int i; char*pstr6, str6MAXLINE; system(“CLS“); for(i=0; i 6; i+) pstri=stri; printf(“ nEnter6string(1string at each line): n“); for(i=0; i 6; i+) scanf(“ s“, pstri); fun(pstr); printf(“The strings after sorting: n“); for(i=0; i 6; i+) printf(“ s n“, pstri); 三、程序设计题 3 使用
5、VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,函数 fun的功能是:将两个两位数的正整数 a、 b合并成一个整数放在 c中。合并的方式是:将 a数的十位和个位数依次放在 c数的千位和十位上, b数的十位和个位数依次放在 C数的百位和个位上。 例如,当 a=45, b=12时,调用该函数后 C=4152。 注意:部分源程序给出如下。 请勿改动主 函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h void
6、fun(int a, int b, long*c) main() int a, b; long c; printf(“Inputa, b: “); scanf(“ d d“, &a, &b), fun(a, b, &c); printf(“The result is: d n“, c); 国家二级 C语言机试(操作题)模拟试卷 616答案与解析 一、程序填空题 1 【正确答案】 (1)a=0, b=0, k (2)(k!=0) (3)scanf(“ d“, &k) 【试题解析】 填空 1:下面的 scanf函数用到变量 k,需要提前定义,在 while循环中使用了临时存放正、负数个数的变量 a
7、, b,因此也要提前定义。 填空 2:根据题意,输入 0时结束程序,因此当 k!=0时进入循环记录正负数的个数。 填空 3处:需要不断从终端输入整数,因此在循环体内添加输入操作。 二、程序修改题 2 【正确答案】 (1)for(j=i+1; j 6; j+) (2)*(pstr+i)=*(pstr+j); 【试题解析】 (1)此处考查 for语句的格式,各表达式之间应用 “; ”隔开。 (2)此处考查用指针表示数组元素的方法, * (pstr+i)表示 pslr所指向数组的第 i个元素,同理 * (pstr+j)表示 pstr所指向数组的第 j个元素。 三、程序设计题 3 【正确答案】 void fun(int a, int b, long*c) *b 10获取 b的个位, a 10获取 a的十位, a 10获取 a的个位, b 10获取 b的十位 * *c=b 10+(a 10)*10+(b 10)*100+(a 10)*1000; 【试题解析】 本题中主要的问题是如何取出 a和 b的个位数和十位数,取出后如何表示成 c中相应的位数。由于 a和 b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用 10对它们求余可得到它们的个位数。得到后对应乘以 1000、 100、 10、 1,就可得到 c的千位数、百位数、十位数和个位数。注意使用 c时要进行指针运算。