25
程程程程程程 程程程程程程 —— —— 6 6 选选选选选选选选 选选选选选选选选 IF IF

程序设计导论 —— 第 6 讲

Embed Size (px)

DESCRIPTION

程序设计导论 —— 第 6 讲. 选择结构程序设计 IF. 内容要点. 关系运算符与关系表达式 逻辑运算符和逻辑表达式 程序的分支结构. 分支和条件语句. 一般情况下,程序中的语句是从头到尾按顺序逐条执行的 有些情况下,不同的条件对应着不同的计算过程,因此程序需要根据条件来决定程序的执行步骤 程序中分支是和一定的条件密切相关的 在某种条件得到满足的时候执行一种操作 在该条件不满足的时候执行另一中操作 条件一般是由逻辑表达式来描述 逻辑表达式可以一个简单的关系表达式,也可以是逻辑运算符连接的多个关系表达式. 关系运算符. C 语言中的关系运算符: - PowerPoint PPT Presentation

Citation preview

Page 1: 程序设计导论 —— 第 6 讲

程序设计导论程序设计导论————第第 66 讲讲

选择结构程序设计选择结构程序设计IFIF

Page 2: 程序设计导论 —— 第 6 讲

22

内容要点内容要点

关系运算符与关系表达式关系运算符与关系表达式 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 程序的分支结构程序的分支结构

Page 3: 程序设计导论 —— 第 6 讲

33

分支和条件语句分支和条件语句

一般情况下,程序中的语句是从头到尾按顺一般情况下,程序中的语句是从头到尾按顺序逐条执行的序逐条执行的

有些情况下,不同的条件对应着不同的计算有些情况下,不同的条件对应着不同的计算过程,因此程序需要根据条件来决定程序的过程,因此程序需要根据条件来决定程序的执行步骤执行步骤

程序中分支是和一定的条件密切相关的程序中分支是和一定的条件密切相关的– 在某种条件得到满足的时候执行一种操作在某种条件得到满足的时候执行一种操作– 在该条件不满足的时候执行另一中操作在该条件不满足的时候执行另一中操作– 条件一般是由逻辑表达式来描述条件一般是由逻辑表达式来描述

逻辑表达式可以一个简单的关系表达式,也可以是逻辑逻辑表达式可以一个简单的关系表达式,也可以是逻辑运算符连接的多个关系表达式运算符连接的多个关系表达式

Page 4: 程序设计导论 —— 第 6 讲

44

关系运算符关系运算符

CC 语言中的关系运算符:语言中的关系运算符:运算符运算符 说明说明 >> 大于大于 >=>= 大于等于大于等于 << 小于小于 <=<= 小于等于小于等于 = == = 等于等于 !=!= 不等于不等于

优先级相同(高)

优先级相同(低)

关系运算符的优先级低于算术运算符,高于赋值运算符

Page 5: 程序设计导论 —— 第 6 讲

55

关系表达式关系表达式

用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式)接起来的式子,称关系表达式

关系表达式的值是一个逻辑值,即“真”或“假”– 1 为真, 0 为假

Page 6: 程序设计导论 —— 第 6 讲

66

逻辑运算逻辑运算 逻辑运算符如下:逻辑运算符如下:

运算符运算符 说明说明 !! 逻辑非(逻辑非( NOTNOT )) &&&& 逻辑与(逻辑与( ANDAND )) |||| 逻辑或(逻辑或( OROR ))

!! 为单目运算符,为单目运算符, &&&& 和和 |||| 为双目运算符,为双目运算符,结合方向为从右至左。结合方向为从右至左。

Page 7: 程序设计导论 —— 第 6 讲

77

逻辑运算运算的优先级逻辑运算运算的优先级

! > && >||! > && >|| ,即,即““ !!”” 为三者中最高。为三者中最高。 ““&&&&”” 和和““ ||||”” 低于关系运算符。低于关系运算符。 ““!!”” 高于算术运算符。高于算术运算符。

Page 8: 程序设计导论 —— 第 6 讲

88

运算符的优先次序运算符的优先次序1.1. ., ., , [], (), [], ()2.2. ++, --, !, ~, ++, --, !, ~,

(DataType), (DataType), sizeofsizeof

3.3. *, /, %*, /, %4.4. +, -+, -5.5. >>, <<>>, <<6.6. >, <, >=, <=>, <, >=, <=7.7. ==, !===, !=

8.8. &&

9.9. ^̂10.10. ||

