国家二级C语言机试(操作题)模拟试卷269
程序填空题
1.给定程序中,函数fun的功能是建立一个N×N的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,……依此类推。例如,若N=5,生成的矩阵为:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
1 #include<stdio.h>
2 #defitie N 7
3 /*********found*********/
4 void fun(int(*a)【1】)
5 { int i,j,k,m;
6 if(N%2==0)m=N/2;
7 else m=N/2+1;
8 for(i=0;i<m;i++){
9 /*********found*********/
10 for(j=【2】;j<N—i;j++)
11 a[i][j]=a[N—i一1][j]=i+1;
12 for(k=i+1;k<N—i;k++)
13 /*********found*********/
14 a[k][i]=a[k][N—i一1]=【3】;
15 }
16 }
17 main()
18 { int x[N][N]={0),i,j;
19 fun(x);
20 printf(\\
(1)[N]
(2)i
(3)i+1
解析:填空1:本题考查了形参的确定。参数传递时将实参的值赋给形参,实参和形参是一一对应的,因此该空应该填写[N]。
填空2:第二重for循环中a[i][j]和a[N—i—1][j]表示第一行和最后一行数组a[N][N]的值,因而此空应该填写i。
填空3:第三重for循环代表的是a[N][N]中每一列的值,因此此空应该填写i+1。
程序修改题
2.假定整数数列中的数不重复,并存放在数组中。下列给定程序中函数fun的功能是:删除数列中值为x的元素,变量n中存放数列中元素的个数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define N 2 0
fun(int*a,int n,int x)
{
int p=0,i;
a[n]=x;
while(x!=a[P])
P=P+1;
/*********found*********/
if(P==n)
return-1;
else
{
for(i=P;i<n;i++)
/*********found*********/
a[i+1]=a[i];
return n-1;
}
}
void main()
{
int w[N]={-3,0,1,5,7,99,10,15,30,90),x,n,i ;
n=10;
printf(\\
(1)if(p==n)return—1;
(2)a[i]=a[i+1];
解析:(1)需要确定if条件语句的条件表达式,发现变量p大写,C语言中变量是区别大小写的。
(2)删除数列中的元素,删除后,后面的元素依次前移一个位置,因此此处应为a[i]=a[i+1];
程序设计题
3.编写程序,实现矩阵(3行、3列)的转置(即行列互换)。
例如,若输入下面的矩阵:
100 200 300
400 500 600
700 800 900
则程序输出:
100 400 700
200 500 800
300 600 900
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
1 #include<stdio.h>
2 #include<conio.h>
3 #include<stdlib.h>
4 void fun(int array[3][3])
5 {
6
7 }
8 void main()
9 {
10 FILE,lc Wf;
11 int i,j;
12 int array[3][3]={{100,200,300),{400,500,600),{700,800,900});
13 system(\\
Void fun(int array[3][3])
{
int i,j,t;
for(i=0;i<3;i++)/*将右上三角和左下三角对换,实现行列互换*/
for(j=i+1;j<3;j++)
{t=array[i][j];
array[[i][j]=array[j][i];
array[i][j]=array[i][j];
array[j][i]=t;
}
}
解析:要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。
因为对矩阵转置后仍然存回其本身,所以只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在内层循环中循环变量j从i+1或i开始。
本文档预览:3600字符,共3265字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载