第3章 选择结构
第3章 结构化程序设计语句

图3-16 程序运行界面
3.3.2 上机练习二:捉拿肇事司机 上机练习二:
【练习题目】 练习题目】 题目 一辆卡车违反交通规则,撞死行人, 一辆卡车违反交通规则,撞死行人,司机畏罪驾车逃 当时有三个人目击这一车祸的发生, 跑。当时有三个人目击这一车祸的发生,但都没有看清卡 车的牌照号码,只记住牌照号码的部分特征, 车的牌照号码,只记住牌照号码的部分特征,甲记住牌照 号码的前两位数字是相同的, 号码的前两位数字是相同的,乙记住牌照号码的后两位数 字是相同的,丙是一位数学家,他说“ 字是相同的,丙是一位数学家,他说“车牌号码肯定是四 位数,而且恰好是一个整数的平方。 位数,而且恰好是一个整数的平方。”,并且丙已推导出 符合该条件的号码只可能有一个。 符合该条件的号码只可能有一个。根据这些信息来判定车 牌号并捉拿肇事司机。要求编写控制台应用程序。 牌号并捉拿肇事司机。要求编写控制台应用程序。
3.1 循序渐进学理论
3.1.1 if语句 语句
1.用if语句实现单分支选择结构 . 语句实现单分支选择结构 [格式 :(表达式 语句 格式]: 表达式 语句; 表达式) 格式
图3-1 单分支选择结构执行流 程图
编写一个程序实现如下功能: 【 例 3-1】 编写一个程序实现如下功能 : 输入一个成绩, 如果成绩大于等于60 60则输出 输入一个成绩 , 如果成绩大于等于 60 则输出 恭喜您,您通过了这次考试! “恭喜您,您通过了这次考试!”,否则不输 出任何信息。要求编写成控制台应用程序。 出任何信息。要求编写成控制台应用程序。
[格式2]:randomObj.Next(N) 格式2]: 2] 例如,有下列语句: 例如,有下列语句: Random randomObj=new Random() i=randomObj.Next(10 10) i=randomObj.Next(10); 其作用是产生一个0~9之间的随机整数并赋值给变量i 0~9之间的随机整数并赋值给变量 其作用是产生一个0~9之间的随机整数并赋值给变量i。 格式3] 3]: [格式3]:randomObj.Next(N,M) 例如,有下列语句: 例如,有下列语句: Random randomObj=new Random() i=randomObj.Next(5 10) i=randomObj.Next(5,10); 其作用是产生一个5~9之间的随机整数并赋值给变量i 5~9之间的随机整数并赋值给变量 其作用是产生一个5~9之间的随机整数并赋值给变量i。
C语言程序设计ppt课件-第3章-选择结构

