C语言程序改错题范本模板.docx
《C语言程序改错题范本模板.docx》由会员分享,可在线阅读,更多相关《C语言程序改错题范本模板.docx(21页珍藏版)》请在冰豆网上搜索。
C语言程序改错题范本模板
第1题【程序改错】
功能:
先将在字符串s中的字符按逆序存放到t串中,然后把s中的
字符按正序连接到t串的后面.
例如:
当s中的字符串为:
“ABCDE”时,则t中的字符串应为:
“EDCBAABCDE”。
—-——----—--—--—---———---——--——--——---———-—-——---—---—-*/
#includeh〉
#include〈stdio。
h〉
#includeh>
voidfun(char*s,char*t)
{
/**********FOUND**********/
inti;
sl=strlen(s);
for(i=0;i/**********FOUND**********/
t[i]=s[sl-i];
for(i=0;it[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〈conio.h〉
#include〈stdio。
h>
/**********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〈stdio。
h>
sortpb(intn,int*a)
{
/**********FOUND**********/
inti,j,p,t
for(j=0;j{
p=j;
for(i=j+1;i〈n;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〈stdio。
h>
#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。
-——-—-——-—-—-—-———-—-———-----——--—-——-----—-——-——————-*/
#includeh〉
#include〈stdio。
h>
#defineN20
voidfun(int*a,intn)
{
intk,m1,m2,max1,max2,t;
max1=max2=—32768;m1=m2=0;
for(k=0;k〈n;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;iprintf("%d",b[i]);
printf(”\n");
fun(b,n);
for(i=0;i〈n;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个整数;将其中最小的数与第一个数
对换,将最大的数与最后一个数对换,输出数组元素。
-——-----————---—-———-——--———----—---————————-——-—--———*/
#includemain()
{
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〈n;i++)
/**********FOUND**********/
scanf("%d”,p);
}
voidmax_min(int*arr,intn)
{
int*min,*max,*p,t;
min=max=arr;
for(p=arr+1;p〈arr+n;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〈n;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〈n;i++)或for(i=0;n>i;i++)或for(p=arr;p〈arr+n;)或for(i=0;i〈=n—1;i++)或for(i=0;n-1〉=i;i++)或for(p=arr;p<=arr+n—1;)或for(p=arr;arr+n-1〉=p;)
第8题【程序改错】
——--——--—--—---—-———--—————--—-—-——-——--——-—-—-—--———---
功能:
求出在字符串中最后一次出现的子字符串的地址,通过函
数值返回,在主函数中输出从此地址开始的字符串;若未
找到,则函数值为NULL.
例如:
当字符串中的内容为:
"abcdabfabcdx",t中的内容为:
”ab”时,输出结果应是:
abcdx.当字符串中的内容为:
"abcdabfabcdx",t中的内容为:
”abd”时,则程序输出
未找到信息:
notfound!
。
---———---——--——-——-———-—————-—-—---—-——-——-—----—-——--*/
#include〈conio.h>
#include#includechar*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#includeh>
#defineN20
intfun(float*s,intn,float*aver)
{
floatav,t;intcount,i;
count=0;t=0。
0;
for(i=0;i〈n;i++)t+=s[i];
av=t/n;printf("ave=%f\n”,av);
for(i=0;i〈n;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〈stdio.h〉
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〈t)或while(t〉=eps)或while(eps〈=t)或while(t〉eps)或while(eps〈t)或while(t>=eps)或while(eps〈=t)
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。
--—-—-———--——---—-—-——-———-———-—--—-—-—------—-----—-—*/
#includeh>
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**********/