习题参考答案
is %d,”,letter,space,digit,other);
} 3、 main()
{int m,s,i;
for(m=2;m<1000;m++) {s=0;
for(i=1; i {printf(“%d its factors are ”,m); for(i=1; i if(m%i==0) printf(“%d,”,i); printf(“\\n”); } } } 4、 main() {int i,a,min,max; scanf(“%d”,&a); min=a;max=a; for(i=2;i<=100;i++) { scanf(“%d”,&a); if(a printf(“Max=%d,Min=%d\\n”,max,min); } 5、 #include float a=2,b=1,s=0; for(i=1;i<=N;i++) {s=s+a/b; t=a; a=a+b; /*将前一项的分子与分母之和作为下一项的分子*/ b=t; /*将前一项的分子作为下一项的分母*/ } printf(“Sum=%f\\n”,s); } 6、问题分析:设王先生的岁数是x,他夫人的岁数是y,可得到如下方程组: 300 习题参考答案 2??x?y?1053 ?2??x?y?873这是一个非线性方程组的求解,无法手算求解,可以用穷举法求解。考虑到实际可能, x、y可以在20—100范围内取值,逐一穷兴出x、y所有可能的取值判断是否满足上述方程组,若满足,这一组解就是要求的解。程序如下: main() {int x,y; for(x=20;x<=100;x++) for(y=20;y<=100;y++) if(x*x+y==1053&&x+y*y==873) printf(“x=%d y=%d\\n”,x,y); } 7、 main() { long int k,g,s=0; printf(\ scanf(\ do { g=k; printf(\ k=k/10; }while(k!=0); } 8、 (1) main() { int i,j; for(i=1;i<=9;i++) { for(j=i;j<=9;j++) printf(\ \ printf(\ } } (2) main() { int i,j,k; for(i=1;i<=9;i++) { for(k=1;k 301 习题参考答案 for(j=i;j<=9;j++) printf(\ printf(\ } } 9、 #include long s,n,j,x; for(j=100;j<=999;j++) { s=0; x=j; while(x>0) /*求原数j的反序数*/ {s=s*10+x; x=x/10; } if(s==j) /*判断反序数s与原数j是否相等*/ {i++; printf(\ if(i==0) printf(\每行输出10个回文数*/ } } } 10、 #include {int x,y,z; for(x=1;x<20;x++) for(y=1;y<33;y++) for(z=3;z<100;z+=3) {if((x*5+y*3+z/3)==100&&x+y+z==100) printf(“公鸡有%d只,母鸡有%d只,小鸡有%d只\\n”,x,y,z); } } 11、 #include {int n=1; double x,sum=0,term=1.0; scanf(“%lf”,&x); while(fabs(term)>=1e-6) { sum+=term; term*=-x*x/(n*(n+1)); n=n+2; } 302 习题参考答案 printf(“cos(%lf)=%lf ,%lf \\n”,x,sum,cos(x)); } 12、 问题分析: 用迭代法求平方根的算法如下: (1)设定一个x的初值x0; (2)用上述公式求出x的下一个值x1; (3)再将x1代入上述公式,求出x的下一个值x2; (4)如此继续下去,直到前后两次求出的x值(xn+1和xn)满足xn?1?xn?10?5。 为便于程序处理,令x的初值x0=a/2(也可以是其他值),求出x1。程序实现如下: #include {float a,x0,x1; printf(“Please input a positive number:”); scanf(“%f”,&a); /*输入a的值*/ x0=a/2; x1=(x0+a/x0)/2; do {x0=x1; x1=(x0+a/x0)/2; }while(fabs(x1-x0)>=1e-5); printf(“The square root of %f is %f, the true root is %f\\n”,a,x1,sqrt(a)); } 13、 程序如下: #include {float x,x0,f,f1; x=1.5; do {x0=x; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x=x0-f/f1; /*进行牛顿迭代*/ } while(fabs(x-x0)>=1e-5); printf(“The root is %f\\n”,x); } 14、 #include #define epsilon 0.00001 /*定义要求的精度*/ float f(float x) /*求函数值*/ 303 习题参考答案 {return(2*x*x*x-4*x*x+3*x-6); } main() {float a,b,x; scanf(\输入求根区间*/ if(f(a)*f(b)>=0) /*判断是否符合二分法使用的条件*/ {printf(\不满足二分法使用条件,退出!\ do { x=(a+b)/2; if(f(x)*f(b)<0) /*如果成立,则根在区间的右半部分*/ a=x; else /*否则根在左半部分*/ b=x; } while(fabs(b-a)>=epsilon); /*判断是否达到精度要求,如果没达到,继续循环*/ x=(b+a)/2; /*取最后的小区间中点作为根的近似值*/ printf(\输出函数的近似根*/ } 15、 #define N 4 main() {int i,j,k; for(i=0;i { for(j=0;j for(j=0;j 习 题 6 一、选择题 1. B 2. D 3. D 二、填空题 阅读程序写出运行结果题 1. 第一行:1 4 3 第二行:2 5 8 2. 第一行:1 2 4 第二行:3 5 7 第三行:6 8 9 三、编程题 1. # include 304 4. D 5. A 6. C