11.11. &&&&

12.12. ||||

13.13. ?:?:

14.14. =, +=, -=, *=, =, +=, -=, *=, …………

不用死记,复杂表达式中多用“ ( )”运算符

Page 9: 程序设计导论 —— 第 6 讲

99

逻辑表达式逻辑表达式

例: 5>3&&8<4-!0

自左向右运算

1&&0 逻辑值为 0 8<3 逻辑值为 0

4-1 值为 3!0 逻辑值为 15>3 逻辑值为 1

表达式值为 0

逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子

Page 10: 程序设计导论 —— 第 6 讲

1010

逻辑表达式(续)逻辑表达式(续)

在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。(1)a&&b&&c 只有 a 为真时,才需要判断 b 的值,只有 a 和 b 都为真时, 才需要判断 c 的值。(2)a||b||c 只要 a 为真,就不必判断 b 和 c 的值,只有 a 为假,才 判断 b 。 a 和 b 都为假才判断 c

例: (m=a>b)&&(n=c>d)

当 a=1,b=2,c=3,d=4,m 和 n 的原值为 1 时,由于“ a>b” 的值为 0 ,因此 m=0 ,而“ n=c>d” 不被执行,因此 n 的值不是 0 而仍保持原值 1 。

Page 11: 程序设计导论 —— 第 6 讲

1111

分支结构分支结构

表达式

语句块

真(非 0 )假

( 0 )

表达式

语句块 语句块

Y N

Page 12: 程序设计导论 —— 第 6 讲

1212

分支程序的分支程序的 NSNS 流程图流程图

条件为真吗? 是

语句块 1 语句块 2

分支结构程序框图分支结构程序框图

Page 13: 程序设计导论 —— 第 6 讲

1313

If If 语句的格式语句的格式 情况情况 11 ::

if ( if ( 表达式 表达式 ) ) 语句 语句 11 ;;

如果表达式为真,执行语句 如果表达式为真,执行语句 11 ;否则什么都不做;否则什么都不做 ..

情况情况 22 ::if ( if ( 表达式 表达式 )){{

语句块 语句块 11 ;;}}如果表达式为真,执行语句块 如果表达式为真,执行语句块 11 ;否则什么都不做;否则什么都不做 ..

Page 14: 程序设计导论 —— 第 6 讲

1414

情况情况 33 ::if ( if ( 表达式 表达式 ) )

语句 语句 11 ;;elseelse

语句 语句 22 ;;如果表达式为真,执行语句如果表达式为真,执行语句 11 ;否则执行语句;否则执行语句 22

情况情况 44 ::if ( if ( 表达式 表达式 )){{

语句块 语句块 11 ;;}}elseelse{{

语句块 语句块 22 ;;}}

如果表达式为真,执行语句块如果表达式为真,执行语句块 11 ;否则执行语句块;否则执行语句块22

Page 15: 程序设计导论 —— 第 6 讲

1515

ifif 语句的嵌套和级联语句的嵌套和级联

if (<if (< 条件表达式条件表达式 1>) <1>) < 语句语句 1> 1>

else if (<else if (< 条件表达式条件表达式 2>) <2>) < 语句语句 2> 2>

else if (<else if (< 条件表达式条件表达式 3>) <3>) < 语句语句 3>3>

…………

else if (<else if (< 条件表达式条件表达式 n>) <n>) < 语句语句 n> n>

else <else < 语句语句 n+1>n+1>

Page 16: 程序设计导论 —— 第 6 讲

1616

分支结构实例分支结构实例

实现如图函数实现如图函数

x

y

-1

1

0

1, 0

0, 0

1, 0

x

y x

x

是 否

是 否

x>0

y=0 y=-1 y=1

x= =0

Page 17: 程序设计导论 —— 第 6 讲

1717

//************************************//************************************//* //* 程 序 程 序 名:名: 分支程序示例 分支程序示例 **//* //* 主要功能:实现符号函数 主要功能:实现符号函数 **//*************************************//*************************************

#include <stdio.h> #include <stdio.h> // // 预编译命令预编译命令

int main()int main() // // 主函数主函数{ { // // 主函数开始主函数开始

float x=0.0f;float x=0.0f; //// 声明声明 xx 为为 floatfloat 变量,初始化为变量,初始化为 0.00.0int y=0;int y=0; // // 声明声明 xx,, yy为整型变量,并初始化为为整型变量,并初始化为 00scanf(scanf(““%f%f””, &x);, &x); // // 从键盘从键盘读入读入 xxif (x>0)if (x>0) // // 如果如果 x>0x>0,将,将 11赋给赋给 yy

