您好,欢迎访问三七文档
1一、改错题1、下列程序功能是,从键盘输入一个字符串,统计其中大写字母个数m和小写字母个数n,并且输出m,n中的较大者。#includestdio.h#includestring.hmain(){chars[80];inti,k,m=0,n=0;gets(s);i=1;/*$ERROR1$*/k=strlen(s);while(i=k)/*$ERROR2$*/{if(s[i]='A'&&s[i]='Z')m++;elseif(s[i]='a'&&s[i]='z')n++;i++;}if(nm)/*$ERROR3$*/printf(max=%d\n,m);elseprintf(max=%d\n,n);}2、以下程序的功能是求两个整数的最大公约数。main(){intm,n,r,t;printf(Inputtwonumber,please!\n);scanf(%d,%d,&m,&n);2if(mn)/*$ERROR1$*/{t=m;m=n;n=t;}r=m%n;while(r==0)/*$ERROR2$*/{m=n;n=r;r=m%n;}printf(gcd=%D\n,n);/*$ERROR3$*/}3、以下程序的功能:输出数组中的最大元素及其下标值。main(){inta[10]=(0,-3,9,2,5,4,8,7,6,1);/*$ERROR1$*/intt,max,i;max=a[0];t=1;/*$ERROR2$*/i=1;while(i=10)/*$ERROR3$*/{if(maxa[i]){max=a[i];t=i;}i++;}printf(MAX=%d,ADDRESS=%d,max,t);}4、以下程序通过指针操作,输入整数给数组并对数组进行3逆序输出。#includestdio.hmain(){inta[10],*p;for(p=a;pa+10;p++)scanf(%d,p);p=a+10;/*$ERROR1$*/for(;pa;p--)/*$ERROR2$*/printf(%d,p);/*$ERROR3$*/}5、随机输入10个数,选出其中的最大数。main(){inti,max,a[10];printf(input10number:\n);i=0;while(i=10)/*$ERROR1$*/{scanf(%d,a[i]);/*$ERROR2$*/i++;}max=a[0];for(i=1;i10;i++)if(a[i]a[0])/*$ERROR3$*/max=a[i];printf(maxnum=%d\n,max);}6、输出以下图形(*之间没有空格,每行第一个*前也没有4空格)****************main(){inti,j;i=1;/*$ERROR1$*/while(i4){j=0;while(ji)/*$ERROR2$*/{printf(*);j++;}printf(\n);i++;}i=3;while(i0){j=1;while(j=i){printf(*);j++;}printf(\n);i++;/*$ERROR3$*/5}}7、利用循环语句求:1/3-2/5+3/7-4/9+……+n/(2n-1)d的值。(本题求前50项之和)main(){inti=1;floats;s=0;while(i50)/*$ERROR1$*/{if(i%2==0)/*$ERROR2$*/s=s+1.0*i/(2*i+1);elses=s-1.0*i/(2*i+1);i++;}printf(S=%d,s);/*$ERROR3$*/}8、输出以下图形(输出数字之间无空格,每行第一个数字前也没有空格)123345456756789main()6{inti,j;i=1;while(i5)/*$ERROR1$*/{for(j=i;j2*i;j++)printf(%f,j);/*$ERROR2$*/printf(\n);i--;/*$ERROR3$*/}}9、利用循环语句求:(本题求前20项的和)S=1/(1*2*3)-1/(2*3*4)+1/(3*4*5)-……..+1/(19*20*21)-1/(20*21*22)main(){inti;floats;/*$ERROR1$*/i=1;while(i20)/*$ERROR2$*/{if(i%2==0)/*$ERROR3$*/s=s+1.0/(i*(i+1)*(i+2));elses=s-1.0/(i*(i+1)*(i+2));i++;}printf(%f\n,s);7}10、以下程序的功能是:定义mean函数求num个数的平均值,在主函数中调用mean函数求15个数的平均值,并输出结果。#includestdio.hfloatmean(intx,intnum)/*$ERROR1$*/{inti;floatavg;for(avg=0,i=0;inum;i++)avg+=x[i];avg%=num;/*$ERROR2$*/return(avg);}main(){inti,a[15];floatavg;for(i=0;i15;i++)a[i]=i+3;avg=mean(a[0],15);/*$ERROR3$*/printf(average:%6.2f\n,avg);}11、以下程序是定义长度为81的数组用于存放字符串,判断输入的字符串是否是“回文”(即顺读和倒读都一样,例如:ABCBA,首部和尾部的空格不参与比较。)#includestdio.h#includestring.h8main(){chars[81];/*$ERROR1$*/inti,j,n;scanf(%s,s);n=strlen(s);i=0;j=n-1;/*$ERROR2$*/while(s[i]=='')i++;while(s[j]=='')j--;while(ij&&s[i]==s[j])/*$ERROR3$*/{i++;j--;}if(ij)printf(No\n);elseprintf(Yes\n);}12、下面程序的功能是从主函数中输入一个正整数n,并通过调用fac函数,求得n的阶乘,在主函数中输出n!的值,请修改程序中的错误。#includestdio.hlongfac(intn){inti;longs;s=1;/*$ERROR1$*/i=1;while(i=n)/*$ERROR2$*/{s=s*i;i++;}9returns;}main(){intn;printf(Entern:);scanf(%d,&n);/*$ERROR3$*/printf(s=%ld\n,fac(n));}13、将数组中的数按从大到小排序后输出(输出时每个数占5列)main(){inta[10]={23,90,-45,60,100,62,78,-89,-50,0};inti,j,temp;for(i=0;i9;i++){for(j=0;j9-i;j++){if(a[j]a[j+1])/*$ERROR1$*/{temp=a[j];a[j]=a[j+1];a[j+1]=temp;/*$ERROR2$*/}}}for(i=0;i=9;i++)printf(%5d,a[i]);/*$ERROR3$*/10}14、不用strcat函数,将键盘输入的两个字符串连接起来形成一个新串(将第二个串连接到第一个串的后面)#includestdio.hmain(){chars1[60],s2[30];inti=0,j=0;printf(Entertwostring:\n);scanf(%s%s,s1,s2);/*$ERROR1$*/for(i=0;s1[i]!='\0';i++);/*$ERROR2$*/while(s2[j]='\0')/*$ERROR3$*/{s1[i]=s2[j];i++;j++;}s1[i]='\0';printf(\nNewstring:%s\n,s1);}15、以下程序判断输入的字符串是否是“回文”(即顺读和倒读都一样。例如:ABCBA,字符串首部和尾部的空格不参与比较)。#includestdio.h#includestring.hmain(){chars[81];inti,j,n;11gets(s);n=strlen(s);i=0;/*$ERROR1$*/j=n-1;while(s[i]=='')i++;while(s[j]=='')j--;while(ij&&s[i]==s[j])/*$ERROR2$*/{i++;j--;}if(Ij)/*$ERROR3$*/printf(No\n);elseprintf(Yes\n);}二、填空题1、下列程序输出200---300之间的全部素数的和,请填空。#includestdio.hmain(){inti,j,f,s;s=0;/*$BLANK1$*/for(i=201;i300;i+=2){f=1;for(j=2;jI-1;j++)if(i%j==0){f=0;12break;/*$BLANK2$*/}if(j=I-1)s+=i;/*$BLANK3$*/}printf(s=%d\n,s);}2、从键盘输入10个数存入数组a中,统计数组下标是奇数且数组元素值为偶数的元素个数。#includestdio.hmain(){inta[10],i,s;s=0;/*$BLANK1$*/for(i=0;I10;i++)/*$BLANK2$*/{scanf(%d,&a[i]);if(i%2==1&&a[i]%2==0)/*$BLANK3$*/s++;}printf(%d\n,s);}3、完善程序,使5*5数组的主对角线元素为1,其它元素为0。main(){intj,k,a[5][5];for(j=0;j5;j++)for(k=0;k5;k++)13{if(k==j)/*$BLANK1$*/a[j][k]=1;/*$BLANK2$*/elsea[j][k]=0;/*$BLANK3$*/}for(j=0;j5;j++){for(k=0;k5;k++)printf(%d,a[j][k]);printf(\n);}}4、以下程序输入一行字符(以回车结束输入),统计其中所有数字字符的个数。#includestdio.hmain(){charch;ints=0;ch=getchar();while(ch!=’\n’)/*$BLANK1$*/{if(ch='0'&&ch='9')/*$BLANK2$*/s++;ch=getchar();/*$BLANK3$*/}printf(%d\n,s);}145、以下程序中,主函数中调用colummin函数,实现在N行M列的二维数组中找出每一列上的最小值。#defineN3#defineM4voidcolummin(intx[N][M]){inti,j,p;for(j=0;jM;j++){p=0;for(i=1;iN;i++)if(x[p][j]x[i][j])p=i;/*$BLANK1$*/printf(Theminincolum%dis%d\n,j,x[p][j]);/*$BLANK2$*/}}main(){intx[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};colummin(x);/*$BLANK3$*/}6、下列程序实现从键盘接受3个数,输出最大数和最小数,完善程序。程序如下:#includestdio.hmain(){inta,b,c,*pmax,*pmin;15printf(inputthreenumbers:\n);scanf(%d%d%d,&a,&b,&c);if(ab){pmax=&a;pmin=&b;}else{pmax=&b;pmin=&a;}if(c*pmax)pmax=&c;/*$BLANK1$*/elseif(c*pmin)pmin=&c;/*$BLANK2$*
本文标题:历年C语言上机真题
链接地址:https://www.777doc.com/doc-2611961 .html