选择结构演示文稿_第1页
选择结构演示文稿_第2页
选择结构演示文稿_第3页
选择结构演示文稿_第4页
选择结构演示文稿_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

选择结构演示文稿计算机基础教学部当前第1页\共有62页\编于星期四\13点优选选择结构计算机基础教学部当前第2页\共有62页\编于星期四\13点本章要点关系表达式逻辑表达式选择结构程序设计计算机基础教学部当前第3页\共有62页\编于星期四\13点程序=算法+数据结构灵魂加工对象4.1关于算法计算机基础教学部当前第4页\共有62页\编于星期四\13点4.1关于算法4.1.1算法的概念广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。计算机基础教学部当前第5页\共有62页\编于星期四\13点方法1:1+2,+3,+4,一直加到100加99次方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次对同一个问题,可有不同的解题方法和步骤例4.1:求计算机基础教学部当前第6页\共有62页\编于星期四\13点例4.2:求任意两个整数间的最大公约数。mnr被除数除数余数m’n’r’余数是否为0m’n’r’=0n’即为最大公约数经典算法举例:计算机基础教学部当前第7页\共有62页\编于星期四\13点4.1.2算法的描述方法可以用不同的方法表示算法,常用的有:自然语言传统流程图结构化流程图伪代码PAD图传统流程图结构化流程图计算机基础教学部当前第8页\共有62页\编于星期四\13点用流程图表示算法美国国家标准化协会ANSI(AmericanNationalStandardInstitute)规定了一些常用的流程图符号:起止框判断框处理框输入/输出框注释框流向线连接点计算机基础教学部当前第9页\共有62页\编于星期四\13点三种基本结构的图示:

顺序结构选择结构循环结构(while型)计算机基础教学部当前第10页\共有62页\编于星期四\13点例4.3:用流程图描述“辗转相除法”求任意两个整数间的最大公约数。开始输入两个数m,n求余数r=m%nr是否为0否m=n,n=r,r=m%n是输出最大公约数n结束用流程图表示算法要比用文字描述算法逻辑清晰、易于理解。计算机基础教学部当前第11页\共有62页\编于星期四\13点用N--S流程图表示算法1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称N--S结构化流程图。计算机基础教学部当前第12页\共有62页\编于星期四\13点

N--S流程图用以下的流程图符号:

(1)顺序结构(2)选择结构(3)循环结构计算机基础教学部当前第13页\共有62页\编于星期四\13点例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输出最大公约数n计算机基础教学部当前第14页\共有62页\编于星期四\13点4.2条件判断4.2.1关系运算和关系表达式操作数关系运算符关系表达式的计算结果=逻辑值(真或假)在C语言中,“0”表示“假”,“1”表示“真”操作数关系运算符用于测试两个操作数或两个表达式之间的关系,其中操作数可以是变量、常量或表达式。计算机基础教学部当前第15页\共有62页\编于星期四\13点4.2条件判断4.2.1关系运算和关系表达式关系运算符!===>=<=操作数1操作数2关系运算符计算机基础教学部当前第16页\共有62页\编于星期四\13点优先级与结合性:优先级:(1)在关系运算符中:>,>=,<,<=高于==,!=。(2)与其它种类运算符比较:算术运算符(高)关系运算符赋值运算符(低)结合性:左结合4.2条件判断4.2.1关系运算和关系表达式计算机基础教学部当前第17页\共有62页\编于星期四\13点例如,假设num1=3,num2=4,num3=5,则:(1)num1>num2的值(2)(num1>num2)!=num3的值(3)num1<num2<num3的值思考题:任意改变num1或num2的值,会影响整个表达式的值吗?(4)(num1<num2)+num3再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值还可以参与其它种类的运算,例如算术运算、逻辑运算等。计算机基础教学部当前第18页\共有62页\编于星期四\13点4.2条件判断4.2.2逻辑运算符和逻辑表达式运算运算符表达式逻辑“与”&&operand1&&operand2逻辑“或”||operand1||operand2逻辑“非”!!operand1逻辑运算符用于连接一个或多个条件,判断这些条件是否成立逻辑运算符的类型为:计算机基础教学部当前第19页\共有62页\编于星期四\13点逻辑“与”运算符&&所有学科及格考勤率达到75%留级留级留级升级YesNoNoNoNoYesYesYes计算机基础教学部当前第20页\共有62页\编于星期四\13点表达式1表达式2结果000010100111逻辑“与”运算符&&所有学科及格考勤率达到75%留级NoNo升级YesYes留级NoYes留级NoYes计算机基础教学部当前第21页\共有62页\编于星期四\13点逻辑“或”运算符||无法支付可支付可支付可支付YesNoNoNoNoYesYesYes购物帐单信用卡计算机基础教学部当前第22页\共有62页\编于星期四\13点现金信用卡逻辑“或”运算符||表达式1表达式2结果000011101111无法支付NoNo可支付NoYes可支付NoYes可支付YesYes计算机基础教学部当前第23页\共有62页\编于星期四\13点逻辑“非”运算符!不带伞带伞NoYes天气NOT阴天计算机基础教学部当前第24页\共有62页\编于星期四\13点逻辑“非”运算符!表达式结果1001天气NOT阴天真假带伞操作不带伞计算机基础教学部当前第25页\共有62页\编于星期四\13点逻辑运算符总结所有学科及格考勤率达到75%&&天气NOT阴天只有当两个条件都为真时才执行操作只要任何一个条件为真时就执行操作对原条件取反,即:如果原条件为假时就执行操作||!计算机基础教学部当前第26页\共有62页\编于星期四\13点逻辑运算符的优先级(1)逻辑非的优先级最高,逻辑与次之,逻辑或最低.即:

