C改错题例题_c改错练习题

2020-02-27 其他范文 下载本文

C改错题例题由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c改错练习题”。

类型A:素数

A1、下面的程序是求400以内的所有的素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。#include #include #include int prime(int n){ int yes, i;

if(n

yes=1;

/*原来的代码:

for(i=2;i

if(n%i==0){ yes=0;break;}

return yes;} main(){ int sum=0, i;

clrscr();

for(i=2;i

if(prime(i))sum+=i;

printf(“%dn”, sum);}

yes=0 */ /*原来的代码: yes=1 */

A2、下面的程序是求1000以内的最大的20个素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。18580 #include #include #include int fun(int high){ int sum=0, n=0, j, yes;

while((high>=2)&&(n

/*原来的代码: while((high>=2)||(n

{yes=1;

for(j=2;j

if(high%j==0)

{ yes=0;break;}

/*原来的代码: yes=0;break;忘了大括号 */

if(yes){sum+=high;n++;}

high--;

}

return sum;}

main(){ clrscr();

printf(“%d n”,fun(1000));}

类型B:完数,多因子完备数

B1、若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。例如,28是多因子完备数。因为:1+2+4+7+14+28=56=28*2,下面程序求[150,1000]间有多少个多因子完备数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。#include #include #include main(){ int a,b,c,n,count=0;

/*原来的代码: b=0 写在此行,应该把它移到循环内.*/ for(a=150;a

{

b=0;

/*原来的代码: 移后的新位置

*/ for(c=1;c

if(a%c ==0)

b=b+c;

if(b%a==0)

{

count=count+1;

}

}

printf(“n count = %d”,count);

}

B2、若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。例如,28是多因子完备数。因为:1+2+4+7+14+28=56=28*2,下面程序求[1,700]间最大的多因子完备数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。#include #include #include main(){ int a,b,c,n,big,count=0;

for(a=1;a

{

b=0;

for(c=1;c

/*原来的代码: c=2 */

if(a%c ==0)

b=b+c;

if(b%a==0)

{

big=a;

/*原来的代码: big=b */

}

}

printf(“%dn ”,big);

}

B3、以下程序求10000以内的所有完全数的个数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。”完全数”是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完全数。#include #include #include main(){

int count,n,m,s,k;count=0;for(n=3;n

s=0;

/*原来的代码: s=1 */

}

k=n/2+1;

for(m=1;m

} printf(“nThe count=%d”,count);if(n%m==0)s+=m;

/*原来的代码: s+=1 */ if(s==n){

count+=1;} 类型C:数字问题

C1、下面程序是求[10,650]之间同时满足除4余3或除5余4条件的数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。84544 #include #include #include main(){ long sum;/*原来的代码: int sum;*/ int i;sum=0;for(i=10;i

if(fmod(i,4)==3 || fmod(i,5)==4)

sum+=i;}

clrscr();printf(“%ldn”,sum);}

C2、下面程序是求[2,60]之间的所有偶数的立方和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。1729800 #include #include #include main(){ long sum;long i;/*原来的代码: int i */ sum=0;for(i=2;i

if(fmod(i,2)==0)

sum+=i*i*i;

/*原来的代码: sum+=i*3 */ }

clrscr();}

C3、下例程序中,函数fun的功能是:计算并输出k以内的最大的10个能被13和17整除的自然数之和。请改正程序中的错误,并运行正确的程序。当从键盘输入2500时,给出程序运行的正确结果 14365 #include #include int fun(int k){ int m=0, mc=0, j;while((k>=2)&& mc

{ m=m+k;mc++;}

k--;} return m;

/*原来的代码:return;*/ } printf(“%ldn”,sum);main(){ int k;

clrscr();

printf(“n 请输入整数:”);

scanf(“%d”, &k);

printf(“n 结果是: %dn”,fun(k));}

类型D:数列

D1、下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。T=1/1!+1/2!+1/3!+......+1/m!请改正程序中的错误,并运行改正后的程序。当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。#include #include double fun(int m){ double fac, t=0.0;int i=1, j;for(i=1;i

