国家二级C语言机试(操作题)模拟试卷401
程序填空题
1.给定程序中,函数fun的功能是:有N×N矩阵,根据给定的m(m<=)值,将每行元素中的值均右移m个位置,左边置为0。例如,N=3,m=2,有下列矩阵
1 2 3
4 5 6
7 8 9
程序执行结果为
0 0 l
0 0 4
0 0 7
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #define N 4
3 void fun(int(*t)[N],int m)
4 { int i,j;
5 /**********found**********/
6 for(i=0;i<N;__1__ )
7 { for(j=N-1-m;j>=0;j–)
8 /**********found**********/
9 t[i][j+__2___]=t[i][j];
10 /**********found**********/
11 for(j=0;j<__3__;j++)
12 t[i][j]=0;
13 }
14
15 main()
16 {int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i, j, m;
17 printf(’’\nThe original array:\n’’);
18 for(i=0; i<N; i++)
19 { for(j=0;j<N;j++)
20 printf(’’%2d’’,t[i][j]);
21 printf(’’\n’’);
22 }
23 printf(’’Input m(m<=%d) :’’,N);scanf(’’%d’’,&m);
24 fun(t,m);
25 printf(’’\nThe result is:\n’’);
26 for(2=0;i<N;i++)
27 { for(j=0;j<N;j++)
28 printf(’’%2d’’,t[i][j]);
29 printf(’’\n’’);
30 }
31 }
(1)i++ (2)m (3)m
解析:函数fun的功能是将每行元素中的值均右移m个位置。
第一空:题目要求对每行元素中的值均右移m个位置,故第一空处循环变量每次增1,共循环N次,完成对N行的移位操作,因此第一空处应为“i++”。
第二空:循环“for(j=N-1-m;j>=0;j–)”是进行行元素中的值右移m个位置,即把t[i][j]元素放置在t[i][j+m]上,因此第二空应为“m”。
第三空:循环“for(j=0;j<__3__;j++)”是对空出来的位置补0,每行元素的前m位数据已经移动到后面,每行空处m个元素,因此第三空为“m”。
程序修改题
2.给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。
请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #include<stdlib.h>
3 typedef struct aa
4 { int data;
5 struct aa *next;
6 } NODE;
7 NODE *Creatlink(int n,int m)
8 {NODE * h=NULL,*p,*s;
9 int i;
10 /**********found**********/
11 p=(NODE)malloc(sizeof(NODE));
12 h=p;
13 { p->next=NULL;
14 for(i=1;i<=n;i++)
15 {s=(NODE *)malloc(sizeof(NODE));
16 s->data=rand()%m; s->next=p->next;
17 p->next=s;p=p->next;
18 }
19 /**********found**********/
20 return p;
21 }
22 outlink(NODE *h)
23 { NODE *p;
24 p=h->next;
25 printf(’’\nXnTHE LIST:\n\n HEAD’’);
26 while(p)
27 { printf(’’->%d’’,p->data);
28 p=p->next;
29 }
30 printf(’’\n’’);}
31 main()
32 { NODE *head;
33 head=Creatlink(8,22);
34 outlink(head);}
(1)p=(NODE*)malloc (sizeof(NODE)); (2)return h;
解析:(1)“p=(NODE)malloc(sizeof(NODE));”第一标识,maclloc函数的返回类型是void*类型,表示未确定类型的指针,因此需要指针类型转换,而“(NODE)”不是指针类型,故第一标识下应改成“p=(NODE*)malloc(sizeof(NODE));”。
(2)第二个标识下,最后将单链表返回,应该是返回头指针h指向的链表,而不是其中的一个节点p,所以“return p;”应该改为“return h;”。
程序设计题
3.请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。
例如,二维数组中的数据为:
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应是:
33 44 55 33 44 55 33 44 55 33 44 55。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
<本文档预览:3600字符,共4960字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载