国家二级C语言机试(操作题)模拟试卷645
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdlib.h>
#include<stdio.h>
#define N20
void fun(int*a)
{int i,x,n=0;
x=rand()%20;
/*********found*********/
while(n<【1】)
{for(i=0;i<n;i++)
/*********found*********/
if(X==a[i])
【2】;
/*********found*********/
if(i==【3】)
{a[n]=x;n++;}
x=rand()%20;
}
}
main()
{int x[N]={0),i;
fun(x);
printf(\\
(1)N或20
(2)break
(3)n
解析:填空1:变量n用于存储数组的下标,要通过while语句对数组进行赋值,数组的容量为20,因此循环条件应为n<20。
填空2:通过一个for循环判断x是否与数组中已存的元素重复,若重复则跳出for循环结束。
填空3:若for循环是由break语句结束的,则x与数组中的元素重复,此时i必然小于n;若for循环是因为循环变量i递增到某值,而不再满足循环条件结束的,说明x的值与数组中的元素不重复,则此时i的值等于n。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,规定输入的字符串全部为字母,fun函数的功能是:统计a所指字符串中每个字母在字符串中出现的次数(统计时不区分大小写),并将出现次数最高的字母输出(如果有多个相同,输出一个即可)。
例如对于字符串:dadbedbabdb,对应的输出应为:b或d。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<stdio.h>
#include<string.h>
void fun(char a[])
{int b[26],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中存放每个字符出现的次数b[0]存放字符a的次数,b[1]存放字符b的次数……。统计之前为数组b各元素赋初值为0。然后依次取出字符串的每个字符进行判断,使对应数组b加1。max初始值为0,与数组b中的每个元素进行比较,如果小于,就把下标进行交换。
(1)数组a存放的是字符串,数组b为整型数组存放的是每个字符的个数,应将数组b每个元素初始化为0。
(2)小写字母的ASCII码减去’a’的ASCII即为相应字母的下标值,相应下标值的数组元素的值增加1。
(3)最大值小于被比较数时,把被比较数的下标值赋给max,max中存放的总是当前最大值。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。程序中,m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。
例如,当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为10、20、30、40。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int fun(int score[],int m,int below[])
{
}
void main()
{
FILE*wf;
int i,n,below[9];
int score[9]={10,20,30,40,50,60,70,80,90、;
system(\\
int fun(int score[],int m,int below[])
{
int i,j=0;
float av=0.0;
for(i=0;i<m;i++)
av=av+score[i]/m;/*求平均值*/
for(i=0;i<m;i++)
if(score[i]<av)/*如果分数低于平均分,则将此分数放入below数组中*/
below[j++]=score[i];
return j;/*返回低于平均分的人数*/
}
解析:要计算低于平均分的人数,首先应该求出平均分,然后通过for循环语句和if条件语句找出低于平均分的分数。该题第1个循环的作用是求出平均分av,第2个循环的作用是找出低于平均分的成绩记录并存入below数组中。
本文档预览:3600字符,共3408字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载