C语言程序改错题.docx
《C语言程序改错题.docx》由会员分享,可在线阅读,更多相关《C语言程序改错题.docx(22页珍藏版)》请在冰豆网上搜索。
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;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
#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;kif(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;iprintf("%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).IsPri