《chapter05循环结构程序设计习题资料》由会员分享,可在线阅读,更多相关《chapter05循环结构程序设计习题资料(16页珍藏版)》请在金锄头文库上搜索。
1、chapter05-chapter05-循环结构程循环结构程序设计习题资料序设计习题资料用/41-1/3+1/5-1/7+.公式求的近似值,直到某一项的绝对值小于10-6为止。2#include #include void main ()int s;float n, t, pi;t = 1; pi = 0; n = 1.0; s = 1;while (fabs (t) 1e-6)pi = pi + t;n = n + 2;s = -s;t = s / n;pi = pi * 4;printf (pi = %10.6fn, pi);运行结果:运行结果:pi = 3.1415943求Fibonac
2、ci数列前40个数。这个数列有如下特点:第1、2两个数为1、1,从第3个数开始,该数是其前面两个数之和。即: F1 = 1 F2 = 1 Fn = Fn-1 + Fn-24#include void main()long int f1, f2;int i;f1 = 1;f2 = 1;for (i = 1; i = 20; i+) printf (%12ld %12ld , f1, f2);if (i % 2 = 0) printf (n);f1 = f1 + f2;f2 = f2 + f1;5运行结果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 98
3、7 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 1023341556译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。思路:思路:可以按以下规律将电文变成密码:将字母将字母A变成字母变成字母E,a变成变成e,即变成其后的第,即变成其后的第4个字母,个字母,W变成变成A,X变成变成B,Y
4、变成变成C,Z变成变成D。7#include void main ()char c;while (c = getchar () != n) if (c = a & c = A & c Z & c z) c = c - 26; printf (%c, c);运行结果:China!Glmre!8用“辗转相除法”求两个正整数m和n的最大公约数和最小公倍数。算法如下:将两数中大的那个放在m中,小的放在n中;求出m被n除后的余数r;若余数r为0,则执行步骤(6);否则执行步骤(4);把除数(n)作为新的被除数(m),把余数r作为新的除数;重复步骤(2)和(3),直到r为0;输出n即为最大公约数。m和n相
5、乘除以最大公约数即为最小公倍数。9#include void main ()int a, b, m, n, t, r;scanf (“%d%d”, &m, &n);if (m n)t = m; m = n; n = t;a = m;b = n;while (r = m % n) != 0)m = n; n = r;printf (“%d和和%d的最大公约数:的最大公约数:%d ”, a,b,n);printf (“最小公倍数:最小公倍数:%dn”, a*b/n);10用牛顿迭代法求下面方程在1.5附近的根:2x3 - 4x2 + 3x - 6 = 0用曲线上某点(x0,y0)的切线代替曲线,以
6、该切线与x轴的交点(x1,0)作为曲线与x轴的交点(x*,0)的近似(所以牛顿迭代法又称为切线法)。 算法:不断循环,直到满足精度x0 = x;求f(x0);求f(x0);x = x0 - f(x0) / f(x0);(根据公式f(x0)=(y-f(x0) / (x-x0)计算) y O x* x1 x0 x11#include #include void main () 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
7、/ f1; while (fabs (x - x0) = 1e-5); printf (x = %6.2fn, x); 运行结果:x = 2.0012用二分法求下面方程在(-10, 10)之间的根:2x3 - 4x2 + 3x - 6 = 0分析:任取两点x1和x2,判断(x1,x2)区间内有无一个实根。如果f(x1)和f(x2)符号相反,说明(x1,x2)之间有一个实根。取(x1,x2) 的中点x,检查f(x)与f(x1)是否同符号,如果不同号,说明实根在(x,x1)区间,这样就已经将寻找根的范围减少了一半了。然后用同样的办法再进 一步缩小范围。再找x1与x2(x2=x)的中点“x”,并且再
8、舍弃其一半区间。如果f(x)与f(x1)同号,则说明根在(x,x2)区间,再取x与 x2的中点,并舍弃其一半区间。用这个办法不断缩小范围,直到区间相当小为止。 13#include #include void main () float x0, x1, x2, fx0, fx1, fx2; do scanf (%f%f, &x1, &x2);fx1 = x1 * (2 * x1 - 4) * x1 + 3) - 6; fx2 = x2 * (2 * x2 - 4) * x2 + 3) - 6; while (fx1 * fx2 0); do x0 = (x1 + x2) / 2;fx0 = x0 * (2 * x0 - 4) * x0 + 3) - 6;if (fx0 * fx1) = 1e-5); printf(x0 = %6.2fn, x0);运行结果:-10 10x0 = 2.0014读入10个数,计算它们的和、积、平方和及和的平方。计算并输出1!、2!、3!、.、35!。输入20个数,求它们的最大值、最小值及平均值。15结束!结束!