1、国家二级 C语言机试(操作题)模拟试卷 427及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 将 a所指 35矩阵中第 k列的元素左移到第 0列,第 k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。 例如,有下列矩阵: 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 若 k为 2,程序执行结果为 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #1F1clude std
2、io h #define M 3 #define N 5 void fun(int(* a)N, int k) (int i, j, p, temp; /*found*/ for(p=1; p =【 1】 ; p+) for(i=0; i M; i+) temp=ai0; /*found*/ for(j=0; j 【 2】 ; j+) aij_aij+1; /*found*/ aiN一 1=【 3】 ; main() int xMN=1, 2, 3, 4, 5), 1, 2, 3, 4, 5), 1, 2, 3, 4, 5), i, j; printf(“The array before mo
3、ving: nn“); for(i=0; i M; i+) for(j=0; j N; j+) printf(“ 3 d“, xij); printf(“n“); fun(x, 2); printf(“The array after moving: nn“); for(i=0; i M; i+) for(j=0; j N; j+) prLntf(“ 3d“, xij); printf(“n“); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:根据形参 m的值 (2m9),在 m行 m列的二维数组中存放如下所示规律的数据,由 main函数输出。请改正程序中的错误,使它能得出正确的结果
4、。 注意:部分源程序在文件 MOD11 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h #define M 1 0int aMM=0; /*found*/void fun(int*a, int m)int j, k; for(j=0 ; j m; j+) for(k=0; k m;k+)/*found*/ ajk=k*j; main()int i, j, n; printf(“Enter n:“); scanf(“ d“, &n); fun(a, n); for(i=0; i n; i+)
5、for(j=0; j n; j+) printf(“ 4d“, aij); printf(“n“); 三、程序设计题 3 函数 fun的功能是:将 a、 b中的两个正整数合并形成一个新的整数放在 c中。合并的方式是:将 a中的十位和个位数依次放在变量 c的十位和千位上, b中的十位和个位数依次放在变量 c的个位和百位上。 例如,当 a=45, b=12。调用该函数后, c=5241。 注意:部分源程序在文件 PROG1 C中。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h void fun(int
6、a, int b, long*c) main() int a, b; long c; void NONO(); printf(“Input a, b: “); scanf(“ d d“, &a, &b); fun(a, b, &c); printf(“The result is: idn“, c); NONO(); void NONO() /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FTT*rf, *wf; int i, a, b; long c; rf: fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0
7、; i 10; i+) fscanf(rf, “ d, d“, &a, &b); fun(a, b, &c); fprintf(wf, “a= d, b= d, c= ldn“, a, b, c); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 427答案与解析 一、程序填空题 1 【正确答案】 (1)k (2)N 一 1 (3)temp 【试题解析】 填空 1:外循环 p的值为数组移动的次数,试题要求第 k列左移,则需要移动的次数为 k,所以应填 k。 填空 2:矩阵共 N列,所以应填 N 一 1。 填空 3:临时变量 temp中存放的值为数组最左边
8、元素的值,需要把 temp放到数组的末尾,即放到 aiN一 1中,所以应填 temp。 二、程序修改题 2 【正确答案】 (1)void fun(int aM,int m) (2)ajk=(k+1)*(j+1); 【试题解析】 (1)在函数体 fun中可知, a是一个二维整型数组变量,设置实参时,用 *a表示是错误的,所以应改为 void fun(int aM, int m)。 (2)根据输出的结果可知,应改为 ajk=(k+1)*(j+1);。 三、程序设计题 3 【正确答案】 void fun (int a, int b, long*c) *c = (a 10 ) * 1000 + (b /0 ) * 100 + (a/10) *10 + (b/10) ; 【试题解析】 本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组 成一个新数。取 a十位数字的方法 a/10,取 a个位数字的方法 a 10。同理可取出整数 b的个位数和十位数。