流程控制-选择结构.ppt
Visual C+程序设计第3章 流程控制语句C+语言是结构化的程序设计语言。采用结构化程序设计方法,可以使程序的逻辑结构清晰、可读性好、可靠性强,从而提高程序的开发效率。结构化程序设计是由三种基本结构表示的,即顺序结构、选择结构和循环结构。由这三种基本结构经过反复嵌套,可以实现各种算法。函数是C+程序的基本模块,在这个基本模块中,至少应包含上述的一种基本结构,或者是三种基本结构的复合,由此就构成了C+程序和结构化特征。C+语言的结构化程序设计方法3.2.1 if 语句if条件语句有三种基本形式,简单if形式、嵌套if.else形式和阶梯else.if形式。简单if形式:if(表达式)语句块;功能:如果表达式的值为TRUE(非0),则执行后边的语句块;否则不执行表达式后面的词句块,而是继续执行整个if语句后面的语句。选择结构的功能是根据对条件的逻辑判断,决定程序中相关流程的执行路径。C+语言为选择结构提供了两种语句:if条件语句和switch开关语句。3.2 选择结构注意:注意:if中的表达式可以是一个逻辑表达式、算术表达式、中的表达式可以是一个逻辑表达式、算术表达式、甚至是一个常量。甚至是一个常量。例:3.1求输入整数的绝对值。#includevoid main(void)int a,b;couta;b=a;if(b0)b=-b;coutn|a|=bn;嵌套if.else形式:if(表达式)语句块1;else语句块2;功能:如果表达的值为非0(TRUE),则执行语句块1,否则执行语句块2。最后执行整个if.else语句后面的语句。#includevoid main()int a,b;coutab;if(a!=b)if(ab)coutBn;else coutABn;else coutA=Bn;在此例中使用了if.else形式,并且if.else语句中嵌套了另一个if.else语句。在ANSI标准中规定,编译程序至少要支持15层嵌套。两个else中第一个与内层if相配,第二个与外层if相配。在嵌套的if语句中,else总是与它最接近的if语句相配。例例3.23.2比较两个输入数的大小。比较两个输入数的大小。if(表达式1)语句块1;else if(表达式2)语句块2;else if(表达式3).语句块3;.else语句块n;功能:从表达式1开始,依次计算,如果某个表达式为非0(TRUE),则执行该表达式后边的语句块,然后转到整个if语句后面的语句。如果所有表达式的值都为0(FLASE),则执行else后面的语句块n;该结构中,最后一个else可以没有,或者只有一个。阶梯型的else.if#includevoid main(void)int x,y,z,max;coutxyz;max=x;if(zy)if(zx)max=z;elseif(yx)max=y;coutmax_num=maxy)if(zx)max=z;elseif(yx)max=y;例3.3从输入的三个数中求最大的数。(含错误的程序)x,y,zMax=xMax=xMax=zMax=yX,y,zMax=xMax=zMax=yZy?Zx?Yx?Zy?Zx?Yx?FTFTTTTFFFMax=x开关选择语句又称为多路分支语句,它根据一个量的多种不同可能,选择执行程序的某一个分支。其一般形式如下:其一般形式如下:switch(switch(表达式表达式1)1)case case 表达式表达式2 2:语句块:语句块1 1;break;break;case case 表达式表达式3 3:语句块:语句块2 2;break;break;。case case 表达式表达式n n:语句块:语句块n;n;break;break;default:default:语句块语句块n+1;n+1;break;break;3.2.2 switch.case开关选择语句执行switch语句时,先计算括号内的值,然后,将其结果值与各个case语句中的常量值相比较,当与某个一致时,就执行该case后面的语句块,直到碰到break或者switch语句执行完为止。若没有一个常量与表达式的值相等,则执行default语句。default是可选的,如果defualt不存在,并且所有的常量与表达式不相等,就不进行任何处理。功能:(1)switch语句中,表达式的类型必须是整形或字符形;如果使用字符形,C+将自动将其转换成为整形,也就是实际使用的该字符所对应的ASCII值,对应的case也一样。(2)switch语句与if语句的不同之外在于,if语句可以计算关系表达式或逻辑表达式,而switch只能对等式进行测试。(3)在同一个switch语句中,任意两个case的表达式的值不允许相同。(4)在switch语句中,break语句终止当前所在case的语句块,并退出switch语句,否则将自动进入下一个case语句块中。注意:#includevoid main(void)int i,flag=1;couti;switch(i)case 1:;case 2:;case 3:flag=0;break;case 4:flag=-1;case 5:couterror=flagendl;break;default:cout.put(char)i);程序说明:(1)每个case都可以有空语句。在这个例子中前三个case都执行了同样的语句:flag=0;break;(2)如果break语句不存在,就将在下一个case中继续执行。例中,如果i=4,那么flag=-1,由于没有break语句,继续执行,这样cout.put(char)i);也就被执行。如果i=5,putchar;将被调用。(3)一般情况下,switch可由if语句替代,本例可改写为if.else语句如下:#includevoid main(void)int i,flag=1;cin i;if(i=1&i=3)flag=0;break;else if(i=4)flag=-1;cout“error=“flag;break;else if(i=5)cout“error=”flag;break;else cout.put(char)i);