华中科技大学c课件4

上传人:lizhe****0001 文档编号:57375328 上传时间:2018-10-21 格式:PPT 页数:93 大小:970.08KB
返回 下载 相关 举报
华中科技大学c课件4_第1页
第1页 / 共93页
华中科技大学c课件4_第2页
第2页 / 共93页
华中科技大学c课件4_第3页
第3页 / 共93页
华中科技大学c课件4_第4页
第4页 / 共93页
华中科技大学c课件4_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《华中科技大学c课件4》由会员分享,可在线阅读,更多相关《华中科技大学c课件4(93页珍藏版)》请在金锄头文库上搜索。

1、第四章 循环控制,代码复用,省时省力,循环定义及要点,循环就是反复执行某些动作,网络与计算中心,随着循环不断地执行,必须有一种方法使得循环控制条件最终不成立,循环可以退出,否则,就构成死循环,程序永远无法终止。,引例,在现实生活中,经常会遇到评委打分的情况,比如奥运会中的跳水项目,评选优秀班集体等。 评委打分的过程大致是这样的,假设有n个评委,每个评委根据自己的判断给出一个分值,然后在n个评委的打分中去掉最高分和最低分,对剩下的分数取平均值。现在把问题简化为不去掉最高分和最低分,直接取平均值作为选手的最终得分。,EX4.1,真,假,输入一个评委的评分,将评分累加到总分中,求平均得分,评分: d

2、ouble score;,平均分: double avg;,评委人数 int n; 当前评委编号 int i;,总分: double sum;,还有评委的评分没有输入,EX4.1,真,假,输入一个评委的评分,将评分累加到总分中,求平均得分,评分: double score;,平均分: double avg;,评委人数 int n; 当前评委编号 int i;,总分: double sum;,cinscore;,sum+=score;,avg=sum/n;,还有评委的评分没有输入,i=n,EX4.1,真,假,int n; /评委人数 int i; /当前评委编号 double score; /评

3、分 double sum; /总分 double avg; /平均分,iscore; sum+=score;,avg=sum/n;,i=1;,sum=0;,i+;,4.1循环语句,网络与计算中心,4.1.1 for语句,规范的结构,for ( 表达式1; 表达式2; 表达式3 ) 循环体语句 ,初始表达式:对表达式2中的循环控制变量赋初值变量,循环控制逻辑表达式: 循环控制变量,循环后置表达式: 改变表达式2中的循环控制变量的值,for 语句的格式,EX4.1,真,假,#include using namespace std; int main() int n=12; /评委人数 int i;

