C语言上机题.docx
- 文档编号:7477958
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:77
- 大小:32.42KB
C语言上机题.docx
《C语言上机题.docx》由会员分享,可在线阅读,更多相关《C语言上机题.docx(77页珍藏版)》请在冰豆网上搜索。
C语言上机题
全省2级C
程序改错题:
gc101.c的功能为:
输入8个整数,使用指针以选择法对其进行排序(从小到大).程序中有三处错误代码,请改正.注意,不得改变程序结构。
#include
main()
{
inta[8],*p=a;
inti,j;
inttempmin,tempcode;
printf("\ninputthenumbers:
\n");
for(i=0;i<8;i++)
scanf("%d",p+i);
tempmin=*p;
for(i=0;i<7;i++)
{
for(j=i;j<8;j++)
if(j==i||*(p+j) {tempmin=*(p+i); tempcode=j; }; if(tempcode! =i) {*(p+tempcode)=*(p+i); *(p+j)=tempcode; } } for(i=0;i<8;i++) printf("%d,",(p+i)); return (1); } 改正后 #include main() { inta[8],*p=a; inti,j; inttempmin,tempcode; printf("\ninputthenumbers: \n"); for(i=0;i<8;i++) scanf("%d",p+i); tempmin=*p; for(i=0;i<7;i++) { for(j=i;j<8;j++) if(*(p+j) {tempmin=*(p+j); tempcode=j; }; if(tempcode! =i) {*(p+tempcode)=*(p+i); *(p+j)=tempcode; } } for(i=0;i<8;i++) printf("%d,",*(p+i)); }第二题 试题一、程序改错题: gc56.c程序用于将字符串中的小写字母转换为大写字母,程序中有两处错误,请调试改正 之,但不得增删语句.(20分) #include voidmain(void) { chars[255]; scanf("%s",s); inti; for(i=0;s[i];i++) if(s[i]>='b'&&s[i]<='z') s[i]=s[i]+'a'+'A'; printf("%s",s); } 试题二、程序填空题 tk56.c程序用于计算4×5的整型数组中最大元素所在行和列的位置。 下面程序不完整, 请将其补充完整,以便得到正确答案。 (20分) #include voidmain(void) { inta[4][5]={{4,8,9,10,12}, {2,5,13,17,11}, {81,76,34,57,33}, {1,90,3,78,55}}; intmax,max_row,max_col; inti,j; max=___________; max_row=0; max_col=0; for(i=0;i<4;i++) for(j=0;j<5;j++) if(____________) { max=a[i][j]; max_row=i; max_col=j; } printf("%d%d",max_row,max_col); } #include voidmain(void) { chars[255]; inti; scanf("%s",s); for(i=0;s[i];i++) if(s[i]>='b'&&s[i]<='z') s[i]=s[i]+'a'+'A'; printf("%s",s); } 改正后 #include voidmain(void) { chars[255]; inti; scanf("%s",s); for(i=0;s[i];i++) if(s[i]>='a'&&s[i]<='z') s[i]=s[i]-'a'+'A'; printf("%s",s); } 第三题 1.程序填空题 tk57.c用来输出两整数M和N之间的所有素数(质数)。 所谓一个整数n为素数,是指n除了能被1和其本身n除尽 外,不能被2到n-1中的任何整数除尽。 如7为素数,而9不是素数。 程序中,外循环变量i用于控制整数选择范围,内循环变量j用于判断某整数i是否为素数,若是, 则输出该素数,且通过变量s来控制每行输出5个素数。 #defineM4 #defineN30 main() { inti,j,k,s=0; for(i=M;i<=________;i++) {for(j=2;j<_______;j++) if(i%j==0)break; if(j>=i) {printf("%5d",i); s=s+1; if(s%5==0)printf("\n"); } } printf("\n"); } 2.程序改错题 gc57.c的功能是互换给定数组中的最大数和最小数。 如将下面8个数: 5,3,1,4,2,8,9,6 变成: 5,3,9,4,2,8,1,6 程序中,最大数与最小数的互换操作通过函数调用来实现,让指针max和min分别指向最大数和最小数。 在**********之间有二处错误,请改正。 注意: 不得增行和删行,也不得修改程序的结构。 main() { inti; staticinta[8]={5,3,1,4,2,8,9,6}; voidjhmaxmin(); printf("Originalarray: \n"); for(i=0;i<8;i++) printf("%5d",a[i]); printf("\n"); jhmaxmin(a,8); printf("Arrayafterswapingmaxandmin: \n"); for(i=0;i<8;i++) printf("%5d",a[i]); printf("\n"); } voidjhmaxmin(p,n) *************************** intp,n; { intt,*max,*min,*end,*q; end=p+n; max=min=p; for(q=p+1;q {if(*q>*max)max=q; if(*q } ************************** t=*max;*max=*min;*min=t; } 原题 main() { inti; staticinta[8]={5,3,1,4,2,8,9,6}; voidjhmaxmin(); printf("Originalarray: \n"); for(i=0;i<8;i++) printf("%5d",a[i]); printf("\n"); jhmaxmin(a,8); printf("Arrayafterswapingmaxandmin: \n"); for(i=0;i<8;i++) printf("%5d",a[i]); printf("\n"); } voidjhmaxmin(p,n) intp,n; { intt,*max,*min,*end,*q; end=p+n; max=min=p; for(q=p+1;q {if(*q>*max)max=q; if(*q } t=*max;*max=*min;*min=t; } 改后 1.程序改错题 gc166.c程序的功能是: 计算并输出从键盘输入的任一正整数的各位数字之和s以及各位数字之积t。 例如,当输入的正整数为237时, s的值为12,t的值为42。 请改正程序中的两个错误,使它能得出正确的结果。 注意: 不得增行或删行,也不得修改程序的 结构。 原题 #include"stdio.h" main() { intn,yw,s=0,t=0; scanf("%d",&n); while(n! =0) { yw=n%10; s=s+yw; t=t*yw; n=n%10; } printf("s=%d,t=%d\n",s,t); } 改后 #include"stdio.h" main() { intn,yw,s=0,t=1; scanf("%d",&n); while(n! =0) { yw=n%10; s=s+yw; t=t*yw; n=n/10; } printf("s=%d,t=%d\n",s,t); } 第五题 程序改错 gc171.c的功能是实现求1000以内的自然数中的完数及其个数(所谓完数,指它恰好等于除它本身之外的因子之和,如: 6=1+2+3,28=1+2+4+7+14),并显示结果。 但该程序中有3处错误,请调试并改正。 不允许改变程序结构和增删语句。 原题 #include voidmain(void) { inti,k,m,n,s,p; inta[100]; printf("\n10000以内的自然数中的完数有: "); for(i=2;i<=10000;i++) {s=0; m=0; for(k=1;k<=i/2;k++) {if(i%k==0) {s=s+k; a[m]=k; m=m+1; } } if(s=i) {p=p-1; printf("\n%d=%d",s,a[0]); n=1; while(n {printf("+%d",a[n]);n=n+1;} } } printf("\n总个数为: %d\n",p); } 改正后 #include voidmain(void) { inti,k,m,n,s,p; inta[100]; printf("\n10000以内的自然数中的完数有: "); for(i=2;i<=10000;i++) {s=0; m=0; for(k=1;k<=i/2;k++) {if(i%k==0) {s=s+k; a[m]=k; m=m+1; } } if(s==i) {p=p-1; printf("\n%d=%d",s,a[i]); n=1; while(n {printf("+%d",a[n]);n=n+1;} } } printf("\n总个数为: %d\n",p); } 第六题 2.程序改错题 gc227.c中函数fun的功能是: 使输入的一个字符串按反序存放,并在主函数中输出。 请改正函数fun中的错误,使它能得出正确的结果。 注意: 不得改动main函数,不得增行或删行,也不得更改程序的结构! 原题 #include #include main() {charstr[100]; printf("Inputstring: "); scanf("%s",str); fun(str); printf("Theresult: %s\n",str); } fun(str) charstr[]; {chart; inti,j; for(i=0,j=strlen(str);i {t=str[i];str[i]=str[j-1];str[j+1]=t;} } 改正后 #include #include main() {charstr[100]; printf("Inputstring: "); scanf("%s",str); fun(str); printf("Theresult: %s\n",str); } fun(charstr[]) {chart; inti,j; for(i=0,j=strlen(str);i {t=str[i];str[i]=str[j-1];str[j-1]=t;} } 第七题 改错题 gc279.c的功能: 函数prn_star(m,left)输出正菱形图案,其中参数m代表图案的行数(为一奇数),left代表图案距屏幕左边的列数。 函数prt_str(m,left)中有3处错误代码,请指出并改正之。 原题 #include voidprn_star(m,left) intm,left; {inti,j,p; for(i=1;i {if(i<=m)p=i; elsep=m+1+i; for(j=1;j<=left+(m-(2*p-1))/2;j++) printf(""); for(j=1;j<=2*p-1;j++) printf("o"); printf("\n"); } } main() {intm,left; printf("请输入正菱形图案的行数: "); scanf("%d",&m); printf("请输入正菱形图案距屏幕左边的列数: "); scanf("%d",&left); prn_star(m,left); } 改正后 #include voidprn_star(intm,intleft) {inti,j,p; for(i=1;i<=m;i++) {if(i<=m)p=i; elsep=m+1+i; for(j=1;j<=left+abs((m-(2*p-1))/2);j++) printf(""); for(j=1;j<=2*p-1;j++) printf("o"); printf("\n"); } } main() {intm,left; printf("请输入正菱形图案的行数: "); scanf("%d",&m); printf("请输入正菱形图案距屏幕左边的列数: "); scanf("%d",&left); prn_star(m,left); } 第十题 程序改错题: gc280.c功能为: M个人围成一圈,从第一个人开始依次从1至N循环报数,每当报数为N时,此人出圈,直到圈中只剩下一个人为止。 请按退出次序输出出圈人原来的编号以及留在圈中的最后一个人原来的编号。 程序中有3处错误代码,请指出并改正之。 原题 #include #defineM10/*numberofperson*/ #defineN2/*eliminateapersonforNcompartment*/ voidmain(){ inti,j,k,n; statica[M]; intb[M]; /*eliminatepersonsfromarrayatoarrayb*/ for(n=0,j=k=M-1;n for(i=0;i while (1){ if(++j>k) j=0; if(! a[j]) continue; } b[n]=j-1; a[j]=-1; } /*output*/ for(i=0;i printf("%d",b[i]); for(i=0;i if(! a[i]) printf("%d\n",i+1); }_ 改正后 #include #defineM10/*numberofperson*/ #defineN2/*eliminateapersonforNcompartment*/ voidmain(){ inti,j,k,n; statica[M]; intb[M]; /*eliminatepersonsfromarrayatoarrayb*/ for(n=0,j=k=M-1;n { for(i=0;i while (1) { if(++j>k) j=0; if(! a[j]) break; } b[n]=j-1; a[j]=-1; } /*output*/ for(i=0;i printf("%d",b[i]); for(i=0;i if(! a[i]) printf("%d\n",i+1); }_ 第十一题 1.程序改错题(20分)。 gc304.c中的函数fun()的功能是: 先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。 例如: 当s中的字符串为: "abc12"时,则t中的字符串应为: "abc1221cba"。 现在程序中发现有两个错误,错误就出现在那些注释行的附近,请你找出错误并将它们改正过来,要求在调试过程中不允许改变程序结构,更不得增删语句。 原题 #include #include voidfun(char*s,char*t) { inti,st; st=strlen(s); /*..............commentone..............*/ for(i=0;i t[st]=s[i]; for(i=0;i t[st+i]=s[st-i-1]; /*..............commenttwo..............*/ t[st]='\0'; } voidmain() { chars[100],t[100]; printf("\nPleaseenterstrings: "); gets(s); fun(s,t); printf("Theresultis: %s\n",t); } 改正后 #include #include voidfun(char*s,char*t) { inti,st; st=strlen(s); /*..............commentone..............*/ for(i=0;i t[i]=s[i]; for(i=0;i t[st+i]=s[st-i-1]; /*..............commenttwo..............*/ t[st+i]='\0'; } voidmain() { chars[100],t[100]; printf("\nPleaseenterstrings: "); gets(s); fun(s,t); printf("Theresultis: %s\n",t); } 第十二题 2.程序改错题 gc342.c的功能是: 计算字符串中子串出现的次数 请改正程序中的两个错误,使程序能输出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! 原题 #include"string.h" #include"stdio.h" main() {charstr1[20],str2[20],*p1,*p2; intsum=0; printf("pleaseinputtwostrings\n"); scanf("%s%s",str1,str2); p1=str1;p2=str2; while(*p1! ='\0') { if(*p1==*p2) {while(*p1==*p2||*p2! ='\0') {p1++; p2++;} } else p2++; if(*p2=='\0') sum++; p2=str2; } printf("%d\n",sum); getch(); } 改正后 #include"string.h" #include"stdio.h" main() {charstr1[20],str2[20],*p1,*p2; intsum=0; printf("pleaseinputtwostrings\n"); scanf("%s%s",str1,str2); p1=str1;p2=str2; while(*p1! ='\0') { if(*p1==*p2) {while(*p1==*p2&&*p2! ='\0') {p1++; p2++;} } else p1++; if(*p2=='\0') sum++; p2=str2; } printf("%d\n",sum); getch(); } 第十三题 2、程序改错题 gc367.c通过接受键盘输入的月数量,再根据当前的月份,可以计算出某一年的月份。 例如,当前的月份是10,加输入的月数量5,月份是3;加输入的月数量–13,月份是9。 程序中输出的月份以英文字符显示。 CURRENT为当前月份。 程序有两处错误,请找出并修正,使之符合上述要求。 不得增加行或删除行,也不得更改程序结构。 原题 #defineCURRENT11 #include main() { intmonth,monthnum; char*ch; char*month_name(int); p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机
![提示](https://static.bdocx.com/images/bang_tan.gif)