四川省计算机等级考试二级C语言机试题22.docx
《四川省计算机等级考试二级C语言机试题22.docx》由会员分享,可在线阅读,更多相关《四川省计算机等级考试二级C语言机试题22.docx(14页珍藏版)》请在冰点文库上搜索。
四川省计算机等级考试二级C语言机试题22
四川省计算机等级考试二级C语言机试题(第二十二次)
2009-03-2916:
37:
54
(第一套)
(60分钟)
一、程序调试题(文件名testl-l.c)(40分)
软盘上有一个名为testl-l.c的C程序文件,其中函数move的功能是将字符串str中的字符"循环左移"r位。
例如,输入"HELLO",r=2,则应该输出"LLOHE"。
注意:
不得增行或删行,也不得更改程序的结构。
源程序如下:
#include
#include
charmove(char*str,intr)
{chart;
inti,len;
len=strlen(str);
for(k=0;k<=r;k++)
{t=*str;
strcpy(str+1,str);
str[len-1]=t;
}
return*str;
}
voidmain()
{chars[81];
intm;
printf("\nPleaseenterastring:
\n");
gets(s);
do
{printf("\nPleaseenterm:
");
scanf("%d",m);
if(m>strlen(s))
printf("\nDataerror!
!
\n");
}while(m>strlen(s));
printf("\nResult:
%s\n",move(s,m));
}
二、编写程序(程序文件名取为testl-2.c)(60分)
编写一个程序,从文件testl-2.in中读出一行字符(即一个字符串,长度在128个字符
内),将排列在奇数位上的字符取出,按从小到大的顺序排列并输出到屏幕上。
要求:
(1)在main函数中实现从文件testl-2.in中读出一行字符,调用sort函数排序,然后将结果输出到屏幕上。
(2)编写sort函数,实现将排列在奇数位上的字符取出,然后按从小到大的顺序排列。
例如,hqwbodze奇数位为q、b、d、e,排序后为bdeq。
(第二套)
(60分钟)
一、程序调试题(文件名为test2-l.c)(40分)
程序的功能是找出数组a中每行的最小值并输出。
请改正程序申的错误,使程序能得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构。
源程序如下:
#include
main()
{
floata[][10],min;
inti,j;
intinvert();
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=i+j;
for(i=0;i<10;i++)
{
min=invert(a,10);
printf("a[%d]min=%f\n",i,min);
}
}
floatinvert(float*a,n)
{
inti;
floatmin;
min=*(a+0);
for(i=1;i {
if(min<*(a+i))
min=(a+i);
}
returnmin;
}
二、编写程序(程序文件名取为test2-2.c)(60分)
请编写函数select判断一个数能否被3和5整除,main函数中调用select函数,求出所有小于400、能被3和5整除的数(例如15,30等),然后将求得的数以每行5个数,每个数占10列方式输出到屏幕上和存放到文件test2-2.dat中。
(第三套)
(60分钟)
一、程序调试题(文件名为test3-1.c)(40分)
函数fun的功能是:
从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数返回,平均分存放在形参aver所指的存储单元中。
例如,若8名学生的成绩为:
80.5 60 72 90.5 98 51.5 88 64,则低于平均分的学生人数为4(平均分为75.5625)。
请改正程序中的错误,便它能计算出正确的结果。
洼意:
不得增行或删行,也不得更改程序的结构。
源程序如下:
#include
intfun(floats,intn,float*aver)
{floatave,t=0.0;
intcount,k,i;
for(k=0;k t=s[k];
ave=t/n;
for(i=0;i if(s[i]>ave)count++;
*aver=&ave;
returncount;
}
main()
{floats[30],aver;
intm,i;
printf("\nPleaseentern(<30):
");
scanf("%d",&m);
printf("\nPleaseenter%dmark:
\n",m);
for(i=0;i scanf("%f",s+i);
printf("\nThenumberofstudents:
%d\n",fun(s,m,aver));
printf("Ave=%f\n",aver);
}
二、编写程序(程序文件名取为test3-2.c)(60分)
编写函数fun和input:
(1)函数fun对整数数组s中除首、尾数据外的其余M-2个数据按升序排列。
例如,若原来的数据为9876543,则排序后输出为9456783。
(2)函数input从文件test3-2.in中读出待排序的数据。
编写main函数,调用input函数和fun函数,将排序的结果输出到屏幕上
四川省计算机等级考试二级C语言机试题(第二十二次)答案
2009-03-2916:
38:
21
22-1套参考答案:
一、程序调试题(文件名为test1-1.c)(40分)
#include
#include
charmove(char*str,intr) /*改为*move */
{chart;
inti,len; /*改为k */
len=strlen(str);
for(k=0;k<=r;k++) /*改为k {t=*str;
strcpy(str+1,str); /*改为strcpy(str+1,str)*/
str[len-1]=t;
}
return*str; /*改为str */
}
voidmain()
{chars[81];
intm;
printf("\nPleaseenterastring:
\n");
gets(s);
do
{printf("\nPleaseenterm:
");
scanf("%d",m); /*改为&m */
if(m>strlen(s))
printf("\nDataerror!
!
\n");
}while(m>strlen(s));
printf("\nResult:
%s\n",move(s,m));
}
评分标准:
每改对1处得5分,结果正确得10分。
二、编写程序(程序文件取名为test1-2.c)(60分)
评分标准:
1.被调函数编写正确 25分
2.文件打开、数据读出正确 10分
3.函数调用正确 10分
4.屏幕输出正确 10分
5.程序结构合理 5分
参考程序:
#include
sort(chara[],charb[])
{
charc;
inti,j=0;
for(i=1;i b[j++]=a[i];
b[j]='\0';
for(i=1;i for(j=0;j if(b[j]>b[j+1])
{c=b[j];b[j]=b[j+1];b[j+1]=c;}
}
main()
{
FILE*in;
chara[128],b[65];
in=fopen("test1-2.in","r");
fgets(a,128,in);
fclose(in);
sort(a,b);
puts(b);
}
22-2套参考答案:
一、程序调试题(文件名为test2-1.c)(40分)
#include
main()
{
floata[][10],min; /*改为a[10][10] */
inti,j;
intinvert(); /*改为float */
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=i+j;
for(i=0;i<10;i++)
{
min=invert(a,10); /*改为a[i] */
printf("a[%d]min=%f\n",i,min);
}
}
floatinvert(float*a,n) /*改为intn */
{
inti;
floatmin;
min=*(a+0);
for(i=1;i {
if(min<*(a+i)) /*改为> */
min=(a+i); /*改为*(a+i) */
}
returnmin;
}
评分标准:
每改对1处得5分,结果正确得10分。
二、编写程序(程序文件取名为test2-2.c)(60分)
评分标准:
1.被调函数编写正确 15分
2.文件打开、数据写入正确 15分
3.函数调用正确 10分
4.屏幕输出正确 10分
5.程序结构合理 10分
参考程序:
#include
intselect(inta)
{
if(!
(a%3)&&!
(a%5)) return1;
else return0;
}
main()
{
inti,k=0;
FILE*fp;
if((fp=fopen("test2-2.dat","wb"))==NULL)
{
printf("cannotopenthefile\n");
exit(0);
}
for(i=3;i<400;i++)
if(select(i))
{
k=k+1;
printf("%10d",i);
fprintf(fp,"%10d",i);
if(k%5==0)
{ printf("\n");
fprintf(fp,"\n");
}
}
fclose(fp);
}
22-3套参考答案:
一、程序调试题(文件名为test3-1.c)(40分)
#include
intfun(floats,intn,float*aver) /*改为*s */
{floatave,t=0.0;
intcount,k,i; /*改为count=0 */
for(k=0;k t=s[k]; /*改为+= */
ave=t/n;
for(i=0;i if(s[i]>ave)count++; /*改为< */
*aver=&ave; /*改为ave */
returncount;
}
main()
{floats[30],aver;
intm,i;
printf("\nPleaseentern(<30):
");
scanf("%d",&m);
printf("\nPleaseenter%dmark:
\n",m);
for(i=0;i scanf("%f",s+i);
printf("\nThenumberofstudents:
%d\n",fun(s,m,aver)); /*改为&aver*/
printf("Ave=%f\n",aver);
}
评分标准:
每改对1处得5分,结果正确得10分。
二、编写程序(程序文件取名为test3-2.c)(60分)
评分标准:
1.被调函数编写正确 20分
2.文件操作和读数据正确 15分
3.函数调用正确 10分
4.屏幕输出正确 10分
5.程序结构合理 5分
参考程序:
#include
#include
#defineM10
voidfun(int*s)
{
inti,j,t;
for(i=1;i for(j=i+1;j if(s[i]>s[j])
{ t=s[i];
s[i]=s[j];
s[j]=t;
}
}
intinput(ints[])
{
FILE*fp;
inti;
if((fp=fopen("test3-2.in","r"))==NULL)
{ printf("cannotopenfile\n");
return(0);
}
for(i=0;i fscanf(fp,"%d",&s[i]);
fclose(fp);
return
(1);
}
main()
{
ints[M];
inti;
if(input(s))
{
fun(s);
printf("\n");
for(i=0;i printf("%d",s[i]);
}
}