4选择结构ppt课件

上传人:s9****2 文档编号:569331107 上传时间:2024-07-28 格式:PPT 页数:63 大小:1.45MB
返回 下载 相关 举报
4选择结构ppt课件_第1页
第1页 / 共63页
4选择结构ppt课件_第2页
第2页 / 共63页
4选择结构ppt课件_第3页
第3页 / 共63页
4选择结构ppt课件_第4页
第4页 / 共63页
4选择结构ppt课件_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《4选择结构ppt课件》由会员分享,可在线阅读,更多相关《4选择结构ppt课件(63页珍藏版)》请在金锄头文库上搜索。

1、 第第4章章1;. 本章要点本章要点2;. 程序程序= =算法算法+ +数据结构数据结构灵魂灵魂加工对象加工对象4.1 关于算法 3;. 4.1 关于算法 4.1.1 算法的概念 广义地说,为解决一个问题而采取的方法和步骤,就称为广义地说,为解决一个问题而采取的方法和步骤,就称为“算法算法”。4;. 方法方法1:1+2,+3,+4,一直加到,一直加到100 加加99次次方法方法2:100+(1+99)+(2+98)+(49 +51)+50 = 100 + 49100 +50 加加51次次对同一个问题,可有不同的解题方法和步骤对同一个问题,可有不同的解题方法和步骤例4.1: 求5;. 例例4.2

2、:求任意两个整数间的最大公约数。:求任意两个整数间的最大公约数。mnr被除数被除数除数除数余数余数mnr余数是否为0mnr 0n即为最大公约数经典算法举例经典算法举例: :6;. 4.1.2 算法 的描述方法可以用不同的方法表示算法,常用的有:可以用不同的方法表示算法,常用的有:自然语言自然语言传统流程图传统流程图结构化流程图结构化流程图伪代码伪代码PADPAD图图传统流程图传统流程图结构化流程图结构化流程图7;. 用流程图表示算法美国国家标准化协会美国国家标准化协会ANSI(American National Standard Institute)ANSI(American National

3、 Standard Institute)规定了一规定了一些常用的流程图符号:些常用的流程图符号:起止框起止框判断框判断框处理框处理框输入输入/输出框输出框注释框注释框流向线流向线连接点连接点8;. 三种基本结构的图示:三种基本结构的图示: 顺序结构顺序结构选择结构选择结构循环结构循环结构(while型型) 9;. 例例4.3:用流程图描述用流程图描述“辗转相除法辗转相除法”求任意两个整数间的最大公约数。求任意两个整数间的最大公约数。开始输入两个数输入两个数m,n求余数求余数r=m%nr是否为是否为0否否m=n, n=r,r=m%n是是输出最大公约数输出最大公约数n结束结束用流程图表示算法要比用

4、文字描述算法逻辑清晰、易于理解。 10;. 用N-S流程图表示算法 1973 1973年美国学者年美国学者I.NassiI.Nassi和和B.ShneidermanB.Shneiderman提出了一种新的流程图形式。在这种提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称这种流程图又称N-SN-S结构化流程图结构化流程图 。1

5、1;. N-SN-S流程图用以下的流程图符号:流程图用以下的流程图符号: (1)顺序结构顺序结构 (2)选择结构选择结构 (3)循环结构循环结构 12;. 例例4.4:用用NS图描述图描述“辗转相除法辗转相除法”求任意两个整数间的最大公约数。求任意两个整数间的最大公约数。输入两个数输入两个数m,n求余数求余数r=m%nr是否为是否为0否否m=n, n=r,r=m%n是是输出最大公约数输出最大公约数n输入两个数输入两个数m,n求余数求余数r=m%n当当r!=0m=nn=rr=m%n输出最大公约数输出最大公约数n13;. 4.2 条件判断条件判断4.2.1 关系运算和关系表达式关系运算和关系表达式

6、操作数操作数关系运算符关系运算符关系表达式的关系表达式的计算结果计算结果 = = 逻辑值(真或假)逻辑值(真或假)在在C C语言中,语言中,“0 0”表示表示“假假”,“1 1”表示表示“真真”操作数操作数关系运算符用于测试两个操作数或两个表达式之间的关系,关系运算符用于测试两个操作数或两个表达式之间的关系,其中操作数可其中操作数可以是变量、常量或表达式以是变量、常量或表达式。14;. 4.2 条件判断条件判断4.2.1 关系运算和关系表达式关系运算和关系表达式关系运算符关系运算符操作数操作数1 1操作数操作数2 2关系运算符关系运算符15;. 优先级与结合性:优先级与结合性:优先级:优先级:

7、 (1)在关系运算符中:)在关系运算符中:,=, ,num2的值的值 (2)(num1num2)!=num3的值的值 (3)num1num2num3的值的值 思考题:任意改变思考题:任意改变num1或或num2的值,会影响整个表达式的值吗?的值,会影响整个表达式的值吗? (4)(num1num2)+num3 再次强调:再次强调:C语言用整数语言用整数“1”表示表示“逻辑真逻辑真”,用整数,用整数“0”表示表示“逻辑逻辑假假”。所以,关系表达式的值还可以参与其它种类的运算,例如算术运。所以,关系表达式的值还可以参与其它种类的运算,例如算术运算、逻辑运算等。算、逻辑运算等。17;. 4.2 条件判

8、断条件判断4.2.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式运算运算运算符运算符表达式表达式逻辑逻辑“与与”&operand1 & operand2逻辑逻辑“或或”|operand1 | operand2逻辑逻辑“非非”!operand1 逻辑运算符用于连接一个或多个条件,判断这些条件是否成立逻辑运算符用于连接一个或多个条件,判断这些条件是否成立逻辑运算符的类型为:逻辑运算符的类型为:18;. 逻辑“与”运算符 &所有学科及格考勤率达到 75%留级留级留级升级YesNoNoNoNoYesYesYes19;. 表达式表达式 1 1表达式表达式 2 2结果结果000010100111逻辑“与

9、”运算符 &所有学科及格考勤率达到 75%留级留级NoNo升级YesYes留级NoYes留级留级NoYes20;. 逻辑“或”运算符 |无法支付可支付可支付可支付YesNoNoNoNoYesYesYes购物帐单信用卡21;. 现金信用卡逻辑“或”运算符 |表达式 1表达式 2结果000011101111无法支付NoNo可支付NoYes可支付NoYes可支付YesYes22;. 逻辑“非”运算符 !不带伞带伞NoYes天气 NOT 阴天23;. 逻辑“非”运算符 !表达式结果1001天气 NOT 阴天真真假带伞操作不带伞24;. 逻辑运算符总结所有学所有学科科及格及格考勤率达考勤率达到到 75%

10、&天气天气 NOT 阴天阴天只有当两个两个条件都为真真时才执行操作只要任何任何一个条件为真真时就执行操作对原条件取反取反,即:如果原条件为假时就执行操作|!25;. 逻辑运算符的优先级逻辑运算符的优先级(1)逻辑非的优先级最高,逻辑与次之,逻辑或最低)逻辑非的优先级最高,逻辑与次之,逻辑或最低 .即:即:!(非)!(非) &(与)(与) |(或)(或)(2)与其它种类运算符的优先关系)与其它种类运算符的优先关系 ! 算术运算符算术运算符 关系运算符关系运算符 & | 赋值运算符赋值运算符 逗号运算符逗号运算符例例 a=x & xb&xy a=b|x=y !a|ab/ (a=x) & (xb)&

11、(xy)/(a=b)|(x=y)/(!a)|(ab)26;. 逻辑表达式的值逻辑表达式的值例如,假设例如,假设num=12,则:,则: !num的值的值 num=1 num31的值的值C C语言中语言中, ,运算量运算量: : 0 0表示表示“假假”, 非非0 0表示表示“真真”, , 运算结果运算结果: : 0 0表示表示“假假”, 1 1表示表示“真真”, ,逻辑运算符01127;. (1)逻辑运算符两侧的操作数,除可以是和非的整数外,也可以是其它任何类型的数据,如实型、字符型等。a&b(2)在在在在计计计计算算算算逻逻逻逻辑辑辑辑表表表表达达达达式式式式时时时时,并并并并不不不不是是是是

12、所所所所有有有有的的的的表表表表达达达达式式式式都都都都被被被被求求求求解解解解,只只只只有有有有在在在在必必必必须须须须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。 说明说明短路特性短路特性逻辑运算符28;. 例例 a&b&c /只在只在a为真时,才判别为真时,才判别b的值;的值; 只在只在a、b都为真时,才判别都为真时,才判别 c的值的值例例 a|b|c /只在只在a为假时,才判别为假时,才判别b的值;的