4、 /当前评委编号 double score; /评分 double sum; /总分 double avg; /平均分return 0; ,iscore; sum+=score;,avg=sum/n;,i=1;,sum=0;,i+;,EX4.1,EX4.1,sum=0; for( i=1; iscore; sum+=score; avg=sum/n; cout“avg=“avgscore; sum+=score; ,for循环的变化形式,for循环的变化形式,for循环的变化形式,表达式1可以为空,赋初值的操作可以放在循环语句之前i=1;sum=0;for(; iscore; sum+=sco

5、re; ,for循环的变化形式,表达式2可以为空,但两个分号不能少,分号用来区分3个表达式,表达式2为空是表达式永远为真的情况,需要在循环体中,根据一定的条件,以break语句跳出。 for( i=1,sum=0; ; i+) if(in) break; cinscore; sum+=score; ,for循环的变化形式,for循环的变化形式,表达式3可以为空for( i=1,sum=0; iscore; sum+=score; i+; ,for循环的变化形式,编程计算 s=1+2+3+4+100 s=s+1 s=s+2 s=s+3 s=s+100,s=s+i ; i+;,举例:,变量: in

6、t s=0, i=1,举例延伸:,求 s=1-1/3+1/5-1/7+.+1/n 求 e=1+1/1!+1/2!+1/3!+.+1/n!,s=s+1/item*sign; item=item+2; sign=-sign;,s=s+1/item; i=i+1; item=item*i;,4.1.2 while语句,当循环,while (表达式 ) 循环体语句;,while语句格式,循环开始前对循环条件进行初始化,在循环体语句中要包含修改循环条件的语句,否则循环将不能终止而陷入死循环。,EX4.1,sum=0; i=1; while ( iscore; sum+=score; i+; avg=su

7、m/n; cout“avg=“avgscore; sum+=score; i+; ,for( i=1 ; iscore; sum+=score;,for循环,while循环,结构上有差别 功能相同,循环初始表达式和后置表达式作为结构的一部分,4.1.3 dowhile语句,直到循环,do-while 语句格式,do 循环体语句; while (表达式 );,EX4.1,真,假,cinscore; sum+=score;,avg=sum/n;,i=1;,sum=0;,i+;,iscore; sum+=score; i+; while ( i=n ); avg=sum/n; cout“avg=“a

8、vgi; while ( i=5 ) sum+=i; i+; cout“sum=“sumi; do sum+=i; i+; while ( i=5 ); cout“sum=“sumendl;,Dowhile循环,i5,4.1.4 三种语句的共性和区别,依据实际问题选择适合的语句,三种语句的共性和区别,三种语句的共性和区别,循环算法的设计,循环条件表达式 找出决定循环次数的变量 用这些变量构成表达式,循环体:考虑一次循环过程的所有细节 每次循环要完成的目的操作 进入下一次循环前要进行的预处理操作 使用相同变量,相同程序语句完成每一次循环,注意: 在每一次循环中,必须对决定循环执行次数的变量的值进

9、行更新,EX4.4,多少年: int i; 初值: i=0; 利滚利:循环结构 循环控制变量:小张的积蓄 小张的积蓄:double m; 循环执行条件:m20 循环控制变量的初值: m=10;,小张现在有10万元储蓄,将这笔钱存在银行,年利率为5%,并且利滚利,问:多少年后,小张的积蓄能够翻一番?,循环体 计算积蓄:m=m*1.05; 累加年数:i+;,循环条件,EX4.4,#include using namespace std; int main() double m=10; int i=0; while(m20) m=m*1.05; i+; cout“i=“iendl; return 0

10、; ,多少年: int i; 初值: i=0; 利滚利:循环结构 循环控制变量:小张的积蓄 小张的积蓄:double m; 循环控制变量的初值: m=10; 循环执行条件:m20,循环体 计算积蓄:m=m*1.05; 累加年数:i+;,4.1.5 多重循环,把一个循环结构看成一个整体,多重循环,在用三种语句实现的循环结构中,循环体语句是一条语句或者是用 括起来的复合语句。 如果把一个循环结构看成一个整体,它相当于一条语句,也可以出现在for、while或者do-while之下作为循环体语句,这样就构成了多重循环。,多重循环举例,编写程序打印如下图形。,先解决打印一行的问题:for(j=1;j=

11、5;j+)cout“*“;,将其重复5次,for i=1;i=5;i+) for(j=1;j=5;j+)cout“*“;coutendl;,多重循环举例,编写程序打印如下图形。,for i=1;i=5;i+) for(j=1;j=5 ; j+)cout“*“;coutendl;,for(j=1;j=i ; j+),多重循环举例,编写程序打印如下图形。,for i=1;i=5;i+) coutendl;,for(j=1;j=i ; j+) cout“*“;,for(j=1;j=5 i ; j+)cout“ “;,EX4.7,要解决这一类问题,主要有以下几个问题要解决: 当边长为n时共需要打印多少

12、行 每一行第一个*前有多少个空格,与n和行数是什么关系? 每行的*号数及*后的空格数,与n和行数是什么关系?,n=4,问题的细化:上三角&下三角,上三角,下三角,问题的细化:上三角&下三角,边长n=4 上三角,/输出第i行,共执行n次 for( i=1; i=n; i+ ) 输出n-i个空格输出i个”星号空格”换行 ,每行前的空格数及星号数与行数i及边长n的关系,打印上三角,int j; /输出上三角的n行,i为行号 for(i=1;i=n;i+) /输出n-i个空格for( j=1;j=n-i;j+ ) cout ;/输出i个星号及空格for( j=1;j=i;j+ ) cout“* “;

13、/换行coutendl; ,打印上三角,/输出第i行,共执行n-1次 for(i=1; i=n-1; i+) 输出i个空格输出n-i个”星号空格”换行 ,每行前的空格数及星号数与行数i及边长n的关系,打印下三角,/输出下三角的n-1行,i为行号 for(i=1;i=n-1;i+) /输出i个空格for( j=1;j=i;j+ ) cout ;/输出n-i个星号及空格for( j=1;j=n-i;j+ ) cout“* “; /换行coutendl; ,打印下三角,4.2 流程控制语句,网络与计算中心,break & continue,while ( E1 ) 语句 1if ( E2 ) con

14、tinue ;语句 2 ,while ( E1 ) 语句 1if ( E2 ) break ;语句 2 ,break,continue,T,T,F,F,F,F,T,T,例:输出1100内3的倍数。 分析:设置整型变量I从1变化到100,依次测试I是否3的倍数,算法属于穷举法。,for (int i=1;i=100;i+) if ( i%3!=0) continue;/i不是3的倍数,转向下一次循环coutit; /当i是3的倍数,输出i; ,break & continue,EX4.8,算法如下: for(i=2;im; for(i=2;i=m) /在i从2变到m-1中,m%i=0始终不成立coutm“是素数“endl; elsecoutm“不是素数“endl;,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号