您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 第05章循环程序结构设计
1第5章循环程序结构设计在编写程序过程中,往往出现相同类型操作需要重复出现,如实现1+2+…+100,则需要做99次加法,这类问题使用循环语句解决,可以使问题变得简单。即循环语句用于实现语句块的重复执行。根据问题的具体情况,C#中提供了四种不同的循环机制:for循环while循环do…while循环foreach循环5.1for循环语句for循环常常用于已知循环次数的情况,使用该循环时,测试是否满足某个条件,如果满足条件,则进入下一次循环,否则,退出该循环。5.1.1for语句的语法格式格式:for(表达式1(initializer);表达式2(condition);表达式3(iterator)){controlled-statement}其中表达式1的用于参与循环条件变量的初始化,该表达式仅执行一次;表达式2为条件判断表达式,即每次循环体开始之前,进行判断该表达式是否成立,如果成立,进入下一次循环,否则,循环结束;表达式3用于参与循环条件变量的运算,一般为递增或递减的循环计数器。流程图如图5-1。2表达式2循环体表达式1表达式3FalseTrue图5-1for循环流程图该结构中,表达式1、表达式2、表达式3是可选的,但应该注意死循环的发生。如表达式2省略,并且不采用转移语句,会导致死循环的发生。可以在〈循环体〉中的任何位置放置Break语句来强制终止For循环——随时跳出For循环。Break语句通常用于If语句之后。可以在循环体中的任何位置放置Continue语句,在整个循环体没有执行完就重新开始新的循环。Continue语句通常用于If语句之后。5.1.2for循环语句的使用根据下面的实例,了解for语句的工作流程及实现方法。【例5-1】计算1+2+3+…100。使用for语句实现。分析:该问题属于重复执行加法的问题,并且参与运算的两个操作数不断的的按规律增加。该类问题可以通过循环进行解决。使用一个标签label1和一个按钮button1进行窗体设计。窗体及控件的基本属性设计如图3-9左图。在窗体设计图上,双击按钮button1编写相应的方法。代码如下。privatevoidbutton1_Click(objectsender,System.EventArgse){intsum;sum=0;for(intk=1;k=100;k++){sum=sum+k;}label1.Text=从加到100值为+sum.ToString();//将sum显式转换为字符串}程序的运行结果如图5-2左图,单击“计算”按钮,将在标签上显示运行结果,如图5-2右图。3图5-2程序运行结果privatevoidbutton1_Click(objectsender,System.EventArgse){intsum;sum=0;for(intk=1;k=100;k++){sum=sum+k;}label1.Text=从加到100值为+sum.ToString();//将sum显式转换为字符串}该例中,首先声明一个用于存放和的变量sum,然后通过循环改变sum的值。for循环的执行过程如下:首先执行第一个表达式“intk=1;”,初始化用于循环的变量的值,需要注意的是该表达式仅执行一次。然后执行第二个表达式“k=100;”,如果该表达式的值为True,则进入循环,当循环体执行过程中遇到“continue”命令或“}”时,就结束本次循环,进行执行第三个表达式“k++;”,再次对表达式二进行判断,进入下次循环;如果该表达式的遇到“break”命令或表达式的值为False时,将结束循环。“continue”命令和“break”命令在后面讲述。本例中,共执行循环100次。在第101次时,结束循环。上例中循环体中的语句为简单语句,同样,循环体中的语句可以为复杂语句,如下例中计算“1!+2!+…n!”的值。【例5-2】使用for语句实现计算“1!+2!+…n!”的值。分析,该题中,首先要计算m!的值,然后使用上题中的方法将值累加。在这个过程中,使用两个变量sum1、sum2,用于存放计算的值。界面设计如图5-3。其中numericUpDown1控件Maxinum属性设置为1000000000。图5-3程序运行结果4双击button1按钮,添加相应的代码实现累加功能。代码如下。privatevoidbutton1_Click(objectsender,System.EventArgse){intsum1,sum2;sum1=0;sum2=1;intn=(int)numericUpDown1.Value;//类型转换for(intk=1;k=n;k++){sum2=1;//每次求阶乘前应把sum2置为1for(intm=1;m=k;m++)sum2=sum2*m;sum1=sum1+sum2;}label2.Text=1!+2!+...+n!+的值为+sum1.ToString();}【例5-3】一农场小母牛第4年开始生一头小母牛,以后每年生一头小母牛。假设新生一头小母牛,问第10年共多少小母牛。(死亡等情况不考虑)该问题是一个循环问题,从第4个年头开始,该小母牛每年生一头小牛,每只小牛都是这样。那么,从第4年开始,每年的母牛的总数是上面第一年和上面第3年的总和。程序设计如图5-4。图5-4计算母牛的总数该题的窗体及控件设计如图5-4左图。实现代码如下。privatevoidbutton1_Click(objectsender,System.EventArgse){intsum4=1;intsum1=1;intsum2=1;intsum3=1;for(inty=4;y=10;y++){sum4=sum4+sum1;sum1=sum2;sum2=sum3;sum3=sum4;}label2.Text=十年后母牛的总数是+sum4.ToString();5}5.2while循环语句与for循环语句比较,while语句使用的频率要低一些,它可以用于不知道循环次数的情况;用于在循环时判断满足某个条件。每一次再循环的顶部进行检测循环是否继续,当循环的条件为假时,退出循环。5.2.1while循环语句的语法格式格式:while(布尔条件表达式(condition)){循环体(controlled-statement)}布尔条件表达式是每次循环开始前进行判断的条件,当条件表达式的值为真时,执行循环否则,退出循环。该语句结构的流程图如图5-5所示。条件表达式循环体TrueFalse图5-5while程序流程图说明:(1)〈条件表达式〉是一个具有Boolean值的条件表达式,为循环的条件。(2)〈循环体〉可以是简单语句、复合语句和其他结构语句。(3)While循环的执行过程:首先计算〈条件〉的值,如果〈条件〉为真(True),则执行后面的循环体,执行完后,再开始一个新的循环;如果〈条件〉为假(False),则终止循环,执行〈循环体〉后面的语句。(4)可以在〈循环体〉中的任何位置放置Break语句来强制终止While循环——随时跳出While循环。Break语句通常用于If语句之后。(5)可以在循环体中的任何位置放置Continue语句,在整个循环体没有执行完就重新判断〈条件〉,以决定是否开始新的循环。Continue语句通常用于If语句之后。5.2.2while循环语句的使用【例5-4】如图5-6所示,我国古代著名的“百钱买百鸡”:每只公鸡值5元,每只母鸡值3元,三只小鸡值1元,用100元买100只鸡,问公鸡、母鸡和小鸡各买几只?6图5-6百钱卖百鸡设能买x只公鸡,y只母鸡,z只小鸡,本例中要解决的问题中隐含了两个方程:5*x+3*y+z/3=100;x+y+z=100。由于2个方程式中有3个未知数,属于不定方程,无法直接求解。可以用“穷举法”来进行“试根”,即将各种可能的x、y、z组合一一进行测试,将符合条件者输出即可。该题窗体及控件的属性设计如图5-6左图。“计算”按钮的代码如下。privatevoidbutton1_Click(objectsender,System.EventArgse){intx=0,y,z=0;while(x100){y=0;while(y100){z=100-x-y;if(5*x+3*y+z/3==100)listBox1.Items.Add(x.ToString()++y.ToString()++z.ToString());y++;}x++;}}【例5-5】在【例5-3】的基础上计算多少年时会有50只小母牛。图5-7程序运行结果7窗体及控件的属性设计如图5-7。实现代码如下。privatevoidbutton1_Click(objectsender,System.EventArgse){intsum4=1;intsum1=1;intsum2=1;intsum3=1;inty=4;while(y100){sum4=sum4+sum1;sum1=sum2;sum2=sum3;sum3=sum4;if(sum450){label2.Text=母牛的总数多于50的是+y.ToString();break;}elsey++;}}该问题使用break语句跳出循环,因为当满足sum450时,是要计算的y的值。程序运行结果如图5-7。5.3do…while循环do…while循环非常类似于while循环。一般情况下,可以相互转换使用。它们之间的差别在于while循环的测试条件在每一次循环开始时执行,而do…while循环的循环的测试条件在每一次循环体结束时进行判断。同样的,do…while可以一些循环问题,但使用的频率较少。5.3.1do…while的语法格式do…while的一般格式:do{循环体(controlled-statement)}while(布尔条件表达式(condition))说明:(1)〈布尔条件表达式〉是一个具有Boolean值的条件表达式,为循环的条件。(2)〈循环体〉可以是一条语句,也可以是多条语句。(3)循环的执行过程:首先执行〈循环体〉,然后计算〈条件〉的值,如果〈条件〉为假8(False),则开始一个新的循环;如果〈条件〉为真(True),则终止循环,执行Until〈条件〉后面的语句。(4)可以在循环体中的任何位置放置Break语句来强制终止do…while循环——随时跳出循环。Break语句通常用于If语句之后。(5)可以在循环体中的任何位置放置Continue语句,在整个循环体没有执行完就重新判断〈条件〉,以决定是否开始新的循环。Continue语句通常用于If语句之后。该语句结构的程序流程图如图5-8。循环体布尔条件表达式TrueFalse图5-8do…while语句的流程图根据流程图可以看出,该循环的循环体至少执行一次。举例分析。代码段一:inta=0;while(a0){a--;}变量a初始值为0,条件a0显然不成立。所以循环体内的a--;语句未被执行。本段代码执行后,变量a值仍为0;代码段二:inta=0;do{a--;}while(a0);尽管循环执行前,条件a0一样不成立,但由于程序在运行到do...时,并不先判断条件,而是直接先运行一遍循环体内的语句:a--。于是a的值成为-1,然后,程序才判断a0,发现条件不成立,循环结束。95.3.2do…while的使用【例5-6】使用do-while语句实现1+2+3+…100。窗体及控件的属性设计见【例5-1】。代码如下。privatevoidbutton1_Click(objectsender,System.EventArgse){intsum;sum=0;intk=1;do{sum=sum+k;k++;}while(k=100);label1.Text=从1加到100值为+sum.ToString();//将sum显式转换为字符串}5.4列表框和组合框C#中可为用户提供批量选项来实现选择输入的控件除了前面介绍的单选
本文标题:第05章循环程序结构设计
链接地址:https://www.777doc.com/doc-2241093 .html