本章主要内容
1
选择结构
在解决大量的实际问题时,常常需要根据不同的 情况或条件,制定出不同的解决方案或对策。
选择结构是通过对条件 的判断来选择执行不同 的程序语句。
选择结构
一个程序若具有了判断和选择功 能,就具备了最基本的智能。
的完整的解题步骤。
void main() { int x,y,z,max;
printf("“\n Please input x,y,z: ");
➢将同影一响问到题算可法用乃不至同程算序法的解效决率,sifc(a。xm而n>afy(一一x)"=%x个个;d%算算d法法%d的的",&评质x价,量&y主优,&要z劣); 从时间复杂度和空间复杂度来els考e 虑。
max=y;
例从键盘输入三个不同的、无序if(mm的aaxx整<=zz)数; ,并分别存放 到变量x、y、z中,然后通过pr判int断f("输\n 出ma三x=%个d数\n"中,m的ax)最;
大数。要求将最大数存放在} 变量max中。
25
语法练习(单选题)
1.设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中
switch语句的应用
关例键从语键句盘:上输入一个学生的总平均成 绩能用(i大f- e于ls0e且if来小替于换10吗0)? swi,tc按h(分(i数nt段)(评sc定or出e/成10绩.的0)相) 应等级,90以上为A级,80~
{89为caBs级e ,97:0~g7r9a为dCe=级'A,'6;0~br6e9a为k;D级,59以下为E级。 问题分ca析se:s8w:itchg语ra句de中='的B表';达b式re只ak能; 是整型或字符型,所 以可c用as成e 绩7的:高位gr数ad字e=来'C确';定b其re对a应k;的分数段,而每一个 分数c段as又e对6应:swigtrcha中de的='一D'路; 选br择ea。k;可用表达式“((int)(成 绩/1c0)a)s”e 计5算:出成绩的高位数字 ,其中,“(int)”的功能 是将c表as达e式的4:值强制转换成整数。
C#第3章

对于这些选择结构,除了可以利用if语句来实现以 外,还可以用switch语句来完成。
3.2 if语句——二分支选择语句
C#程序设计教程——蒙祖强编著
为表述方便,我们将if语句分为三种类型:
if…语句
C#程序设计教程——蒙祖强编著
Console.Write("请输入出行月份(1-12):"); 游客在其他月份出行,怎样出现提示信息? int mon = int.Parse(Console.ReadLine()); if (mon >= 5 && mon <= 10) { Console.WriteLine("旺季出行,机票不打折"); } else { Console.WriteLine("淡季出行,机票打折"); } Console.ReadLine();
3.2 if语句——二分支选择语句
C#程序设计教程——蒙祖强编著
3.2.2 if…else…语句(续)
【例3.3】 编写一个窗体应用程序,使之能够对给 定的实数进行四舍五入。 创建C#窗体应用程序Rounding,界面如下图:
3.2 if语句——二分支选择语句
C#程序设计教程——蒙祖强编著
3.2.2 if…else…语句(续)
——分段函数的实现
C#程序设计教程——蒙祖强编著
【例3.1】 构造一个C#控制台应用程序,使之实 现下列分段函数的功能:
3.1一个简单的选择结构程序
——分段函数的实现
C#程序设计教程——蒙祖强编著
3.1.1 创建C#控制台应用程序 创建一个控制台应用程序PiecewiseFunction:
C++的PPT第3章(1)

逻辑型变量在赋值时,也可以赋为一个整数。
逻辑型数据的存储
逻辑型数据(true/false)在内存中存储时,并不是 存的英文单词,而是1或0。(true对应1,false对应 0)。 逻辑型变量在内存中占1个字节。 bool flag=true; cout<<flag; 输出结果: 1
逻辑型数据的输出,输出为1或0
逻辑型数据可以参与算术运算。
空语句 下面是一个空语句:
;
即只有一个分号的语句,它什么也不做。有时用 来做被转向点,或循环语句中的循环体。
复合语句 可以用 { }把一些语句括起来成为复合语句。 如下面是一个复合语句。
{ z=x+y; if(z>100) z=z-100; cout<<z; }
复合语句中每个语句中最后的分号不能省略。
#include <iostream> #include <cmath> //程序要用到数学函数sqrt using namespace std; int main( ) 假设输入: {float a,b,c,x1,x2; 1 -4 3 cin>>a>>b>>c; x1=(-b+sqrt(b*b-4*a*c))/(2*a); 运行结果: x2=(-b-sqrt(b*b-4*a*c))/(2*a); X1=1 cout<<″x1=″<<x1<<endl; X2=3 cout<<″x2=″<<x2<<endl; return 0; }
C语言程序设计 第3章

3.6 程序举例
计算奖金。 例3.12 计算奖金。 当企业利润P等于或低于 万元时 当企业利润 等于或低于0.5万元时 , 奖金为利润的 等于或低于 万元时, 1%;当 0.5<P≤1万元时, 超过 万元部分的奖金为利润 万元时, ; < 万元时 超过0.5万元部分的奖金为利润 的 1.5%,0.5万元以下仍按 , 万元以下仍按1%计算; 当 1<P≤2万元时, 1 计算; < 万元时, 万元以下仍按 计算 万元时 万元以下部分仍按前面的方法计算,超过1万元的部分其 万元以下部分仍按前面的方法计算 , 超过 万元的部分其 奖金按利润的2%计算;当2<P≤5万元时,2万元以下部分 计算; 万元时, 万元以下部分 奖金按利润的 计算 < 万元时 仍按前面的方法计算, 超过2万元部分的奖金按利润的 仍按前面的方法计算 , 超过 万元部分的奖金按利润的 2.5%计算 ; 当 5< P≤10万元时 , 5万元以下部分仍按前面 计算; 万元时, 万元以下部分仍按前面 计算 < 万元时 的方法计算,超过5万元部分的奖金按利润的 的方法计算,超过 万元部分的奖金按利润的3%计算;当 计算; 万元部分的奖金按利润的 计算 P>10万元时, 10万元以下部分仍按前面的方法计算, 超 万元时, 万元以下部分仍按前面的方法计算 万元以下部分仍按前面的方法计算, > 万元时 万元部分按3.5%计算。其中 由键盘输入,计算并输 计算。 由键盘输入, 过10万元部分按 万元部分按 计算 其中P由键盘输入 出相应的奖金数W。 出相应的奖金数 。
3.5 switch结构 结构
语言中提供了一个直接实现多路分支选择的结构, 在 C语言中提供了一个直接实现多路分支选择的结构, 语言中提供了一个直接实现多路分支选择的结构 称为switch结构,其一般形式如下: 结构, 称为 结构 其一般形式如下: switch(表达式 表达式) 表达式 { case 常量表达式 常量表达式1: 语句 语句1 case 常量表达式 常量表达式2: 语句 语句2 … case 常量表达式 常量表达式n: 语句 语句n default : 语句 +1 语句n+ }
[Python语言程序设计][刘卫国]第3章 选择结构 配源代码
![[Python语言程序设计][刘卫国]第3章 选择结构 配源代码](https://img.taocdn.com/s3/m/6f6600551711cc7931b71699.png)
例 硅谷公司员工的工资计算方法如下: (1)工作时数超过 120小时者,超过部分加发 15%。 (2)工作时数低于60小时者,扣发 700元。 (3)其余按每小时84元计发。 输入员工的工号和该员工的工作时数,计算应发 工资。
分析:为了计算应发工资,首先分两种情况,即 工时数小于等于120小时和大于120小时。工时数超过 120小时时,实发工资有规定的计算方法。而工时数 小于等于120小时时,又分为大于60和小于等于60两 种情况,分别有不同的计算方法。所以程序分为3个 分支,即工时数>120、60<工时数≤120和工时数≤60, 可以用多分支if结构实现,也可以用if的嵌套实现。
例 写出下列条件。 (1)判断年份year是否为闰年。 (2)判断ch是否为小写字母。 (3)判断m能否被n整除。 (4)判断ch既不是字母也不是数字字符。 条件1:(year%4==0 and year%100!=0) or year%400==0 条件2:ch>='a' and ch<='z' 条件3:m%n==0或m-m/n*n==0 条件4: not((ch>='A' and ch<='Z') or (ch>='a' and ch<='z') or (ch>='0' and ch<='9'))
单分支if语句的执行过程
注意: (1)在if语句的表达式后面必须加冒号。 (2)因为Python把非0当作真,0当作假, 所以表示条件的表达式不一定必须是结果为 True或False的关系表达式或逻辑表达式,可 以是任意表达式。 (3)if语句中的语句块必须向右缩进,语 句块可以是单个语句,也可以是多个语句。 当包含两个或两个以上的语句时,语句必须 缩进一致,即语句块中的语句必须上下对齐。 (4)如果语句块中只有一条语句,if语句 也可以写在同一行上。例如:
第3章 程序控制结构

if嵌套语句也可以实现多分支的选择问题,但如果分支较 多,程序代码行数也随之曾多,从而降低了程序的可读性, 造成程序容易产生错误。C语言提供了switch语句可以解决 这一问题,switch语句直接处理多分支选择,而且可读性 较好。它的一般形式如下:
switch(表达式) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; … case 常量表达式n: 语句n; break; default: 语句n+1; }
T
条件是否成立
F
F
T 语句序列
语句2
语句1
语句2
结束
结束选择
循环结束
3.2 语句
程序的执行部分是由语句构成的。执行 语句的过程就是实现程序功能的过程。语 句是C语言的基本执行单位。
3.2.1声明语句
声明语句主要用来说明合法标识符, 以便能在程序中合法使用它们。在C 语言程序设计中,任何用户自定义 的函数、变量和符号常量都必须遵 循先声明后使用的原则。 声明语句的语法格式如下: 数据类型符 用户标识符;
多分支结构流程图
表达式1
T
语句1
F
表达式2 1
T
语句2 1
F
表达式3
T
语句3
F
表达式n
T
语句n
F 语句 F n+1
输入百分制成绩,输出对应成绩等级
#include <stdio.h> void main() { int m; printf("Please input mark:"); scanf("%d",&m); if(m>=90) printf("A\n"); else if(m>=80) printf("B\n"); else if(m>=70) printf("C\n"); else if(m>=60) printf("D\n"); else }
第3章 选择&循环结构程序设计

switch语句的语义
switch语句的语义如下:
计算整型表达式; 将整型表达式的值顺序地与各个case后的整常量 相比较,若与某个整常量相等,则从对应的case 之后的语句组开始往下执行,若与所有整常量均 不等,在有default的情况下,只执行语句组n。
以上语义中隐含着:
每个分支中可以有多个语句,而且不必复合。 一旦找到匹配 (或defaulte),就会一直往下执行 而非执行单个分支。若想在执行单个分支后退出, 则必须让每个语句组的最后一条语句是 break;。
与人类擅长解析和符号运算等特点不同, 计算机必须从具体数据出发,按照人为其 设计好的程序机械地进行运算。另一方面, 由于计算机的运算速度很快,因此最擅长 完成那些计算工作量很大的重复性运算。 这种重复是指运算步骤,数据则在重复中 不断地改变,每当执行这组步骤时,程序 都从变量的原值推出它的一个新值,这一 过程称为“迭代” ,是计算机得以发展的 关键因素。循环则是实现迭代的必要条件。
3.3.2 while语句
while语句的语法 while语句的语义 while语句程序实例
while语句的语法
while语句的语法是:
while (表达式) 语句
其中:
“while (表达式)”为循环控制,其中“表达式” 可以为任意类型,但其值将当作逻辑值使用。 “语句 ”为循环体,它可以是一个语句、一个由 花括弧括起来的复合语句或另一个控制结构。
如果表达式的初值为false,则一次循环也不执行 表达式的值必须在循环体中改变,否则为死循环
while语句程序实例
// 从键盘输入一组整数(以0作为输入结束的标志),打印其最大值 #include <stdio.h> int main() { int x, max; printf("输入一个整数:"); scanf("%d", &x); max = x; while (x != 0) { printf("输入一个整数:"); scanf("%d", &x); if (x > max) max = x; } printf("最大值 max = %d\n", max); return 0;
第3章--选择结构--参考答案

main( )
{
int k;
scanf("%d",&k);
switch (k)
{
case 1: printf("%d\n",k++);
case 2: printf("%d\n",k++);
case 3: printf("%d\n",k++);
case 4: printf("%d\n",k++); break;
default: printf("Full!\n");
}
}
A) 1 B) 2
C) 2 D) 1
3 2
4 3
5 4
D
29.执行下面程序时,若从键盘输入"2<CR>",则程序的
运行结果是( )。
#include <stdio.h>
main( )
{ int j,k; char cp;
cp=getchar( );
顺序分支结构选择题:
1.设ch是char型变量,其值为A,且有下面的表达式:
ch=(ch>='A'&&ch<='Z')?(ch+32):ch
上面表达式的值是
A) A B) a
C) Z D) z
B
2.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,
值为0的表达式是
A) 'a'&&'b' B) a<=b
第3章-用顺序结构设计程序解决简单实际问题

