国家二级C语言机试(操作题)模拟试卷372
程序填空题
1.给定程序中,函数fun的功能是:将NxN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若N=3,有下列矩阵:
1 2 3 交换后为: 3 2 1
4 5 6 4 5 6
7 8 9 9 8 7
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #define N 4
3 /**********found**********/
4 {void fun(int__1__,int n)
5 { int i,s;
6 /**********found**********/
7 { for( ___2__;i++)
8 { s=t[i][i];
9 t[i][i]=t[i][n-i-1];
10 /**********found**********/
11 t[i][n-1-i]=__3__;
12 }
13 }
14 main()
15 {int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;
16 printf(’’\nThe original array:\n’’);
17 for(i=0;i<N;i++)
18 {for(j=0;j<N;j++)printf(’’%d’’,t[i][j]);
19 printf(’’\n’’);
20 }
21 fun(t,N);
22 printf(’’\nThe result is:\n’’);
23 for(2=0;i<N;i++)
24 { for(j=0; j<N; j++) printf(’’%d’’,t[i][j]);
25 printf(’’\n’’);
26 }
27 }
(1)t[][N] (2)i=0;i<n (3)s
解析:第一空:在主函数中fun函数的调用形式是“fun(t,N);”,t是二维数组名,故fun函数的第一个参数为指针,因此第一空处应为“t[][N]”。第二空:fun函数的第二个参数n指明了矩阵的大小为n,对角线元素与反向对角线元素有n个,故循环有n次,因此变量i从0开始,到n-1结束,因此第一空处应为“i=0;i<n”。第三空:循环体内部是对角线元素与反向对角线元素的交换,“s=t[i][i];”s保存了对角元素t[i][i],因此第三处应填“s”。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。
请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 int fun(int *x,int y)
3 {
4 int t;
5 /**********found**********/
6 t=x;x=y;
7 /**********found**********/
8 return(y);
9 }
10 main()
11 { int a=3,b=8;
12 printf(’’%d%d\n’’,a,b);
13 b=fun(&a,b);
14 printf(’’%d%d\n’’,a,b);
15 }
(1)t=*x;*x=v; (2)return(t);
解析:(1)根据fun中x变量的定义,x为指针型变量,所以第一个错误标识下的“t=x;x=y;”改为“t=-*x;*x=y;”。(2)交换之后t中存放原来x的值,x存放原来y的值,这里应该是返回原来x的值,所以第二个标识下的“return(y);”应该改为“return(t);”或者“return t;”。
程序设计题
3.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
2 #include<string.h>
3 #define N 16
4 typedef struct
5 { char num[10];
6 int s;
7 } STREC;
8 STREC fun(STREC *a,char *b)
9 {
10
11 }
12 main()
13 { STREC s[N]={{’’GA005’’,85},{’’GA003’’,76},{’’GA002’’,69},{’’A004’’,85},{’’GA001’’,91},{’’GA007’’,72},{’’GA008’’,64},{’’GA006’’,87},{’’GA015’’,85},{’’GA013’’,91},{’’GA012’’,64},{’’GA014’’,91},{’’GA011’’,77},{’’GA017’’,64},(’’GA018’’,64},{’’GA016’’,72}};
14 STREC h;
15 char m[10];
16 int i;FILE *out;
17 printf(’’The original data:\n’’);
18 for(2=0;i<N;i++)
19 { if(i%4==0) printf(’’\n’’);
20 printf(’’%s%3d’’,s[i].num,s[i].s);
21 }
22 printf(’’\n\nEnter the number: ’’);gets(m);
23 h=fun(s,m);
24 printf(’’The data:’’);
25 printf(’’\n%s %4d\n’’,h.num,h.s);
26 printf(’’\n’’);
27 out=fopen(’’out.dat’’,’’w’’);
28 h=fun{s,’’GA013’’};
29
本文档预览:3600字符,共4181字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载