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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

例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;

程序:

#include

main( )

{ 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:下面这个程序,想想它实现的是什么功能?

#include

main( )

{ 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不是5的倍数时,把i累加到s,最后输出s。所以,这个程序实现的是求1~100中间所有非5的倍数的数之和。

例3:输出n~m中(0

算法分析:

1 输入n与m的值

2 用整型变量a从n-m循环,每次值加1

3.若a能被3整除,执行第4步,否则执行第9步

4令整型变量x=a

5.若x>0,执行第6步,否则执行第9步

6.i=x%10

7.若i值不为5,执行第8步,否则输出a,并执行第9步

8.x=x/10,并返回第5步

9.返回第2步,察看下一个a

程序:

#include

main( )

{ long a,x,i,t,n,m;

scanf(“%ld%ld”,&n,&m);

for(a=n;a<=m;a++)

if(a%3==0)

{ x=a;

while(x>0)

{ i=x%10;

if(i==5) {printf(“\t%ld”,a);break;}

x=x/10;

}

}

}

问:能把a%3==0也放到for循环语句的表式2中,写成a<=m&&a%3==0吗?答:不可以!

例4:求3-150中所有素数的和。

算法分析:

1.用变量a从3到150循环,每次值增加1

2.用变量i从2到a-1循环,每次值增加1

3.若a%i==0 ,结束i的循环,执行第4步

4.若i==a,把a累加到s上。

5.输出s的值

注意:此题中执行第4步时有两种情况。第一种:在第3步

中发现了满足a%i==0的情况,直接跳出了i的循环,此时的

i一定是在2到a-1中间的一个值,而且a不是素数。第二种:一

直没有发现满足a%i==0的i,在i==a时,不再满足i循环的执行

条件,i循环结束,此时的a是素数!

程序:

#include

main( )

{ 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盏灯,求塔底灯数。

算法分析:

此题的关键在于塔顶的灯数,只要知道了塔顶的灯数,就可知道塔底灯数。这里采取试探的方法来求塔顶灯数。

设塔顶灯数为x,x的初值从1开始循环,每次值加1。求出相应的灯的总数,总数不为765,继续下一个x的循环,直到某次求得灯总数为765时,结束x的循环,输出此时塔底灯数。

1.x从1开始循环,每次值加1

2.设k初值x,计算每层灯数。设s初值0,累加每层灯数

3. i从1到8循环,每次值加1

4. s=s+ k; k=k*2;

5.如果s==765 ,结束x的循环

4. s=s+ k; k=k*2;

程序:

#include

main( )

{ int x,s,i,k;

for(x=1;;x++)

{ s=0;

k=x;

for(i=1;i<=8;i++)

{s=s+k;k=k*2;}

if(s==765) break;

}

printf(“\n%d”,k/2);

}例5:已知a>b>c>0,a、b、c为整数,且a+b+c<100,求满足1/a2+1/b2=1/c2的a、b、c共有多少组?

算法分析:

这是一道典型的三重嵌套循环的题目。a、b、c都是位于1到99之间整数。编程的基本思路是:找出1到99之间的所有a、b、c的排列,察看同时满足a>b>c、a+b+c<100、1/a2+1/b2=1/c2这三个条件的a、b、c有多少组。值得注意的是,1/a2+1/b2=1/c2这个条件并不能简单的原样照写,因为在求分数的过程中必然有四舍五入,不能得出真正的准确的结果,必须把条件变形成:c2(a2+b2)=a2b2才能得出正确的结果。

1.a从1到99循环

2.b从1到99循环

相关文档
最新文档