说明
对于整型:指long型,如%ld等; 对于实型:指double型,如%lf。
指域宽,即输出数据所输出的
m
最小宽度m;,n且的在格域式内向右对齐。
为%m.nf
指精度,对于实数,表示输出n位小数
n 对于字符串,表示截取的字符个数。
-
字符
l
说明
p对ri于nt整f(型“%:10指.2lfon\gn型”,,12如3.%4l6d2等);; p对ri于nt实f(型“%:7.指2sdo\unb”l,e“型CH,IN如A”%)lf;。
练习:对于f格式例题
main( ) { float a=1.2345; printf(“%f %10f\n”,a,a); printf(“%8.2f %.2f\n”,a,a); printf(“%-8.2f\n”,a); }
储备知识:
标准函数:指可以在各种计算机系统中都能使 用的函数。
标准输入六种标准输入输出函数: printf() 、scanf()、putchar() getchar()、puts() 、gets()
3.2 数据的输入与输出 预处理命令
用双引号括起来并以字符串的形式描述 包括:格式说明和普通字符。
由“%”和格式字符组成。 指需要原样输出 作用:将输出的数据转换 的字符,如逗号、
为指定的格式输出 空格等。
格式字符 输注出意形:式 举 例
输出结果
d或i
1、除了e、g格in式t 可a=以65;用大写,其它
格式十说进明制的整格数式字p符rin应tf用("小%d"写,a;);
以下问题如何处理:
域宽小于实际宽度时如何处理? 缺省的域宽与精度各是多少? 精度说明大于、小于实际精度时, 如何处理? float与double的最大精度是多少? 多余的小数是被截断?还是舍入?
Fortran教程第三章 选择结构程序设计

