C语言程序改错题.docx
- 文档编号:26175808
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:23
- 大小:19.48KB
C语言程序改错题.docx
《C语言程序改错题.docx》由会员分享,可在线阅读,更多相关《C语言程序改错题.docx(23页珍藏版)》请在冰豆网上搜索。
C语言程序改错题
第1题【程序改错】
功能:
先将在字符串s中的字符按逆序存放到t串中,然后把s中的
字符按正序连接到t串的后面。
例如:
当s中的字符串为:
“ABCDE”时,则t中的字符串应为:
“EDCBAABCDE”。
------------------------------------------------------*/
#include
#include
#include
voidfun(char*s,char*t)
{
/**********FOUND**********/
inti;
sl=strlen(s);
for(i=0;i /**********FOUND**********/ t[i]=s[sl-i]; for(i=0;i t[sl+i]=s[i]; /**********FOUND**********/ t[2*sl]="0"; } main() { chars[100],t[100]; printf("\nPleaseenterstrings: ");scanf("%s",s); fun(s,t); printf("Theresultis: %s\n",t); } 答案: 1).inti,sl; 2).t[i]=s[sl-i-1]; 3).t[2*sl]='\0';或t[2*sl]=0; 第2题【程序改错】 功能: 求出以下分数序列的前n项之和。 和值通过函数值返回main 函数。 2/1+3/2+5/3+8/5+13/8+21/13…… 例如: 若n=5,则应输出: 8.391667。 ------------------------------------------------------*/ #include #include /**********FOUND**********/ fun(intn) { inta,b,c,k;doubles; s=0.0;a=2;b=1; for(k=1;k<=n;k++) { /**********FOUND**********/ s=(double)a/b; c=a; a=a+b; b=c; } /**********FOUND**********/ returnc; } main() { intn=5; printf("\nThevalueoffunctionis: %lf\n",fun(n)); } 答案: 1).doublefun(intn) 2).s=s+(double)a/b;或s+=(double)a/b;或s+=a/(double)b;或s=s+a/(double)b; 3).returns; 第3题【程序改错】 功能: 读入一个整数m(5≤m≤20),函数getarr调用函数rnd获 得m个随机整数,函数sortpb将这m个随机整数从小到大排序。 例如: 若输入整数7,则应输出: 3101728323647。 ------------------------------------------------------*/ #include"conio.h" #include sortpb(intn,int*a) { /**********FOUND**********/ inti,j,p,t for(j=0;j { p=j; for(i=j+1;i /**********FOUND**********/ if(a[p]>a[j])p=i; /**********FOUND**********/ if(p==j) { t=a[j]; a[j]=a[p]; a[p]=t; } } } doublernd() { statict=29,c=217,m=1024,r=0; r=(r*t+c)%m;return((double)r/m); } getarr(intn,int*x) { inti; for(i=1;i<=n;i++,x++)*x=(int)(50*rnd()); } putarr(intn,int*z) { inti; for(i=1;i<=n;i++,z++) { printf("%4d",*z); if(! (i%10))printf("\n"); } printf("\n"); } main() { intaa[20],n; printf("\nPleaseenteranintegernumberbetween5and20: "); scanf("%d",&n); getarr(n,aa); printf("\n\nBeforesorting%dnumbers: \n",n);putarr(n,aa); sortpb(n,aa); printf("\nAftersorting%dnumbers: \n",n);putarr(n,aa); } 答案: 1).inti,j,p,t; 2).if(a[p]>a[i])p=i; 3).if(p! =j) 第4题【程序改错】 -------------------------------------------------------- 功能: 以下程序能求出1*1+2*2+......+n*n<=1000中满足条件的 最大的n。 ------------------------------------------------------*/ #include #include"string.h" main() { intn,s; /**********FOUND**********/ s==n=0; /**********FOUND**********/ while(s>1000) { ++n; s+=n*n; } /**********FOUND**********/ printf("n=%d\n",&n-1); } 答案: 1).s=n=0; 2).while(s<=1000) 3).printf("n=%d\n",n-1); 第5题【程序改错】 -------------------------------------------------------- 功能: 求出a所指数组中最大数和次最大数(规定最大数和次最大 数不在a[0]和a[1]中),依次和a[0]、a[1]中的数对调。 例如: 数组中原有的数: 7、10、12、0、3、6、9、11、5、8, 输出的结果为: 12、11、7、0、3、6、9、10、5、8。 ------------------------------------------------------*/ #include #include #defineN20 voidfun(int*a,intn) { intk,m1,m2,max1,max2,t; max1=max2=-32768;m1=m2=0; for(k=0;k if(a[k]>max1) { max2=max1;m2=m1; max1=a[k];m1=k; } /**********FOUND**********/ elseif(a[k]>max1) { max2=a[k];m2=k;} /**********FOUND**********/ t=a[0]; a[m1]=a[0]; a[m1]=t; /**********FOUND**********/ t=a[1]; a[m2]=a[1]; a[m2]=t; } main() { intb[N]={7,10,12,0,3,6,9,11,5,8},n=10,i; for(i=0;i printf("%d",b[i]); printf("\n"); fun(b,n); for(i=0;i printf("%d",b[i]); printf("\n"); } 答案: 1).elseif(a[k]>max2) 2).t=a[0];a[0]=a[m1];a[m1]=t; 3).t=a[1];a[1]=a[m2];a[m2]=t; 第6题【程序改错】 -------------------------------------------------------- 功能: 读入一个整数k(2≤k≤10000),打印它的所有质因子(即 所有为素数的因子)。 例如: 若输入整数: 2310,则应输出: 2、3、5、7、11。 请改正程序中的语法错误,使程序能得出正确的结果。 ------------------------------------------------------*/ #include"conio.h" #include /**********FOUND**********/ isPrime(integern) { inti,m; m=1; for(i=2;i /**********FOUND**********/ if(n%i) { m=0; break; } /**********FOUND**********/ returnn; } main() { intj,k; printf("\nPleaseenteranintegernumberbetween2and10000: "); scanf("%d",&k); printf("\n\nTheprimefactor(s)of%dis(are): ",k); for(j=2;j<=k;j++) if((! (k%j))&&(IsPrime(j)))printf("\n%4d",j); printf("\n"); } 答案: 1).IsPrime(intn) 2).if(! (n%i)) 3).returnm; 第7题【程序改错】 -------------------------------------------------------- 功能: 为一维数组输入10个整数;将其中最小的数与第一个数 对换,将最大的数与最后一个数对换,输出数组元素。 ------------------------------------------------------*/ #include main() { inta[10]; voidinput(); voidoutput(); voidmax_min(); input(a,10); max_min(a,10); output(a,10); } voidinput(int*arr,intn) { int*p,i; p=arr; printf("pleaseenter10integers: \n"); for(i=0;i /**********FOUND**********/ scanf("%d",p); } voidmax_min(int*arr,intn) { int*min,*max,*p,t; min=max=arr; for(p=arr+1;p /**********FOUND**********/ if(*p<*max) max=p; elseif(*p<*min)min=p; t=*arr;*arr=*min;*min=t; /**********FOUND**********/ if(max=arr)max=min; t=*(arr+n-1); *(arr+n-1)=*max; *max=t; } voidoutput(int*arr,intn) { int*p,i; p=arr; printf("Thechangedarrayis: \n"); /**********FOUND**********/ while(i=0;i printf("%3d",*p++); printf("\n"); } 答案: 1).scanf("%d",p++);或scanf("%d",arr[i]);或scanf("%d",p+i);或scanf("%d",arr+i); 2).if(*p>*max)或if(*max<*p) 3).if(max==arr) 4).for(i=0;i 第8题【程序改错】 -------------------------------------------------------- 功能: 求出在字符串中最后一次出现的子字符串的地址,通过函 数值返回,在主函数中输出从此地址开始的字符串;若未 找到,则函数值为NULL。 例如: 当字符串中的内容为: "abcdabfabcdx",t中的内容为: "ab"时,输出结果应是: abcdx。 当字符串中的内容为: "abcdabfabcdx",t中的内容为: "abd"时,则程序输出 未找到信息: notfound! 。 ------------------------------------------------------*/ #include #include #include char*fun(char*s,char*t) { char*p,*r,*a; /**********FOUND**********/ a==NULL; while(*s) { p=s; r=t; while(*r) /**********FOUND**********/ if(r==p) { r++; p++; } else break; /**********FOUND**********/ if(*r='\0')a=s; s++; } returna; } main() { chars[100],t[100],*p; printf("\nPleaseenterstringS: ");scanf("%s",s); printf("\nPleaseentersubstringt: ");scanf("%s",t); p=fun(s,t); if(p) printf("\nTheresultis: %s\n",p); else printf("\nNotfound! \n"); } 答案: 1).a=NULL; 2).if(*r==*p) 3).if(*r=='\0')a=s; 第9题【程序改错】 -------------------------------------------------------- 功能: 从m个学生的成绩中统计出高于和等于平均分的学生人数, 此人数由函数值返回。 平均分通过形参传回,输入学生成 绩时,用-1结束输入,由程序自动统计学生人数。 例如: 若输入8名学生的成绩,输入形式如下: 80.5607290.59851.58864-1 结果为: Thenumberofstudents: 4 Ave=75.56。 ------------------------------------------------------*/ #include #include #defineN20 intfun(float*s,intn,float*aver) { floatav,t;intcount,i; count=0;t=0.0; for(i=0;i av=t/n;printf("ave=%f\n",av); for(i=0;i /**********FOUND**********/ if(s[i] /**********FOUND**********/ aver=av; /**********FOUND**********/ returncount } main() { floata,s[30],aver; intm=0; printf("\nPleaseentermarks(-1toend): \n"); scanf("%f",&a); while(a>0) { s[m]=a; m++; scanf("%f",&a); } printf("\nThenumberofstudents: %d\n",fun(s,m,&aver)); printf("Ave=%6.2f\n",aver); } 答案: 1).if(s[i]>=av)count++; 2).*aver=av; 3).returncount; 第10题 【程序改错】 -------------------------------------------------------- 功能: 根据以下公式求π值,并作为函数值返回。 例如: 给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。 π1121231234 —=1+—+—x—+—x—x—+—x—x—x—+... 23353573579 ------------------------------------------------------*/ #include doublefun(doubleeps) { doubles,t; intn=1; s=0.0; t=1; /**********FOUND**********/ while(t<=eps) { s+=t; /**********FOUND**********/ t=n/(2*n+1)*t; n++; } /**********FOUND**********/ returns; } main() { doublex; scanf("%lf",&x); printf("\neps=%lf,Pi=%lf\n\n",x,fun(x)); } 答案: 1).while(t>eps)或while(eps 2).t=t*n/(2*n+1);或t=1.0*n/(2*n+1)*t;或t=n/(2*n+1.0)*t;或t=n/(2.0*n+1)*t;或t=n/(2.0*n+1.0)*t;或t=1.0*n/(2.0*n+1.0)*t; 3).return2*s;或return(2*s);或return(2*s);或return(s*2);或return(s*2); 第11题【程序改错】 -------------------------------------------------------- 功能: 实现两个字符串的连接。 例如: 输入dfdfqe和12345时,则输出dfdfqe12345. ------------------------------------------------------*/ #include main() { chars1[80],s2[80]; voidscat(chars1[],chars2[]); gets(s1); gets(s2); scat(s1,s2); puts(s1); } voidscat(chars1[],chars2[]) { inti=0,j=0; /**********FOUND**********/ while(s1[i]=='\0') i++; /**********FOUND**********/ while(s2[j]=='\0') { /**********FOUND**********/ s2[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 改错
![提示](https://static.bdocx.com/images/bang_tan.gif)