for(j=1;j

/*原来的代码: for(j=1;j

t+=1.0/fac;} return t;} main(){ int m;clrscr();printf(“n 请输入整数: ”);scanf(“%d”, &m);printf(“n 结果是: %12.10lf n”,fun(m));}

D2、下面的程序是计算:s=f(-30)+f(-29)+......+f(-1)+f(0)+f(1)+......+f(30)的值。其中函数定义如下:

f(x)=(x+1)/(x-2)if x>1

f(x)=0

if x=0 or x=2 f(x)=(x-1)/(x-2)

if x #include #include double f(double x){ if(x==0 || x==2)

/*原来的代码: && */

return 0.0;

else if(x

return(x-1)/(x-2);

else

return(x+1)/(x-2);}

double fsum(int n){ int i;double s=0.0, y;

for(i=-n;i

{y=f(1.0*i);s+=y;}

return s;/*原来的代码: return y;} main(){ clrscr();printf(“%lfn”, fsum(30));}

D3、已知fibonacci数列:1,1,2,*/ 3,5,......,它可由下面公式表述: 8 F(1)=1

if n=1 F(2)= 1

if n=2 F(n)=F(n-1)+F(n-2)

if n>2

以下程序是求F(30),请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。832040 #include #include main(){ double f1,f2;

int i;

f1=1;f2=1;

for(i=1;i

/*原来的代码: i

{

f1=f1+f2;

f2=f2+f1;

}

clrscr();

printf(“n the number is :%12.0lf”,f2);

/*原来的代码: f1 */ }

D4、下面的程序是求表达式的值:

s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+......+(1*2*3*....*n)/(3*5*7*.....(2*n+1))请修改程序中的错误,并运行修改后的程序。当n=30时,程序的运行结果(保留10位小数)。1.5707963267 #include #include #include double fun(int n){ double s, t;int i;

s=1.0;t=1.0;

for(i=1;i

{ t=t*i/(2*i+1);

/*原来的代码: t=t*n/(2*n+1);*/

s+=t;

/*原来的代码: s=t */

}

return s;} main(){printf(“n %12.10lf”, fun(30));}

D5、下面的程序是求如下表达式的值。S=sqrt(ln(1)+ln(2)+ln(3)+……+ln(n))请改正程序中的错误,并运行修改后的程序,当n=50时,给出程序运行结果(保留6位小数)。12.185145 #include #include #include double fun(int n)

/*原来的代码: int fun(int n)*/ { double s=0;int i;/*原来的代码: int s=0;*/ for(i=1;i

s+=log(1.0*i);

s=sqrt(s);

return s;} main(){clrscr();printf(“%lfn”,fun(50));}

D6、下列程序的功能是求出以下分数序列的前35之和,2/1,3/2,5/3,8/5,13/8,21/13,......请改正程序中的错误,并运行修改后程序,给出程序结果(保留6位小数)。56.930771 #include #include main(){ long a,b,c,k;

double s;

clrscr();

s=0.0;a=2;b=1;

for(k=1;k

{ s=s+(double)a/b;/*原来的代码:(Double)a/b */

c=a;a=a+b;b=c;

/*原来的三条交换语句写错了:a=a+b;c=a;b=c;*/

}

printf(“n 结果: %lfn”, s);}

D7、下列程序的功能是求出以下分数序列的前25之和,2/1,3/2,5/3,8/5,13/8,21/13,......请改正程序中的错误,并运行修改后程序,给出程序结果(保留6位小数)。40.750431 #include #include double fun(int n)

/*原来的代码: fun(n)*/ { long a,b,c;

int k;double s;

s=0.0;a=2;b=1;

for(k=1;k

{ s=s+(double)a/b;

c=a;a=a+b;b=c;

}

return s;} main(){ int n=25;

clrscr();

printf(“n result: %lfn”,fun(n));}

类型E:同构数

E1下面程序求[1,600]之间最大的同构数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。同构数是:一自然数平方的末几位与该数相同时,称此数为自构数,例如:5*5=25,则称5为自同构数。376 #include #include #include main(){ long n,m,s,k,big;

for(n=3;n

{

if(n

else

if(n

else k=1000;

s=n*n;

s=s-n;

if(s%k==0)

{

big=n;

/*原来的代码: big=s */

}

}

printf(“n The biggest = %ld”,big);/*原来的代码: %d */ }

《C改错题例题.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
C改错题例题
点击下载文档
相关专题 c改错练习题 例题 改错题 c改错练习题 例题 改错题
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文