第4章结构化程序设计本章主要介绍结构化程序设计的概念,三种基本控制结构以及C#中的常用语句。程序是由语句构成的,C#的常用语句包括:简单语句、条件语句、分支语句、循环语句、跳转语句等。只有很好地掌握程序设计语言的各种语句,才能构造正确的和结构良好、清晰的程序。2C#程序设计实用教程4.1结构化程序设计的概念结构化程序设计的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都是由顺序、选择、循环三种基本控制结构进行构造。3C#程序设计实用教程4.1.1结构化程序设计的概念及算法的概念结构化程序设计是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块。由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便。按照结构化程序设计的观点,任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合:顺序结构、选择结构和循环结构来实现。4C#程序设计实用教程4.1.1结构化程序设计的概念及算法的概念结构化程序设计的基本思想是采用“自顶向下,逐步求精”的程序设计方法和“单入口单出口”的控制结构。“自顶向下、逐步求精”的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图;“单入口单出口”的思想认为一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。5C#程序设计实用教程4.1.1结构化程序设计的概念及算法的概念结构化程序设计的实质是控制编程中的复杂性。在此,我们来关注一下程序设计的主要步骤:(1)分析问题。(2)确定算法。(3)画出程序流程图。(4)编写程序。(5)调试程序。(6)建立健全的文档资料。6C#程序设计实用教程4.1.1结构化程序设计的概念及算法的概念其中,关键问题在于第2个步骤,即“算法设计”。所谓“算法”,粗略地讲,是为解决一个特定问题而采取的确定的有限的步骤。这里所说的算法,是指计算机能执行的算法。只有算法是正确的,写程序就不会有太大的困难。一个程序员应该掌握如何设计一个问题的算法或者采用已有的可行算法。计算机算法可以采用流程图来表示。7C#程序设计实用教程4.1.2流程图流程图(Flowchart),它是用一些几何框图、流向线和文字说明来表示各种类型的操作。计算机算法可以用流程图来表示,图4-1、图4-2、图4-3和图4-4是用流程图表示了结构化程序设计的3种基本结构。8C#程序设计实用教程4.2顺序结构顺序结构的流程图如图4-1所示,先执行A语句,再执行B语句,两者是顺序执行的关系。A、B可以是一个简单语句,也可以是一个基本结构,即顺序结构、选择结构或者循环结构之一。常用的简单语句包括空语句、复合语句、标签语句、声明语句和表达式语句等。9C#程序设计实用教程4.2.1空语句空语句是一种最简单的语句,它不实现任何功能,C#的空语句的形式如下:;即只有一个分号的语句。在不需要执行任何操作但又需要一条语句时,可以采用空语句来表示。10C#程序设计实用教程4.2.2复合语句可以用{}把一些语句包括起来成为复合语句,或者称为块。例如,下面就是一条复合语句:{intX,Y,Z;X=9;Y=X+10;Z=X*Y;}11C#程序设计实用教程4.2.3标签语句C#程序允许在一条语句前面使用标签前缀,其形式如下:标签名称:语句标签语句主要用于配合goto语句来完成程序的跳转功能,例如:if(X0)gotoLarge;X=-X;Large:returnX;12C#程序设计实用教程4.2.4顺序结构的实例【例4-1】编写程序计算圆的面积。usingSystem;namespaceOrderStructure{classCircle{staticvoidMain(){constdoublePI=3.14159;doubleR,S;Console.WriteLine(请输入圆的半径:);R=double.Parse(Console.ReadLine());S=PI*R*R;Console.WriteLine(圆的面积为:{0},S);}}}13C#程序设计实用教程4.2.4顺序结构的实例上面这段程序就是一个典型的顺序结构。在Circle类的Main方法中,程序根据语句出现的顺序依次执行,先是在程序中输入一个半径值,然后根据计算公式计算出圆的面积,最后将圆的面积的值进行输出。14C#程序设计实用教程4.3选择结构在实际的运算中,往往要进行复杂的逻辑判定,即给出一些条件,让程序判定是否满足条件,并按不同的情况让程序进行不同的处理。比如,输入一个考试成绩,判定它是优、良、中、及格或不及格等。或者输入两个字母,比较其ASCII码的大小,然后根据不同的情况进行相应的处理。这些问题是需要由程序按给定的条件进行比较和判定,并按判定后的不同情况进行处理,这时就需要用到选择结构。15C#程序设计实用教程4.3选择结构选择结构也是一种常用的基本结构,是根据所定选择条件为真与否,而决定从各个不同的操作分支中执行某一分支的相应操作。常用的选择结构有条件语句和分支语句。16C#程序设计实用教程4.3.1条件语句常用的条件语句有如下几种。1.if语句if语句是基于布尔表达式的值来判定是否执行后面的内嵌的语句块,其语法形式如下:if(表达式){语句块;}17C#程序设计实用教程4.3.1条件语句说明:如果表达式的值为true(即条件成立),则执行后面的if语句所控制的语句块,如果表达的值为false(即条件不成立),则不执行if语句控制的语句块。然后再执行程序中的后一条语句。if语句的程序流程图如图4-5所示。如果if语句只控制一条语句,则大括号“{}”可以省略。18C#程序设计实用教程【例4-2】编写程序实现从键盘上输入一个数,输出它的绝对值。usingSystem;classAbsDemo{staticvoidMain(){intx,y;stringstr;Console.WriteLine(请输入x的值:);str=Console.ReadLine();x=Convert.ToInt32(str);y=x;if(x0){y=-x;}Console.WriteLine(|{0}|={1},x,y);}}19C#程序设计实用教程4.3.1条件语句说明:在上例中,if条件表达式是判定x的取值是否小于0,如果x小于0,则执行if语句的控制语句“y=-x”,即将y赋值为x的绝对值;否则,不执行该控制语句,而保持y为x的输入数。20C#程序设计实用教程4.3.1条件语句2.if…else语句if…else语句是一种更为常用的选择语句。if…else语句的语法如下:if(表达式){语句块1;}else{语句块1;}21C#程序设计实用教程4.3.1条件语句说明:如果表达式的值为true(即条件成立),则执行后面的if语句所控制的语句块1,如果表达的值为false(即条件不成立),则执行if语句控制的语句块2。然后再执行程序中的后一条语句。if语句的程序流程图如图4-6所示。22C#程序设计实用教程下面通过一个实例来说明if…else语句的用法。【例4-3】根据输入的学生成绩Score的值,显示其是否及格。usingSystem;classScore{staticvoidMain(){Console.WriteLine(请您输入学生成绩:);intScore=int.Parse(Console.ReadLine());//转换为整数if(Score=60){Console.WriteLine(该成绩合格。);}else{Console.WriteLine(该成绩不合格。);}}}23C#程序设计实用教程4.3.1条件语句说明:上例中if语句和else语句后的大括号“{}”可以省略,因为它们都只控制一条语句。但显而易见,加上大括号,程序的结构更加分明。24C#程序设计实用教程4.3.1条件语句如果程序的逻辑判定关系比较复杂,通常会用到if…else嵌套语句,if语句可以嵌套使用,即在判定之中又有判定。其一般形式如下:if(表达式1)if(表达式2)if(表达式3)...语句1;else语句2;else语句3;else语句4;在应用这种if…else结构时,要注意else和if的配对关系,此配对关系是:从第1个else开始,一个else总是和它上面离它最近的可配对的if配对。25C#程序设计实用教程请看下例:if(i==80){if(j30){a=b;}if(k100){c=d;}else//这个else与if(k100)相匹配{a=c;}}else//这个else与if(k==80)相匹配{a=d;}注意:在此建议在应用if…else嵌套语句时,即使控制一条语句,也应该加上一对“{}”。26C#程序设计实用教程4.3.1条件语句【例4-4】假设考查课的成绩按优秀、良好、中等、及格和不及格分为五等,但是实际的考试成绩是百分制的,分别对应的分数段为90~100、80~89、70~79、60~69、0~59。使用嵌套的if…else语句将考试成绩转换为考查课成绩。程序代码如下所示:usingSystem;classTestScore{staticvoidMain(){intInputScore;stringOutputScore;Console.WriteLine(请输入百分制分数:);InputScore=Convert.ToInt32(Console.ReadLine());27C#程序设计实用教程4.3.1条件语句if(InputScore=70){if(InputScore=80){if(InputScore=90){OutputScore=优秀;//优秀}else{OutputScore=良好;//良好}}else{OutputScore=中等;//中等}28C#程序设计实用教程4.3.1条件语句}else{if(InputScore=60){OutputScore=及格;//及格}else{OutputScore=不及格;//不及格}}Console.WriteLine(百分制下{0}分经转换,为5分制下的{1},InputScore,OutputScore);}}29C#程序设计实用教程4.3.1条件语句3.elseif语句elseif语句是if语句和if…else语句的组合,其一般形式如下:if(表达式1)语句1;elseif(表达式2)语句2;…elseif(表达式n-1)语句n-1;else语句n;说明:当表达式1为true时,执行语句1,然后跳过整个结构执行下一条语句;当表达式1为false时,将跳过语句1去判定表达式2。若表达式2为true,则执行语句2,然后跳过整个结构去执行下一条语句,若表达式2为false则跳过语句2去判定表达式3,依次类推,当表达式1、表达式2、…、表达式n-1全为假时,将执行语句n,再转而执行下一条语句。30C#程序设计实用教程4.3.1条件语句【例4-5】实现如下功能,检查输入字符是否为小写字符、大写字符或为数字,否则,输入字符不是数字字符。程序代码如下所示:usingSystem;publicclassCharacter{staticvoidMain(){Console.Write(Enteracharacter:);charc=(char)Console.Read();31C#程序设计实用教程4.3.1条件语句if(char.IsUpper(c))Console.WriteLine(Thecharacterisuppercase.);elseif(char.IsLower(c))Console.Writ