!(非)&&(与)||(或)(2)与其它种类运算符的优先关系

!算术运算符

关系运算符

&&

||赋值运算符逗号运算符例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)计算机基础教学部当前第27页\共有62页\编于星期四\13点逻辑表达式的值例如,假设num=12,则:!num的值num>=1&&num<=31的值num||num>31的值C语言中,运算量:0表示“假”,非0表示“真”,运算结果:0表示“假”,1表示“真”,逻辑运算符011计算机基础教学部当前第28页\共有62页\编于星期四\13点 (1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何类型的数据,如实型、字符型等。‘a’&&‘b’ (2)在计算逻辑表达式时,并不是所有的表达式都被求解,只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。

说明短路特性逻辑运算符计算机基础教学部当前第29页\共有62页\编于星期四\13点例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=a>b)&&(n=c>d)//结果m=0,n=1例如:执行以下语句后,x,y,z的值分别为()intx=0,y=0,z=0;++x||++y&&++z;

逻辑运算符计算机基础教学部当前第30页\共有62页\编于星期四\13点4.3用if语句实现选择结构4.3.1if语句的3种形式

用if语句可以构成分支结构。它对给定的条件进行判断,根据判断的结果(真或假)来决定执行某个分支程序段。1.单选择:格式:if(expression)statement执行过程:表达式真假语句例:if(x>y)printf(“%d”,x);计算机基础教学部当前第31页\共有62页\编于星期四\13点#include<stdio.h>main(){intnum1,num2,sum;printf("\n请输入两个数:");scanf("%d%d",&num1,&num2);sum=num1+num2;if(sum>100) printf("\n两数的和大于100\n");}简单if语句的示例内存num1num2sum5678134请输入两个数:5678两数的和大于1004.3用if语句实现选择结构计算机基础教学部当前第32页\共有62页\编于星期四\13点2.双选:格式:if(expression)statement1elsestatement2执行过程:例:if(x>y)printf("%d",x);

elseprintf("%d",y);表达式真假语句1语句24.3用if语句实现选择结构计算机基础教学部当前第33页\共有62页\编于星期四\13点4.3用if语句实现选择结构修改上例#include<stdio.h>main(){intnum1,num2,sum;printf("\n请输入两个数:");scanf("%d%d",&num1,&num2);sum=num1+num2;if(sum>100) printf("\n两数的和大于100\n");

elseprintf(“\n两数的和小于100\n”);}计算机基础教学部当前第34页\共有62页\编于星期四\13点#include<stdio.h>main(){ intnum; printf("\n请输入一个整数:");scanf("%d",&num); if((num%2)==0) printf("%d是一个偶数。\n",num);else printf("%d是一个奇数。\n",num);}if-else语句的示例内存num57请输入一个整数:5757是一个奇数。4.3用if语句实现选择结构计算机基础教学部当前第35页\共有62页\编于星期四\13点<练习>问题描述:判定给定的年份是否为闰年。提示:闰年的判定规则为:能被4整除但不能被100整除的年份,或能被400整除的年份。

