C语言改错复习题.doc

上传人:飞****2 文档编号:52735994 上传时间:2022-10-23 格式:DOC 页数:14 大小:47KB
返回 下载 相关 举报
C语言改错复习题.doc_第1页
第1页 / 共14页
C语言改错复习题.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《C语言改错复习题.doc》由会员分享,可在线阅读,更多相关《C语言改错复习题.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、6)/*- 【程序改错】-功能:求如下表达式: 1 1 1 S = 1 + + + . + 1+2 1+2+3 1+2+3+.+n -*/#include main() int n; float fun(); printf(Please input a number:); /*FOUND*/ print(%d,n) ; printf(%10.6fn,fun(n);/*FOUND*/fun(int n) int i,j,t; float s; s=0;/*FOUND*/ while(i=1;i=n;i+); t=0; for(j=1;j=i;j+) t=t+j; /*FOUND*/ =s+1/t

2、; return s;答案:【1】 scanf(%d,&n);【2】 float fun(int n)【3】 for(i=1;i=i;i+) 或 for(i=1;ii;i+)【4】 s+=1.0/t; 或 s= s + 1.0 /(float)t; 或 s= s + 1.0 /t; 或 s+=1.0/(float)t;11)/*- 【程序改错】-功能:判断m是否为素数,若是返回1,否则返回0。-*/#includemain() int m,k=0; for(m=1;m100;m+) if(fun(m)=1) printf(%4d,m);k+; if(k%5=0) printf(n); /*FO

3、UND*/void fun( int n) int i,k=1; if(m=1) k=0; /*FOUND*/ for(i=1;im;i+) /*FOUND*/ if(m%i=0) k=0; /*FOUND*/ return m;答案:【1】 int fun( int m) 或 fun( int m)【2】 for(i=2;ii;i+) 或 for(i=2;ii;i+)【3】 if( m%i = 0 ) k=0;【4】 return k;12)/*- 【程序改错】-功能:用下面的和式求圆周率的近似值。直到最后一项的绝对值 小于等于0.0001。 1 1 1 = 1 - + - + . 4 3

4、5 7-*/*FOUND*/#include stdio.hfun() int i=1; /*FOUND*/ int s=0,t=1,p=1; /*FOUND*/ while(fabs(t)=1e-4) s=s+t; p=-p; i=i+2; t=p/i; /*FOUND*/ printf(pi=%dn,s*4);main() fun();答案:【1】 #include math.h 或 #include 【2】 float s=0,t=1,p=1; 或 float s=0,p=1,t=1; 或 float p=1,s=0,t=1; 或 float p=1,t=1,s=0; 或 float t

5、=1,p=1,s=0; 或 float t=1,s=0,p=1;【3】 while(fabs(t)1e-4) 或 while(0.0001fabs(t) 或 while(1e-40.0001)【4】 printf(pi=%fn, s * 4 );13)/*- 【程序改错】-功能:求1到10的阶乘的和。-*/main() int i; float t,s=0; float fac(int n); /*FOUND*/ for(i=1;i10;i+) /*FOUND*/ s=fac(i); printf(%fn,s);float fac(int n)/*FOUND*/ int y=1; int i;

6、 for(i=1 ;i=n;i+) y=y*i; /*FOUND*/ return;答案:【1】 for(i=1;i=i;i+) 或 for(i=1;ii;i+)【2】 s= s + fac(i) ; 或 s+=fac(i); 或 s=fac(i)+s;【3】 float y=1.0; 或 float y=1;【4】 return y; 或 return(y); 或 return (y);14)/*- 【程序改错】-功能:求1到20的阶乘的和。-*/fun() int n,j; float s=0.0,t=1.0; for(n=1;n=20;n+) /*FOUND*/ s=1; for(j=1

7、;j=n;j+) /*FOUND*/ t=t*n; /*FOUND*/ s+t=s; /*FOUND*/ printf(jiecheng=%dn,s);main() fun();答案:【1】 t=1; 或 t=1.0;【2】 t= t * j ; 或 t*=j; 或 t=j*t;【3】 s= s + t ; 或 s+=t; 或 s=t+s;【4】 printf(jiecheng=%fn,s);15)/*- 【程序改错】-功能:输出Fabonacci数列的前20项,要求变量类型定义成浮点型, 输出时只输出整数部分,输出项数不得多于或少于20。-*/fun() int i; float f1=1,

