第五章C#的流程控制(三)流程控制的一般形式顺序结构控制、分支结构控制、循环结构控制循环结构控制:使程序反复执行某段语句,减少程序的重复,加强处理数据的能力循环结构程序的关键问题–如何设置进入循环的条件:循环控制条件–如何设置循环体:需要反复执行哪些操作循环结构的程序需要通过一定的方式(语句)来实现,从而完成对数据的循环操作处理–固定次数的循环–循环的次数是可以事先确定的–非固定次数的循环–循环的次数是不可以事先确定的C#的流程控制for语句用来实现固定次数的循环控制for(循环控制变量=初始值;关系表达式;更新值){//循环体}(1)为循环控制变量赋初始值(通常为整型或字符型)(2)关系表达式的目的是给出当循环控制变量的值在什么范围时进行循环。判断关系表达式的值,如果该值为true则执行循环体;否则终止for循环(3)更新循环控制变量的值,回到第2步C#的流程控制:循环结构控制---固定次数循环---for语句for语句用来实现固定次数的循环控制for(;;){//循环体break;continue;}死循环break:强行跳出循环体continue:强行结束本次循环,进入下一次循环C#的流程控制:循环结构控制---固定次数循环---for语句[例]求S=1+2+3+…+100intsum=0;for(inti=1;i=100;i++)sum+=i;Console.WriteLine(sum);Console.ReadLine();sum=0;for(inti=100;i=1;i--)sum+=i;Console.WriteLine(sum);Console.ReadLine();C#的流程控制:循环结构控制---固定次数循环---for语句举例[例]求S=1+1/2+1/3+…+1/nfloatsum=0;floatn;n=float.Parse(Console.ReadLine());for(inti=1;i=n;i++)sum=sum+1/(float)i;Console.WriteLine(sum);特点:对循环控制变量加工后再使用C#的流程控制:循环结构控制---固定次数循环---for语句举例[例]求S=1+1/1!+1/2!+1/3!+…+1/n!floatsum=1,s=1;floatn;n=float.Parse(Console.ReadLine());for(inti=1;i=n;i++){s*=i;sum=sum+1/s;}Console.WriteLine(sum);循环体中有多条语句C#的流程控制:循环结构控制---固定次数循环---for语句举例[例]给国际象棋发明者的奖励,计算应给多少粮食–奖励方案:棋盘的第一格中放一粒米,第二格中放2粒,第三格中放4粒,第四格中放8粒…»思路:–循环控制条件:1至64,反复64次–循环体:不断计算累计和C#的流程控制:循环结构控制---固定次数循环---应用举例[例]求n个随机数的最大数和最小数问题»思路:–循环控制条件:1至n,反复n次–求解策略:通过“打擂台”方式找最大数和最小数»特点:–初始擂主值的设定–最大数单元设置为一个较小数–最小数单元设置为一个较大数C#的流程控制:循环结构控制---固定次数循环---应用举例[例]简单统计:分类汇总。随机生成N名学生的成绩和性别,分别计算男女生的平均成绩。»思路:–循环控制条件:1至n,反复n次–循环体:根据不同性别,不断分别计算累计和–在哪里计算平均成绩?»特点:–循环结构中套分支结构–对性别数据的输出处理»TabControl控件–Tabpages属性C#的流程控制:循环结构控制---固定次数循环---应用举例[作业]简单统计:频数统计。从5个侯选人中选举一名班长。5个侯选人的代号为1、2、3、4、5。每个投票人只能投1票。如果输入大于5或小于0的,则为废票。分别统计5个侯选人的得票数,以及费费票数。»要求:»随机产生n个数据»记录原始数据»输出最后的统计数据[作业]找到3名百米跑选手中冠军的成绩和学号»解题思路:求最小数问题;保存数据项:成绩、学号»要求:»记录所有原始数据»输出冠军的成绩和学号C#的流程控制:循环结构控制---固定次数循环---应用举例while语句while(条件表达式){//循环体}首先计算条件表达式,如果该表达式的结果为true,则执行循环体再重新计算条件表达式,如果该表达式的结果仍然为true,则再次执行循环体,否则跳出循环循环体可能被执行0次或多次循环体中应有能够改变循环控制条件的语句可以在循环体中使用break或continue结束循环或直接进入下一次循环C#的流程控制:循环结构控制---非固定次数循环Do…while语句do{//循环体}while(条件表达式)首先执行一次循环体计算条件条件表达式,如果该表达式的结果为true,则再次执行循环体,否则跳出循环循环体至少被执行1次循环体中应有能够改变循环控制条件的语句可以在循环体中使用break或continue结束循环或直接进入下一次循环C#的流程控制:循环结构控制---非固定次数循环[例]中国人口基数13亿,自然增长率为1.1%;印度人口基数为8.5亿,自然增长率为2.2%。计算印度人口几年后赶上中国人口»思路:–循环控制条件:印度人口小于中国人口时,循环次数不能事先确定–求解策略:逐年计算两国的人口数,并累计年数»特点:–体会不同语句的用法和含义–循环控制条件的改变方式:隐含C#的流程控制:循环结构控制---非固定次数循环---应用举例s=0;for(inti=1;i=5;i++)s=+i;C#的流程控制:循环结构控制---固定次数与非固定次数循环的转换s=0;inti=1;do{s+=i;i++;}while(i=5);s=0;inti=1;while(i=5){s+=i;i++;}什么是多重循环–如果一个循环结构的循环体中又嵌套了另一个循环结构,则该结构称为循环嵌套,是一个多重循环程序例如:5名男生和7名女生跳舞,输出所有组对情况for(inti=1;i=5;i++)for(intj=1;j=7;j++)Console.WriteLine(男{0}女{1},i,j);C#的流程控制:循环结构控制---多重循环执行顺序:–如果外层循环次数为n,内重循环次数为m,则:外层循环每执行一次,内层循环都执行m。共执行n×m次书写规则:–内外循环控制变量不能够重名–内层循环必须写在外重循环的内部,内外重循环不能够骑跨[例]****************************************************»思路:–利用双重循环的程序结构»特点:–双重循环的控制技巧(次数控制)[练习]求S=1+1/1!+1/2!+1/3!+…+1/n!C#的流程控制:循环结构控制---多重循环应用举例for(inti=1;i=10;i++){for(intk=1;k=10-i;k++)Console.Write('');for(intj=1;j=2*i-1;j++)Console.Write('*');Console.WriteLine();}[例]百钱百鸡问题:鸡翁一、值钱五;鸡婆一、值钱三;鸡雏三、值钱一;百钱买百鸡,问鸡翁、鸡婆、鸡雏各几?分析:鸡翁最多20只,鸡婆最多33只,鸡雏最多300只。采用穷举法,考察每种可能,是否满足百钱买百鸡。intcock=20,hen=33,chicken=300;for(inti=0;i=cock;i++){for(intj=0;j=hen;j++)for(k=0;k=chicken;k++)if(i+j+k==100&&(5*i+3*j+k/3)==100&&k%3==0)Console.WriteLine(cook={0}hen={1}chicken={2},i,j,k);}Console.ReadLine();C#的流程控制:循环结构控制---多重循环应用举例[作业]上课迟到问题。在期末考试成绩中扣除迟到得分»迟到第1次扣1分;第2次扣2分;第3次扣4分;第4次扣8分…..问迟到多少次,即使期末考试得100分,总分也不及格»思路:–循环控制条件:总分大于等于60分,循环次数不能事先确定–求解策略:逐次计算累计扣分和剩余分,并累计次数»特点:–循环体内的累计和计算–循环控制条件的改变方式:明确[作业]打印各种图形»矩形:执行行数和列数»三角型:指定行数和方向C#的流程控制:循环结构控制