国家二级C语言机试(操作题)模拟试卷632
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有10个正数:47、30、32、40、6、17、45、15、48、26,其平均值为30.500000。
移动后的输出为:30、6、17、15、26、47、32、40、45、48。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdlib.h>
#include<stdio.h>
#define N10
double fun(double*x)
{int i,j;double av,y[N];
aV=0;
for(i=0;i<N;i++)
/*********found*********/
av+=【1】;
for(i=j=0;i<N;i++)
if(x[i]<av){
y[j]=x[i];x[i]=-1;
/*********found*********/
【2】;
}
i=0;
while(i<N)
{if(x[i]!=-1)y[j++]=x[i];
/*********found*********/
【3】;
}
for(i=0;i<N;i++)x[i]=y[i];
return av;
}
main()
{int i,double x[N];
for(i=0;i<N;i++)
{x[i]=rand()%50;
printf(\\
(1)x[i]/N
(2)j++或++j
(3)i++或++i
解析:填空1:av代表平均值,本题考查了怎样求平均值,因此本空应该填写x[i]/N。
填空2:通过for循环和if判断找到x[i]中比平均值小的数,并把这些值赋值给y[j],因此本空应该填写j++或者++j。
填空3:通过while循环语句,把x[i]中比平均值大的数放在数组y的后半部分,因此本空应该填写i++或者++i。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,假定整数数列中的数不重复,并存放在数组中。下列给定程序中函数fun的功能是:删除数列中值为X的元素,变量n中存放数列中元素的个数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define N20
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-1;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.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:判断t所指字符串中的字母是否由连续递增字母序列组成(字符串长度大于等于2)。例如字符串:uvwxyz满足要求;而字符串:uvxwyz不满足要求。
注意:部分源程序存放在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<string.h>
void NONO();
int fun(char*t)
{
}
main()
{char s[26];
printf(\\
int fun(char*t)
{
int len=strlen(t);
if(len<2)
{
return0;
}
char before ch=t[0],
char current ch;
int flag=1;
for(int i=1;t[i]!=’\0’;++i)
{
current_ch=t[i];
iffbefore_ch!=current_ch-1)
{
flag=0;
break;
}
before_ch=current_ch;
}
return flag;
}
解析:函数fun的功能是判断指针t指向的字符串是否是由连续递增的字母构成,返回值为整数,0代表不满足条件。根据题目要求,字符串长度必须大于等于2,所以首先需要对t指向的字符串进行长度判断,小于2的字符串返回0。接着需要对字符串中的连续字符,逐个进行比较。C语言中字符变量可以当作整数使用,所以当前字符只有是前一个字符的ASCII码+1,才能说它们是连续递增字母序列,然后比较后一个字符与当前字符的ASCII码,如果字符串中的所有字符都满足条件,则返回1;否则说明该字符串不满足要求,此时设置flag=0,后面的字符也
本文档预览:3600字符,共3359字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载