循环结构程序设计典型例题

上传人:博****1 文档编号:488256601 上传时间:2023-12-30 格式:DOCX 页数:7 大小:29.36KB
返回 下载 相关 举报
循环结构程序设计典型例题_第1页
第1页 / 共7页
循环结构程序设计典型例题_第2页
第2页 / 共7页
循环结构程序设计典型例题_第3页
第3页 / 共7页
循环结构程序设计典型例题_第4页
第4页 / 共7页
循环结构程序设计典型例题_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《循环结构程序设计典型例题》由会员分享,可在线阅读,更多相关《循环结构程序设计典型例题(7页珍藏版)》请在金锄头文库上搜索。

1、循环结构程序设计典型例题例1:有数列2/3、4/5、6/9、10/15求此数列前30项的和。算法分析:对于数列的题, 首先要找出通项公式, 或前后项的计算关系公式, 根据公式求所需。由于数列的题一般执行次数能确定,用 for 语句来编写比较方便。此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30 项的和,循环执行 30 次。1. 初值 i=2,j=3,s=0;2. 用 n 从 1 到 30 循环3. s=s+ i/j;4. c=i; i=j+1; j=c+j;5. 输出s;程序:#includemain

2、( ) int i=2,j=3,n,c;float s=0;for(n=1;n=30;n+) s=s+(float)i/j;c=i;i=j+1;j=c+j;printf( “n%f” ,s);此题中的 n 与循环体中的执行语句没有数值上的联系,仅仅用做决定循环执行的次数。例 2:下面这个程序,想想它实现的是什么功能?#includemain( ) int i,s=0;for(i=1;i=100;i+)if(i%5=0) continue;s=s+i;printf( n “%d” ,s);在左边的程序中, i 从 1 到 100 循环,当 i 是 5 的倍数时,直接进入下一个i, 当 i 不是

