《第4章选择结构程序设计》由会员分享,可在线阅读,更多相关《第4章选择结构程序设计(28页珍藏版)》请在金锄头文库上搜索。
1、第第第第4 4 4 4章章章章 选择结构程序设计选择结构程序设计选择结构程序设计选择结构程序设计2024/9/102内容提要内容提要内容提要内容提要 算法的描述方法算法的描述方法算法的描述方法算法的描述方法 基本控制结构基本控制结构基本控制结构基本控制结构 基本控制语句基本控制语句基本控制语句基本控制语句 常用算法,如累加、累乘、统计、递推、迭代、常用算法,如累加、累乘、统计、递推、迭代、常用算法,如累加、累乘、统计、递推、迭代、常用算法,如累加、累乘、统计、递推、迭代、穷举等穷举等穷举等穷举等 结构化程序设计的基本思想结构化程序设计的基本思想结构化程序设计的基本思想结构化程序设计的基本思想2
2、024/9/103算法的概念算法的概念算法的概念算法的概念 数据结构数据结构 + + 算法算法 = = 程序程序只对面向过程的语言只对面向过程的语言只对面向过程的语言只对面向过程的语言(C)(C)成立成立成立成立 面向对象程序面向对象程序面向对象程序面向对象程序 = = 对象对象对象对象 + + 消息消息消息消息 算法:算法:为解决一个具体问题而采取的确定的有限的为解决一个具体问题而采取的确定的有限的为解决一个具体问题而采取的确定的有限的为解决一个具体问题而采取的确定的有限的操作步骤,仅指计算机能执行的算法操作步骤,仅指计算机能执行的算法操作步骤,仅指计算机能执行的算法操作步骤,仅指计算机能执
3、行的算法2024/9/104算法的特性算法的特性算法的特性算法的特性 有穷性有穷性在合理的时间内完成在合理的时间内完成在合理的时间内完成在合理的时间内完成 确定性,无歧义确定性,无歧义 如果如果如果如果x x0000,则输出,则输出,则输出,则输出YesYesYesYes;如果如果如果如果x x0000,则输出,则输出,则输出,则输出NoNoNoNo; 有效性有效性 能有效执行能有效执行能有效执行能有效执行负数开平方负数开平方负数开平方负数开平方 没有输入或有多个输入没有输入或有多个输入 有一个或多个输出有一个或多个输出 2024/9/105算法的表示方法算法的表示方法算法的表示方法算法的表示
4、方法 自然语言表示自然语言表示自然语言表示自然语言表示 传统的流程图表示传统的流程图表示传统的流程图表示传统的流程图表示在在在在19661966年,年,年,年,BohraBohra 与与与与 JacopiniJacopini 提出提出提出提出 N-SN-S结构化流程图表示结构化流程图表示结构化流程图表示结构化流程图表示19731973年,美国学者年,美国学者年,美国学者年,美国学者I.NassiI.Nassi 和和和和 B.ShneidermanB.Shneiderman 提出提出提出提出 伪代码表示伪代码表示伪代码表示伪代码表示起止框起止框输入框输入框判断框判断框处理框处理框流程线流程线连接
5、点连接点注释框注释框2024/9/106BANS图传统流程图顺序结构顺序结构顺序结构顺序结构BA2024/9/107BN如果如果 成绩成绩60 yx + 1= xAAx 6YBB结束传传传传统统统统流流流流程程程程图图图图打印打印 y2024/9/1012图图图图 6 6!算法可以用!算法可以用!算法可以用!算法可以用 N-S N-S 图表示如下:图表示如下:图表示如下:图表示如下:1 =x2 =yx * y =yx + 1 =x直到直到 x6打印打印 y初始化部分循环部分输出部分2024/9/1013复合语句复合语句复合语句复合语句 括住的若干条语句构成一个语句块,称为复合括住的若干条语句构
6、成一个语句块,称为复合括住的若干条语句构成一个语句块,称为复合括住的若干条语句构成一个语句块,称为复合语句语句语句语句 语句块内可以定义变量语句块内可以定义变量语句块内可以定义变量语句块内可以定义变量变量仅在定义它的复合语句内有效变量仅在定义它的复合语句内有效变量仅在定义它的复合语句内有效变量仅在定义它的复合语句内有效变量必须在复合语句的开头定义变量必须在复合语句的开头定义变量必须在复合语句的开头定义变量必须在复合语句的开头定义 复合语句可以用在任何可以使用语句的地方复合语句可以用在任何可以使用语句的地方复合语句可以用在任何可以使用语句的地方复合语句可以用在任何可以使用语句的地方2024/9/
7、1014ifif- -elseelse 选择结构的一种最常用形式选择结构的一种最常用形式选择结构的一种最常用形式选择结构的一种最常用形式 if if ( (表达式表达式表达式表达式) ) 语句语句语句语句1;1; elseelse 语句语句语句语句2;2; 语句语句语句语句3 3表达式表达式表达式表达式值值值值非非非非0 0时,执行时,执行时,执行时,执行语句语句语句语句1 1,然后,然后,然后,然后语句语句语句语句3 3;表达式表达式表达式表达式值为值为值为值为0 0时,执行时,执行时,执行时,执行语句语句语句语句2 2,然后,然后,然后,然后语句语句语句语句3 3 语句语句语句语句1 1;
8、 ; 语句语句语句语句2 2; ; 2024/9/1015ifif- -elseelse elseelse部分可以没有部分可以没有部分可以没有部分可以没有 if if ( (表达式表达式表达式表达式) ) 语句语句语句语句1;1; 语句语句语句语句3 3 if-elseif-else嵌套使用时,注意嵌套使用时,注意嵌套使用时,注意嵌套使用时,注意elseelse和谁配对的问题和谁配对的问题和谁配对的问题和谁配对的问题当当当当表达式表达式表达式表达式值为值为值为值为0 0时,直接执行时,直接执行时,直接执行时,直接执行语句语句语句语句3 3 语句语句语句语句1 1; ; 2024/9/1016例
9、例例例4.4 4.4 :年龄判断:年龄判断:年龄判断:年龄判断#include main()int yourAge, hisAge;printf(Please enter your age:);scanf(%d, &yourAge); /*输入你的年龄输入你的年龄yourAge*/printf(Please enter your friends age:);scanf(%d, &hisAge); /*输入你朋友的年龄输入你朋友的年龄hisAge*/if (yourAge = hisAge) printf(You are older! Your age is = %dn, yourAge); e
10、lse printf(Your friend is older!His age is=%dn,hisAge); 2024/9/1017条件表达式条件表达式条件表达式条件表达式 含义:含义:含义:含义:如果表达式如果表达式如果表达式如果表达式1 1的值非的值非的值非的值非0 0(为真),则该条件(为真),则该条件(为真),则该条件(为真),则该条件表达式的结果就是表表达式的结果就是表表达式的结果就是表表达式的结果就是表达式达式达式达式2 2的值的值的值的值否则,是表达式否则,是表达式否则,是表达式否则,是表达式3 3的值的值的值的值 表达式表达式3N表达式表达式2Y表达式表达式1 ? 表达式表达
11、式2 : 表达式表达式32024/9/1018例例例例4.4 4.4 :年龄判断:年龄判断:年龄判断:年龄判断#include main()int yourAge, hisAge;printf(Please enter your age:);scanf(%d, &yourAge); /*输入你的年龄输入你的年龄yourAge*/printf(Please enter your friends age:);scanf(%d, &hisAge); /*输入你朋友的年龄输入你朋友的年龄hisAge*/max = (yourAge = hisAge) ? yourAge : hisAge; print
12、f(The older age is = %dn, max);2024/9/1019elseelse- -ifif ifif的一种扩展形式的一种扩展形式的一种扩展形式的一种扩展形式相当于相当于相当于相当于elseelse分支嵌套分支嵌套分支嵌套分支嵌套 ifif ( (表达式表达式表达式表达式1) 1) 语句语句语句语句1;1;else if else if ( (表达式表达式表达式表达式2)2)语句语句语句语句2;2;else if else if ( (表达式表达式表达式表达式3)3)语句语句语句语句3;3;elseelse语句语句语句语句4;4;语句语句语句语句5;5;表达式1 语句1
13、语句2 语句3 语句4表达式2表达式3 图4-9 多分支选择结构语句语句语句语句1;1;语句语句语句语句2;2;语句语句语句语句3;3;语句语句语句语句4;4;2024/9/1020例例例例4.5 4.5 :体型判断:体型判断:体型判断:体型判断 按按按按“ “体指数体指数体指数体指数” ”对肥胖程度进行划分:对肥胖程度进行划分:对肥胖程度进行划分:对肥胖程度进行划分: 体指数体指数体指数体指数t = w / ht = w / h2 2 (体重(体重(体重(体重w w单位为公斤,身高单位为公斤,身高单位为公斤,身高单位为公斤,身高h h单位为米)单位为米)单位为米)单位为米) 当当当当t 18
14、t 18时,为低体重;时,为低体重;时,为低体重;时,为低体重; 当当当当18 18 t 25 t 25时,为正常体重;时,为正常体重;时,为正常体重;时,为正常体重; 当当当当25 t 2725 t 27时,为超重体重;时,为超重体重;时,为超重体重;时,为超重体重; 当当当当t t 27 27时,为肥胖。时,为肥胖。时,为肥胖。时,为肥胖。 编程从键盘输入你的身高编程从键盘输入你的身高编程从键盘输入你的身高编程从键盘输入你的身高h h和体重和体重和体重和体重w w,根据给定公式计算体指,根据给定公式计算体指,根据给定公式计算体指,根据给定公式计算体指数数数数t t,然后判断你的体重属于何种
15、类型。,然后判断你的体重属于何种类型。,然后判断你的体重属于何种类型。,然后判断你的体重属于何种类型。 用用用用3 3种方法编程:种方法编程:种方法编程:种方法编程: 算法算法算法算法1 1:用:用:用:用不带不带不带不带elseelse子句的子句的子句的子句的ifif语句语句语句语句编程编程编程编程 算法算法算法算法2 2:用:用:用:用在在在在ifif子句中嵌入子句中嵌入子句中嵌入子句中嵌入if if 语句的形式语句的形式语句的形式语句的形式编程编程编程编程 算法算法算法算法3 3:用:用:用:用在在在在elseelse子句中嵌入子句中嵌入子句中嵌入子句中嵌入if if 语句的形式语句的形
16、式语句的形式语句的形式编程编程编程编程 2024/9/1021例例例例4.5 4.5 用不带用不带用不带用不带elseelse子句的子句的子句的子句的ifif语句编程语句编程语句编程语句编程# #includeinclude main()main() floatfloat h, w, t; h, w, t;printf(Please enter h,w:);printf(Please enter h,w:);scanf(%f, %f, &h, &w);scanf(%f, %f, &h, &w);t = w / (h * h);t = w / (h * h);ifif ( (t 18t = 18
17、 & t = 18 & t = 25 & t = 25 & t = 27t = 27) ) printf(t=%ftToo fat!n, t);printf(t=%ftToo fat!n, t); 当当当当t 18t 18时,为低体重;时,为低体重;时,为低体重;时,为低体重;当当当当18 t 2518 t 25时,为正常体重;时,为正常体重;时,为正常体重;时,为正常体重;当当当当25 t 2725 t 27时,为超重体重;时,为超重体重;时,为超重体重;时,为超重体重;当当当当t 27t 27时,为肥胖。时,为肥胖。时,为肥胖。时,为肥胖。2024/9/1022例例例例4.5 4.5 用在
18、用在用在用在ifif子句中嵌入子句中嵌入子句中嵌入子句中嵌入if if 语句的形式编程语句的形式编程语句的形式编程语句的形式编程 # #includeinclude main()main() floatfloat h, w, t; h, w, t;printf(Please enter h,w:);printf(Please enter h,w:);scanf(%f, %f, &h, &w);scanf(%f, %f, &h, &w);t = w / (h * h);t = w / (h * h);ifif ( (t 27t 27) ) ifif ( (t 25t 25) ) ifif ( (
19、t 18t 18) printf(t=%ftLower weight!n, t);) printf(t=%ftLower weight!n, t); elseelse printf(t=%ftStandard weight!n, t); printf(t=%ftStandard weight!n, t); elseelse printf(t=%ftHigher weight!n, t); printf(t=%ftHigher weight!n, t); elseelse printf(t=%ftToo fat!n, t); printf(t=%ftToo fat!n, t); 18 25 27
20、18 25 27当当当当t 18t 18时,为低体重;时,为低体重;时,为低体重;时,为低体重;当当当当18 t 2518 t 25时,为正常体重;时,为正常体重;时,为正常体重;时,为正常体重;当当当当25 t 2725 t 27时,为超重体重;时,为超重体重;时,为超重体重;时,为超重体重;当当当当t 27t 27时,为肥胖。时,为肥胖。时,为肥胖。时,为肥胖。2024/9/1023例例例例4.5 4.5 用在用在用在用在elseelse子句中子句中子句中子句中嵌入嵌入嵌入嵌入ifif语句的形式编程语句的形式编程语句的形式编程语句的形式编程 # #includeinclude main()
21、main() floatfloat h, w, t; h, w, t;printf(Please enter h,w:);printf(Please enter h,w:);scanf(%f, %f, &h, &w);scanf(%f, %f, &h, &w);t = w / (h * h);t = w / (h * h);ifif (t 18) (t 18)printf(tprintf(t=%=%ftLowerftLower weight!n, t); weight!n, t);else ifelse if (t 25) (t 25)printf(t=%ftStandard weight!n
22、, t);printf(t=%ftStandard weight!n, t);else ifelse if (t 27) (t 27)printf(tprintf(t=%=%ftHigherftHigher weight!n, t); weight!n, t);elseelseprintf(tprintf(t=%=%ftTooftToo fat!n, t); fat!n, t); 当当当当t 18t 18时,为低体重;时,为低体重;时,为低体重;时,为低体重;当当当当18 t 2518 t 25时,为正常体重;时,为正常体重;时,为正常体重;时,为正常体重;当当当当25 t 2725 t 27
23、时,为超重体重;时,为超重体重;时,为超重体重;时,为超重体重;当当当当t 27t 27时,为肥胖。时,为肥胖。时,为肥胖。时,为肥胖。18 25 2718 25 272024/9/1024switchswitch 多路选择多路选择多路选择多路选择 switchswitch ( (表达式表达式表达式表达式) ) casecase 常数常数常数常数1:1: 语句序列语句序列语句序列语句序列1;1;casecase 常数常数常数常数2:2: 语句序列语句序列语句序列语句序列2;2;defaultdefault: : 语句序列语句序列语句序列语句序列3;3; defaultdefault可以没有,但
24、最好不省略可以没有,但最好不省略可以没有,但最好不省略可以没有,但最好不省略 不要忘记不要忘记不要忘记不要忘记breakbreak语句序列语句序列语句序列语句序列1;1;语句序列语句序列语句序列语句序列2;2;语句序列语句序列语句序列语句序列n;n;2024/9/1025例例例例4.84.8:计算器程序:计算器程序:计算器程序:计算器程序 编程设计一个简单的计算器程序,要求根据用户编程设计一个简单的计算器程序,要求根据用户编程设计一个简单的计算器程序,要求根据用户编程设计一个简单的计算器程序,要求根据用户从键盘输入如下形式的表达式:从键盘输入如下形式的表达式:从键盘输入如下形式的表达式:从键盘
25、输入如下形式的表达式: 操作数操作数操作数操作数1 1 运算符运算符运算符运算符op op 操作数操作数操作数操作数2 2 然后,计算并输出表达式的值然后,计算并输出表达式的值然后,计算并输出表达式的值然后,计算并输出表达式的值 指定的运算符为指定的运算符为指定的运算符为指定的运算符为 加(加(加(加(+ +) 减(减(减(减(- -) 乘(乘(乘(乘(* *) 除(除(除(除(/ /) 2024/9/1026mainmain()() intint data1, data2; /* data1, data2; /*定义两个操作符定义两个操作符定义两个操作符定义两个操作符* */ /charch
26、ar op; /* op; /*定义运算符定义运算符定义运算符定义运算符* */ /printf(Please enter the expression:);printf(Please enter the expression:);scanf(%d%c%d, &data1, &op, &data2); /*scanf(%d%c%d, &data1, &op, &data2); /*输入运算表达式输入运算表达式输入运算表达式输入运算表达式* */ /switchswitch (op) (op) casecase +: /* +: /*处理加法处理加法处理加法处理加法* */ /printf(%d
27、 + %d = %dn, data1, data2, data1 + data2); printf(%d + %d = %dn, data1, data2, data1 + data2); breakbreak; ;casecase -: /* -: /*处理减法处理减法处理减法处理减法* */ /printf(%d - %d = %dn, data1, data2, data1 - data2);printf(%d - %d = %dn, data1, data2, data1 - data2);breakbreak; ;casecase *: /* *: /*处理乘法处理乘法处理乘法处理乘
28、法* */ /printf(%d * %d = %dn, data1, data2, data1 * data2); printf(%d * %d = %dn, data1, data2, data1 * data2); breakbreak; ;casecase /: /* /: /*处理除法处理除法处理除法处理除法* */ /ifif ( (0 = data20 = data2) ) printf(Division by zero!n); printf(Division by zero!n);elseelse printf(%d/%d = %dn, data1, data2, data1/
29、data2); printf(%d/%d = %dn, data1, data2, data1/data2); breakbreak; ;defaultdefault: : printf(Unknown operator! n);printf(Unknown operator! n); 例例例例4.84.82024/9/1027思考题思考题思考题思考题 语句语句语句语句 if (0 = data2)if (0 = data2)的必要性的必要性的必要性的必要性19981998年年年年1111月月月月科学美国人科学美国人科学美国人科学美国人杂志,描述了美国导弹巡杂志,描述了美国导弹巡杂志,描述了美
30、国导弹巡杂志,描述了美国导弹巡洋舰约克敦号上的一起事故,除零错导致军舰推进系统洋舰约克敦号上的一起事故,除零错导致军舰推进系统洋舰约克敦号上的一起事故,除零错导致军舰推进系统洋舰约克敦号上的一起事故,除零错导致军舰推进系统的关闭的关闭的关闭的关闭 如果要求程序能进行浮点数的算术运算,语句如果要求程序能进行浮点数的算术运算,语句如果要求程序能进行浮点数的算术运算,语句如果要求程序能进行浮点数的算术运算,语句 if if (0 = data2)(0 = data2)还能用于比较实型变量还能用于比较实型变量还能用于比较实型变量还能用于比较实型变量data2data2和和和和常数常数常数常数0 0的大
31、小吗?的大小吗?的大小吗?的大小吗?if (if (fabsfabs(data2) = 1e-7)(data2) = 1e-7) 如果要求输入的算术表达式中的操作数和运算符之如果要求输入的算术表达式中的操作数和运算符之如果要求输入的算术表达式中的操作数和运算符之如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符,那么程序如何修改?间可以加入任意多个空格符,那么程序如何修改?间可以加入任意多个空格符,那么程序如何修改?间可以加入任意多个空格符,那么程序如何修改?scanf(%d%scanf(%d%c c%d, &data1, &op, &data2);%d, &data1, &op, &data2);scanf(%d%scanf(%d%1s1s%d, &data1, &op, &data2);%d, &data1, &op, &data2);取绝对取绝对取绝对取绝对值函数值函数值函数值函数2024/9/1028这一章我们学习了这一章我们学习了这一章我们学习了这一章我们学习了 算法的描述方法算法的描述方法算法的描述方法算法的描述方法流程图流程图流程图流程图 与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句if-elseif-elseswitchswitch