13、值; 只在只在a、b都为假时,才判别都为假时,才判别 c的值的值例例 a=1;b=2;c=3;d=4;m=1;n=1; (m=ab)&(n=cd)/结果结果m=0,n=1例如例如:执行以下语句后,执行以下语句后,x,y,z的值分别为()的值分别为() int x=0,y=0,z=0; +x|+y&+z; 逻辑运算符29;. 4.3 用用if语句实现选择结构语句实现选择结构4.3.1 if语句的语句的3种形式种形式 用用if语句可以构成分支结构。它对给定的条件进行判断,根据判断的结果(真语句可以构成分支结构。它对给定的条件进行判断,根据判断的结果(真或假)来决定执行某个分支程序段。或假)来决定执

14、行某个分支程序段。n1. 单选择单选择:v格式:格式:if (expression) statementv执行过程:执行过程:表达式表达式真真假假语句语句例:例: if(xy) printf(“%d”, x);30;. # include main() int num1, num2, sum; printf(n请输入两个数:); scanf(%d %d, &num1,&num2); sum = num1+ num2 ; if(sum 100) printf(n两数的和大于 100 n );简单简单if语句的示例语句的示例内存内存num1num2sum5678134请输入两个数:56 78两数的

15、和大于 1004.3 用用if语句实现选择结构语句实现选择结构31;. l2. 双选双选:v格式格式:if (expression) statement1 else statement2v执行过程:执行过程:例:例:if (xy) printf(%d,x); else printf(%d,y);表达式表达式真真假假语句语句1语句语句24.3 用用if语句实现选择结构语句实现选择结构32;. 4.3 用用if语句实现选择结构语句实现选择结构修改上例# include main() int num1, num2, sum; printf(n请输入两个数:); scanf(%d %d, &num1,

16、&num2); sum = num1+ num2 ; if(sum 100) printf(n两数的和大于 100 n ); else printf(“n两数的和小于100n”);33;. #include main()int num;printf(n请输入一个整数:); scanf (%d,&num);if(num % 2) = 0)printf(%d 是一个偶数。n,num); elseprintf(%d 是一个奇数。n,num);if-else语句的示例语句的示例内存内存num57请输入一个整数:5757 是一个奇数。4.3 用用if语句实现选择结构语句实现选择结构34;. 问题描述:问

17、题描述: 判定给定的年份是否为闰年。判定给定的年份是否为闰年。提示:闰年的判定规则为:能被提示:闰年的判定规则为:能被 4 整除但不能被整除但不能被 100 整除的年份,或能被整除的年份,或能被 400 整除的年份。整除的年份。 #include main() int year; printf(n 请输入年份:); scanf(%d,&year); if(year % 4 =0 & year % 100 != 0) | (year % 400 = 0) printf(n %d 年是闰年 n , year); else printf(n %d 年不是闰年 n , year);请输入年份:2005

18、2005 年不是闰年4.3 用用if语句实现选择结构语句实现选择结构35;. 问题描述:输入一个问题描述:输入一个5位数,判断它是不是回文数。位数,判断它是不是回文数。例如:例如:12321是回文数,个位与万位相同,十位与千位相同。是回文数,个位与万位相同,十位与千位相同。 #include main()long ge,shi,qian,wan,x;printf(n 请输入一个五位整数:);scanf(%ld,&x);wan=x/10000; /分解出万位数qian=x%10000/1000; /分解出千位数shi=x%100/10; /分解出十位数ge=x%10; /分解出个位数if (ge

19、=wan & shi=qian) /*个位等于万位并且十位等于千位*/printf(n 这个数是回文数n);elseprintf(n 这个数不是回文数n);输出:请输入一个五位整数:45654这个数是回文数4.3 用用if语句实现选择结构语句实现选择结构36;. 如:if(a=b&x=y) printf(“a=b,x=y”); int x=3,y; if (x=5) y=3; if(3) printf(“OK”); if(a) printf(“%d”,a); l说明:uif后面的表达式类型任意uif(x) if(x!=0) if(!x) if(x=0)uif和else后面只含一个语句,也可以是

20、复合语句(用括起来)uelse不能作为语句单独,它必须与if配对使用 4.3 用用if语句实现选择结构语句实现选择结构37;. 例例 考虑下面程序的输出结果考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y);编译错误!4.3 用用if语句实现选择结构语句实现选择结构38;. if (表达式1)语句1;else if (表达式2)语句2;else if (表达式3)语句3;.else 语句n;3. 阶梯式 if-else-if