y=1;y=1;elseelse

if (xif (x====0)0) // // 如果如果 x==0x==0,将,将 00赋给赋给 yy y=0;y=0;elseelse y=-1;y=-1; // // 否则否则 x<0x<0,将,将 -1-1赋给赋给 yy

printf("%d\nprintf("%d\n””, y); , y); // // 输出输出 yy的值的值return 0;return 0;

} } ////主函数结束主函数结束

Page 18: 程序设计导论 —— 第 6 讲

1818

程序框图(程序框图( NSNS 图)图)

是 否

是 否

x>0

y=0 y=-1 y=1

x= =0

提示和输入整数 x

输出 y

实现符号函数的程序框图实现符号函数的程序框图

Page 19: 程序设计导论 —— 第 6 讲

1919

条件运算符条件运算符

条件表达式格式:条件表达式格式:– 表达式表达式 1 1 ?表达式?表达式 2 : 2 : 表达式表达式 33– 三目运算三目运算– 如果表达式如果表达式 11 成立,则条件表达式值为表达式成立,则条件表达式值为表达式 22

的值,否则为表达式的值,否则为表达式 33 的值的值– 例如:例如: max = (a>b)? a : b ;max = (a>b)? a : b ;

if (a>b)if (a>b)

max = a;max = a;

elseelse

max = b;max = b;

Page 20: 程序设计导论 —— 第 6 讲

2020

switchswitch 语句语句 格式:格式: switch ( switch ( 表达表达

式 式 )) {{ case case 常量常量 1:1: 语句语句 1;1; case case 常量常量 2:2: 语句语句 2;2; ┇ ┇ case case 常量常量 n:n: 语句语句 n;n; default:default: 语句语句 n+1; n+1; }}

执行过程:执行过程: 求出求出““表达式表达式””的值,的值,

并 执 行 与 其 相 匹并 执 行 与 其 相 匹 ““ 常常量量””对应的语句。跟随对应的语句。跟随casecase 的语句将顺序执的语句将顺序执行,直到遇到行,直到遇到 breakbreak语句或语句或 casecase 块结束;块结束;如 果 没 有 与 之 相 匹 的如 果 没 有 与 之 相 匹 的““ 常 量常 量 ”” 就 执 行就 执 行defaultdefault 块 , 若块 , 若defaultdefault 不存在,就退不存在,就退出出 switchswitch 语句。语句。

Page 21: 程序设计导论 —— 第 6 讲

2121

switchswitch 语句注意事项:语句注意事项:

switchswitch 中表达式可以是整型或字符型,中表达式可以是整型或字符型,也可以是枚举型。 也可以是枚举型。

可以省略一些可以省略一些 casecase 和和 defaultdefault 。。 每个每个 casecase 或或 defaultdefault 后的语句可以后的语句可以

是语句块是语句块 , , 但不需要使但不需要使用用““ {{”” 和和““ }}”” 括起来。括起来。

casecase 下也可以没有语句。下也可以没有语句。

Page 22: 程序设计导论 —— 第 6 讲

2222

switchswitch 结构的应用结构的应用

switchswitch 结构与结构与 else ifelse if 结构是多分支结构是多分支选择的两种形式。它们的应用环境不同:选择的两种形式。它们的应用环境不同:– else if else if 用于对用于对多条件并列测试多条件并列测试,从中取一,从中取一

的情况;的情况; switchswitch 结构用于结构用于单条件测试单条件测试,,从其多种结果中取一种的情况。从其多种结果中取一种的情况。

– else ifelse if 的条件测试比的条件测试比 switchswitch 复杂、功能复杂、功能更强;更强; switchswitch 结构更为清晰、简单。结构更为清晰、简单。

Page 23: 程序设计导论 —— 第 6 讲

2323

switchswitch 结构:结构:switch

expr

语句组 1

break;

语句组 2

break;

语句组 n

break;

语句组

break;

…...

const 1 const 2 const n default

case

Page 24: 程序设计导论 —— 第 6 讲

2424

作业作业

1121.1121. 学分绩点计算学分绩点计算 http://202.112.113.45/JudgeO

nline/showproblem?problem_id=1121

或者:或者: YOJYOJ 上上 10081008 ,,计算学分绩点

Page 25: 程序设计导论 —— 第 6 讲

2525

结 束结 束