8、f2=1,f3; /*FOUND*/ printf(%8d,f1); /*FOUND*/ for(i=1;i=20;i+) f3=f1+f2; /*FOUND*/ f2=f1; /*FOUND*/ f3=f2; printf(%8.0f,f1); printf(n);main() fun();答案:【1】 printf(%8.0f,f1); 或 printf(%f,f1); 或 printf(%8f,f1);【2】 for(i=1;ii;i+) 或 for(i=2;i=i;i+) 或 for(i=1;i=i;i+)【3】 f1=f2;【4】 f2=f3;16)/*- 【程序改错】-功能:根据整

9、型形参m的值,计算如下公式的值。 1 1 1 t = 1- - - . - 2x2 3x3 mxm 例如:若m=5,则应输出:0.-*/double fun(int m) double y=1.0; int i; /*FOUND*/ for(i=2;im;i-) /*FOUND*/ y-=1/(i*i); /*FOUND*/ return m;main() int n=5; printf(nthe result is %lfn,fun(n);答案:【1】 for(i=2;i=i;i+) 或 for(i=2;im+1;i+) 或 for(i=2;ii;i+) 或 for(i=2;1+mi;i+)

10、【2】 y-=1.0/(i*i); 或 y=y-1.0/(i*i); 或 y-=1.0/(float)(i*i); 或 y=y-1.0/(float)(i*i); 或 y=y-1.0/i/i; 或 y=y-1.0/(float)i/(float)i; 或 y=y-1/(double)(i*i); 或 y-=1/(double)(i*i);【3】 return y; 或 return (y); 或 return(y);18)/*- 【程序改错】-功能:计算并输出k以内最大的10个能被13或17整除的自然数之和。 k的值由主函数传入。例如:若k的值为500,则函数值为4622。-*/int fun