所作的处理在其后的块语句中完成。
(3)case default与其后的默认块,是缺省情况,可有可无。
如果加入它,则代表前面所有选择表达式的值皆非的情况下 执行该块。 (4)end select为case结构结束的标志。
例3.3、设计程序,完成小学加、减、乘、除四则运算, 即输入两个数,再输入一个运算符号,做对应的运算,
program exam
implicit none integer n
read *, n
if ( mod(n,3)==0.and.mod(n,5)==0 ) then print *,’该数能同时被3和5整除。’
else
print *,’该数不能同时被3和5整除。’ endif end
块IF结构的组成
program exam3 real g read *,g if (g>=90) then print *,“优秀”
else if( g>=80) then
print *,"良好" else if( g>=60) then
print *, "通过"
else print *,"不及格" endif end
FORTRAN所用的基本逻辑运算有:
.AND.
.EQV.
.OR.
.NEQV.
.NOT.
.XOR.
(1)逻辑与,运算符.AND. 当连接的两个逻辑操作数为真时, 逻辑表达式取值为真,只要一个为假则取假。例如数学表达式 1<X<2,在FORTRAN中应写成逻辑表达式:X>1.AND.X<2。
(2)逻辑或,运算符为.OR. 连接的两个逻辑操作数只要有一个 为真时,逻辑表达式取值为真,全部为假时才为假。例如|X|>5,
第三章选择结构程序设计

