4_选择结构ppt课件_第1页
4_选择结构ppt课件_第2页
4_选择结构ppt课件_第3页
4_选择结构ppt课件_第4页
4_选择结构ppt课件_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 ;.第第4章章1 ;. 本章要点本章要点n 关系表达式关系表达式n逻辑表达式n选择结构程序设计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次次对同一个问题,可有不同的解题方法和步骤对同一个问

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

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

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

5、的框组成一个大的框。这种流程图又称这种流程图又称N-SN-S结构化流程图结构化流程图 。11 ;. 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输出最大公约数输出最大公约数

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

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

8、以参与其它种类的运算,例如算术运算、逻辑运算等。算、逻辑运算等。17 ;.4.2 条件判断条件判断4.2.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式运算运算运算符运算符表达式表达式逻辑逻辑“与与”&operand1 & operand2逻辑逻辑“或或”|operand1 | operand2逻辑逻辑“非非”!operand1 逻辑运算符用于连接一个或多个条件,判断这些条件是否成立逻辑运算符用于连接一个或多个条件,判断这些条件是否成立逻辑运算符的类型为:逻辑运算符的类型为:18 ;. 逻辑“与”运算符 &所有学科及格考勤率达到 75%留级留级留级升级YesNoNoN

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

10、1001天气 NOT 阴天真真假带伞操作不带伞24 ;.逻辑运算符总结所有学所有学科科及格及格考勤率达考勤率达到到 75%&天气天气 NOT 阴天阴天只有当两个两个条件都为真真时才执行操作只要任何任何一个条件为真真时就执行操作对原条件取反取反,即:如果原条件为假时就执行操作|!25 ;.逻辑运算符的优先级逻辑运算符的优先级(1)逻辑非的优先级最高,逻辑与次之,逻辑或最低)逻辑非的优先级最高,逻辑与次之,逻辑或最低 .即:即:!(非)!(非) &(与)(与) |(或)(或)(2)与其它种类运算符的优先关系)与其它种类运算符的优先关系 ! 算术运算符算术运算符 关系运算符关系运算符

11、 & | 赋值运算符赋值运算符 逗号运算符逗号运算符例例 a=x & xb&xy a=b|x=y !a|ab/ (a=x) & (xb)&(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)逻辑运算符两侧的操作数,

12、除可以是和非的整数外,也可以是其它任何类型的数据,如实型、字符型等。a&b(2) 说明说明短路特性短路特性逻辑运算符28 ;.例例 a&b&c /只在只在a为真时,才判别为真时,才判别b的值;的值; 只在只在a、b都为真时,才判别都为真时,才判别 c的值的值例例 a|b|c /只在只在a为假时,才判别为假时,才判别b的值;的值; 只在只在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的值分别为()的值分

13、别为() int x=0,y=0,z=0; +x|+y&+z; 逻辑运算符29 ;.4.3 用用if语句实现选择结构语句实现选择结构4.3.1 if语句的语句的3种形式种形式 用用if语句可以构成分支结构。它对给定的条件进行判断,根据判断的结果语句可以构成分支结构。它对给定的条件进行判断,根据判断的结果(真或假)来决定执行某个分支程序段。(真或假)来决定执行某个分支程序段。n1. 单选择单选择:v格式:格式:if (expression) statementv执行过程:执行过程:表达式表达式真真假假语句语句例:例: if(xy) printf(“%d”, x);30 ;.# inclu

14、de 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两数的和大于 1004.3 用用if语句实现选择结构语句实现选择结构31 ;.l2. 双选双选:v格式格式:if (expression) statement1 else statement2v执行过程:执行过程:例:例:i

15、f (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,&num2); sum = num1+ num2 ; if(sum 100) printf(n两数的和大于 100 n ); else printf(“n两数的和小于100n”);33 ;.#inclu

16、de 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 ;.问题描述:问题描述: 判定给定的年份是否为闰年。判定给定的年份是否为闰年。提示:闰年的判定规则为:能被提示:闰年的判定规则为:能被 4 整除但不能被整除但不能被 100 整除的年份,或能被整除的年份,或能被

17、 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);请输入年份:20052005 年不是闰年4.3 用用if语句实现选择结构语句实现选择结构35 ;.问题描述:输入一个问题描述:输入一个5位数,判断它是不是回文数。位数,判断它是不是回文数。例如:例如

18、: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=wan & shi=qian) /*个位等于万位并且十位等于千位*/printf(n 这个数是回文数n);elseprintf(n 这个数不是回文数n);输出:

19、请输入一个五位整数: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后面只含一个语句,也可以是复合语句(用括起来)uelse不能作为语句单独,它必须与if配对使用 4.3 用用if语句实现选择结构语句实现选择结构37 ;.例例 考虑下面程序的输出结

20、果考虑下面程序的输出结果: #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 真真 假 真真假真真 假 4.3 用用if语句实现选择结构语句实现选择结构39 ;.表达式表达式1真真假假语句语句1语句语句2表达式表达式

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

22、de 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 语句。提倡使用大括号括起来以避免看起来有二义性。45 ;. 考虑下面程序输出结果: main() int x=100,a=10,b

23、=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 ;.编程设计一个简单的猜数游戏:先由计算机编程设计一个简单的猜数游戏:先由计算机“想想”一个数,请人猜。如果人猜对一个数,请人猜。如果人猜对,则计算机给出提示,则计算机给出提示“正确正确”,否则提示,否则提示“错误错误”,并告诉人所猜的数是大还是,并告诉人所猜的数是大还是小。小。#include #include main() int magic;/*定义计算机“想”的数*/ int guess

24、;/*定义人猜的数*/ 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 ;. 优先级优先级: 13 条件运算符可嵌套条件运算符可嵌套 如如 x0?1:(xb?a:cd?c:d a

25、b?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元的部分不扣除个人所得税。要求用户输入基本工资,计算税后工资。元的部分不扣除个人所得税。要求用户输入基本工资,计算税后工资。 #in

26、clude 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,现居住地不明,1998 年 12 月 12 日在佛罗里达被捕”);printf(“这是吉姆,身高

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

28、;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(“Pass!”); case 2: printf(“Fail!”); default

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

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

31、ntf(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语句实现多分支选择结构语句实现多分支选择结构57 ;.问题描述:问题描

32、述:要求判别键盘输入字符的类别。可以根据输入字符的要求判别键盘输入字符的类别。可以根据输入字符的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 该字符是一个小写字母。n);elseprintf(n 该字符是其他字符。n); 内存内存cE请输入一个字符:E该字符是一个大写字母58 ;.问题描述:问题描述:编写一个简单的计算器,实现两个整型数的四则运算。编写一个简单的计算器,实现两个整型数的四则运算。 main() int a,b;char op; printf(n 输入操作数1,运算符,操作数2: ); scanf(%d,%c,%d,&a,&op,&b); swit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论