11、(int k) int m=0,mc=0,j; /*FOUND*/ while (k=2)|(mc10) /*FOUND*/ if(k%13=0)|(k%17=0) m=m+k; mc+; /*FOUND*/ k+; /*FOUND*/ return ;main() printf(%dn,fun(500);答案:【1】 while ( (2=k) & (mc=2) & (mc10) ) 或 while ( (2=k) & (mc=2) & (mc=9) )【2】 if(!( k%17!=0 | k%13!=0 ) 或 if( k%13=0 | k%17=0)【3】 k-; 或 k=k-1; 或

12、 k-=1;【4】 return m; 或 return(m);19)/*- 【程序改错】-功能:计算正整数num的各位上的数字之积。例如:输入252,则输出应该是20。-*/long fun (long num) /*FOUND*/ long k; do k*=num%10; /*FOUND*/ num=10; while (num); return k;main() long n; printf(nPlease enter a number:); /*FOUND*/ scanf(%ld, n); /*FOUND*/ printf(n%ldn,fun(long n);答案:【1】 long

13、k=1;【2】 num/=10; 或 num=num/10;【3】 scanf(%ld,&n);【4】 printf(n%ldn,fun(n);20)/*- 【程序改错】-功能:已知一个数列从第0项开始的前三项分别为0、0、1,以 后的各项都是其相邻的前三项的和。下列给定程序中, 函数fun的功能是:计算并输出该数列的前n项的平方根 之和sum,n的值通过形参传入。例如:当n=10时,程序的输出结果应为23.。-*/#include /*FOUND*/fun (int n) double sum,s0,s1,s2,s; int k; /*FOUND*/ sum=0.0; if(nn;k+) s

14、=s0+s1+s2; sum+=sqrt(s); s0=s1;s1=s2;s2=s; return sum;main() int n; scanf(%d,&n); printf(%lfn,fun(n);答案:【1】 double fun (int n)【2】 sum=1.0; 或 sum=1;【3】 s2=1.0; 或 s2=1;【4】 for(k=4;k=k;k+) 或 for(k=4;kn+1;k+) 或 for(k=4;kk;k+) 或 for(k=4;1+nk;k+)21)/*- 【程序改错】-功能:根据以下公式求值,并作为函数值返回。例如:给指定精度的变量eps输入0.0005时,应

15、当输出Pi=3.。 1 1 2 1 2 3 1 2 3 4 = 1 + + x + x x + x x x + .2 3 3 5 3 5 7 3 5 7 9-*/double fun(double eps) double s,t; int n=1; s=0.0; t=1; /*FOUND*/ while(teps) 或 while(eps=eps) 或 while(epseps) 或 while (eps=eps) 或 while (eps=t)【2】 t=t*n/(2*n+1); 或 1.0*n/(2*n+1)*t 或 n/(2*n+1.0)*t 或 n/(2.0*n+1)*t 或 n/(2

16、.0*n+1.0)*t 或 1.0*n/(2.0*n+1.0)*t【3】 return 2 * s ; 或 return (2*s); 或 return(2*s); 或 return (s*2); 或 return(s*2);22)/*- 【程序改错】-功能:求出两个非零正整数的最大公约数,并作为函数值返回。例如:若给num1和num2分别输入49和21,则输出的最大公约数为7。-*/int fun(int a,int b) int r,t; if(ab) t=a; /*FOUND*/ b=a; /*FOUND*/ a=t; r=a%b; while(r!=0) a=b; b=r; /*FOU

17、ND*/ r=a/b; /*FOUND*/ return a;main() int num1,num2,a; scanf(%d%d,&num1,&num2); a=fun(num1,num2); printf(the maximum common divisor is %dnn,a);答案:【1】 a=b;【2】 b=t;【3】 r=a%b;【4】 return b; 或 return (b); 或 return(b);26)/*- 【程序改错】-功能:找出大于m的最小素数,并将其作为函数值返回。-*/#include int fun( int m) int i,k; for(i=m+1;i+

18、) /*FOUND*/ for(k=1;ki;k+) /*FOUND*/ if(i%k!=0) break; /*FOUND*/ if(ki) /*FOUND*/ return k; main() int n; scanf(%d,&n); printf(%dn,fun(n);答案:【1】 for(k=2;kk;k+) 或 for(k=2;k=i-1;k+) 或 for(k=2;kk;k+) 或 for(k=2;k=k;k+)【2】 if( i%k = 0 ) break; 或 if(!(i%k) break;【3】 if(i=i) 或 if( k = i ) 或 if(k=i/2) 或 if(

19、k=i/2) 或 if(ksqrt(i)【4】 return i; 或 return (i);374)/*- 【程序改错】-功能:读入一个整数k(2k10000),打印它的所有质因子(即 所有为素数的因子)。例如:若输入整数:2310,则应输出:2、3、5、7、11。 请改正程序中的语法错误,使程序能得出正确的结果。-*/#include conio.h#include stdio.h/*FOUND*/IsPrime(integer n ) int i, m; m = 1; for ( i = 2; i n; i+ ) /*FOUND*/ if ( n%i ) m = 0; break; /*

20、FOUND*/ return ( n ); main( ) int j, k; clrscr(); printf( nPlease enter an integer number between 2 and 10000: ); scanf( %d, &k ); printf( nnThe prime factor(s) of %d is( are ):, k ); for( j = 2; j = k; j+ ) if(!( k%j)&( IsPrime(j) printf( n %4d, j ); printf(n);答案:【1】 IsPrime(int n)【2】 if(!(n%i)【3】 return ( m );

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