循环嵌套课件

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

计算表达式1 N 计算表达式2 Y 循环体语句
计算表达式3
循环嵌套
While,do-while, While,do-while,for 三种语句既可以嵌套自 身语句,也可以相互嵌套。
例1、某班期末考试有4门课,输入每人每门课的成绩,并计算 某班期末考试有4门课,输入每人每门课的成绩, 每门课最高成绩。(设人数为30) 。(设人数为 每门课最高成绩。(设人数为30) 定义数据结构: score表示一个成绩, 表示第几门课, 定义数据结构:设score表示一个成绩,k表示第几门课,j表 表示一个成绩 示某一门课中的第几个人,max表示某一门课中的最高成绩 表示某一门课中的最高成绩。 示某一门课中的第几个人,max表示某一门课中的最高成绩。 算法分析:采用“自顶向下,逐步细化”的模块化方法, 算法分析:采用“自顶向下,逐步细化”的模块化方法,该问 题的总体思路是: 题的总体思路是: 重复处理每一门课的成绩,采用循环结构。这是第一层循环 第一层循环, 重复处理每一门课的成绩,采用循环结构。这是第一层循环, 循环体为 处理一门课的成绩” 循环的条件是k<=4, 循环体为“处理一门课的成绩”,循环的条件是k<=4, 的初值是 增值规律是k++ k++。 k的初值是1,增值规律是k++。 然后分析循环体如何实现,如何处理一门课的成绩: 然后分析循环体如何实现,如何处理一门课的成绩:即第二 层循环,循环体为 输入第k门课第j个人的成绩, 层循环,循环体为“输入第k门课第j个人的成绩,与该门课 已输入成绩中的最大值max 比较。循环条件是 j<=30” 已输入成绩中的最大值max 比较。循环条件是“j<=30”,j 的初值是 增值规律是j++ j++。 的初值是1,增值规律是j++。 注意,处理一门课成绩开始前,应给max赋初值。 赋初值。 注意,处理一门课成绩开始前,应给max赋初值
main() /*程序(2)*/ /*程序(2 { int a, b, c, n, s; printf("\ printf("\n daffodil number:"); for(n=100;n<1000;n++) { a=n/100; b=(n%100)/10; c=n%10; s=a*a*a+ b*b*b+ c*c*c; if(n==s) if(n==s) printf("%d ", n); } }
不定方程求解问题(穷举问题) 例2、 打印出所有的水仙花数。 分析:对所有的3 分析:对所有的3位数逐个判断。(有两种方法) 即,设a,b,c分别表示一个三位数的百、十、个位,则 a,b,c分别表示一个三位数的百、十、个位,则 满足条件 a3+b3+c3=100*a+10*b+c的数是水仙花数。 =100*a+10*b+c的数是水仙花数。 方法1:首先找出方程中每个变量的取值范围,对所有 方法1:首先找出方程中每个变量的取值范围,对所有 a,b,c的任意组合都验证一遍,满足上述条件的一组 a,b,c的任意组合都验证一遍,满足上述条件的一组 a,b,c即是方程的解。(穷举法) a,b,c即是方程的解。(穷举法) 方法2:对每一个三位数n 方法2:对每一个三位数n,判断其是否为水仙花数。 首先分解出n的三位数字a,b,c,然后判断是否满足条 首先分解出n的三位数字a,b,c,然后判断是否满足条 件n= a3+b3+c3,若满足,则n为水仙花数。 ,若满足,则n
#define N 30 /*定义符号常量 表示人数30*/ /*定义符号常量N表示人数30*/ 定义符号常量N main() { int k, j; float score, max; for(k=1;k<=4;k++) /*外层循环 /*外层循环*/ 外层循环* { printf("\n enter score of course no %d:", k); printf("\ /*输入该门课第一个成绩给max*/ /*输入该门课第一个成绩给 输入该门课第一个成绩给max*/ scanf("%f", & max ); /*内层循环,从第二个成绩开始逐个与max比较*/ /*内层循环 从第二个成绩开始逐个与max比较 内层循环, 比较* for(j=2;j<=N; j++) { scanf("%f " , &score); if(score>max) max=score; } printf("\ printf("\n the max of course no %d is: %f", k, max); } }
while语句 while语句
While 语句的一般格式: while( 表达式) 表达式) 循环体语句 其中,循环体语句可以是 其中, 简单语句、 简单语句、复合语句或 空语句。 空语句。 最少执行次数是0 最少执行次数是0次。
表达式 Y 循环体语句
N
Do_while 语句的格式及执行过程
Do_while语句的一般格式: Do_while语句的一般格式:
main() /*程序(1)*/ /*程序(1 { int a, b, c, n, s; printf("\ printf("\n daffodil number:"); for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<=9;c++) { n=100*a+10*b+c; s=a*a*a+b*b*b+c*c*c; if(n == s) printf("%d ", n); } }
#include "stdio.h" main() { int n,i,j; printf("Input n :"); scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<=i;j++) putchar('*'); putchar('\ putchar('\n'); } }
执行过程:
do { 语句 }while(表达式 }while(表达式); 表达式);
其中,表达式是循环控制条件, 语句是循环体,可以是简单 语句、复合语句或空语句。 通常用复合语句,使得结构 更清楚。 特别注意: 该语句最后的 “ ;”
语句
表达式 Y N
最少执行次数是1 最少执行次数是1次。
for 语句的格式、执行过程 流程图: 一般格式: for(表达式 表达式2 for(表达式1;表达式2;表达式 表达式1 3) 循环体语句 其中,表达式1 其中,表达式1为赋初值表达式 表达式2 表达式2为条件表达式 表达式3 表达式3为循环变量增值表 达式
思考
打印钻石矩阵,即输入一个奇数(若不 是奇数则重新输入),例如5 是奇数则重新输入),例如5,则输出下 列图形: * *** ***** *** *
main() { int a, b, n, s; printf(“ printf(“\n Daffodil number:”); number:” for(n=100; n<1000; n++) { a = n; do { b = a%10; a /= 10; s += b*b*b; }while( a != 0 ); if( n = = s ) printf(“%d\ printf(“%d\t”, n); } }
类似的穷举问题: 类似的穷举问题:
*百钱买百鸡:一百钱,买一百只鸡,其中公鸡3钱/只、母鸡1 百钱买百鸡:一百钱,买一百只鸡,其中公鸡3 母鸡1
钱/只、小鸡3只/钱,问可买公鸡、母鸡、小鸡个多少只? 小鸡3 问可买公鸡、母鸡、小鸡个多少只? *换零钱:将十元钱换成五元、二元、一元的方法有多少种?分 换零钱:将十元钱换成五元、二元、一元的方法有多少种? 别输出各种组合情况。 别输出各种组合情况。 *鸡兔同笼:笼子里有鸡、兔若干只,其中头数为16,脚的总数 鸡兔同笼:笼子里有鸡、兔若干只,其中头数为16, 40,问笼子里有鸡、兔各多少只? 为40,问笼子里有鸡、兔各多少只? *取红、黑、白球:盒子里共有12个球,其中3个红球、3个白球、 取红、 白球:盒子里共有12个球 其中3个红球、 个白球、 个球, 6个黑球,从中任取8个球,问至少有一个红球的的取法有多 个黑球,从中任取8个球, 少种?并输出每一种具体的取法。 少种?并输出每一种具体的取法。 结论:解决不定方程求解问题的方法是将所有可能的解都验证 结论: 一遍,从中找出满足方程的多个解。 一遍,从中找出满足方程的多个解。
Question; 1. 作为最大值变量,其初值如何设? 作为最大值变量,其初值如何设? 一般有两种方法: 一般有两种方法: 取第一个数据作为最大值(或最小值) (1)取第一个数据作为最大值(或最小值)变量的初 这种方法是最常用的, 值。这种方法是最常用的,对数据范围已知和未知的 情况均适合。编程时,需先给最大(或最小) 情况均适合。编程时,需先给最大(或最小)值变量 赋初值,再进入循环处理后面的数据。 赋初值,再进入循环处理后面的数据。 若已知待处理数据的范围, (2)若已知待处理数据的范围,则最大值变量的初值 可以取其范围下界, 可以取其范围下界,最小值变量的初值则取其范围的 上界。如该例可以用语句“max=0;”赋初值, 上界。如该例可以用语句“max=0;”赋初值,循环变 的初值改为“ 量j的初值改为“1”。 2. 若人数不定,需根据实际有效成绩计算,如何实现? 若人数不定,需根据实际有效成绩计算,如何实现?
处理矩阵问题
例3、输入行数,打印出图形。例如输入行数 为4,则打印出下列图形: * ** *** ****
一般来说,矩阵的输出都是使用两重循 环嵌套来实现的,外重循环用来循环每一 行;内重循环用来循环一行中的每一列。 本题中的处理办法就是这样wenku.baidu.com外重循环 遍历每一行,外重循环的一次打印一行的 内容,包括i 内容,包括i个’*’和一个’\n’;内重循环就要 和一个’ 实现将i 实现将i个’*’打印出来,每一次内重循环打 印一个’ 印一个’*’。
相关文档
最新文档