资源描述:
《迭代与重复循环程序设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、高级语言程序设计第4章迭代与重复—循环程序设计(3)复习while/for循环结构的特点:先判断后执行新问题如果要做的事情至少先要执行一次,然后再根据条件判断是否要重复执行做这件事,如果条件不为真就不去重复它了例如:有一个操作平台界面,上面有一些按钮可以按,但是如果你按错了键,可能就退出了,否则你就可以反复去按键,直到你按了不该按的键,就结束了,这个过程是先按键后判断,即先执行后判断,如果条件为真,继续,直到条件为假时为止。流程图dowhile循环(直到型循环)一般形式:do{重复做的事情}while(表达式);其它语句注意末尾的分号很易忘记do-while求和今天要解决的问题打
2、印99乘法表再次讨论打印规则图案(菱形、平行四边形,三角形等)百钱百鸡问题目标掌握循环嵌套,多重循环的使用方法了解穷举法的算法策略问题1打印99乘法表分析反复要做的事情就是两个数相乘跟行数对应的第一个乘数,用i表示,与列对应的第二个乘数,用j表示i*j=?当i等于1时,j=1,1次乘法,当i等于2时,j=1,2,2次乘法,…当i等于9时,j=1,2,…,9,9次乘法。如果对每个i,j都从1到9就比较容易了,这时的结果是两个乘法表不妨先从这个特殊情形开始当i等于1时,j=1,2,…,9,9次乘法,当i等于2时,j=1,2,…,9,9次乘法,…当i等于9时,j=1,2,…,9,9次乘
3、法。循环嵌套算法设计(1)--特殊情形1循环控制变量i,j初始化为12如果i<=9则执行(3),否则执行(8)3如果j<=9则执行(4),否则执行(6)4按照格式“%d*%d=%d”输出i,j和i*j5j++,回到(3)6输出换行7i++,回到(2)8结束算法(1)实现#includeintmain(void){inti,j;for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf("%d*%d=%-2d",i,j,i*j);printf("");}return0;}算法设计(2)1循环控制变量i,j初始化为12如果i<=9则执行(
4、3),否则执行(8)3如果j<=i则执行(4),否则执行(6)4按照格式“%d*%d=%d”输出i,j和i*j5j++,回到(3)6输出换行7i++,回到(2)8结束算法(2)实现#includeintmain(void){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-2d",i,j,i*j);printf("");}return0;}练习题:矩形的规则图案,如果每次重复打印只有一个*号,怎么实现?要重复多少次?怎么重复?用循环嵌套(双重循环)实现矩形打印问题2:打印平行四边形分析虽然输出
5、的是平行四边形,但实际上输出的是直角梯形每行输出的图形有两部分组成空格,但空格数不等第0行4个空格第1行3个空格…第i行4-i个空格10个星号算法设计1循环控制变量i,j,k初始化为02如果i<5则执行(3),否则执行(11)3如果j<4-i则执行(4),否则执行(6)4输出一个空格5j++,回到(3)6如果k<10则执行(7)7输出一个星号8k++,回到(6)9输出换行10i++,回到(2)11结束算法实现#includeintmain(void){inti,j,k;for(i=0;i<5;i++){for(j=0;j<4-i;j++)//打印空格printf
6、("");for(k=0;k<10;k++)//打印星号printf("*");printf("");//打印换行}return0;}问题3:百钱买百鸡问题问题描述:假设某人用一百个铜钱买了一百只鸡,其中公鸡一只5枚钱、母鸡一只3枚钱,小鸡3只一枚钱,求他买的一百只鸡中公鸡、母鸡、小鸡各多少只?分析设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题可化为下面的三元一次方程组:这个方程组是一个不定方程组,不存在唯一解。解决这类问题的一个非常笨拙的对计算机来说是有效的方法就是逐个去试算—穷举法或蛮力法(BruteForce)。x:0到20y:0到33z:0到100把所有可能的值逐
7、个去匹配,符合方程组条件的是一个解,不符合条件的略去,把所有符合条件的筛选出来。这是一个三重循环问题。算法设计1循环控制变量i,j,k初始化为02如果i<=20则执行(3),否则执行(9)3如果j<=33则执行(4),否则执行(8)4如果k<=100则执行(5),否则执行(7)5如果i,j,k满足方程组条件则输出cock:i,hen:j,chicken:k6k++,返回(4)7j++,返回(3)8i++,返回(2)9结束程序实现类似的问题还有很多见实战题目:14-18小结与作业