第四节选择结构程序设计
第四篇选择结构程序设计

以某表达式的值等于0作为条件时可写成对该表达式 取反的形式。
例如,语句:if(x==0) printf(“x=0”);可以简写成:
if(!x) printf(“x=0”);
4.3 if语句
说明: (3)无论是if语句中的语句还是if-else语句中的语
句1、语句2,都可以是任何语句。当它们中的某 一个是有多条语句组成时,必须写成复合语句的 形式。例如,语句:
优先级: 高 算术运算符
< ,<=, >, >=
低
==, !=
赋值运算符
4.2 关系运算与逻辑运算
2.关系表达式
一般形式为:〈表达式〉〈关系运算符〉〈表达式〉
合法的关系表达式:
a>b
a+b<c-d
(a=3)<=(b=5)
‘a’>=‘b’
(a>b)==(b>c)
关系表达式的值:
——逻辑值
“真” “1”表示
else
printf(“n=%d NO\n”,n); }
➢多分支if语句
4.3 if语句
当if-else语句中的语句2是另一条if语句时,就构成了多分支if语句。
语句的一般形式为: 表 达 式
1
if(表达式1) 语句1 真
假 执行过程:
假 表达式2
else if(表达式2) 语句2
真
假
else if(表达式3) 语句3
用N-S流程图表示例4.1的算法 输入weight
成立
weight≤50
不成立
pay=weight*0.35
pay=50*0.35+(weight50)*0.5
实验四选择结构程序设计

实验四选择结构程序设计在程序设计的世界里,选择结构就像是一个智能的决策者,根据不同的条件来决定程序的走向。
这一结构在解决各种实际问题中发挥着至关重要的作用,让程序变得更加灵活和高效。
选择结构,简单来说,就是让程序在运行时能够根据某些条件的判断结果,选择执行不同的代码块。
想象一下,你正在编写一个程序,要根据用户输入的成绩来判断他是否及格。
如果成绩大于等于 60 分,就输出“及格”;否则,输出“不及格”。
这就是一个典型的选择结构应用场景。
在大多数编程语言中,实现选择结构主要有两种方式:if 语句和switch 语句。
先来说说 if 语句。
它的基本形式是“if (条件) {代码块}”。
如果条件为真,就执行花括号里的代码块;如果条件为假,就跳过这个代码块,继续执行后面的代码。
比如说,我们要判断一个数是否为正数,可以这样写:```javaint num = 5;if (num > 0) {Systemoutprintln("这是一个正数");}```除了简单的 if 语句,还有 ifelse 语句。
它的形式是“if (条件) {代码块 1 } else {代码块 2 }”。
如果条件为真,执行代码块 1;如果条件为假,执行代码块 2。
例如,判断一个数是奇数还是偶数:```javaint num = 6;if (num % 2 == 0) {Systemoutprintln("这是一个偶数");} else {Systemoutprintln("这是一个奇数");}```另外,还有 ifelse ifelse 语句,可以处理多个条件的情况。
比如,根据学生的成绩划分等级:```javaint score = 85;if (score >= 90) {Systemoutprintln("优秀");} else if (score >= 80) {Systemoutprintln("良好");} else if (score >= 70) {Systemoutprintln("中等");} else if (score >= 60) {Systemoutprintln("及格");} else {Systemoutprintln("不及格");}```接下来,再讲讲 switch 语句。
04选择结构程序设计

If ELSE IF多分支条件语句形式
If (表达式1) 语句1 else if (表达式2) 语句2 …... else if (表达式n) 语句n else 语句n+1
依次判断表达式的值, 当出现某个值为真时, 则执行其对应的语句,然 后跳到整个if语句之外 继续执行程序。 如果所 有的表达式均为假,则 执行最后语句n+1,然后 继续执行后续程序。
IF语句
选择程序描述了求解规则:在不同的条件下所进 行的相应操作。
If 语句的基本形式 if
真 语句1 表达式 假 语句2
(条件)
语句序列1 else 语句序列2
若缺省else,则变成不平衡if结构
假(0) 表达式 真(非0) 语句
If
(条件)
语句序列
例ch4_01:求两数中的较大数。 main() { int a,b,max; printf("PLease input 2 numbers:"); scanf("%d,%d",&a,&b); if (a>b) max=a; else } max=b;
当表达式的值与某一个case后面的常量表达式的值相等时,就 执行此case后面的语句,若所有的case中的常量表达式的值都 没有与表达式的值匹配的,就执行default 后面的语句,执行完 一个case后面的语句后,流程控制转移到下一个case继续执行
break 语句作用是中止switch结构 每一个case的常量表达式的值必须互不相等 各个case的出现次序不影响执行结果 多个case可以共用一组执行语句
#include<stdio.h> void main() { int x,y; scanf(“%d”,&x); { 程序段 } printf(“x=%d,y=%d\n”,x,y);}
04 选择结构程序设计

