第4章 选择结构程序设计
合集下载
第四篇选择结构程序设计
以某表达式的值等于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
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。最后输出结果。下 面给出程序:
程序输出举例: 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。最后输出结果。下 面给出程序:
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)
第四章 选择(分支)结构程序设计
选择结构程序设计
本章要点:
1 . 关系表达式
2 . 逻辑表达式
3 . 选择结构程序设计
第四章
选择结构程序设计
主要内容: 1. 关系运算符与关系表达式 2. 逻辑运算符与逻辑表达式 3. if 语句 4. switch 语句
5. 程序举例
C语言程序设计
例: 银行存款的例子 设银行定期存款年利率rate 一年 2.68 % 二年 2.98% 三年 3.5 % 五年及以上 4.2 % 并已知存款期为n年,存款本金为capital元, 编程计算n年后本息之和deposit.
{float score;
printf(“input score:”); scanf(“%f”,&score); if(score>=90) printf(“Excellent!\n”); else if(score>=80) printf(“Good!\n”); else if(score>=70) printf(“Middle!\n”); else if(score>=60) printf(“Pass!\n”); else printf(“Fail!\n”);
4.3 if语句
例:要求用户输入一个实数,然后求出这个实数 的绝对值。
4.3 if语句
2. 分支执行 if(表达式) 语句1 else 语句2 即 if (P) A else B
当P 为真时(非0)执行A,否则执行B或后续语句。
4.3 if语句
例: if (a>0) printf(“A is a positive\n”); else printf(“A is not a positive\n”);
C语言程序设计
选择结构是三种基本结构(顺序、选择、循环)之
本章要点:
1 . 关系表达式
2 . 逻辑表达式
3 . 选择结构程序设计
第四章
选择结构程序设计
主要内容: 1. 关系运算符与关系表达式 2. 逻辑运算符与逻辑表达式 3. if 语句 4. switch 语句
5. 程序举例
C语言程序设计
例: 银行存款的例子 设银行定期存款年利率rate 一年 2.68 % 二年 2.98% 三年 3.5 % 五年及以上 4.2 % 并已知存款期为n年,存款本金为capital元, 编程计算n年后本息之和deposit.
{float score;
printf(“input score:”); scanf(“%f”,&score); if(score>=90) printf(“Excellent!\n”); else if(score>=80) printf(“Good!\n”); else if(score>=70) printf(“Middle!\n”); else if(score>=60) printf(“Pass!\n”); else printf(“Fail!\n”);
4.3 if语句
例:要求用户输入一个实数,然后求出这个实数 的绝对值。
4.3 if语句
2. 分支执行 if(表达式) 语句1 else 语句2 即 if (P) A else B
当P 为真时(非0)执行A,否则执行B或后续语句。
4.3 if语句
例: if (a>0) printf(“A is a positive\n”); else printf(“A is not a positive\n”);
C语言程序设计
选择结构是三种基本结构(顺序、选择、循环)之
C语言程序设计:第4章 选择结构程序设计
gt; >= == !=
作用 小于 小于等于 大于 大于等于 等于 不等于
运算数 双目 双目 双目 双目 双目 双目
结合性 左结合 左结合 左结合 左结合 左结合 左结合
优先级 10 10 10 10 9 9
2
例如:
(1) 比较整型变量k大于0,表达式为:k>0 (2) 比较考试成绩score大于等于60,表达式为:score>=60 (3) 比较整型变量k模2等于0,即判断k是否是偶数:k%2==0 (4) 比较字符变量ch的值等于'A',表达式为:ch!='A'
return 0; }
Input 2 integers(a b):100 10<回车> 100,10
Input 2 integers(a b):10 100<回车> 100,10
2.双分支if语句
if (表达式) 语句1 else 语句2
执行过程: 首先先判断表达式的值 若为非0则执行语句1 若为0则执行语句2
if语句的双分支形式,在语法上 视为一条语句。
表达式
真
语句1
假
语句2
例4-4:判断整数的奇偶性。从键盘输入一个整数x,根据其奇 偶性输出x是奇数或x是偶数。
Input an integer: 12<回车> 12 is odd number.
#include <stdio.h>
int main()
return 0;
}
例4-5:修改例3-6使用海伦公式计算三角形面积程序的要求,当输入 的三个边长能够构成三角形时,计算面积;否则,输出不能构成三角 形。
思路分析:三角形面积的计算过程与原例题相同,新要求是在“三个 边长能构成三角形”这一条件成立时才进行计算面积,否则直接输出 提示信息。根据数学知识,这一条件可以描述为“任意两个边长之和 大于第三个边长”,输入三个边长a、b、c后,条件可以使用如下的 逻辑表达式描述:
作用 小于 小于等于 大于 大于等于 等于 不等于
运算数 双目 双目 双目 双目 双目 双目
结合性 左结合 左结合 左结合 左结合 左结合 左结合
优先级 10 10 10 10 9 9
2
例如:
(1) 比较整型变量k大于0,表达式为:k>0 (2) 比较考试成绩score大于等于60,表达式为:score>=60 (3) 比较整型变量k模2等于0,即判断k是否是偶数:k%2==0 (4) 比较字符变量ch的值等于'A',表达式为:ch!='A'
return 0; }
Input 2 integers(a b):100 10<回车> 100,10
Input 2 integers(a b):10 100<回车> 100,10
2.双分支if语句
if (表达式) 语句1 else 语句2
执行过程: 首先先判断表达式的值 若为非0则执行语句1 若为0则执行语句2
if语句的双分支形式,在语法上 视为一条语句。
表达式
真
语句1
假
语句2
例4-4:判断整数的奇偶性。从键盘输入一个整数x,根据其奇 偶性输出x是奇数或x是偶数。
Input an integer: 12<回车> 12 is odd number.
#include <stdio.h>
int main()
return 0;
}
例4-5:修改例3-6使用海伦公式计算三角形面积程序的要求,当输入 的三个边长能够构成三角形时,计算面积;否则,输出不能构成三角 形。
思路分析:三角形面积的计算过程与原例题相同,新要求是在“三个 边长能构成三角形”这一条件成立时才进行计算面积,否则直接输出 提示信息。根据数学知识,这一条件可以描述为“任意两个边长之和 大于第三个边长”,输入三个边长a、b、c后,条件可以使用如下的 逻辑表达式描述:
第四章.选择结构程序设计
2)逻辑运算的值:
逻辑运算的值也为“真”和“假”两种,用“1”和“0 ”来 表示。
反过来在判断一个量是为“真”还是为“假”时,以“0” 的数值代表“假”,以非“0”的数值代表“真”。
3)逻辑运算的规则:
(1)与运算&& 参与运算的两个量都为真时(非0),结果才为真(值为1),
否则为假(值为0)。 例如:5>0 && 4>2,由于5>0为真,4>2也为真,其结果
也为“真”,表达式的值为1。
(2)或运算|| 参与运算的两个量只要有一个为真(非0),结果就为真(值
为1)。 两个量都为假(值为0)时,结果为假(值为0)。 例如:5>0 || 5>8, 结果也就为真(值为1)。
3)逻辑运算的规则:
(3)非运算! 参与运算量为真(非0)时,结果为假(值为0);参与运
“假”。
C语言中没有逻辑数据型,用 1 表示“真”、0 表示
“假” 。
如: 5>0的值为“真”,即为1。
(a=3)>(b=5)由于3>5不成立,其值为0。
关系表达式是表达式,因此也允许出现嵌套的情况。
如:a>(b>c), a!=(c==d)等。
逻辑运算符和表达式
1.逻辑运算符
C语言中提供了三种逻辑运算符 ! 非运算 && 与运算 || 或运算
语句2
非0 表达式m 0 语句m 语句n
语句n;
if…else if 结构的执行过程
例 如:
void main() { int result;
printf("input your result: "); scanf(“%d”,&result); if (result>=90) printf(“your result is wounderful!\n"); else if(result >=80) printf(" your result is good!\n"); else if(result >=70) printf(" your result is normal!\n"); else if(result >=60) printf(" your result is passed!\n"); else printf(“you’ll take a another test!\n"); }
逻辑运算的值也为“真”和“假”两种,用“1”和“0 ”来 表示。
反过来在判断一个量是为“真”还是为“假”时,以“0” 的数值代表“假”,以非“0”的数值代表“真”。
3)逻辑运算的规则:
(1)与运算&& 参与运算的两个量都为真时(非0),结果才为真(值为1),
否则为假(值为0)。 例如:5>0 && 4>2,由于5>0为真,4>2也为真,其结果
也为“真”,表达式的值为1。
(2)或运算|| 参与运算的两个量只要有一个为真(非0),结果就为真(值
为1)。 两个量都为假(值为0)时,结果为假(值为0)。 例如:5>0 || 5>8, 结果也就为真(值为1)。
3)逻辑运算的规则:
(3)非运算! 参与运算量为真(非0)时,结果为假(值为0);参与运
“假”。
C语言中没有逻辑数据型,用 1 表示“真”、0 表示
“假” 。
如: 5>0的值为“真”,即为1。
(a=3)>(b=5)由于3>5不成立,其值为0。
关系表达式是表达式,因此也允许出现嵌套的情况。
如:a>(b>c), a!=(c==d)等。
逻辑运算符和表达式
1.逻辑运算符
C语言中提供了三种逻辑运算符 ! 非运算 && 与运算 || 或运算
语句2
非0 表达式m 0 语句m 语句n
语句n;
if…else if 结构的执行过程
例 如:
void main() { int result;
printf("input your result: "); scanf(“%d”,&result); if (result>=90) printf(“your result is wounderful!\n"); else if(result >=80) printf(" your result is good!\n"); else if(result >=70) printf(" your result is normal!\n"); else if(result >=60) printf(" your result is passed!\n"); else printf(“you’ll take a another test!\n"); }
第4章 选择结构程序设计
Xor
非
与
或
异或
Eqv 相等
Imp 蕴含
T
T
F
T
T
F
T
T
T
F
F
F
T
T
F
F
F
T
T
F
T
T
F
T
F
F
T
F
F
F
T
T
8
⑵ 逻辑表达式
用逻辑运算符连接起来的表达式称为逻辑表达式,逻辑
表达式也称为布尔表达式。
例如:① 一元二次方程有实根的条件:a≠0 且
a2-4ac≥0 写成逻辑表达式为:
a<>0 and a^2-
Else 语句块n+1 存在,则执行语句块n+1
23
其流程见图:
24
【例4.4】输入某位学生的百分制成绩,要求输出成绩的等级:
假设90分以上为A等,80-89分为B等,70-79分为C等,60-69
为D等,60分以下为E等。
Private Sub Form_Click()
Dim Score As Integer
4
说明:
[1]、关系运算的两个操作数一般是相同或相容类型的,常对
两个数值、两个字符串、两个日期型数据进行比较。
⑵、如果两个操作数是数值型,则按其大小比较。
例如: 8=9
结果为False
8>7
结果为False
8>=8
结果为True1
[3]、如果两个操作数是字符型,则按字符的ASCII码值从左
到右逐一比较、即首先比较两个字符串的第1个字符,其
End If 其中:[Else
第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语句实现多层判断
915145-C语言程序设计-第4章 选择结构程序设计
条目 票务详情 条件表示(关系表达式) age>=65 style==’2’
老年人
票价分类 两日联票
65周岁及以上
选择两日联票
• 常见错误
– 条件表示时,“==” 运算符误写作“=”运算符 – 数值0、1、…、9与数字字符’0’、’1’、…、’9’的混淆
4.2.2 逻辑运算
• • • 逻辑运算符
– 逻辑非(!)、逻辑与(&&)和逻辑或(||)
• 逻辑表达式求值方法
– 在逻辑表达式的求值过程中,按其操作数从左至右的 计算顺序,当某个操作数的值可以确定整个逻辑表达 式的值时,其余的操作数不再计算
4.2.3 短路求值
例如:假如有变量定义为 int x,y,z; 求下列表达式执行后,表达式的值和变量的值
序号
① ② ③ ④ ⑤ ⑥
变量初始值
x=y=z=1; x=2,y=0,z=1; x=y=z=1; x=0,y=1,z=2; x=0,y=1,z=2; x=0,y=1,z=2;
单分支 双分支 多分支 综合决策
– 选择控制结构
• 即根据条件进行判断选择执行相应操作的 问题,也称为分支控制结构 • 一般分为单分支、双分支和多分支三种结 构
• 实现的关键
– 判断条件的合法描述 – 选择操作流程的合理设计
4.1 门票价格问题
表4-1 上海迪士尼主题乐园的门票价格表
平日票
370
4.2 条件的表示
微视频:短路求值示例
4.3 单分支结构
• 问题
– 迪士尼门票规则
• 老年人:65周岁以上 平日票:280元,高峰日票:375元
分析 – 需要对条件(年龄大于等于65)进行判断
如果为真,则享受优惠票价 平日票:280元,高峰日票:375元
老年人
票价分类 两日联票
65周岁及以上
选择两日联票
• 常见错误
– 条件表示时,“==” 运算符误写作“=”运算符 – 数值0、1、…、9与数字字符’0’、’1’、…、’9’的混淆
4.2.2 逻辑运算
• • • 逻辑运算符
– 逻辑非(!)、逻辑与(&&)和逻辑或(||)
• 逻辑表达式求值方法
– 在逻辑表达式的求值过程中,按其操作数从左至右的 计算顺序,当某个操作数的值可以确定整个逻辑表达 式的值时,其余的操作数不再计算
4.2.3 短路求值
例如:假如有变量定义为 int x,y,z; 求下列表达式执行后,表达式的值和变量的值
序号
① ② ③ ④ ⑤ ⑥
变量初始值
x=y=z=1; x=2,y=0,z=1; x=y=z=1; x=0,y=1,z=2; x=0,y=1,z=2; x=0,y=1,z=2;
单分支 双分支 多分支 综合决策
– 选择控制结构
• 即根据条件进行判断选择执行相应操作的 问题,也称为分支控制结构 • 一般分为单分支、双分支和多分支三种结 构
• 实现的关键
– 判断条件的合法描述 – 选择操作流程的合理设计
4.1 门票价格问题
表4-1 上海迪士尼主题乐园的门票价格表
平日票
370
4.2 条件的表示
微视频:短路求值示例
4.3 单分支结构
• 问题
– 迪士尼门票规则
• 老年人:65周岁以上 平日票:280元,高峰日票:375元
分析 – 需要对条件(年龄大于等于65)进行判断
如果为真,则享受优惠票价 平日票:280元,高峰日票:375元
第4章 C语言选择结构程序设计
《 C语言程序设计》
流程图
真 (非0) 表达式
假(0)
语句1
语句2
《 C语言程序设计》
例4.1
【例4.1】试用if…else语句编写程序,判断学生成绩 是否合格。
判断方法: ①如果成绩大于等于60,输出及格 ②否则输出成绩不及格
《 C语言程序设计》
4.2 if语句 if语句
C语言中if条件语句有三种结构形式,分别是: if结构(单分支结构) if if-else if-else结构(双分支结构) if-else-if结构 (多分支结构) if-else-if
《 C语言程序设计》
例4.5 设计一个应用程序,判断某一年是否为闰年
判断方法: ①如果该年能被4整除而不能被100整除,则为闰年; ②或者能被400整除也是闰年。 如: 1996年、2000年是闰年 1996年 2000年是闰年
1998年 1900年不是闰年 1998年、1900年不是闰年
逻辑表达式为: year%4==0 && year%100!=0 || year%400==0
4.4 条件运算符和条件表达式
条件运算符: 1、条件运算符:?:是C语言中惟一的一个三 目运算符。 一般形式为: 2、一般形式为: 表达式1 ? 表达式2 : 表达式3 3、操作过程:如果表达式1成立,则表达式2的 操作过程: 值就是此条件表达式的值;否则,表达式3 的值是此条件表达式的值。
《 C语言程序设计》
《 C语言程序设计》
4.2.2 if-else结构 if-else结构
1、格式: if(条件表达式 语句1 条件表达式) if(条件表达式) 语句1; 真 (非0) else 语句2; 语句 ; 语句1 2、执行过程:
C语言程序设计教程:选择结构程序设计
25
4.2 switch语句
(5) case后面的语句块可以是一条语句或多条语句,也可 是空语句,但不需要用大括号括起来。
(6) 当case后面常量表达式与switch后面的表达式均不匹 配时,则执行default后面的语句块,default可以放在程序的 任何位置,不一定要位于最后。
(7) 多个case可以共用一个语句块。 例如: switch(n)
注意:当多分支中有多个表达式同时满足时,只执行第一个与之匹配的语句块。 因此要注意对多分支中条件表达式的书写次序,防止某些值被过滤掉。
15
4.1.1 if语句的三种形式
思考:若将例4.4中程序改为以下两种写法,结果分别会如何?
程序段一如下: #include <stdio.h> main() {
float score; printf("请输入学生期末考试成绩(0-100):\n "); scanf("%f", &score); if(score>=90)
4.1.1 if语句的三种形式
程序段二如下: #include <stdio.h> main() {
float score; printf("请输入学生期末考试成绩(0-100):\n "); scanf("%f", &score); if(score>=60)
printf("及格!\n "); else if(score>=70)
9
4.1.1 if语句的三种形式
2. 双分支选择结构
双分支结构语法的一般格式为:
if(表达式)
{
语句块1;
}
4.2 switch语句
(5) case后面的语句块可以是一条语句或多条语句,也可 是空语句,但不需要用大括号括起来。
(6) 当case后面常量表达式与switch后面的表达式均不匹 配时,则执行default后面的语句块,default可以放在程序的 任何位置,不一定要位于最后。
(7) 多个case可以共用一个语句块。 例如: switch(n)
注意:当多分支中有多个表达式同时满足时,只执行第一个与之匹配的语句块。 因此要注意对多分支中条件表达式的书写次序,防止某些值被过滤掉。
15
4.1.1 if语句的三种形式
思考:若将例4.4中程序改为以下两种写法,结果分别会如何?
程序段一如下: #include <stdio.h> main() {
float score; printf("请输入学生期末考试成绩(0-100):\n "); scanf("%f", &score); if(score>=90)
4.1.1 if语句的三种形式
程序段二如下: #include <stdio.h> main() {
float score; printf("请输入学生期末考试成绩(0-100):\n "); scanf("%f", &score); if(score>=60)
printf("及格!\n "); else if(score>=70)
9
4.1.1 if语句的三种形式
2. 双分支选择结构
双分支结构语法的一般格式为:
if(表达式)
{
语句块1;
}
第4章选择结构程序设计
8 t
4.3 if语句 #include <stdio.h> int main() { int a,b,c,t; scanf(“%d,%d,%d”,&a,&b,&c); if(a>b) {t=a;a=b;b=t;} if(a>c) {t=a;a=c;c=t;} if(b>c) {t=b;b=c;c=t;} printf(“%d,%d,%d \n”,a,b,c); return 0; }
a≥b且a≥c 最大值为a
b≥a且b≥c 最大值为b c≥a且c≥b 最大值为c
a>=b&&a>=c 最大值为a
b>=a&&b>=c 最大值为b c>=a&&c>=b 最大值为c
4.3 if语句 #include <stdio.h> int main() { int a,b,c,max; scanf(“%d,%d,%d”,&a,&b,&c); if(a>=b&&a>=c) max=a; if(b>=a&&b>=c) max=b; if(c>=a&&c>=b) max=c; printf(“max=%d\n”,max); return 0; }
表达式1 真 假 表达式2 真 假 表达式3 真 语句1 语句2 语句3 语句4 假
多个分支的选择
4.3 if语句 例:输入学生成绩,根据成绩分等级,90分以上为 ‘A‟,80~89分为‘B‟, 70~79分为‘C‟, 60~ 69分为‘D‟, 60分以下为‘E‟。 scanf(“%f”,&score); if(score>=90) printf(“A”); else if(score>=80) printf(“B”); else if(score>=70) printf(“C”); else if(score>=60) printf(“D”); else printf(“E”);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算b2-4ac,disc的值变为8
home back first prev next last
10
if (disc<0) 8<0为假 printf(“has not real roots\n”); else p的值变为-1 { p=-b/(2.0*a); q的值变为0.71 q=sqrt(disc)/(2.0*a); x1=p+q; x1的值变为-0.29 x2=p-q; x2的值变为-1.71 printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; }
19
#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; }
16
4.2.1 if语句结举例
C
★
A
★
●B
home back first prev next last
17
4.2.1 if语句结举例
C
★
A
● ★
●B
home back first prev next last
18
4.2.1 if语句结举例
C
★
A
●
●B ★
home back first prev next last
选择结构,用if语句实现的
home back first prev next last
12
if (disc<0) printf(“has not real roots\n”); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; }
复合语句
home back first prev next last
13
4.2 if语句实现选择结构
4.2.1 用if语句处理选择结构举例 4.2.2 if语句的一般形式
home back first prev next last
14
4.2.1 if语句举例
例4.2 输入两个实数,按代数值由小到大的 顺序输出这两个数。
if (表达式) 语句1 [ else 语句2 ]
简单的语句 复合语句 另一个if语句等
home back first prev next last
28
最常用的3种if语句形式: 1. if (表达式) 语句1 (没有else子句) 2. if (表达式) 语句1 else 语句2 (有else子句) 3. if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 ┆ else if(表达式m) 语句m else 语句m+1 (在else部分又嵌套了多层的if语句)
31
4.3关系运算符和关系表达式
4.3.1关系运算符及其优先次序 4.3.2 关系表达式
home back first prev next last
32
4.3.1关系运算符及其优先次序
• 关系运算符:
用来对两个数值进行比较的比较运算符
• C语言提供6种关系运算符:
① < (小于) ② <= ③ > (大于) ④ >= (小于或等于) (大于或等于)
• C语言有两种选择语句:
(1)if语句,实现两个分支的选择结构
(2)switch语句,实现多分支的选择结构
home back first prev next last
5
4.1 选择结构和条件判断
例4.1 在例3.5的基础上对程序进行改进。题 ax2 bx c 0 目要求是求 方程的根。 由键盘输入a,b,c。假设a,b,c的值任意,并不 2 保证 b 4ac 0 需要在程序中进行判别, 如果 ,就计算并输出方 b 2 4ac 0 程的两个实根,否则就输出“方程无实根” 的信息。
home back first prev next last
23
#include <stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) 如果 a>b,将a和b对换 { t=a; a=b; b=t; } a是a、b中的小者 if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }
home back first prev next last
15
4.2.1 if语句结举例
• 解题思路:
– 只需要做一次比较,然后进行一次交换即可 – 用if语句实现条件判断 – 关键是怎样实现两个变量值的互换
互换前 互换后
A A
★ ●
●B ★B
home back first prev next last
home back first prev next last
24
#include <stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) 如果 a>c,将a和c对换 a是三者中的小者 { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }
C程序设计与实训
第4章 选择结构程序设计
精熟一技,拔萃万众
第4章 选择结构程序设计
4.1 选择结构和条件判断 4.2 用if语句实现选择结构
4.3关系运ห้องสมุดไป่ตู้符和关系表达式
4.4 逻辑运算符和逻辑表达式
4.5 条件运算符和条件表达式
4.6 选择结构的嵌套
4.7 用switch语句实现多分支选择结构
4.8选择结构程序综合举例
home back first prev next last
2
4.1 选择结构和条件判断
• 在现实生活中,需要进行判断和选择的 情况是很多的
– 如果你在家,我去拜访你
– 如果考试不及格,要补考
– 如果遇到红灯,要停车等待 – 周末我们去郊游 – 70岁以上的老年人,入公园免票
home back first prev next last
3
4.1 选择结构和条件判断
• 在现实生活中,需要进行判断和选择的 情况是很多的
• 处理这些问题,关键在于进行条件判断 • 由于程序处理问题的需要,在大多数程 序中都会包含选择结构,需要在进行下 一个操作之前先进行条件判断
home back first prev next last
4
4.1 选择结构和条件判断
home back first prev next last
20
#include <stdio.h> int main() { float a,b,t; scanf("%f,%f",&a,&b); if(a>b) { t=a; 选择结构,用if语句实现的 a=b; b=t; } printf("%5.2f,%5.2f\n",a,b); return 0; }
优先级相同 (高) ⑤ == (等于) ⑥ != (不等于) 优先级相同 (低)
home back first prev next last
26
4.2.2 if语句的一般形式
关系表达式 逻辑表达式 if (表达式) 语句1 数值表达式 [ else 语句2 ]
方括号内的部分为可选的
home back first prev next last
27
4.2.2 if语句的一般形式
if (number > 500) cost = 0.15; else if (number > 300) cost = 0.10; 分号不能丢 else if (number > 100) cost = 0.075; else if (number > 50) cost = 0.05; else cost = 0;
home back first prev next last
9
#include <stdio.h> #include <math.h> int main ( ) { double a,b,c,disc,x1,x2,p,q; scanf("%lf%lf%lf",&a,&b,&c); disc=b*b-4*a*c;
home back first prev next last
11
if (disc<0) printf(“has not real roots\n”); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; }