C程序设计 - - 循环结构程序设计(4)

2019-03-04 14:17

}

if(flag==1) printf(\else printf(\

}

说明:

(1) 此程序中增加了一个头文件“math.h”,这是因为在使用sprt函数(求平方根)时需要这一头文件。

(2) 在程序的开始处利用了do-while循环语句来处理读键盘过程,这是为了保证所读入的数据是一个大于2的整数,如果不满足这一条件,将重复读操作,一直到读入的数据满足条件为止。

(3) 程序中的flag变量是用于设置标志的,当flag=1时,说明n不满足素数条件,最后通过对flag的判断来显示相应的提示信息。正确地使用标志变量,对程序设计会带来方便。

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。

三种循环(while循环、do-while循环和for循环)可以相互嵌套。例如: (1) while( )

{

……;

for( ; ; ) {……;} }

(2) for( ; ; ) {

……; do {……;

}while( ); }

【例6-18】求100~200之间的所有素数

在例6-17的基础上,对本题用一个嵌套的for循环即可处理。程序如下: #include\#include\main () {

int n, m, i, flag;

for(n=101;n<=200;n=n+2) { m=sqrt(n); flag=0; for(i=2;i<=m;i++) {

16

}

if(n%i==0) { flag=1; break; } }

if(flag==0) printf(\

}

程序运行结果:

101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199

循环变量n代表被检测的数,从101变化到200。在每一次循环中,又内嵌一个for循环,用来检测当前的n是否素数,这个内嵌循环的循环变量是i,它从2变化到m。

【例6-19】输出下三角形式九九乘法表。 1 2 3 4 5 6 7 8 9 1 1 2 2 4 3 3 6 9

4 4 8 12 16 ……

9 9 18 27 36 45 54 63 72 81

对这样表格形式的输出,可以用多次循环来解决。用外层循环来控制行,如: for(i=1;i<=9;i++)

用内层循环来控制列,如: for(j=1;j<=i;j++) 程序如下: #include\main () {

int i,j;

printf(\ ***九九乘法表***\\n \ /*输出表头*/

for(i=1;i<=9;i++) /*外层循环,控制行*/ printf(\ printf(\

for(i=1;i<=9;i++) /*内层循环,控制列*/ {

printf(\ for(j=1;j<=i;j++) printf(\ printf(\ } }

【例6-20】求Fibonacci数列的前50项。Fibonacci数列的第一项为1,第二项为1,

17

从第三项开始,每项等于前两项之和。

我们可以引入三个变量f1、f2和f,分别存放数列的前两项和当前项,其中f=f1+f2。用一个循环来求解数列的前50项,每次求下一项时,令f1=f2,f2=f,f=f1+f2。程序如下:

#include\main () {

int i;

long f1=1,f2=1,f; /*数字较大,可能超出整数范围,定义为长整型*/ printf(\输出数列的前两项*/ for(i=3;i<=30;i++) { f=f1+f2; printf(\ f1=f2; /*这两行为下一次循环作准备*/ f2=f; } }

本章小结

循环结构的设计,是程序设计的重要组成部分,也是等级考试的一个重要考点。

while循环和do-while循环是两种形式非常相近的循环结构,都是当循环条件满足时执行循环体。它们之间的主要区别是:

while循环先检测循环条件然后再决定是否执行循环体;而do-while循环先执行一次循环体再检测循环条件,根据检测结构决定是否继续执行循环体。

for循环相对上述两种循环结构而言功能更加强大,在for语句中可包含三个表达式,习惯用法是用表达式1来实现变量初始化,用表达式2来作循环条件判断,用表达式3作循环变量的自增自减。

用if和goto语句组合也可以构成循环,但这种方法不符合结构化程序设计准则,因此并不提倡。

解决同一问题可以采用上述各种循环结构,一般来讲它们之间可以互相代替使用。在一个循环的循环体中可以嵌入另一个循环结构,这就是循环的嵌套。循环嵌套的层数并没有限制,但层数过多会使可读性变差,一般嵌套层数不宜超过3层。

continue语句只能出现在循环体中,它的作用是终止本次循环转而开始进行下一次循环;和continue语句相对应的break语句的作用是终止循环,并跳出当前循环结构。 习题:

1. 比较while语句、do-while语句和for语句的异同. 2. 阅读下列程序,指出运行结果: main( ) { int x=3; do { printf(\ }while(!(--x)); }

18

3. 阅读下列程序,指出运行结果: main( ) {

int j=0,k=0,a=0; while(j<2) { j++; a++; k=0; }

while(k<=3) { k++; if(k%2!=0) continue; a++; } a++;

printf(\ }

4. 阅读下列程序,指出运行结果:

main( ) { int i;

for(i=0;++i;i<5) { if(i==3) { printf(\ break; } printf(\ } }

5. 阅读下列程序,指出运行结果: main( ) {

int a,b;

for(a=1,b=1;a<=100;a++) { if(b>=20) break; if(b%3==1)

19

{ b+=3; continue; } b-=5; }

printf(\

}

6. 阅读下列程序,指出运行结果: main( ) {

int i,a=0;

for(i=1;i<=5;i++) { do { i++; a++; }while(i<3); } i++;

printf(\}

7. 已知有如下计算公式:

π≈4*(1/1-1/3+1/5-1/7+……)

下列程序就是根据这一公式计算圆周率的。其中,精度控制在0.00001;变量s表示当前符号项,item表示当前项,n表示当前项的序号。阅读程序,并填空: #include \ main( ) {

float pai=0.0,item=1.0,s=1.0; int n=1;

while( ) { pai+=item; s=-s; item=s/(2*n+1); }

pai=4*pai;

printf(\ }

8. 编写程序,求1000以内奇数的和。

9. 编写程序,求任意两个整数之间所有的素数。

20

10. 编写程序,以上三角形式输出九九乘法表。

11. 编写程序,求1!+2!+3!+……+n!。n从键盘输入。

12. 一球从100米高空自由落下,每次落地后反跳回原高度的一半,再落下,求它在第十次落地时,共经过多少米,第十次反弹多高?

21


C程序设计 - - 循环结构程序设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:单片机学习习题答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: