C语言计算机等级考试上机真题.docx
《C语言计算机等级考试上机真题.docx》由会员分享,可在线阅读,更多相关《C语言计算机等级考试上机真题.docx(35页珍藏版)》请在冰豆网上搜索。
C语言计算机等级考试上机真题
历年上机真题
第一套
填空题
请补充main函数,该函数的功能是:
输出一个NXN矩阵,要求非周边元素赋值0,周边元素赋值1.
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#defineN10
main()
{
intbb[N][N];
inti,j,n;
clrscr();
printf("\nInputn:
\n");
scanf("%d",&n);
for(i=0;ifor(j=0;j{
if(【1】)
bb[i][j]=1;
else
【2】;
}
printf(“\n***theresult***\n”)
for(i=0;i{
printf(“\n\n”);
for(j=0;jprintf(“%4d”,bb[i][j]);
}
}
答案:
i==0||i==n-1||j==0||j==n-1
bb[i][j]=0
改错题
下列给定程序中,函数fun()的功能是:
给定n个实数,输出平均值,并统计平均值以上(含平均值)的实数个数。
例如,n=8时,输入3.1,5.3,7.4,8.3,9.7,所得平均值为6.76,在平均值以上的实数个数为3.
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
intfun(floatx[],intn)
/*****************found**************/
intj,c=0;floatxa=0.0;
for(j=0;jxa+=x[j]/n;
printf(”ave=%f\n”,xa);
for(j=0;jif(x[j]>=xa)
c++;
returnc;
}
main()
{
floatx[100]={3.1,5.3,7.4,8.3,9.7};
clrscr();
printf(“%d\n”,fun(x,8));
}
答案:
intj,c=0;floatxa=0.0;改为{intj,c=0;floatxa=0.0;
编程题
请编写函数fun(),该函数的功能是:
计算n门课程的平均分,计算结果作为函数值返回。
例如:
有5门课程的成绩是90.5,72,80,61.5,55,则函数的值为71.80.
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
试题程序:
#include
floatfun(float*a,intn)
{
}
main()
{
floatscore[30]={90.5,72,80,61.5,55},aver;
aver=fun(score,5);
printf(“score=%5.2f\n”,aver);
}
/*************************
/*************************
第二套
填空题
请补充main函数,该函数的功能是:
把字符串str1中的非空格字符拷贝到字符串str2中。
例如,若str1=”gladtoseeyou!
”,则str2=”gladtoseeyou!
”。
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#defineN80
main()
{
staticcharstr1[N]=”gladtoseeyou!
”;
charstr2[N];
inti=0,j=0;
clrscr();
printf(“\n*******str1*******\n”);
puts(str1);
while(str1[i])
{
if(【1】)
str2[j++]=str1[i];
【2】;
}
printf(“\n*******str2*******\n”);
for(i=0;iprintf(“%c”,str2[i]);
}
改错题
下列给定程序中,函数fun()的功能是:
根据整型形参n,计算如下公式的值。
例如,若n=10,则应输出0.617977
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
/*****************found**************/
intfun(intn)
{
floatA=1;inti;
/*****************found**************/
for(i=2;iA=1.0/(1+A);
returnA;
}
main()
{
intn;
clrscr();
printf(“\nPleaseentern:
”);
scanf(“%d”,&n);
printf(“A%d=%lf\n”,n,fun(n));
}
intfun(intn)改为floatfun(intn)
for(i=2;i编程题
假定输入的字符串中只包含字母和*号。
请编写函数fun(),它的功能是:
将字符串尾部的*号全部删除,前面和中间的*号不删除。
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
试题程序:
#include
#include
voidfun(char*a)
{
}
main()
{
chars[81];
printf(“Enterastring:
\n”);
gets(s);
fun(s);
printf(“Thestringafterdeleted:
\n”);
puts(s);
}
/****************
while(*a!
=’\0’)
a++;
a--;
while(*a==’*’)
a--;
*(a+1)=’\0’;
/*******************
第三套
填空题
请补充main函数,该函数的功能是:
计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入)。
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
main()
{
intn,m;
longsum;
【1】;
clrscr();
printf(“\nInputn,m\n”);
scanf(“%d,%d”,&n,&m);
while(n<=m)
{
【2】;
n++;
}
printf(“sum=%【3】\n”,sum);
}
答案:
sum=0
sum+=n
d
改错题
下列给定程序中,函数fun()的功能是:
给一维数组a输入任意4个整数,并按如下规律输出。
例如输入1,2,3,4,程序运行后输出如下方阵:
4123
3412
2341
1234
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#defineM4
/*****************found**************/
intfun(inta)
{
inti,j,k,m;
printf(“Enter4number:
”);
for(i=0;iprintf(”\n\nTheresult:
\n\n”);
for(i=M;i>0;i--)
{k=a[M-1];
for(j=M-1;j>0;j--)
/*****************found**************/
a[j]=a[j+1];
a[0]=k;
for(m=0;mprintf(“\n”);
}
}
main()
{
inta[M];
fun(a);
printf(“\n\n”);
}
答案:
intfun(inta)应改为:
intfun(int*a)
a[j]=a[j+1];应该为:
a[j]=a[j-1];
编程题
请编写函数fun(),它的功能是计算:
在C语言中可调用log(n)函数求ln(n)。
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
doublefun(intm)
{
}
main()
{
clrscr();
printf(“%f\n”,fun(20));
}
/**********参考答案***********
inti;
doubles=0.0;
for(i=1;i<=m;i++)
s=s+log(i);
return(sqrt(s));
/*********************
第四套
填空题
请补充main函数,该函数的功能是:
输出一个3X3的矩阵,要求必须使用行指针表示输出变量。
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
main()
{
staticintarray[3][3]={{9,8,7},{6,5,4},{3,2,1}};
int(*p)[3],j,i;
p=【1】;
clrscr();
for(i=0;i<3;i++)
{
printf(“\n\n”);
for(j=0;j<3;j++)
printf(“%4d”,【2】);
}
}
答案:
array
*(*(p+i)+j)或p[i][j]
改错题
下列给定程序中,函数fun()的功能是:
计算正整数n的阶乘。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
doublefun(intn)
{
doubleresult=1.0;
while(n>1&&n<170)
/*****************found**************/
result*=--n;
/*****************found**************/
return;
}
main()
{
intn;
clrscr();
printf(“Enteraninteger:
”);
scanf(“%d”,&n);
printf(“\n\n%d!
=%lg\n\n”,n,fun(n));
}
答案:
result*=--n;改为result*=n--;
return;改为returnresult;
编程题
N名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的头结点。
请编写函数fun(),它的功能是:
求出平均分,由函数值返回。
#include
#include
#defineN8
structlist
{doubles;
structlist*next;
};
typedefstructlistSTREC;
doublefun(SLIST*h)
{
}
SLIST*creatlist(double*s)/*创建链表*/
{SLIST*h,*p,*q;inti=0;
h=p=(SLIST*)malloc(sizeof(SLIST));
p->s=0;
while(i{q=(SLIST*)malloc(sizeof(SLIST));
q->s=s[i];p->next=q;p=q;
}
p->next=0;
returnh;
}
voidoutlist(SLIST*h)
{SLIST*p;
p=h->next;
if(p==NULL)printf("ThelistisNULL!
\n");
else
{printf("\nHead");
do
{printf("->%4.1f",p->s);p=p->next;/*输出各成绩*/}
while(p!
=0);
printf("->End\n");
}
}
main()
{SLIST*h;
doubles[N]={12,87,45,32,91,16,20,48},ave;
h=creatlist(s);outlist(h);
ave=fun(h);
printf("ave=%6.3f\n",ave);
}
/*********参考答案*************/
SLIST*p;
doublesum;
sum=0;
p=h->next;
while(p->next!
=NULL)
{
sum+=p->s;
p=p->next;
}
return(sum/N);
/***************************
第五套
填空题
请补充main函数,该函数的功能是:
从键盘输入一组字符串,以’*’结束输入,并显示出这个字符串。
例如,输入abcefghi*,结果显示abcefghi
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#defineN80
main()
{
inti=-1,j=0;
charstr[N];
clrscr();
printf(“\nInputastring\n”)
do
{
i++;
scanf(【1】);
}while(【2】);
printf(“\n**displaythestring**\n”);
while(j
{
printf(【3】);
j++;
}
}
答案:
”%c”,&str[i]
str[i]!
=’*’
”%c”,str[j]
改错题
下列给定程序中,函数fun()的功能是:
使数组中的元素值增加10倍。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
intm[10];
voidfun(void)
{
intj;
printf(“INsubfuncaftercalling\n”);
for(j=0;j<10;j++)
{
/*****************found**************/
printf(“%3d”,m[j]*10);
}
}
main()
{
inti;
printf(“Inmainbeforecalling\n”);
for(i=0;i<10;i++)
{
m[i]=i;
printf(“%3d”,m[i]);
}
fun();
printf(“\nInmainaftercalling\n”);
for(i=0;i<10;i++)
printf(“%3d”,m[i]);
getch();
}
答案:
printf(“%3d”,m[j]*10);改为printf(“%3d”,m[j]=m[j]*10);
编程题
请编写函数fun(),其功能是:
计算并输出给定10个数的方差。
,其中
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
试题程序:
#include
#include
doublefun(doublex[10])
{
}
main()
{
doubles,x[10]={89.3,90.5,67.3,78.0,88.0,58.7,90.4,60.2,74.5,89.0};
inti;
printf(“\nTheoriginaldatais:
\n”);
for(i=0;i<10;i++)
printf(“%6.1f”,x[i]);
printf(”\n\n”);
s=fun(x);
printf(“s=%f\n\n”,s);
}
/****************
doublex1=0.0,s=0.0;
inti;
for(i=0;i<10;i++)
x1=x1+x[i];
x1=x1/10;
for(i=0;i<10;i++)
s=s+(x[i]-x1)*(x[i]-x1);
return(sqrt(s/10));
/*******************
第六套
填空题
请补充main函数,该函数的功能是:
计算每个学生成绩的平均分,并把结果保存在数组bb中。
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#defineN3
#defineM5
main()
{
inti,j;
staticfloatscore[N][M]={{83.5,82,86,65,67},{80,91.5,84,99,95},{90.5,95,86,95,97}};
floatbb[N];
clrscr();
for(i=0;i【1】;
for(i=0;i{
for(j=0;j【2】;
bb[i]/=M;
}
for(i=0;iprintf(“\nstudent%d\taverage=%5.1f”,i+1,bb[i]);
}
答案:
bb[i]=0
bb[i]+=score[i][j]
改错题
以下程序可把输入的十进制以十六进制数的形式输出。
请在横线上填上适当的内容并把横线删除,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
main()
{
charb[17]={“0123456789ABCDEF”};
intc[64],d,i=0,base=16;
longn;
printf(“Enteranumber:
\n”);
scanf(“ld”,&n);
do{
/***************found*******************/
c[i]=;i++;n=n/base;}
while(n!
=0);
printf(“Transmitenewbase:
\n”);
for(--i;i>=0;--i)
/***************found*******************/
{d=c[i];printf(“%c”,b);}
printf(“\n”);
}
答案:
n%base
[d]
编程题
学生的记录由学号和成绩组成,N名同学的数据已在主函数中放入结构体数组s中,请编写函数fun(),该函数的功能是:
把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意:
部分源程序给出如下。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
试题程序:
#include
#defineN12
typedefstruct
{charnum[10];
doubles;
}STREC;
floatfun(STREC*a,STREC*b,int*n)
{
}
main()
{STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",60},{"GA013",79},{"GA012",73},{"GA014",90}};
STRECh[N],t;
FILE*out;
inti,n,j;
doubleave;
ave=fun(s,h,&n);
printf("The%dstudentdatawhichishigherthan%7.3f:
\n",n,ave);
for(i=0;iprintf("%s%4.1f\n",h[i].num,h[i].s);
printf("\n");
out=fopen("out90.dat","w");
fprintf(out,"%d\n%7.3f\n",n,ave);
for(i=0;ifor(j=i+1;jif(h[i].s{t=h[i];h[i]=h[j];h[j]=t;}
/*分数从高到低排列*/
for(i=0;ifprintf(out,"%4.1f\n",h[i].s);
fclose(out);
}
/***************参考答案***********
doublesum;
inti,j;
j=0;
sum=0.0;
for(i=0;isum+=a[i].s;
sum=sum/N;
for(i=0;i{
if(a[i].s>=sum)
{
b[j]=a[i];
j++;
}
}
*n=j;
/******