#include<stdio.h>main(){intyear;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语句实现选择结构计算机基础教学部当前第36页\共有62页\编于星期四\13点<练习>问题描述:输入一个5位数,判断它是不是回文数。例如:12321是回文数,个位与万位相同,十位与千位相同。#include<stdio.h>main(){ longge,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"); else printf("\n这个数不是回文数\n");}输出:请输入一个五位整数:45654这个数是回文数4.3用if语句实现选择结构计算机基础教学部当前第37页\共有62页\编于星期四\13点如:if(a==b&&x==y)printf(“a=b,x=y”);intx=3,y;if(x=5)y=3;if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);说明:if后面的表达式类型任意if(x)if(x!=0)if(!x)if(x==0)if和else后面只含一个语句,也可以是复合语句(用{}括起来)else不能作为语句单独,它必须与if配对使用

4.3用if语句实现选择结构计算机基础教学部当前第38页\共有62页\编于星期四\13点例考虑下面程序的输出结果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}编译错误!4.3用if语句实现选择结构计算机基础教学部当前第39页\共有62页\编于星期四\13点if(表达式1)

语句1;elseif(表达式2)

语句2;elseif(表达式3)

语句3;..else

语句n;3.阶梯式if-else-if真假真假真假4.3用if语句实现选择结构计算机基础教学部当前第40页\共有62页\编于星期四\13点表达式1真假语句1语句2表达式2表达式3语句3语句4真假真假4.3用if语句实现选择结构计算机基础教学部当前第41页\共有62页\编于星期四\13点阶梯式if结构示例问题描述:编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。成绩大于等于90分输出“优”;成绩大于等于80分小于90分输出“良”;成绩大于等于60分小于80分输出“中”;成绩小于60分输出“差”。4.3用if语句实现选择结构计算机基础教学部当前第42页\共有62页\编于星期四\13点#include<stdio.h>main(){ floatgrade; printf("\n请输入期末考试成绩:

"); scanf("%f",&grade); if(grade>=90) printf("\n优"); elseif((grade>=80)&&(grade<90)) printf("\n良"); elseif((grade>=60)&&(grade<80)) printf("\n中"); else printf("\n差"); printf("\n");}内存grade59请输入期末考试成绩:59差计算机基础教学部当前第43页\共有62页\编于星期四\13点不能上菜有胡萝卜吗?有黄瓜吗?制作胡萝卜沙拉有多重条件判断有可以上菜制作黄瓜沙拉制作黄瓜沙拉没有没有开始做黄瓜沙拉做胡萝卜沙拉有没有不能上菜可以上菜是否有胡萝卜有没有是否有黄瓜?结束计算机基础教学部当前第44页\共有62页\编于星期四\13点4.3.2if语句的嵌套在一个if语句中包含一个或多个if语句if(表达式1) if(表达式2) if(表达式3)

语句m;else

语句n;真真真假4.3用if语句实现选择结构计算机基础教学部当前第45页\共有62页\编于星期四\13点if(x>0)if(y>1)z=1;else/*这个

else部分属于哪个

if?*/z=2;C语言规定,每个else部分总属于前面最近的那个缺少对应的else部分的if语句。提倡使用大括号括起来以避免看起来有二义性。计算机基础教学部当前第46页\共有62页\编于星期四\13点<例>考虑下面程序输出结果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf(“%d”,x);}结果:-1计算机基础教学部当前第47页\共有62页\编于星期四\13点编程设计一个简单的猜数游戏:先由计算机“想”一个数,请人猜。如果人猜对,则计算机给出提示“正确”,否则提示“错误”,并告诉人所猜的数是大还是小。#include<stdio.h>#include<stdlib.h>main(){intmagic;/*定义计算机“想”的数*/intguess;/*定义人猜的数*/magic=rand();printf("请输入你的猜测:");scanf("%d",&guess);if(guess>magic) printf("错误!你猜的数大了");elseif(guess<magic) printf("错误!你猜的数小了");else printf("正确!你猜对了,这个数就是:%d",magic);}srand(time(0));随机数种子伪随机数计算机基础教学部当前第48页\共有62页\编于星期四\13点4.3用if语句实现选择结构4.3.3条件运算符和条件表达式计算机基础教学部当前第49页\共有62页\编于星期四\13点条件运算符条件表达式考试是否及格?是不是真表达式1假表达式2计算机基础教学部当前第50页\共有62页\编于星期四\13点条件运算符if(num>100){value=‘y’;}else{value=‘n’;}value=num>100?‘y’:‘n’;(1)(0)条件表达式使用“if-else”的等同代码