3、5 的倍数时,把 i 累加到 s, 最后输出 s。 所以,这个程序实现的是求1100 中间所有非5 的倍数的数之和。例 3:输出 nm 中 (0n0, 执行第 6 步,否则执行第 9 步6.i=x%107若i值不为5,执行第8步,否则输出a,并执行第9步8 .x=x/10 ,并返回第5 步9 .返回第2 步,察看下一个a程序:#includemain( ) long a,x,i,t,n,m;scanf( “ %ld%ld ” ,&n,&m);for(a=n;a0)i=x%10;if(i=5) printf ( “t%ld ” ,a);break;x=x/10;问:能把 a%3=0 也放到 fo

4、r 循环语句的表式2 中,写成 a=m&a%3=0 吗?答:不可以!例 4:求3-150 中所有素数的和。算法分析:1 .用变量a 从 3 到 150 循环,每次值增加12 .用变量i 从 2 到 a-1 循环,每次值增加13 .若 a%i=0 , 结束i 的循环,执行第 4 步4 .若i=a ,把a累加至U s上。5 .输出s 的值注意:此题中执行第 4 步时有两种情况。第一种:在第3 步中发现了满足 a%i=0 的情况,直接跳出了 i 的循环,此时的i 一定是在 2 到 a-1 中间的一个值,而且a 不是素数。第二种:一直没有发现满足 a%i=0的i,在i=a时,不再满足i循环的执行条件,

5、 i 循环结束,此时的 a 是素数!程序:#includemain( ) int a,s=0,i;for(a=3;a=150;a+)for(i=2;i=a-1;i+)if(a%i=0) break;if(a=i) s=s+a;printf( n “%d” ,s)求素数的方法很多,大同小异。此题可以做一些改动。如: i 的值可以是从2 取到 sqrt(a) ;可以不用最后察看i 的值, 而是通过在发现因子时改动标志变量,最后根据标志变量的值判断是否是素数。例 5:有一个八层高的灯塔,每层所点灯数都等于上一层的两倍,一共有765 盏灯,求塔底灯数。算法分析:此题的关键在于塔顶的灯数, 只要知道了塔

6、顶的灯数, 就可知道塔底灯数。 这里采取试探的方法来求塔顶灯数。设塔顶灯数为 x , x 的初值从 1 开始循环,每次值加 1 。求出相应的灯的总数,总数不为 765,继续下一个x 的循环,直到某次求得灯总数为 765 时,结束 x 的循环,输出此时塔底灯数。1 .x 从 1 开始循环,每次值加 12 .设k初值x,计算每层灯数。设 s初值0,累加每层灯数3 . i 从 1 到 8 循环,每次值加14 . s=s+ k; k=k*2;5 .如果s=765 ,结束 x 的循环4. s=s+ k; k=k*2;程序:#includemain( ) int x,s,i,k;for(x=1;x+) s

7、=0;k=x;for(i=1;ibc0,a、b、c 为整数,且 a+b+cbc、a+b+cb&bc&a+b+c100&c*c*(a*a+b*b)=a*a*b*b,统计找到了一组5 .输出找到的组数程序:#includemain() long a,b,c,n=0;for(c=1;c=97;c+)for(b=c+1;b=98;b+)for(a=b+1;a=99;a+)if(a+b+cbc,而不需要再在if中判断。改进如下所示:for(a=1;a=99;a+)for(b=1;b=99;b+)for(c=1;cb&bc&a+b+c100&c*c* (a*a+b*b)=a*a*b*b)n+;例 6: e

8、=1+1/1!+1/2!+ .+1/n!(精度为 1e-6)分析:用变量e求和,e初值为1。用变量t求阶乘,t初值为1。用变量i从1开始累加循 环,t=t*i,e=e+1.0/t。#includevoid main( ) int i=1;long t=1;float e=1;while(e-(int)e=1e-6) t=t*i;e=e+1.0/t;i+;printf( n%.10f ” ,e);例 7:数列 1,1,2,3,5,8 有 f(n)=f(n-1)+f(n-2),f(1)=1,f(2)=1, 求 f(40)。分析:用 变量f1、f2、f作为数列相邻的三项,初值 f1=1,f2=1。用

9、变量n从3到40循环,f=f1+f2,f1=f2,f2=f.#includemain( ) long f1=1,f2=1,f,n;for( n=3;n=40;n+) f=f1+f2;f1=f2;f2=f;printf( n “f=%ld ” ,f);思考:求 14 万之内的最大的 f ( n ) .例 8:Sn=1-1/3+1/5-1/7+-1/(2n-1)求 s(100)(保留 4 位小数)分析:用变量s 求和, s 初值为 0 。用变量n 从 1 到 100 循环,如果n 是奇数(n%2!=0 ) ,s=s+1/(2*n-1), 否则 s=s-1/(2*n-1) 。#include mai

10、n( )int n;float s=0;for( n=1;n=100;n+)if(n%2!=0) s=s+1.0/(2*n-1)else s=s-1.0/(2*n-1);printf( n“%.4f ” ,s);例 9: 用牛顿迭代法求方程f(x)=2x3-4x2+3x-7=0 在 x=2.5 附近的实根, 直到满足 |xn-xn-1|10-6为止。牛顿迭代公式为: xn=xn-1-f(xn- 1)/f (-x1n)算法分析:牛顿迭代法认为,以任意一个x的初值开始,都可以根据牛顿迭代公式xn=xn-1-f(xn-1)/f(xn-1)求出一串 x 的序列,这个序列将越来越趋向于某一个值,这个值就

11、是方程f(x) 的一个实根。#include#includemain( ) float x=2. 5,x0,f,f2;do x0=x;f=2*x0*x0*x0-4*x0*x0+3*x0-7;f2=6*x0*x0-8*x0+3;x=x0-f/f2;while(fabs(x-x0)=10e-6);printf( “ %f” ,x);例 10:求 1000 以内最大的 20 个素数之和。分析:用变量s 求和, s 初值为0。用变量I 统计以求得素数的个数, I 初值为0。用变量a从1000到1循环,如果a是素数,则s=s+a,I+。当i值等于20时,跳出循环。main( )int a,s=0,I=0

12、, j;for( a=1000;a=1;a-)for( j=2;ja;j+)if(a%j=0) break;if( j=a) s=s+a; I+; if(I=20) break; printf( n“%d” ,s);例 11: 200,1000 的双胞胎数的对数。双胞胎数:两素数差为2 称为双胞胎数。分析:用变量n 统计以求得双胞胎数的对数, n 初值为0。用变量a 从 200 到 998 循环,如果a是素数,则令变量b=a+2,如果b也是素数,则n值增1。素数求法同前,用变量 I循环。main( )int a,b,n=0,I;for(a=200;a=998;a+)for(I=2;Ia;I+)if(a%I=0) break;if(a=I )b=a+2;for(I=2;Ib;I+)if(b%I=0) break;if(b=I )n+;pr

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

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号