程序输出举例: Enter two numbers: 2 2 (用户从键盘输入2 2)
num1=2 num2=2 result=1
4.2 逻辑运算符及逻辑表达式
逻辑运算符用于支持基本逻辑运算。三 种逻辑运算符及其意义,如表4.2.1所示。
表4.2.1
逻辑运算符 !
&& ||
名称 逻辑非 逻辑与 逻辑或
下面给出程序清单:
#include <stdio.h> main() { int value,choice;
printf("Convert : \n");
/*输出菜单*/
printf(" 1: decimal to hexadecimal\n");
printf(" 2: hexadecimal to decimal\n");
printf("Enter a decimal value: "); scanf("%d", &value); printf("%d in hexadecimal is %x\n", value,value); } else if(choice==2) { printf("Enter a hexadecimal value: "); scanf("%x", &value); printf("%x in decimal is %d\n",
例4.3.3 用双分支if语句重新编写例4.3.1的 程序。
可以利用一个分支处理变量a为正数的情 况,如令x=a。用另一个分支初处理变量a为 负数的情况,如令x=−a。最后输出结果。下 面给出程序:
第4章 选择结构程序设计

控 制 结 构
switch (表达式) {
case 常量表达式1: 语句组1 case 常量表达式2: 语句组2 ……
case 常量表达式n:
计算表达式值
常量表达式1 常量表达式2 ……常量表达式n default
语句组1 break
语句组2 break
……
语句组n break
语句组n+1
语句组n default :
选择结构程序设计
•功能:计算表达式的值,并逐个与其后面的常量 表达式比较,当表达式的值与某一个 case 中的常 量表达式的值相等时,就执行此 case 后面的语句, 若表达式的值与所有常量表达式的值都不相同时, 则执行default后面的语句。
开关选择结构
switch-case语句 (开关分支结构)
printf("Yes\n"); (year%4==0&&year%100!=0)||year%400==0 else printf("No\n"); return 0;
}
选择结构程序设计
控 制 结 构
#include<stdio.h> 练习: void main() 1.有一函数: { int x,y; x (x<1) scanf("%d",&x); yif(x<1) = 2x-1 (1≤x<10) y=x; 3x-11 (x≥10) 输入x else if(x<10) 写一程序,输入x,输出y值。 x<1 y=2*x-1; N Y else x<10 Y N y=3*x-11; y=x printf("y=%d\n",y); y=2x-1 y=3x-11 } 输出y
C语言程序课件ppt第4章选择结构程序设计谭浩强C程序设计第四版

C★
A★
●B
4.2.1 用if语句处理选择结构举例
C★ A ●★ ● B
4.2.1 用if语句处理选择结构举例
C★ A ● ●★ B
#include <stdio.h> int main() { float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b) 如果a>b
{ t=a;
a=b; 将a和b的值互换
b=t; } printf("%5.2f,%5.2f\n",a,b); return 0; }
#include <stdio.h>
int main()
{ float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{ t=a; a=b;
选择结构,用if语句实现的
a && b 真 假 假 假
a || b 真 真 真 假
4.4.1 逻辑运算符及其优先次序
➢逻辑运算符的优先次序
! → && → ||
(!为三者中最高)
➢与其他运算符的优先次序
! 算术运算符 关系运算符
&& 和 || 赋值运算符
(高) (低)
4.4.2 逻辑表达式
➢ 逻辑表达式的值应该是逻辑量“真”或“假” ➢ 编译系统在表示逻辑运算结果时
4.3.1关系运算符及其优先次序
c>a+b a>b==c a==b<c a=b>c
等效于 c>(a+b) 等效于 (a>b)==c 等效于 a==(b<c) 等效于 a=(b>c)
选择结构程序设计

4.1 选择结构 4. 1 If…Then语句(单分支结构)
If <表达式> Then 语句块 End If 或 If <表达式> Then <语句> 例:已知两个数x和y,比较它们的 大小,使得x大于y。 If x<y Then t=x : x=y: y=t End If 或 If x<y Then t=x: x=y: y=t
图 1-3-8 过程 两个数交换
x
y
t
4.2 If…Then…Else语句(双分支结构) If <表达式> Then <语句块1> Else <语句块2> End If
双分支选择结构执行过程
If <表达式> Then <语句1> Else <语句2>
例如:输出x,y两个中值较大的一个值。 IF X>Y Then Print X Else Print Y End If 也可以写成如下的单行形式: IF X>Y Then Print X Else
注意:
对于多层IF嵌套结构中,要特别注意IF与Else的配 对关系,一个Else必须与IF配结,配对的原则是:在写 含有多层嵌套的程序时,建议使用缩进对齐方式,这样
容易阅读和维护。
4.4 选择结构的嵌套 在IF语句的Then分支和Else分支中可以完整地嵌套另 一IF语句或Select Case语句,同样Select Case语句每一个 Case分支中都可嵌套另一IF语句或另一Select Case语句。 下面是两种正确的嵌套形式:
(1)IF <条件1> Then ….. if <条件2> Then …… Else ….. End If …. Else …. IF <条件3> Then ….. Else ….. End If ….. End IF (2)IF <条件1> Then ….. Select Case … Case …… IF <条件1> Then …… Else ….. End If …… Case…. ….. End Select …. End IF
实验4 选择结构程序设计

实验4 选择结构程序设计1.实验目的(1)熟练掌握if语句的三种形式,在实际中能根据具体情况灵活选择某种形式的if语句(2)进一步熟悉关系表达式和逻辑表达式(3)熟练掌握switch语句的功能、格式和执行过程(4)能用switch语句实现简单的选择功能2.实验内容2.1基础知识(1)在横线上填上适当的标点符号。
该程序的功能是输出a、b中的最大值。
#include “stdio.h”void main(){ int a,b,t;scanf("%d %d",&a,&b);if___b>a_______ t=a;a=b;b=t;____ptintf("\nmax=%d",a);}(2)在横线上填上适当的标点符号。
将题(1)改写成if—else的形式:#include “stdio.h”void main(){ int a,b,t;scanf("%d %d",&a,&b);if___a>b_______ptintf("\nmax=%d",a);____ /* 思考:此处的符号是否可以省略?什么情况下不能省略?*/else____ptintf("\nmax=%d",b);____}(3)在横线上填上适当的标点符号。
switch (表达式){ case_____常量表达式1____ 语句1____case_____常量表达式2____ 语句2____……default____ 语句n____ }(4)对于if—else语句,如果分支较多,有时用swtich语句更加合适,swtich语句是多分支选择结构,其执行过程:首先比较___________与___________是否相等,如果相等,则执行case后面的语句,如果都不相等,则执行__________。
2.2阅读程序(1)#include “stdio.h”void main(){ int number;printf(“number=“);scanf(“%d”,&number);if (number%10==0) printf(“%d是10的倍数。
第4章选择结构程序设计

! 算术运算符 关系运算符
&& 和 || 赋值运算符
(高) (低)
P91
4.1.3 逻辑运算符和逻辑表达式
(a>b) && (x>y) 可写成 a>b && x>y
(a==b) || (x==y) 可写成 a==b ||x==y
(!a) || (a>b)
可写成 !a || a>b
P91
4.1.3 逻辑运算符和逻辑表达式
可以是:
简单的语句 复合语句 另一个if语句等
4.2.3 if语句的使用说明 P97
例4.3 给出三角形的三个边长,求 三角形的面积。 解题思路:
构成三角形的必要条件是两边之 和大于第三边,因此在计算三角形 面积之前应当进行该条件的判断
#include <stdio.hp>lease enter a,b,c:2,3,46↙ #include <math.haIt>riesan=ot2a.9t0rilateral.
P99
4.2.4 使用嵌套的if语句实现多层判断
有的选择结构中又包含一个或多个选择结 构,这称为选择结构的嵌套
if语句中可以又包括另一个if语句,这就 是if语句的嵌套
可以用if语句的嵌套实现嵌套的选择结构
P99
4.2.4 使用嵌套的if语句实现多层判断
一般形式:
if( ) if( ) 语句1 else 语句2
||year%400==0
如果表达式值为1,则闰年;否则为非闰年
4.2 用if语句实现选择结构 P95
4.2.1 用if语句实现选择结构举例 4.2.2 if语句的一般形式 4.2.3 if语句的使用说明 4.2.4 使用嵌套的if语句实现多层判断
04 选择结构程序设计-文本资料PPT课件

例如:if(x>y) printf(“%d”,x);
Y
执行语句
if (Number1>=Number2) Number1= Number2;
2、if(表达式) { 语句1; 语句2; 语句3; }
表达式值为真
N
Y 执行语句1
执行语句2
执行语句3
02.11.2020
15
if (Number1< Number2)
判断闰年的条件可以用一个逻辑表达式表示: (year%4==0 && year%100!=0) || year%400==0
表达式为“真”,闰年条件成立,是闰年,否则非闰年。
02.11.2020
14
4.4 if语句 和 switch语句
4.4.1 if语句
N
1、if(表达式) 语句;
表达式 值为真
}ห้องสมุดไป่ตู้
02.11.2020
02.11.2020
17
main()
{ float weight,pay; printf("Please input the weight:"); scanf("%f",&weight); if (weight>=10) pay=weight*6.5;
else pay=weight*8.5;
printf("You should pay %f yuans\n",pay);
•逻辑表达式的 值 是一个 逻辑量 “真”或“假”。
❖C语言编译系统在给出逻辑运算结果时,以1代表“真”,以0代表“假”, ❖但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”
第四章----选择结构程序设计PPT课件

if (fabs(disc)<=1e-6) printf(“x1=x2=%7.2f\n”, -b/(2*a));
/*fabs():求绝对值库函数*/ /*输出两个相等的实根*/
else
{ if (disc>1e-6) {x1=(-b+sqrt(disc))/(2*a); /*求出两个不相等的实根*/
逻辑表达式的值也是一个逻辑值(非“真”即“假”)。
2021/4/8
7
2.逻辑量的真假判定──0和非0 C语言用整数“1”表示“逻辑真”、用“0”表示 “逻辑假”。但在判断一个数据的“真”或“假”时, 却以0和非0为根据: 如果为0,则判定为“逻辑假”; 如果为非0,则判定为“逻辑真”。 例如,假设num=12,则: !num的值=0 ,num>=1 && num<=31的值=1 , num || num>31的值=1。
2021/4/8
3
例如,假设num1=3,num2=4,num3=5,则: (1)num1>num2的值=。 (2)(num1>num2)!=num3的值=。 (3)num1<num2<num3的值。 思考题:任意改变num1或num2的值,会影响整 个表达式的值吗?为什么?
(4)(num1<num2)+num3的值=
2021/4/8
4
二、逻辑运算符
关系表达式只能描述单一条件,例如“x>=0”。如果需 要描述“x>=0”、同时“x<10”,就要借助于逻辑表达 式了。
1 逻辑运算及其优先次序
1.逻辑运算符及其运算规则
(1)C语言提供三种逻辑运算符:
&&
逻辑与(相当于“同时”)
第4章 选择结构程序设计

{
int year,leap;
//将year、leap定义为整型
scanf("%d",&year);
if ((year%4==0 && year%100!=0)||(year%400==0))
leap=1;
else leap=0;
if (leap==1) printf("%d is ",year);
caseccaas‘sCee’‘:‘CB’’:: pprrinintftf((““PGasoso!d”)!;”b);reak;
ccaasseep‘rD‘Cin’’:t:f(“ppsrcriinontrtfef((>““F6Pa0ai\sln!s””!)”);;)b;reak;
运行结果d:ceafssaceuobrlret‘:为eDa’‘k:p;rAi’np时trfi,(n“tdf输(a“出tFaa:eirlr!o”)r;!”);
//使leap的值为假
if (leap==true)
//判断leap的值是否为真
printf("%d is ",year);
一、选择结构和条件判断
C语言有两种选择语句: (1) if语句 (2) switch语句
二、if语句(条件选择语句)
if语句的三种形式
形式一(单分支):
if (表达式) 语句 或
表达式 =0 非0
语句
if (表达式) 语句
例:if (x>y) printf(“%d”,x);
例:if (x>y) printf(“%d”,x);
如例: 例
swswiticthch(g(grraaddee)) {{scwaisteccha(‘ssAec’o:‘rAe)’:
c语言实验四选择结构程序设计

c语言实验四选择结构程序设计实验四:选择结构程序设计选择结构是C语言中的一种基本控制结构,用于根据条件的真假来选择执行不同的代码块。
本篇文章将介绍C语言中选择结构的概念、语法和常见的应用场景。
一、概述选择结构是一种基于条件判断的控制结构,根据条件的真假来选择执行不同的代码块。
C语言中的选择结构主要有if语句、if-else语句和switch语句。
二、if语句if语句是最简单的选择结构,它的语法格式如下:```cif (条件) {// 条件为真时执行的代码块}```其中,条件是一个表达式,如果条件为真,则执行if语句后面的代码块。
如果条件为假,则跳过if语句后面的代码块。
if语句还可以和else语句一起使用,形成if-else语句。
if-else语句的语法格式如下:```cif (条件) {// 条件为真时执行的代码块} else {// 条件为假时执行的代码块}```如果条件为真,则执行if语句后面的代码块;如果条件为假,则执行else语句后面的代码块。
三、switch语句switch语句用于根据表达式的值选择执行不同的代码块。
它的语法格式如下:```cswitch (表达式) {case 值1:// 表达式的值等于值1时执行的代码块break;case 值2:// 表达式的值等于值2时执行的代码块break;// ...default:// 表达式的值都不等于上述值时执行的代码块break;}```switch语句中的表达式的值会依次与每个case后面的值进行比较,如果相等,则执行对应的代码块。
如果所有的case都不匹配,则执行default后面的代码块。
四、应用场景选择结构在程序设计中有着广泛的应用场景,以下是一些常见的例子:1. 根据用户的输入选择不同的操作:比如在一个菜单程序中,根据用户输入的选项执行相应的操作。
2. 根据条件判断执行不同的计算:比如在一个学生成绩管理系统中,根据不同的分数段给出不同的评价。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四节选择结构程序设计4.1选择程序设计举例在编写程序中,往往要求根据某个指定的条件是否满足来决定执行的内容?例如,购物在1000元以下的打九五折,1000元及以上的打九折? C++提供if语句来实现这种条件选择?如if amount<1000 tax=0.95; //amount 代表购物总额,tax 代表折扣else tax=0.9; 〃若amount<1000,条件满足,tax=0.95,否则tax=0.9pay二amount*tax; //pay 为实付款流程可以用图4.1表示?lax=0.95 lax=0,9pay= amount* laxJ~图4.14.2选择结构和if语句if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一?4.2.1 if语句的3种形式1. if (表达式)语句例如:if(x>y) coutvvxvve ndl;这种if语句的执行过程见图4.2(a)?2. if (表达式)语句1 else语句2例如:if (x>y) cout«x;else coutvvy;见图 4.2(b)?语句rr(a) (b)图4.23. if(表达式1)语句1else if (表达式2)语句2elseif(表达式3)语句3 else if (表达式m)语句m else语句n流程图见图4.3?例如:if (n umber>500) cost=0.15;else if(number>300) cost=0.10;else if( number>100) cost=0.075;else if( nu mber>50) cost=0.05;说明: (1)从图4.2和图4.3可以看到:3种形式的if语句都是由一个入口进来,经过对表达式”的判断,分别执行相应的语句,最后归到一个共同的出口?这种形式的程序结构称为选择结构?在C++中if语句是实现选择结构主要的语句?(2)3种形式的if语句中在if后面都有一个用括号括起来的表达式,它是程序编写者要求程序判断的条件” 一般是逻辑表达式或关系表达式?(3)第2?第3种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号?⑷ 在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“{} 将”几个语句括起来成为一个复合语句?例 4.1 求三角形的面积?#include <iostream>#include <cmath> //使用数学函数时要包含头文件cmath#include <iomanip> //使用I/O 流控制符要包含头文件iomanip using namespace std;int main( ){double a,b,c; cout<<"please enter a,b,c:"; cin>>a>>b>>c;if (a+b>c && b+c>a && c+a>b){ // 复合语句开始double s,area;〃在复合语句内定义变量s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<setiosflags(ios:: fixed)«setprecision(4); 〃指定输出的数包含4 位小数cout<<"area="<<area<<endl; //在复合语句内输出局部变量的值} //复合语句结束else cout<<"it is not a trilateral!"<<endl; return 0;}运行情况如下:please en ter a,b, c:2.45 3.67 4.89/area=4.3565变量s和area只在复合语句内用得到,因此在复合语句内定义,它的作用范围为从定义变量开始到复合语句结束?如果在复合语句外使用s 和area,则会在编译时出错,系统认为这两个变量未经定义?将某些变量局限在某一范围内,与外界隔离,可以避免在其他地方被误调用?4.2.2 if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套?一般形式如下:if()if()语句1else语句2 内嵌ifelseif()语句3else语句4 内嵌if应当注意if与else的配对关系?else总是与它上面最近的?且未配对的if配对?假如写成if()if()语句1elseif()语句2else 语句 3 内嵌if编程序者把第一个else写在与第一个if(外层if)同一列上,希望else与第一个if对应,但实际上else是与第二个if配对,因为它们相距最近,而且第二个if并未与任何else配对?为了避免误用,最好使每一层内嵌的if语句都包含else子句(如本节开头列出的形式),这样if的数目和else的数目相同,从内层到外层- 对应,不致出错?如果if与else的数目不一样,为实现程序设计者的企图,可以加花括号来确定配对关系?例如:if( ){ if ( ) 语句1} //这个语句是上一行if 语句的内嵌ifelse 语句2//本行与第一个if 配对这时{}限定了内嵌if语句的范围,{}外的else不会与{}内的if 配对?关系清楚,不易出错?4.3 条件运算符和条件表达式若在if语句中,当被判别的表达式的值为真”或假”时,都执行一个赋值语句且给同一个变量赋值时,可以用简单的条件运算符来处理?例如,若有以下if 语句:if (a>b) max=a;else max=b;可以用条件运算符(? :)来处理: max=(a>b)?a:b;其中“(a>b)?a:b是一个条件表达式”它是这样执行的:如果(a>b)条件为真,则条件表达式的值就取“?”后面的值,即条件表达式的值为a, 否则条件表达式的值为“:后”面的值,即b?条件运算符要求有3个操作对象,称三目(元)运算符,它是C++中惟一的一个三目运算符?条件表达式的一般形式为表达式 1 ? 表达式 2 :表达式 3条件运算符的执行顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式 2 的值就作为整个条件表达式的值?若表达式 1 的值为0(假),则求解表达式3,表达式 3 的值就是整个条件表达式的值? “ max=(a>b) ?a:b 的”执行结果是将条件表达式的值赋给max ?也就是将a和b二者中的大者赋给max?条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max?条件表达式中,表达式 1 的类型可以与表达式 2 和表达式 3 的类型不同?如x? 'a' : 'b'如果已定义x为整型变量,若x=0,则条件表达式的值为字符'b'的ASCII 码?表达式2和表达式3的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型?如有条件表达式x>y?1:1.5,如果x< y, 则条件表达式的值为1.5若x>y,值应为1,由于C++把1.5按双精度数处理,双精度的类型比整型高,因此,将 1 转换成双精度数,以此作为表达式的值? 例 4.2 输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换?然后输出最后得到的字符?#include <iostream>using namespace std;int main( ){char ch;cin>>ch;ch=(ch>='A' && ch<='Z')?(ch+32):ch; //判别ch 是否大写字母, 是则转换cout<<ch<<endl;return 0;}4.4 多分支选择结构和switch 语句switch 语句是多分支选择语句,用来实现多分支选择结构? 它的一般形式如下:switch (表达式){case 常量表达式1:语句 1 case 常量表达式2: 语句 2 case 常量表达式n: 语句ndefault: 语句n+1例如,要求按照考试成绩的等级打印出百分制分数段,可以用switch 语句实现:switch (grade){case'A': cout<<"85~100\n";case'B': cout<<"70~84\n";case'C': cout<<"60~69\n";case'D': cout<<"<60\n";default: cout<<"error\n";}说明:(1) switch 后面括号内的“表达式”允,许为任何类型?(2) 当switch 表达式的值与某一个case 子句中的常量表达式的值相匹配时,就执行此case子句中的内嵌语句,若所有的case子句中的常量表达式的值都不能与switch表达式的值匹配,就执行default子句的内嵌语句?(3)每一个case表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)?(4)各个case 和default 的出现次序不影响执行结果?例如,可以先出现“default: •;再出现“case D: •然后是“case 'A': •?• ”(5)执行完一个case子句后,流程控制转移到下一个case子句继续执行?“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断?在执行switch 语句时,根据switch 表达式的值找到与之匹配的case子句,就从此case子句开始执行下去,不再进行判断?例如,上面的例子中若grade的值等于'A,则将连续输出:85~10070~8460~69<60error因此,应该在执行一个case 子句后,使流程跳出switch 结构,即终止switch 语句的执行?可以用一个break 语句来达到此目的?将上面的switch 结构改写如下:switch(grade){case'A': cout<<"85~100\n"; break;case'B': cout<<"70~84\n"; break;case'C': cout<<"60~69\n"; break;case'D': cout<<"<60\n"; break;default: cout<<"error\n"; break;}最后一个子句(default)可以不加break语句?如果grade的值为'B',则只输出“70~84”?流程图见图 4.4?图4.4在case子句中虽然包含一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case子句中所有的执行语句?(6)多个case可以共用一组执行语句,如■■・・・■case 'A':case 'B':case C: cout<<">60\n"; break;当grade的值为'A' ?'B'或C时都执行同一组语句?4.5编写选择结构的程序例4.3编写程序,判断某一年是否为闰年?#in clude <iostream>using namespace std;int mai n(){ int year;bool leap;cout<<"please enter year:"; //输出提示cin>>year; // 输入年份if (year%4==0) //年份能被 4 整除{if (year%100==0) //年份能被4整除又能被100整除{if (year%400==0) //年份能被4整除又能被400整除leap=true; //闰年,令leap=true( 真)else leap二false;} 〃非闰年,令leap二false(假)else //年份能被 4 整除但不能被100整除肯定是闰年leap二true;} //是闰年,令leap二trueelse //年份不能被 4 整除肯定不是闰年leap=false; //若为非闰年,令leap=falseif (leap)coutvvyearvv" is "; 〃若leap为真,就输出年份和是”elsecoutvvyearvv" is not "; 〃若leap为真,就输出年份和不是”cout<<" a leap year."<< endl; //输出“闰年”return 0;}运行情况如下:① 2005/2005 is not a leap year.② 1900/1900 is npt a leap year.也可以将程序中第8~16 行改写成以下的if 语句: if(year%4!=0)leap=false;elseif(year%100!=0) leap=true;elseif(year%400!=0) leap=false;elseleap=true;也可以用一个逻辑表达式包含所有的闰年条件,将上述if 语句用下面的if 语句代替:if ((year%4 == 0 && year%100 !=0) || (year%400 == 0)) leap=true; else leap=false;例4.4运输公司对用户计算运费?路程(s)越远,每公里运费越低?标准如下:s<250km 没有折扣250< SV500 2%折扣500< SV10005%折扣1000< SV20008%折扣2000W s<3000 10% 折扣3000W s 15% 折扣设每公里每吨货物的基本运费为p(price的缩写),货物重为w (wright的缩写),距离为s折扣为d(discount的缩写),则总运费f(freight 的缩写)的计算公式为f = p * w * s * (1 - d)6 4 2 o 8 6 4 2 du0 250 500 750 1000 12501500 1750 2000 2250 25002750 3000 s9 10 II 12 c图3.8据此写出程序如下:#in clude <iostream>using namespace std;int mai n(){int c,s;float p,w,d,f;cout«"please en ter p,w,s:";if (s>=3000) c=12;else c=s/250;switch (c){ case 0:d=0; break ;case1:d=2; break ;case2:case3:d=5; break ;case4:case5:case6:case7:d=8; break ;case8:case9:case10:case11:d=10; break ;case12:d=15; break ;}f=p*w*s*(1-d/100.0); cout<<"freight="<<f<<endl;return 0;} 运行情况如下:please en ter p,w,s:100 20 300/freight=588000。