分支循环结构.ppt

分支循环结构

void main( ) { int x,y,z; for (x=0;x=100;x++) for (y=0;y=100;y++) for (z=0;z=100;z++) if (x+y+z==100 5*x+3*y+z/3.0==100 ) coutxyz; } 【讨论】此为“最笨”之法—要进行101×101× 101= 1030301次(100多万次)运算。 ?如何改进 要点: 确定独立变量个数及取值范围——每个独立变量用一层循环实现“穷举”; 确定符合题意的条件表达式——条件成立的方案,输出结果。 e.g 张三、李四、王五三个棋迷,定期去文化宫下棋。张三每五天来一次,李四每六天来一次,王五每九天来一次。问每过多少天他们才能一起在文化宫下棋? 分析:此问题实际上是求最小公倍数的数学问题。 设结果为x ,其取值范围为0→∞。因上限为无限 大,计数值不能预先确定,故用while循环结构更 合适。 void main( ) { int x=1; while (1) { if (x%5==0 x%6==0 x%9==0) { coutx; break; } x++; } } 分析:求某区间内符合某一要求的数,可用一个变量“穷举”。所以可用一个独立变量x,取值范围100~200。 for (x=100;x=200;x++) if (x%3!=0 x%7!=0) printf(“x=%d\n”,x); 思考 如果是求指定条件的奇数呢? 如果是求指定条件的偶数呢? 练习.求100~200之间不能被3整除也不能 被7整除的数。 * * * for 表达式1 循 环 体 表达式3 表达式2 T F 通常用来初始化循环变量 循环控制条件 通常用来改变循环变量 for语句 * e.g. 一只老鼠咬坏了书,公式中符号□代表被老鼠咬掉的数字,要想恢复以下等式,在□中可填上哪个相同的数字? 3□×6237=□3×3564 * # include iostream using namespace std; void main( ) { int i; for(i=1; i=9; i++) if((30+i)*6237==(10*i+3)*3564) cout“□处填”iendl; } * e.g. 若一个正整数n的所有小于n的约数之和等于n,则称n为完全数。例如,6=1+2+3,6是完全数,28、496、8128也都是完全数。判断正整数n是否完全数。 * # include iostream using namespace std; void main( ) { int i, n, s; cout“请输入一个正整数:”; cinn; s=0; for(i=1; in; i++) if (n%i==0) s+=i; if(s==n) coutn“是完全数”endl; else coutn“不是完全数”endl; } * 多重循环 若循环体中仍包含循环语句,称为多重循环。 e.g. 求n以内的所有完全数。 * # include iostream using namespace std; void main( ) { int i, j, n, s; cout“n=?”; cinn; for(i=1; in; i++) { s=0; for(j=1; ji; j++) if(i%j==0) s+=j; if (s==i) couti“ ” ; } } * e.g. 编写程序输出行数为n的如下图形(如n=4)。 * *** ***** ******* * # include iostream using names

文档评论(0)

1亿VIP精品文档

相关文档