当前位置:文档之家› 四川省计算机等级考试二级C语言机试题22

四川省计算机等级考试二级C语言机试题22

四川省计算机等级考试二级C语言机试题(第二十二次)2009-03-29 16:37:54(第一套)(60分钟)一、程序调试题(文件名testl-l.c)(40分)软盘上有一个名为testl-l.c的C程序文件,其中函数move的功能是将字符串str 中的字符"循环左移" r位。

例如,输入"HELLO",r=2,则应该输出"LLOHE"。

注意:不得增行或删行,也不得更改程序的结构。

#include <stdio.h>#include <string.h>char move( char *str, int r){ char t;int i,len;len=strlen(str);for(k=0;k<=r;k++){ t=*str;strcpy(str+1,str);str[len-1]=t;}return *str;}void main(){ char s[81];int m;printf("\n Please enter a string:\n");gets(s);do{ printf("\n Please enter m:");scanf("%d",m);if(m>strlen(s))printf("\n Data error!!\n");}while(m>strlen(s));printf("\n Result:%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 <stdio.h>main(){float a[ ][10], min;int i, j;int invert();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);}}float invert(float *a, n){int i;float min;min=*(a+0);for(i=1;i<n;i++){if(min<*(a+i))min=(a+i);}return min;}二、编写程序(程序文件名取为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 <stdio.h>int fun(float s, int n, float *aver){ float ave,t=0.0;int count,k,i;for(k=0;k<n;k++)t=s[k];ave=t/n;for(i=0;i<n;i++)if(s[i]>ave) count++;*aver=&ave;return count;}main(){ float s[30],aver;int m, i;printf("\nPlease enter n(<30):");scanf("%d", &m);printf("\nPlease enter %d mark:\n",m);for(i=0;i<m;i++)scanf("%f", s+i);printf("\nThe number of students:%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-29 16:38:2122-1套参考答案:一、程序调试题(文件名为test1-1.c)(40分)#include <stdio.h>#include <string.h>char move( char *str, int r) /* 改为*move */{ char t;int i,len; /* 改为k*/len=strlen(str);for(k=0;k<=r;k++) /* 改为k<r */{ t=*str;strcpy(str+1,str);/* 改为strcpy(str+1,str) */str[len-1]=t;}return *str; /* 改为str */}void main(){ char s[81];int m;printf("\n Please enter a string:\n");gets(s);do{ printf("\n Please enter m:");scanf("%d",m); /* 改为&m */if(m>strlen(s))printf("\n Data error!!\n");}while(m>strlen(s));printf("\n Result:%s\n",move(s,m));}评分标准:每改对1处得5分,结果正确得10分。

二、编写程序(程序文件取名为test1-2.c)(60分)评分标准:1.被调函数编写正确25分2.文件打开、数据读出正确10分3.函数调用正确10分4.屏幕输出正确10分5.程序结构合理5分参考程序:#include <stdio.h>sort(char a[],char b[]){char c;int i,j=0;for(i=1;i<strlen(a);i+=2)b[j++]=a[i];b[j]='\0';for(i=1;i<strlen(b);i++)for(j=0;j<strlen(b)-i;j++)if(b[j]>b[j+1]){ c=b[j]; b[j]=b[j+1]; b[j+1]=c; }}main(){FILE *in;char a[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 <stdio.h>main()float a[ ][10], min; /* 改为a[10][10]*/ int i, j;int invert(); /* 改为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);}}float invert(float *a, n) /* 改为int n */ {int i;float min;min=*(a+0);for(i=1;i<n;i++){if(min<*(a+i)) /* 改为>*/min=(a+i); /* 改为*(a+i) */}return min;评分标准:每改对1处得5分,结果正确得10分。

二、编写程序(程序文件取名为test2-2.c)(60分)评分标准:1.被调函数编写正确15分2.文件打开、数据写入正确15分3.函数调用正确10分4.屏幕输出正确10分5.程序结构合理10分参考程序:# include <stdio.h>int select(int a){if(!(a%3)&&!(a%5)) return 1;else return 0;}main(){int i,k=0;FILE *fp;if((fp=fopen("test2-2.dat","wb"))==NULL){printf("cannot open the file\n");}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 <stdio.h>int fun(float s, int n, float *aver) /* 改为*s */ { float ave,t=0.0;int count,k,i; /* 改为count=0 */for(k=0;k<n;k++)t=s[k]; /* 改为+= */for(i=0;i<n;i++)if(s[i]>ave) count++; /* 改为<*/*aver=&ave; /* 改为ave */return count;}main(){ float s[30],aver;int m, i;printf("\nPlease enter n(<30):");scanf("%d", &m);printf("\nPlease enter %d mark:\n",m);for(i=0;i<m;i++)scanf("%f", s+i);printf("\nThe number of students:%d \n",fun(s, m, aver)); /* 改为&aver */ printf("Ave=%f \n", aver);}评分标准:每改对1处得5分,结果正确得10分。

相关主题