21、真真 假 真真假真真 假 4.3 用用if语句实现选择结构语句实现选择结构39;. 表达式表达式1真真假假语句语句1语句语句2表达式表达式2表达式表达式3语句语句3语句语句4真真假假真真假假4.3 用用if语句实现选择结构语句实现选择结构40;. 阶梯式阶梯式 if 结构示例结构示例问题描述:问题描述:编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。成绩大于等于成绩大于等于90分输出分输出“优优”;成绩大于等于;成绩大于等于80分小于分小于90分输出分输出“良良”;成;成绩大于等于绩大于等于60分小于分小于80

22、分输出分输出“中中”;成绩小于;成绩小于60分输出分输出“差差”。 4.3 用用if语句实现选择结构语句实现选择结构41;. #include main()float grade;printf(n 请输入期末考试成绩: );scanf(%f, &grade);if(grade=90)printf(n 优);else if (grade=80) & (grade=60) & (grade 0) if (y 1) z = 1;else /*这个 else 部分属于哪个 if?*/ z = 2; C语言规定,每个 else 部分总属于前面最近的那个缺少对应的 else 部分的 if 语句。提倡使用大

23、括号括起来以避免看起来有二义性。45;. 考虑下面程序输出结果: main() int x=100,a=10,b=20; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%d”,x); 结果:结果:-146;. 编程设计一个简单的猜数游戏:先由计算机编程设计一个简单的猜数游戏:先由计算机“想想”一个数,请人猜。如果人猜对,一个数,请人猜。如果人猜对,则计算机给出提示则计算机给出提示“正确正确”,否则提示,否则提示“错误错误”,并告诉人所猜的数是大还是小。,并告诉人所猜的数是大还是小。#in

24、clude #include main() int magic;/*定义计算机“想”的数*/ int guess;/*定义人猜的数*/ magic=rand(); printf(请输入你的猜测:); scanf(%d,&guess); if(guessmagic) printf(错误!你猜的数大了); else if(guess100) value=y;else value=n;value = num 100 ? y : n;(1)(0)条件表达式使用使用“if-else”的等同代码的等同代码 假设 num = 200 value = num 100;? y : n200value=y50;.

25、 优先级优先级: 13条件运算符可嵌套条件运算符可嵌套 如如 x0?1:(xb?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型类型可不同,表达式值取较高的类型例例 x?a:b /x=0,表达式值为表达式值为b; x0,表达式值为表达式值为a xy?1:1.5 /xy ,值为值为1.0; xy ,值为值为1.5条件运算符51;. 条件运算符示例问题描述:问题描述:个人所得税收取规定:工资大于个人所得税收取规定:工资大于1000元的部分将扣除元的部分将扣除5的个人所得税。小的个人所得税。小于于1000元的部分不扣除个人所得税。要求用户

26、输入基本工资,计算税后工资。元的部分不扣除个人所得税。要求用户输入基本工资,计算税后工资。 #include void main()double sal;double rate;printf(n 请输入基本工资:);scanf(%lf,&sal);rate= (sal=1000) ? 0 : 0.05;sal=sal-(sal-1000)*rate;printf(n 税后工资为:%7.2f n,sal); 请输入基本工资:1500税后工资为:1475.0052;. printf(“这是迈克尔,身高 180cm,加利福尼亚第 12 大街”);printf(“这是丹尼尔,身高 193cm,现居住地

27、不明,1998 年 12 月 12 日在佛罗里达被捕”);printf(“这是吉姆,身高 175cm,墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕”);printf(“未发现匹配项。对不起!”);停止搜索停止搜索停止搜索停止搜索警察记录嫌疑犯照片不是这是吉姆,身高 175cm,墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕不是是4.4 利用利用switch语句实现多分支选择结构语句实现多分支选择结构53;. switch-case 语句是多路判断语句语句是多路判断语句switch 语句计算条件表达式并对照多个常数值进行检查语

28、句计算条件表达式并对照多个常数值进行检查switch (表达式) case 常量 1:语句;break; case 常量 2:语句;break; default:语句;计算表达式的值如果等于常量1 如果等于常量2 如果没有找到匹配的值 4.4 利用利用switch语句实现多分支选择结构语句实现多分支选择结构54;. 阅读程序,分析结果阅读程序,分析结果 main() int score; scanf(“%d”,&score): switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(

29、“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); 运行结果:运行结果:score为为5时,输出:时,输出:Very good! Good! Pass! Fail! data error!4.4 利用利用switch语句实现多分支选择结构语句实现多分支选择结构55;. 在使用在使用switch结构时应注意以下几点:结构时应注意以下几点:在在case后的各常量表达式的值不能相同,否则会出现错误;后的各常量表达式的值不能相同,否则会出现错误;在在case后,允许有多个语句,可以不用后,允许有多个语句,可以不用括起来

