国家二级C语言机试(操作题)模拟试卷375
程序填空题
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函数的功能是:求出以下分数序列的前n项之和。
(1)double fun(int n) (2)c=a;a+=b;b=c;
解析:(1)fun函数中的语句“double s=0.0;”以及“return(s);”说明fun函数具有double返回值,所以应将“fun(int n)”改为“double fun(int n)”。
(2)根据题干中给出的公式可以推出每一项的特点,知道每一项的b值是前一项的C值,所以第二个标识下“b+=c;”改为“b=c;”。
程序设计题
3.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
2 #include<stdlib.h>
3 #define N 8
4 struct slist
5 {double s;
6 struct slist *next;
7 };
8 typedef struer slist STREC;
9 double fun(STREC *h)
10 {
11
12 }
13 STREC * creat(double * s)
14 {STREC *h,*p,*q;int i=0;
15 h=p=(STREC *)malloc(sizeof(STREC));p->s=0;
16 while(i<N)
17 {q=(STREC *) malloc(sizeof(STREC));
18 q->s=s[i];i++;p->next=q;p=q;
19 }
20 p->next=0;
21 return h;
22 }
23 outlist(STREC *h)
24 { STREC *p;
25 p=h->next;printf(’’head’’);
26 do
27 { printf(’’->%4.1f’’,p->s);p=p-> next;)
28 while(p!=0);
29 printf(’’\n\n’’);
30 }
31 main()
32 { double s[N]={85,76,69,85,91,72,64,87},ave;
33 void NONO();
34 STREC *h;
35 h=creat(s);outlist(h);
36 ave=fun(h);
37 printf(’’ave=%6.3f\n’’,ave);
38 NONO();
39 }
40 void NONO()
41 {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
42 FTLE *in,*out;
43 int i,j;double s[N],ave;
44 STREC *h;
45 in=fopen(’’in.dat’’,’’r’’);
46 out=fopen(’’out.dat’’,’’w’’);
47 for(i=0;i<10;i++) {
48 for(j=0 ; j<N;j++)fscanf(in,’’%1f,’’,&s[j]);
49 h=creat(s);
50 ave=fun(h);
本文档预览:3600字符,共4135字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载