假设num=200value=num>100;?‘y’:‘n’200value=‘y’计算机基础教学部当前第51页\共有62页\编于星期四\13点优先级:13条件运算符可嵌套

如x>0?1:(x<0?-1:0)结合方向:自右向左

如a>b?a:c>d?c:da>b?a:(c>d?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型例x?‘a’:‘b’//x=0,表达式值为‘b’;x‡0,表达式值为‘a’x>y?1:1.5//x>y,值为1.0;x<y,值为1.5条件运算符计算机基础教学部当前第52页\共有62页\编于星期四\13点条件运算符示例问题描述:个人所得税收取规定:工资大于1000元的部分将扣除5%的个人所得税。小于1000元的部分不扣除个人所得税。要求用户输入基本工资,计算税后工资。#include<stdio.h>voidmain(){ doublesal; doublerate; printf("\n请输入基本工资:"); scanf("%lf",&sal);

rate=(sal<=1000)?0:0.05; sal=sal-(sal-1000)*rate; printf("\n税后工资为:%7.2f\n",sal);}请输入基本工资:1500税后工资为:1475.00计算机基础教学部当前第53页\共有62页\编于星期四\13点printf(“这是迈克尔,身高180cm,加利福尼亚第12大街”);printf(“这是丹尼尔,身高193cm,现居住地不明,1998年12月12日在佛罗里达被捕”);printf(“这是吉姆,身高175cm,墨西哥州海鸥路弗罗拉公寓,于2003年11月1日在新泽西因抢银行被捕”);default:printf(“未发现匹配项。对不起!”);停止搜索停止搜索停止搜索停止搜索警察记录嫌疑犯照片不是这是吉姆,身高175cm,墨西哥州海鸥路弗罗拉公寓,于2003年11月1日在新泽西因抢银行被捕不是是4.4利用switch语句实现多分支选择结构计算机基础教学部当前第54页\共有62页\编于星期四\13点switch-case语句是多路判断语句switch语句计算条件表达式并对照多个常数值进行检查switch(表达式){case常量1:

语句; break;case常量

2:

语句; break;

default:

语句;}计算表达式的值如果等于常量1如果等于常量2如果没有找到匹配的值4.4利用switch语句实现多分支选择结构计算机基础教学部当前第55页\共有62页\编于星期四\13点<例>阅读程序,分析结果

main(){intscore;scanf(“%d”,&score):switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}}运行结果:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!4.4利用switch语句实现多分支选择结构计算机基础教学部当前第56页\共有62页\编于星期四\13点在使用switch结构时应注意以下几点:在case后的各常量表达式的值不能相同,否则会出现错误;在case后,允许有多个语句,可以不用{}括起来;每个case语句后都必须有一个break语句,否则会出现错误;各case和default子句的先后顺序可以变动,而不会影响程序执行结果;default子句可以省略;4.4利用switch语句实现多分支选择结构计算机基础教学部当前第57页\共有62页\编于星期四\13点switch结构示例问题描述:要求用户输入一个字符值并检查它是否为元音字母。charin_char;printf("\n请输入一个小写字母:

");scanf("%c",&in_char);switch(in_char){case'a':printf("\n您输入的是元音字母

a\n"); break;case'e':printf("\n您输入的是元音字母

e\n"); break;case'i':printf("\n您输入的是元音字母

i\n"); break;case'o':printf("\n您输入的是元音字母

o\n"); break;case'u':printf("\n您输入的是元音字母

u\n"); break;default:printf("\n您输入的不是元音字母

\n");}内存in_chare请输入一个小写字母:e您输入的是元音字母e4.4利用switch语句实现多分支选择结构计算机基础教学部当前第58页\共有62页\编于星期四\13点问题描述:要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII码值小于32的为控制字符。在0~9之间的为数字,在A~Z之间为大写字母,在a~z之间为小写字母,其余则为其它字符。main(){ charc; printf("\n请输入一个字符:"); c=getchar(); if(c<32) printf("\n该字符是一个控制字符。\n"); elseif(c>='0'&&c<='9') printf("\n该字符是一个数字。\n"); elseif(c>='A'&&c<='Z') printf("\n该字符是一个大写字母。\n"); elseif(c>='a'&&c<='z') printf("\n该字符是一个小写字母。\n"); else printf("\n该字符是其他字符。\n");

温馨提示

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

评论

0/150

提交评论