30、;括起来;每个每个case语句后都必须有一个语句后都必须有一个break语句,否则会出现错误;语句,否则会出现错误;各各case和和default子句的先后顺序可以变动,而不会影响程序执行结子句的先后顺序可以变动,而不会影响程序执行结果;果;default子句可以省略;子句可以省略;4.4 利用利用switch语句实现多分支选择结构语句实现多分支选择结构56;. switch 结构示例问题描述:问题描述:要求用户输入一个字符值并检查它是否为元音字母。要求用户输入一个字符值并检查它是否为元音字母。 char in_char;printf(n 请输入一个小写字母: );scanf(%c, &in_

31、char);switch(in_char) case a: printf(n 您输入的是元音字母 an); break; case e: printf(n 您输入的是元音字母 en); break; case i: printf(n 您输入的是元音字母 in); break; case o: printf(n 您输入的是元音字母 on); break; case u: printf(n 您输入的是元音字母 un); break; default: printf(n 您输入的不是元音字母 n); 内存内存in_chare请输入一个小写字母:e您输入的是元音字母 e4.4 利用利用switch语句

32、实现多分支选择结构语句实现多分支选择结构57;. 问题描述:问题描述:要求判别键盘输入字符的类别。可以根据输入字符的要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。码来判别类型。由由ASCII码表可知码表可知ASCII码值小于码值小于32的为控制字符。的为控制字符。 在在09之间的为数字,之间的为数字,在在AZ之间为大写字母,之间为大写字母, 在在az之间为小写字母,其余则为其它字符。之间为小写字母,其余则为其它字符。 main()char c;printf(n 请输入一个字符: );c=getchar();if(c=0&c=A&c=a&c=z)printf(n 该字符是

33、一个小写字母。n);elseprintf(n 该字符是其他字符。n); 内存内存cE请输入一个字符:E该字符是一个大写字母58;. 问题描述:问题描述:编写一个简单的计算器,实现两个整型数的四则运算。编写一个简单的计算器,实现两个整型数的四则运算。 main() int a,b;char op; printf(n 输入操作数1,运算符,操作数2: ); scanf(%d,%c,%d,&a,&op,&b); switch(op) case +: printf(n %d+%d=%dn,a,b,a+b); break; case -: printf(n %d-%d=%dn,a,b,a-b); bre

34、ak; case *: printf(n %d%d=%dn,a,b,a*b); break; case /: printf(n %d/%d=%dn,a,b,a/b); break; default: printf(n 运算符错误!); 输入操作数1,运算符,操作数2:45,*,2452 = 90内存内存abop452*59;. 分析结果 #include ”stdio.h” main() int a=15, b=21, m=0;switch (a%3) case 0: m+; break; case 1: m+; switch (b%2) default: m+; case 0: m+; br

35、eak; printf(”%dn”,m); A1 B2 C3 D4 60;. 分析结果 void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); 运行结果:a=2,b=161;. 练习从键盘输入的三角形的三条边长,编程判定是该三边 可以组成何种三角形。从键盘任意输入年、月,编程输出该年份该月的天数。商店卖西瓜,10斤以上的每斤0.1

36、5元,8斤以上的每斤0.3元,6斤以上的每斤0.4元,4斤以上的每斤0.6元,4斤以下的每斤0.8元,从键盘输入西瓜的重量和顾客所付钱数,输出应付款和应找钱数。某服装批发商店经营套服,也单件出售。若买的不少于50套,每套80元;不足50套的每套100元;只买上衣每件60元;只买裤子每条45元。从键盘任意输入顾客所买的上衣和裤子的件数,输出应付款。62;. 给出一百分制成绩,要求输出成绩等级A、 B、 C、 D、 E。90分以上为A,80到89分为B,70到79分为C,60到69分为D,60分以下为E。有3个整数a、b、c,由键盘输入,输出其中最大的数。通过键盘输入字符,判断其为控制、数字、大写字母、小写字母和其他字母的哪一类。 根据如下函数关系,从键盘任意输入一个数(x),计算出相应的y值。 x y x0 0 0=x10 x 10=x20 10 20=x40 -0.5x+20练习63;.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号