C语言程序改错题.docx
《C语言程序改错题.docx》由会员分享,可在线阅读,更多相关《C语言程序改错题.docx(16页珍藏版)》请在冰豆网上搜索。
C语言程序改错题
第1题【程序改错】
s中的
功能:
先将在字符串s中的字符按逆序存放到t串中,然后把字符按正序连接到t串的后面。
例如:
当s中的字符串为:
“ABCDE时,贝Ut中的字符串应为:
“EDCBAABCDE。
*/#include
#include
#include
voidfun(char*s,char*t){
inti;
sl=strlen(s);
for(i=0;it[i]=s[sl-i];for(i=0;it[sl+i]=s[i];
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;
main
第2题【程序改错】功能:
求出以下分数序列的前n项之和。
和值通过函数值返回函数。
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++){
s=(double)a/b;
c=a;
a=a+b;b=c;
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例如:
若输入整数7,则应输出:
3101728323647。
*/#include"conio.h"
#include
sortpb(intn,int*a)
inti,j,p,t
for(j=0;j{
p=j;
for(i=j+1;iif(a[p]>a[j])p=i;
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;
while(s>1000)
{
++n;
s+=n*n;
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
#defineN20voidfun(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;}
elseif(a[k]>max1){
max2=a[k];m2=k;}
t=a[0];a[m1]=a[0];
a[m1]=t;
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("\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例如:
若输入整数:
2310,则应输出:
2、3、5、7、11。
请改正程序中的语法错误,使程序能得出正确的结果。
*/#include"conio.h"
#include
isPrime(integern){
inti,m;
m=1;
for(i=2;iif(n%i){
m=0;break;
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;iscanf("%d",p);
}
voidmax_min(int*arr,intn){
int*min,*max,*p,t;min=max=arr;
for(p=arr+1;pif(*p<*max)
max=p;
elseif(*p<*min)min=p;t=*arr;*arr=*min;*min=t;
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");
第8题【程序改错】
功能:
求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
例如:
当字符串中的内容为:
"abcdabfabcdx",t中的内容为:
"ab"时,输出结果应是:
abcdx。
当字符串中的内容为:
"abcdabfabcdx",t中的内容为:
"abd"时,则程序输出
未找到信息:
notfound!
。
*/#include
#include
#includechar*fun(char*s,char*t){
char*p,*r,*a;
a==NULL;while(*s)
{
p=s;r=t;
while(*r)
if(r==p)
r++;
p++;}else
break;
i