《4选择结构PPT课件》由会员分享,可在线阅读,更多相关《4选择结构PPT课件(64页珍藏版)》请在金锄头文库上搜索。
1、 http:/ http:/ 本章要点本章要点2021/3/92 http:/ =算法算法+ +数据结构数据结构灵灵魂魂加工对象加工对象4.1 关于算法 2021/3/93 http:/ 关于算法 4.1.1 算法的概念 广义地说,为解决一个问题而采取的方广义地说,为解决一个问题而采取的方法和步骤,就称为法和步骤,就称为“算法算法”。2021/3/94 http:/ 加加99次次方法方法2:100+(1+99)+(2+98)+(49 +51)+50 = 100 + 49100 +50 加加51次次对同一个问题,可有不同的解题方法和步骤对同一个问题,可有不同的解题方法和步骤例4.1: 求2021
2、/3/95 http:/ 0n即为最大公约数经典算法举例经典算法举例: :2021/3/96 http:/ 4.1.2 算法 的描述方法可以用不同的方法表示算法,常用的有:可以用不同的方法表示算法,常用的有:自然语言自然语言传统流程图传统流程图结构化流程图结构化流程图伪代码伪代码PADPAD图图传统流程图传统流程图结构化流程图结构化流程图2021/3/97 http:/ 用流程图表示算法美国国家标准化协会美国国家标准化协会ANSI(American National Standard ANSI(American National Standard Institute)Institute)规定了
3、一些常用的流程图符号:规定了一些常用的流程图符号:起止框起止框判断框判断框处理框处理框输入输入/输出框输出框注释框注释框流向线流向线连接点连接点2021/3/98 http:/ 顺序结构顺序结构选择结构选择结构循环结构循环结构(while型型) 2021/3/99 http:/ n=r,r=m%n是是输出最大公约数输出最大公约数n结束结束用流程图表示算法要比用文字描述算法逻辑清晰、易于理解。 2021/3/910 http:/ 1973 1973年美国学者年美国学者I.NassiI.Nassi和和B.ShneidermanB.Shneiderman提出了一种新的提出了一种新的流程图形式。在这种
4、流程图中,完全去掉了带箭头的流程流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大它的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称的框。这种流程图又称N-SN-S结构化流程图结构化流程图 。2021/3/911 http:/ N-SN-S流程图用以下的流程图符号:流程图用以下的流程图符号: (1)顺序结构顺序结构(2)选择结构选择结构(3)循环结构循环结构2021/3/912 http:/ n=r,r=m%n是是输出最大公约
5、数输出最大公约数n输入两个数输入两个数m,n求余数求余数r=m%n当当r!=0m=nn=rr=m%n输出最大公约数输出最大公约数n2021/3/913 http:/ 条件判断条件判断4.2.1 关系运算和关系表达式关系运算和关系表达式操作数操作数关系运算符关系运算符关系表达式的关系表达式的计算结果计算结果 = = 逻辑值(真或假)逻辑值(真或假)在在C C语言中,语言中,“0”“0”表示表示“假假”,“1”“1”表示表示“真真”操作数操作数关系运算符用于测试两个操作数或两个表达式关系运算符用于测试两个操作数或两个表达式之间的关系,之间的关系,其中操作数可以是变量、常量或其中操作数可以是变量、常
6、量或表达式。表达式。2021/3/914 http:/ 条件判断条件判断4.2.1 关系运算和关系表达式关系运算和关系表达式关系运算符关系运算符操作数操作数1 1操作数操作数2 2关系运算符关系运算符2021/3/915 http:/ (1)在关系运算符中:)在关系运算符中:,=, ,num2的值的值 (2)(num1num2)!=num3的值的值 (3)num1num2num3的值的值 思考题:任意改变思考题:任意改变num1或或num2的值,会影响整个表的值,会影响整个表达式的值吗?达式的值吗? (4)(num1num2)+num3 再次强调:再次强调:C语言用整数语言用整数“1”表示表示
7、“逻辑真逻辑真”,用整数,用整数“0”表示表示“逻辑假逻辑假”。所以,关系表达式的值还可以参与其。所以,关系表达式的值还可以参与其它种类的运算,例如算术运算、逻辑运算等。它种类的运算,例如算术运算、逻辑运算等。2021/3/917 http:/ 条件判断条件判断4.2.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式运算运算运算符运算符表达式表达式逻辑逻辑“与与”&operand1 & operand2逻辑逻辑“或或”|operand1 | operand2逻辑逻辑“非非”!operand1 逻辑运算符用于连接一个或多个条件,判断这些逻辑运算符用于连接一个或多个条件,判断这些条件是否成立条件是
8、否成立逻辑运算符的类型为:逻辑运算符的类型为:2021/3/918 http:/ 逻辑“与”运算符 &所有学科及格考勤率达到 75%留级留级留级升级YesNoNoNoNoYesYesYes2021/3/919 http:/ 1 1表达式表达式 2 2结果结果000010100111逻辑“与”运算符 &所有学科及格考勤率达到 75%留级留级NoNo升级YesYes留级NoYes留级留级NoYes2021/3/920 http:/ |无法支付可支付可支付可支付YesNoNoNoNoYesYesYes购物帐单信用卡2021/3/921 http:/ |表达式 1表达式 2结果000011101111
9、无法支付NoNo可支付NoYes可支付NoYes可支付YesYes2021/3/922 http:/ !不带伞带伞NoYes天气 NOT 阴天2021/3/923 http:/ !表达式结果1001天气 NOT 阴天真真假带伞操作不带伞2021/3/924 http:/ 75%&天气天气 NOT 阴天阴天只有当两个两个条件都为真真时才执行操作只要任何任何一个条件为真真时就执行操作对原条件取反取反,即:如果原条件为假时就执行操作|!2021/3/925 http:/ .即:即:!(非)!(非) &(与)(与) |(或)(或)(2)与其它种类运算符的优先关系)与其它种类运算符的优先关系 ! 算术运
10、算符算术运算符 关系运算符关系运算符 & | 赋值运算符赋值运算符 逗号运算符逗号运算符例例 a=x & xb&xy a=b|x=y !a|ab/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)2021/3/926 http:/ !num的值的值 num=1 num31的值的值C C语言中语言中, ,运算量运算量: : 0 0表示表示“假假”, 非非0 0表示表示“真真”,”, 运算结果运算结果: : 0 0表示表示“假假”, 1 1表示表示“真真”,”,逻辑运算符0112021/3/927 http:/ 说明说明短路特性短路特性逻辑运算符2021/3/928
11、http:/ 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的值分别为()的值分别为() int x=0,y=0,z=0; +x|+y&+z; 逻辑运算符2021/3/929 http:/ 用用if语句实现选择结构语句实现选择结构
12、4.3.1 if语句的语句的3种形式种形式 用用if语句可以构成分支结构。它对给定的条件进语句可以构成分支结构。它对给定的条件进行判断,根据判断的结果(真或假)来决定执行某行判断,根据判断的结果(真或假)来决定执行某个分支程序段。个分支程序段。n1. 单选择单选择:v格式:格式:if (expression) statementv执行过程:执行过程:表达式表达式真真假假语句语句例:例: if(xy) printf(“%d”, x);2021/3/930 http:/ include main() int num1, num2, sum; printf(n请输入两个数:); scanf(%d %
13、d, &num1,&num2); sum = num1+ num2 ; if(sum 100) printf(n两数的和大于 100 n );简单简单if语句的示例语句的示例内存内存num1num2sum5678134请输入两个数:56 78两数的和大于 1004.3 用用if语句实现选择结构语句实现选择结构2021/3/931 http:/ 双选双选:v格式格式:if (expression) statement1 else statement2v执行过程:执行过程:例:例:if (xy) printf(%d,x); else printf(%d,y);表达式表达式真真假假语句语句1语句语句
14、24.3 用用if语句实现选择结构语句实现选择结构2021/3/932 http:/ 用用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”);2021/3/933 http:/ main()int num;printf(n请输入一个整数:); scanf (%d,&num);i
15、f(num % 2) = 0)printf(%d 是一个偶数。n,num); elseprintf(%d 是一个奇数。n,num);if-else语句的示例语句的示例内存内存num57请输入一个整数:5757 是一个奇数。4.3 用用if语句实现选择结构语句实现选择结构2021/3/934 http:/ 判定给定的年份是否为闰年。判定给定的年份是否为闰年。提示:闰年的判定规则为:能被提示:闰年的判定规则为:能被 4 整除但不能被整除但不能被 100 整除的整除的年份,或能被年份,或能被 400 整除的年份。整除的年份。 #include main() int year; printf(n 请输
16、入年份:); 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语句实现选择结构语句实现选择结构2021/3/935 http:/ #include main()long ge,shi,qian,wan,x;printf(n 请输入一个五位整数:);scanf(%ld,&x);wan=x/10000; /分解出万位数qian=x%
17、10000/1000; /分解出千位数shi=x%100/10; /分解出十位数ge=x%10; /分解出个位数if (ge=wan & shi=qian) /*个位等于万位并且十位等于千位*/printf(n 这个数是回文数n);elseprintf(n 这个数不是回文数n);输出:请输入一个五位整数:45654这个数是回文数4.3 用用if语句实现选择结构语句实现选择结构2021/3/936 http:/ 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
18、后面的表达式类型任意uif(x) if(x!=0) if(!x) if(x=0)uif和else后面只含一个语句,也可以是复合语句(用括起来)uelse不能作为语句单独,它必须与if配对使用 4.3 用用if语句实现选择结构语句实现选择结构2021/3/937 http:/ 考虑下面程序的输出结果考虑下面程序的输出结果: #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语句实现选择结构语句实现选择结构2021/3/938
19、http:/ (表达式1)语句1;else if (表达式2)语句2;else if (表达式3)语句3;.else 语句n;3. 阶梯式 if-else-if 真真 假 真真假真真 假 4.3 用用if语句实现选择结构语句实现选择结构2021/3/939 http:/ 用用if语句实现选择结构语句实现选择结构2021/3/940 http:/ if 结构示例结构示例问题描述:问题描述:编写一个程序,根据用户输入的期末考试成绩,输出相应编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。成绩大于等于的成绩评定信息。成绩大于等于90分输出分输出“优优”;成绩大于;成绩大于等于等于8
20、0分小于分小于90分输出分输出“良良”;成绩大于等于;成绩大于等于60分小于分小于80分输出分输出“中中”;成绩小于;成绩小于60分输出分输出“差差”。 4.3 用用if语句实现选择结构语句实现选择结构2021/3/941 http:/ 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语言规定
21、,每个 else 部分总属于前面最近的那个缺少对应的 else 部分的 if 语句。提倡使用大括号括起来以避免看起来有二义性。2021/3/945 http:/ 考虑下面程序输出结果: 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); 结果:结果:-12021/3/946 http:/ #include main() int magic;/*定义计算机“想”的数*/ int guess;/*定义人猜的数*/ magic=
22、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=y2021/3/950 http:/ 13条件运算符可嵌套条件运算符可嵌套 如如 x0?1:(xb?a:cd?c:d ab?a:(cd?c:d)expr1、e
23、xpr2、expr3类型可不同,表达式值取较高类型可不同,表达式值取较高的类型的类型例例 x?a:b /x=0,表达式值为表达式值为b; x0,表达式值为表达式值为a xy?1:1.5 /xy ,值为值为1.0; xy ,值为值为1.5条件运算符2021/3/951 http:/ #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);
24、请输入基本工资:1500税后工资为:1475.002021/3/952 http:/ 180cm,加利福尼亚第 12 大街”);printf(“这是丹尼尔,身高 193cm,现居住地不明,1998 年 12 月 12 日在佛罗里达被捕”);printf(“这是吉姆,身高 175cm,墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕”);printf(“未发现匹配项。对不起!”);停止搜索停止搜索停止搜索停止搜索警察记录嫌疑犯照片不是这是吉姆,身高 175cm,墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕不是是4.4 利用利用s
25、witch语句实现多分支选择结构语句实现多分支选择结构2021/3/953 http:/ 语句是多路判断语句语句是多路判断语句switch 语句计算条件表达式并对照多个常数值进行语句计算条件表达式并对照多个常数值进行检查检查switch (表达式) case 常量 1:语句;break; case 常量 2:语句;break; default:语句;计算表达式的值如果等于常量1 如果等于常量2 如果没有找到匹配的值 4.4 利用利用switch语句实现多分支选择结构语句实现多分支选择结构2021/3/954 http:/ main() int score; scanf(“%d”,&score)
26、: switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); 运行结果:运行结果:score为为5时,输出:时,输出:Very good! Good! Pass! Fail! data error!4.4 利用利用switch语句实现多分支选择结构语句实现多分支选择结构2021/3/955 http:/ 利用利用switch语句实现多分支选择结构语句实
27、现多分支选择结构2021/3/956 http:/ 结构示例问题描述:问题描述:要求用户输入一个字符值并检查它是否为元音字母。要求用户输入一个字符值并检查它是否为元音字母。 char in_char;printf(n 请输入一个小写字母: );scanf(%c, &in_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 您输入的是元音字
28、母 on); break; case u: printf(n 您输入的是元音字母 un); break; default: printf(n 您输入的不是元音字母 n); 内存内存in_chare请输入一个小写字母:e您输入的是元音字母 e4.4 利用利用switch语句实现多分支选择结构语句实现多分支选择结构2021/3/957 http:/ 在在09之间的之间的为数字,在为数字,在AZ之间为大写字母,之间为大写字母, 在在az之间之间为小写字母,其余则为其它字符。为小写字母,其余则为其它字符。 main()char c;printf(n 请输入一个字符: );c=getchar();if(
29、c=0&c=A&c=a&c=z)printf(n 该字符是一个小写字母。n);elseprintf(n 该字符是其他字符。n); 内存内存cE请输入一个字符:E该字符是一个大写字母2021/3/958 http:/ 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); break; case *: print
30、f(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*2021/3/959 http:/ #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+; break; prin
31、tf(”%dn”,m); A1 B2 C3 D4 2021/3/960 http:/ 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=12021/3/961 http:/ 可以组成何种三角形。从键盘任意输入年、月,编程输出该年份该月的天数。商店卖西瓜,10斤以上的每斤0.15元,8斤以上的每斤0.3元
32、,6斤以上的每斤0.4元,4斤以上的每斤0.6元,4斤以下的每斤0.8元,从键盘输入西瓜的重量和顾客所付钱数,输出应付款和应找钱数。某服装批发商店经营套服,也单件出售。若买的不少于50套,每套80元;不足50套的每套100元;只买上衣每件60元;只买裤子每条45元。从键盘任意输入顾客所买的上衣和裤子的件数,输出应付款。2021/3/962 http:/ 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练习2021/3/963放映结束 感谢各位的批评指导! 谢谢 谢!谢!让我们共同进步2021/3/964