语句格式
<测试表达式 测试表达式> SELECT CASE <测试表达式> 表达式表>可是: <表达式表>可是 <表达式表 表达式表1> CASE <表达式表1> 表达式>[ >[, ① <表达式>[,<表达式 [<语句组 语句组1>] [<语句组1>] >]… >] <表达式表 表达式表2> CASE <表达式表2> 如: CASE 20,30,40 [<语句组 语句组2>] "a","b","c” [<语句组2>] CASE "a","b","c <表达式表 表达式表3> CASE <表达式表3> 表达式> <表达式 表达式> ② <表达式> TO <表达式> 小值 TO 大值 [<语句组 语句组3>] [<语句组3>] 如: CASE 70 TO 79 … CASE "a" TO ”d ” d [CASE ELSE IS关系运算表达式 ③ IS关系运算表达式 [<语句组 语句组n+1>] [<语句组n+1>] ] 如: SELECT CASE CJ END SELECT
IF w<=50 THEN x=0.65*w ELSE x=50*0.65+(w - 50)*1.10
.
练习:编程求y的值。 练习:编程求y的值。 x2+1 (x>=0) y= x 2- 1 (x<0) INPUT “x=“;x IF x>=0 THEN y=x*x+1 ELSE y=x*x-1 END IF PRINT “y=“;y
VB第3章第3节2-Select语句

第3章 面向对象程序设计——第3节 2 选择结构语句
程序: Dim Num1 As Integer, Num2 As Integer Dim SExp As String Dim Result Dim NOk%, NError%
'两个操作数 '计算结果
'统计计算正确与错误数
Private Sub Button2_Click(……) Handles Button2.Click
Txtoutput.Text = "---------------"
Txtoutput.Text = Txtoutput.Text & vbCrLf & “一共计算 ” & _
(NOk + NError) & " 道题" Txtoutput.Text = Txtoutput.Text & vbCrLf & “得分: ” & _ Int(NOk / (NOk + NError) * 100) & "分"
第3章 面向对象程序设计——第3节 2 选择结构语句
(7)计算机执行Select Case语句的过程: 计算测试表达式的值并与语句中各Case子句中 表达式的值进行比较。如果相等,就执行与该 Case相关联的语句。
若没有一个Case子句的值与测试表达式的值相
等,则执行Case Else部分的语句。 若无Case Else部分,则直接执行Select Case语句的后 继语句。
No
Case ② Yes 语句块2
No
Case ③ Yes 语句块3
No (Case Else)
语句块4
第3章 选择结构.

if、else、switch、while、do和for等都是C++关键字。 这些关键字是该语言保留的,用于实现C++控制结构的不同 特性。关键字不能作为变量名等一些标识符。注意,将关键 字while的拼写变为“While”是个语法错误,因为C++是区分 大小写的语言。while、if和else等所有C++保留关键字只能 包含小写字母。
格式2 :
if (条件表达式) { 语句1; 语句2; …… } 若条件成立时,要执行的操作由多个句子构成, 我们必须把这些句子括在一对花括号{ }内,我们称 这种形式为语句块或复合语句。 程序设计风格提示:书写语句块(也称为复合 语句)时,左右花括号要对齐,组成语句块的各语 句要相对花括号缩进一层并对齐。
第二节 if选择结构
C++提供三种选择结构,即if选择结构、if-else选择结构 和switch选择结构。 一、if语句(单分支结构) 格式1:
if (条件表达式) 语句1;
功能:如果条件表达式的值为真, 即条件成立,语句1将被执行。否则, 语句1将被忽略(不被执行),程序将 按顺序从整个选择结构之后的下一条 语句继续执行。执行流程如图3-1所示 说明:格式中的“条件表达式”必 须用圆括号括起来。
第三章 pascal选择结构程序设计

第三章 选择结构程序设计在许多情况下,语句执行的顺序依赖于输入的数据或中间运行结果。
在这种情况下,必须根椐某个变量或表达式的值作出判断,最后决定执行哪些语句或跳过不执行哪些语句。
我们称这种程序结构为选择结构。
PASCAL 中可实现选择功能的语句有if 语句和case 语句。
本章主要介绍这两个语句的应用。
在某种情况下,当满足某个条件时,我们需要连续执行多个语句,在PASCAL 语言中为了让结构清晰,允许我们把多个语句组成一个复合语句,这样一个复合语句的使用就可看作一个语句使用。
在PASCAL 中复合语句组成的一般形式及语法图如下:begin <语句1>; <语句2>; . . . . . . <语句n>; end 1.if 语句的一般形式及语法图如下:if <布尔表达式> then <语句1> else <语句2> ;例3.1 编程实现读入两个数,求第一个数除以第二个数的值。
程序如下: program rzy8; var a ,b ,begin if end .1.if 语句主要用于处理两条分支的情况,有些情况下会遇到多条分支的情况,这时使用if 语句就显得非常不方便,程序结构变得混乱,为此PASCAL 语言提供了case 语句。
case 语句的一般形式及语法图如下:N-S 框图描述case <表达式> of<常量表1> :<语句1>; . . . . . .<常量表n> :<语句n>;else <语句n+1> ; end ;例3.2 某校对学生的学科成绩评定分为A ,B ,C ,D 四个级别,分级方法是:100至90为A 级,89至80为B 级,79至60为C 级,59至0分为D 级,其它分数即显示输入错case 语句误。
试编程序,实现从键盘输入学生成绩,则可输该成绩的评级。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在使用switch语句时,还应注意以下几点: 1. case语句后的各常量表达式的值不能相同,否则会出现错误码。 2.每个case或default后,可以包含多条语句,不需要使用“{”和“}” 括起来。 3.各case和default子句的先后顺序可以变动,这不会影响程序执行 结果。
4. default子句可以省略,default后面的语句末尾可以不必写break。
若题目改为“读入一个整数a,如果a为奇数在屏幕 上输出no”该如何修改程序?
例3.2 读入一个数,若这个数大于1并且小于100,则输出yes
# include<iostream> using namespace std; int main ( ) { int a; cin>>a; if ((a>1)&&(a<100)) cout<<"yes"; return 0; } 注意:此程序中的条件表达式为(a>1)&&(a<100),根据要 求 “条件表达式”必须用圆括号括起来,否则编译会出错。
第三章 程序的控制结构
第一节 概述
第二节 if选择结构
第三节 switch语句
第一节 概述
程序由若干条语句组成,各语句按照顺序一条一条地执 行,这种顺序结构是简洁的。但在现实世界中,在解决问题 的过程中,不可避免地遇到需要进行选择、或需要循环工作 的情况。这时,程序执行的顺序需要发生变化,而非从前向 后逐一执行。因此,程序中除了顺序结构以外,通常还有选 择结构、循环结构以及转移机制。 C++为了支持这些控制结构,提供了丰富、灵活的控制 语句。从结构化程序设计的观点看,所有程序都可用3种控 制结构即顺序结构、选择结构、和循环结构实现。C++在默 认的情况下采取顺序结构,除非特别指明,计算机总是按语 句顺序一条一条地执行。为使程序更清晰、更易调试与修改, 并且不容易出错,结构化编程要尽量少用或不用goto等跳转 语句。
if (条件表达式) 语句1; else 语句2;
true
条件表达式
flase
程序设计风格提示:书 写if-else语句时,if和else 要对齐,而分支的语句部分 要缩进两格。
语句块1
语句块2
图3-2
例3.4 根据用户输入的成绩,判断是否通过了考试。 #include<iostream > using namespace std; int main() { int c; cin >> c; if (c>=60) cout<<"pass! \n"; else cout<<"sorry!\n"; return 0; }
例3.7 if (a>b) if (b>c) y=a; else y=c; else部分否定的是条件b>c,即它与第二个if语 句配对;若想让else部分与第一个if语句配对,则要 引入一个复合语句,将上述语句写成如下形式:
if (a>b) { if (b>c) y=a; } else y=c;
【上机练习3.1】 1、判断两个数a,b,输出较大数的平方值。 2、从键盘读入一个数,判断它的正负。是正数,则输出“+”, 是负数,则输出“-”。 3、假设邮局规定寄邮件时若每件重量在1公斤以内(含1公斤), 按1.5元计算邮费,如果超过1公斤时,其超出部分每公斤加 收0.8元。请编程序计算邮件收费。 4、某服装公司为了推销产品,采取这样的批发销售方案:凡订 购超过100 套的,每套定价为50元,否则每套价格为80元。 输入订购套数,输出应付款的金额数。 5、某市的士费起步价8元,可以行驶3公里。3公里以后,按每 公里1.6元计算,输入的士的公里数,请你计算顾客需付费 多少元? 6、输入三个正整数,若能用这三个数作为边长组成三角形, 就计算并输出该三角形的面积,否则输出Can't。(组成三角 形的条件为:任意两边之和大于第三边)
格式2 : if (条件表达式) { 语句1; 语句2; …… } else { 语句1; 语句2; …… } 若分支语句由多个句子构成,我们必须把这些句子括在 一对花括号{ }内。
例3.6 乘坐飞机时,当乘客行李小于等于20公斤时,按每公 斤1.68元收费,大于20公斤时,按每公斤1.98元收费,编程 计算收费(保留2位小数)。 #include<cstdio> using namespace std; int main( ) { float w, p; scanf("%f",&w); if (w<=20) printf("%.2f",w*1.68); else printf("%.2f",w*1.98); return 0; } if语句允许嵌套,即语句1和语句2还可以是if语句,当if 语句嵌套时,约定else总是和最近的一个if语句配对。
程序设计风格提示:写switch语句时,switch(表达 式)单独一行,各case分支和default分支要缩进两格并 对齐,分支处理语句要相对再缩进两格,以体现不同层次 的结构。
3.语句格式举例 (1)左右两边的书写格式是等价的 switch(a) { case 1:x++;break; case 2:y++;break; case 3:z++;break; default:cout<<"error"; } switch(a) { case 1: x++; break; case 2: y++; break; case 3: z++; break; default: cout<<"error"; }
条件表达式
false
true 语句1
图3-1
程序设计风格提示:从语法上来讲,整个if语句可以写 在一行。如果条件表达式和语句都非常简单,那么整个语句 可以写在一行;否则,最好在条件表达式后换行,而且语句 部分要相对if缩进两格。
例3.1 读入一个整数a,如果a为偶数在屏幕上输出yes #include<iostream> using namespace std; int main( ) { int a; cin>>a; if (a%2==0) cout<<"yes"; return 0; } 注意:关系运算符==用来表达该符号的左右两边是 否相等,不要写成赋值号=。 试一试
格式2 :
if (条件表达式) { 语句1; 语句2; …… } 若条件成立时,要执行的操作由多个句子构成, 我们必须把这些句子括在一对花括号{ }内,我们称 这种形式为语句块或复合语句。 程序设计风格提示:书写语句块(也称为复合 语句)时,左右花括号要对齐,组成语句块的各语 句要相对花括号缩进一层并对齐。
if、else、switch、while、do和for等都是C++关键字。 这些关键字是该语言保留的,用于实现C++控制结构的不同 特性。关键字不能作为变量名等一些标识符。注意,将关键 字while的拼写变为“While”是个语法错误,因为C++是区分 大小写的语言。while、if和else等所有C++保留关键字只能 包含小写字母。
例3.3 读入a,b,若a>b则交换a,b的值 #include<iostream> using namespace std; int main ( ) { float a,b,c; cin>>a>>b; if (a>b) { c=a; a=b; b=c; } cout<<"a="<<a<<" b="<<b; return 0; }
在实际使用switch语句时,通常要求当执行完某个case 后的一组语句序列后,就结束整个语句的执行,而不让它继 续执行下一个case语句后面的语句序列,为此,可通过使用 break语句来实现。该语句只有保留字break,而没有其它任 何成分。它是一条跳转语句,在switch中执行到它时,将结 束该switch语句,系统接着向下执行其它语句。
二、if-else语句(双分支结构) if单分支选择结构只在条件为true时采取操作,条件为 false时则忽略这个操作。利用if-else双分支选择结构则可 以在条件为true时和条件为false时采取不同操作。 格式1: 功能:如果(条件表达式)的值为“真” ,即条件 成立,则执行语句1,执行完“语句1”后继续执行整个if- else语句的后继语句;如果(条件表达式)的值为“假” , 即条件不成立,那么跳过语句1选择执行“语句2” ,执行 完语句2后继续执行整个if-else语句的后继语句;也就是 说if-else语句总是根据(条件表达式)的结果,选择 “语句1”和“语句2”中的一个执行,执行完以后,整个if -else就算执行完了。执行流程如图4-2所示
第三节 switch语句
应用条件语句可以很方便地使程序实现分支,但是出现 分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程 序结构会显得复杂,其至凌乱。为方便实现多情况选择,C++ 提供了一种switch开关语句。
1.语句格式: switch(表达式) { case 常量表达式1: 语句序列1; break; case 常量表达式2: 语句序列2; break; …… case 常量表达式n: 语句序列n; break; default: 语句序列n+1; } 该语句中可以使用一次或多次case标号,但只能使用一次default标号, 或者省略整个default部分;多个case标号也允许使用在同一个语句序列 的前面;每个语句标号有保留字case和后面的常量表达式及冒号组成, 每个常量表达式通常为字面常量,如常数或字符。