1、41主讲:匡纲要主讲:匡纲要国防科技大学电子科学与工程学院国防科技大学电子科学与工程学院湖南长沙湖南长沙4243q 程序控制结构q 2.1 if语句q 2.2 switch语句q 2.3 while语句q 2.4 do-while语句q 2.5 for语句 44控制结构是指这样一种结构形式,它能控制顺序执行的流程,根据判断去决定执行什么,不执行什么。控制结构控制结构 条件控制结构:(选择结构)无条件控制结构:循环控制结构:(重复结构)while 语句、do-while语句、for语句if 语句、switch语句break语句、continue语句、goto语句控制结构45if选择结构选择结构
2、if选择结构称为单路选择结构,因为这种结构所选择或忽略的动作只有一个。 if (表达式表达式) 语句语句功能:若表达式的值为非0值,则执行其后的语句;否则,将什么也不执行。表达式0语句非046if选择结构示例选择结构示例 示例if (x=0) cout“Square root of ”x“ is”sqrt(x)=0N输出 xY47if/else选择结构选择结构 if/else选择结构称为双路选择结构,因为它在两种不同动作之间作出选择。if (表达式表达式) 语句语句1else 语句语句2功能:若表达式的值为非0值,执行语句1;否则,将执行语句2。表达式 语句1 非0 语句2 048if/els
3、e选择结构示例选择结构示例 例1 下述程序实现:输入一个整数,计算它的绝对值并输出。#include void main() int i,absi; couti; if (i0) absi=i; else absi=-i; coutThe absolute value is “absi=0) cout=A&ch=a&ch=z) coutch“ is an English letter.n;else coutch is not an English letter.n;设ch=OO is an English letter.设ch=kk is an English letter.设ch=* is
4、not an English letter.411条件表达式条件表达式 C+提供了与if/else选择结构密切相关的条件运算符“?”和“:”,这是C中唯一的三目运算符。条件运算符与三个操作数一起使用构成了条件表达式。 表达式表达式1?表达式表达式2:表达式表达式3功能:若表达式1的值为非0值,则计算表达式2的值;若为0值,则计算表达式3的值。计值结果即为整个条件表达式的值。412条件表达式示例条件表达式示例 例4 承例1,可以使用条件表达式语句改写程序#include main() int i,absi; couti; absi=i0?i:-i; coutThe absolute value
5、of “i“ is”absi0) absi=i; else absi=-i;Enter an integer: 684The absolute value of 684 is 684.Enter an integer: -684The absolute value of -684 is 684.413复合语句复合语句 一对花括号及其中包含的语句集称为复合语句。 说明语句说明语句(可选可选) 执行语句执行语句 使用说明语句的复合语句称为程序块 程序中凡可使用单一语句的地方,都可使用复合语句 作为特例,函数体也就是一个复合语句414复合语句示例复合语句示例 例5 设int型变量i、j、temp,且
6、ij。执行下述if语句后,将确保i中的数值较j为大。if (ij) temp=i; i=j; j=temp;if (i0) x1=(-b+sqrt(b*b-4*a*c)/(2*a); x2=(-b-sqrt(b*b-4*a*c)/(2*a);else coutb) if(ac) max=a; else max=c;else if(bc) max=b; else max=c; if (ab) if(ac) max=a; else max=c;else if(bc) max=b; else max=c; 418扩展扩展if语句示例语句示例 例7 将百分制成绩score按相应的五等级制(A、B、C、
7、D、F)转换,并输出结果。if (score100) cout=90) cout=80) cout=70) cout=60) coutGrade D.n;else coutGrade F.n;实现六向分支419容易混淆的两个运算符:容易混淆的两个运算符: “=”和和“=” 运算符“=”:相等测试运算符(属于关系运算符)运算符“=” :赋值运算符if (grade=F) coutYou are failed.n;设grade等于FYou are failed.设grade等于A if (grade=F) coutYou are failed.n;设grade等于FYou are failed.设
8、grade等于AYou are failed.关系表达式赋值表达式420switch多路选择结构多路选择结构 switch语句以清晰、直观、简明的形式描述多路择一功能。 switch语句是多分支的选择语句。嵌套的if语句可以处理多分支选择。但是,用switch语句更加直观。它包含一系列case标号和一个可选的default子句。switch (表达式) case 常量表达式1: 语句1 break; case 常量表达式2: 语句2 break; . case 常量表达式n: 语句n break; default: 语句n+1421switch语句的执行顺序是:首先对“整数表达式”进行计算,得
9、到一个整型常量结果,然后从上到下寻找与此结果相匹配的常量表达式所在的case语句,以此作为入口,开始顺序执行入口处后面的各语句,直到遇到break语句,才结束switch语句,转而执行switch结构后的其他语句。如果没有找到与此结果相匹配的常量表达式,则从default:处开始执行语句序列n+1。422switch多路选择结构示例多路选择结构示例 例10 承例7,改用switch语句编写switch ( score/10 ) case 10: case 9: coutGrade A.n; break; case 8: coutGrade B.n; break; case 7: coutGra
10、de C.n; break; case 6: coutGrade D.n; break; case 5: case 4: case 3: case 2: case 1: case 0: coutGrade F.n; break; default: coutError!n;把n个标记列在一起,表示这些条件具有一组相同的动作。case中的多个动作不需要用花括号括起来。default子句用于集中处理例外条件。其后亦可加上break语句。423几点说明:(1)default语句是可缺省的。(2)switch后面括号中的表达式只能是整型、字符型或枚举型表达式。(3)在各个分支中的break语句起着退出s
11、witch语句的作用。 (4)case语句起标号的作用。标号不能重名 。(5)可以使多个case语句共用一组语句序列。 (6)各个case(包括default)语句的出现次序可以任意。(7)每个case语句中不必用 ,而整体的switch结构一定要写一对花括号 。(8)switch结构也可以嵌套。424C+提供了三种循环控制语句:while语句,dowhile语句,for语句。三种语句都由相似的三部分组成:进入循环的条件,循环体,退出循环的条件;完成的功能也类似。所不同的只是三者进入与退出循环的方式不同。 while语句语句:当条件满足时进入,重复执行循环体,直到条件不满足时退出。 dowhi
12、le语句语句:无条件进入,执行一次循环体后判断是否满足条件,当条件满足时重复执行循环体,直到条件不满足时退出。 for语句语句:当循环变量在指定范围内变化时,重复执行循环体,直到循环变量超出了指定的范围时退出。 425while循环结构循环结构 while语句用于循环结构,可实现按一定规律的重复计算。它采用逻辑形式来控制循环体执行的次数。while (表达式表达式) 语句语句功能:只要表达式的值为非0值,就执行语句即循环体,如此循环反复,直至表达式的值为0时为止。表达式0语句非0426while循环由4个部分组成:循环变量初始化,判断条件,循环体,改变循环变量的值。例如,计算sum=1+2+3
13、+10的while循环结构如下:int sum,i; sum=0;i=1; /循环变量初始化while (i=10) /判断条件 /循环体 sum=sum+i; i+; /改变循环变量的值427while循环结构示例循环结构示例例11 设int counter;欲输出5句(每句一行)如下同样形式的文字信息I like C+!可写counter=1; while (counter=5) printf(I like C+!n); counter=counter+1;谨防“多一错误”或“丢一错误”!countercounter=5屏幕输出I like C+!I like C+!I like C+!I
14、 like C+!I like C+!1 2 3 4 5 6 1 0 428while循环结构示例循环结构示例例12 输出一串字符char ch;ch=A; while (ch=K) coutch; ch=ch+1;coutendl;ABCDEFGHIJK429while循环结构示例循环结构示例例13 计算前N(设N=100)个自然数中所有奇数之和,并输出结果。/ program c2_06.cpp #include void main() const int N=100; int sum,counter; sum=0; counter=1; while (counter=N) sum=sum
15、+counter; counter=counter+2; coutThe total is “sum2) coutNULL OPERATIONn;/* 相当于空操作语句 */while (1&2)=1) coutINFINITE LOOP!n;/* 形成无限循环! */while循环结构:“先判断,后执行”。431注意:(1)如果循环体包含一个以上的语句,则应该用花括号括起来,以块语句形式出现。(2)仔细定义循环变量的初始值和判断条件的边界值。(3)对条件表达式的计算总是比循环体的执行多一次。这是因为最后一次判断条件为假时不执行循环体。(4)当循环体不实现任何功能时,要使用空语句作为循环体,表
16、示为:while (条件表达式) ;(5)循环体中,改变循环变量的值很重要。如果循环变量的值恒定不变,或者当条件表达式为一常数时,将会导致无限循环(也即死循环)。若要退出一个无限循环,必须在循环体内用break等语句退出。 432do-while循环结构循环结构do-while循环结构与while循环结构类似。但后者“先判断,后执行”,而前者“先执行,后判断”。功能:反复执行语句即循环体,直到表达式的值为0时为止。复合语句do 语句语句 while (表达式表达式);单一语句do 语句语句while (表达式表达式);0非0表达式 语句 433例如:计算sum=1+2+3+10的dowhile
17、循环结构如下:sum=0;i=1; /循环变量初始化do /循环体 sum=sum+i; i+; /改变循环变量的值 while (i=10) /判断条件 与while语句不同的是:while语句有可能一次都不执行循环体,而dowhile循环至少执行一次,因为直到程序到达循环体的尾部遇到while时,才知道继续条件是什么。 434do-while循环结构示例循环结构示例例15 用do-while语句改写例11counter=1; do coutI like C+!n); counter=counter+1; while (counter=5);例16 用do-while语句改写例12ch=A;
18、 do coutch; ch=ch+1; while (ch=K);cout2) coutI like C+!n;do-while语句do cout2);空操作语句输出一行文字信息while语句是“先判断,后执行”,do-while语句是“先执行,后判断”,当while语句相当于空操作语句时,形式上的替换就有可能发生问题。do if (12) cout2);436do-while循环结构示例循环结构示例例18 判断输入值value0,9int value;do coutvalue; while (!(value=0&value=9);或写do coutvalue; while (value9)
19、;用while语句改写int value=-1;while (!(value=0&value=9) coutvalue;437do-while循环结构示例循环结构示例例19 设i,j均大于0。求i与j的最大公因子并输出该数值。do k=i%j; i=j; j=k; while (j!=0);coutThe largest common factor is “i“.n”;设i=123 j=27The largest common factor is 3.设i=77 j=24The largest common factor is 1.438do-while循环结构特例循环结构特例例20 两个特例
20、do coutEXECUTE ONLY ONCEn;while (1!=1);/* 仅执行一次 */ do coutINFINITE LOOP!n;while (0=1);/* 形成无限循环! */表达式值为0表达式值为1439dowhile结构与while结构中都具有一个while语句,很容易混淆。为明显区分它们,dowhile循环体即使是一个单语句,习惯上也使用花括号包围起来,并且while(表达式)直接写在花括号“”的后面。这样的书写格式可以与while结构清楚地区分开来。例如:do sum+=i+; while (i=100);440for循环结构循环结构for语句具有控制循环执行次数
21、的简明形式。它常使程序设计更为简单明了。for (表达式表达式1;表达式表达式2;表达式表达式3) 语句语句功能:以表达式1作为控制变量初值,表达式2作为继续循环的条件,表达式3作为递增控制变量的值,以确定次数执行语句即循环体。0非0表达式2 表达式1 语句 表达式3 441for循环结构示例循环结构示例例21 用for语句改写例11for (counter=1;counter=5;counter=counter+1) coutI like C+!n;例22 用for语句改写例12for (ch=A;ch=K;ch=ch+1) coutch;coutendl;442for循环结构示例循环结构示
22、例例23 用for语句改写例13中的程序/program c2_06.cpp #include void main() const int N=100; int sum,counter; sum=0; for (counter=1;counter=N;counter=counter+2) sum=sum+counter; coutThe total is “sum“.n;The total is 2500.443for循环结构特例循环结构特例例24 两个特例for (i=6;i=6;i=i+1) coutEXECUTE ONLY ONCEn;/* 仅执行循环体一次 */for (ch=Z;ch
23、=Y;ch=ch-1) coutDO NOTHINGn;/* 相当于空操作语句 */for循环结构:“先判断,后执行”。444for循环结构变型循环结构变型for语句的三个表达式可以部分地或全部省略,但其中的分号必须保留。例25 承例21,可以改写为counter=1;for (;counter=5;counter=counter+1) coutI like Turbo C!n;或者counter=1;for (;counter=5;) coutI like Turbo C!n; counter=counter+1;445选取选取for循环结构中诸表达式示例循环结构中诸表达式示例示例(1)控制变量的值为1、2、3、98、99、100for (i=1;i=1;i=i-1)(3)控制变量的值为7、14、21、28、35、42、77for (i=7;i=2;i=i-2)(5)控制变量的值为A、D、G、J、M、P、S、V、Yfor (ch=A;ch=Z;ch=ch+3)