国家二级C语言机试(操作题)模拟试卷321
程序填空题
1.给定程序中,函数fun的功能是:找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
1 #include<stdio.h>
2 #define N 4
3 void fun(int(*a)[N],int*b)
4 { int i,j;
5 for(i=0;i<N;i++){
6 /*********found*********/
7 b[i]=【1】;
8 for(j=1;j<N;j++)
9 /*********found*********/
10 if(b[i]【2】 a[j][i])
11 b[i]=a[j][i];
12 }
13 }
14 main()
15 { int x[N][N]={{12,5,8,7},{6,1,9,3},{1,2,3,4},{2,8,4,3)},y[N],i,j;
16 printf(\\
(1)a[0][i]
(2)<
(3)x,y
解析:填空1:数组h用于存放每列元素中的最大值,首先将第i列的第一个数赋给b[i],然后用b[i]与其他数进行比较,因此此空应填a[0][i]。
填空2:if条件表达式表示当h[i]小于a[j][i]时,就把a[j][i]的值赋给b[i],因此此空应该填<。
填空3:fun函数的调用,通过tim(int(*a)[N],int*b)可知,此空应该填x,y。
程序修改题
2.给定程序MODI1.C中规定输入的字符串全部为字母,fun函数的功能是:统计a所指字符串中每个字母在字符串中出现的次数(统计时不区分大小写),并将出现次数最高的字母输出(如果有多个相同,输出一个即可)。
例如对于字符串:dadbcdbabdb,对应的输出应为:b或d。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行。也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<stdio.h>
#include<string.h>
void fun(char a[])
{int b[2 6],i,n,max;
for(i=0;i<26;i++)
/*********found*********/
a[i]=0;
n=strlen(a);
for(i=0;i<n;i++)
if(a[i]>=’a’&&a[i]<=’z’)
/*********found*********/
b[a[i]-’A’]++;
else if(a[i]>=’A’&&a[i]<=’z’)
b[a[i]-’A’]++;
max=0;
for(i=1;i<26;i++)
/*********found*********/
if(b[max]>b[i])
max=i;
printf(\\
(1)b[i]=0;
(2)b[a[i]一’a’]++;
(3)if(b[max]<b[i])
解析:要统计字符串中每个字符在这个字符串中出现的次数,可以设数组b中存放每个字符出现的次数h[0]存放字符a的次数,b[1]存放字符b的次数……。统计之前为数组b各元素赋初值为0。然后依次取出字符串的每个字符进行判断,使对应数组b加1。max初始值为0,与数组b中的每个元素进行比较,如果小于,就把下标进行交换。
(1)数组a存放的是字符串,数组h为整型数组存放的是每个字符的个数,应将数组b每个元素初始化为0。
(2)小写字母的ASCII码减去’a’的ASCII即为相应字母的下标值,相应下标值的数组元素的值增加1。
(3)最大值小于被比较数时,把被比较数的下标值赋给max,max中存放的总是当前最大值。
程序设计题
3.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如,若a数组中的值为:
0 1 2 7 9
1 9 7 4 5
2 3 8 3 1
4 5 6 8 2
5 9 1 4 1
则返回主程序后s的值应为3.375。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
1 #include<stdio.h>
2 #include<conio.h>
3 #include<Stdlib.h>
4 #define N 5
5 double fun(int w[][N])
6 {
7
8 }
9 void main()
10 {
11 FILE*wf;
12 int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1);
13 int i,j;
14 double s;
15 system(\\
double fun(int w[][N])
{
int i,j,k=0;
double sum=0.0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==0‖i==N—1‖j==0‖j==N—1)/*只要下标中有一个为0或N—1,则它一定是周边元素*/
{ sum=sum+w[i][j];/*将周边元素求和*/
k++;
}
return sum/k;/*求周边元素的平均值*/
}
解析:本题要求计算二维数组周边元素的平均值,for循环语句控制循环过程,if条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。
本题采用逐一判断的方式,周边元素的规律为下标中有一个是0或N—1,所以只要下标中有一个为0或N—1,那么它一定是周边元素。计算周边元素个数的方式是当给sum累加一个值时,k也加1。
本文档预览:3600字符,共3498字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载