书签 分享 收藏 举报 版权申诉 / 97
上传文档赚钱

类型计算机精品课件:第3章-选择结构程序设计.ppt

  • 上传人(卖家):金钥匙文档
  • 文档编号:435643
  • 上传时间:2020-04-05
  • 格式:PPT
  • 页数:97
  • 大小:847KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《计算机精品课件:第3章-选择结构程序设计.ppt》由用户(金钥匙文档)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    计算机 精品 课件 选择 结构 程序设计
    资源描述:

    1、1,第3章 选择结构程序设计,3.1 关系运算符和关系表达式 3.2 逻辑运算符和逻辑表达 3.3 if语句 3.4 switch语句 3.5 条件运算符和条件表达式 3.6 程序举例,2,现实生活中,有很多需要进行判断和选择的情况 如果你在家,我去拜访你 如果考试不及格,要补考 由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断 处理这些问题,关键在于进行条件判断,3,程序设计中,有3种基本结构: (1) 顺序结构 (2) 选择结构(或称分支结构) (3) 循环结构(或称重复结构) 1) 当型 (while) 2) 直到型(until),4,5,6

    2、,3种基本结构有以下共同特点: (1)只有1个入口, (2)只有1个出口, (3)结构内的每个部分都有机会被执行到, (4)结构内不存在死循环。,7,选择结构是循环结构中的一个关键子结构。 选择结构的作用是: 根据所给定的条件是否满足,决定从给出的两组操作(循环、不循环;左分支、右分支)中选择其一来执行。,8,C语言有两种选择语句: (1)if语句,实现两个分支的选择结构 (2)switch语句,实现多分支的选择结构,9,例 求 方程的根。 由键盘输入a,b,c。假设a,b,c的值任意,并不保证 。 需由程序进行判别:如果 计算并输出方程的两个实根 否则输出“方程无实根”,10,解题思路:,输

    3、入a,b,c,计算disc,disc0,计算x1,x2,输出无实根,输出x1,x2,真,假,11,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(“%lf%lf%lf”, ,12,C语言的选择结构大多是用 if 语句实现的。,if 语句的最常用形式为: if(关系表达式) 语句1 else 语句2,例如:if(x0) y=1; else y = -1;,其中:x0是一个关系表达式 是一个关系运算符,3.3 if语句_选择结构和条件判断,13,例3.2 输入两个实数,按代数值由小到大 的顺序输出这两个数。,解题思

    4、路: 只需要做一次比较,然后进行一次交换即可 用if语句实现条件判断 关键是怎样实现两个变量值的互换,A,B,互换前,A,B,互换后,14,A,B,C,15,#include int main() float a,b,t; scanf(“%f,%f”, ,将a和b的值互换,如果ab,16,#include int main() float a,b,t; scanf(“%f,%f”, ,选择结构,用if语句实现的,17,解题思路:可以先用伪代码写出算法: if ab,a和b对换 (a是a、b中的小者) if ac,a和c对换 (a是三者中最小者) if bc,b和c对换 (b是三者中次小者) 顺

    5、序输出a,b,c,例:输入3个数a,b,c,要求按由小到大的顺序输出,18,#include int main() float a,b,c,t; scanf(“%f,%f,%f”, ,a是两者中的小者,a是三者中最小者,19,if 语句的作用: 根据判断的结果(真假)来决定执行给出的两种操作之一。 由于关系表达式可以得到真值或假值。 因此 if 语句是根据关系表达式的值来判断所给定的条件是否满足。,20,if语句的一般形式,if( 表达式 ) 语句1 else 语句2 ,关系表达式 逻辑表达式 数值表达式,方括号内的部分为可选的,21,if (表达式) 语句1 else 语句2 ,简单的语句

    6、复合语句 另一个if语句等,22,最常用的3种if语句形式: 1. if (表达式) 语句1 (没有else子句),例如: if(xy) printf(“%d”,x); 执行过程如图:,23,例如:if(xy)printf(“%d”,x); else printf(“%d”,y); 执行过程如图:,if(表达式)语句1 else 语句2,24,if(表达式) 语句1 else if(表达式) 语句2 else if(表达式) 语句3 else if(表达式)语句m else 语句n 执行过程如图:,25,内嵌多分支,26,例如:计算某零件库存成本 if (number500) cost=0.1

    7、5; else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0;,27,说明: 1)三种形式的if中,在if后面的均为“表达式”,一般情况下为逻辑表达式或关系表达式。在执行 if 语句时,先对表达式求解,然后按表达式的值执行相应的语句。,即使写成 if(a=3),赋值表达式也作为a0来看待 若写成 if(a=3),是关系表达式,此时若a的原值为3,表达式才为真。 可见,表达式的类型是任意的,可为逻辑型、也可是数值型(包括整型、实型、字符型或指针型),

    8、28,2)在第2和第3种 if 语句中: 在每个else前面有一个分号 整个语句结束处有一个分号,例如:if(x0) printf(“%f”,x); else printf(“%f”,-x);,29,3)if 后面 只能有一个语句, else后面也只能有一个语句。(或复合语句)。,例如: if(a+bc&b+ca&c+ab) else printf(“is not a trilateral”);, 表示一个完整的复合语句,其中 表示复合语句的结束,但它并不代表其内嵌的最后一个语句的结束。, s=0.5*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf

    9、(“area=%6.2f”,area) ;,30,3.3.2 选择结构的嵌套,在if语句中又包含一个或多个if语句称为if语句的嵌套,一般形式: if( ) if( ) 语句1 else 语句2 else if( ) 语句3 else 语句4,内嵌if,else总是与它上面最近的未配对的if配对,31,if () if () 语句1 else语句2,内嵌if, 限定了内嵌if范围, ,32,例 有一函数: 编一程序,输入一个x值,要求输出相应的y值。,33,解题思路: 用if语句检查x的值,根据x的值决定赋予y的值 由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语

    10、句来实现,34,解题思路:方法1 (1) 先后用3个独立的if语句处理: 输入x 若 x 0, 则y = 1 输出x和y,scanf(“%d”,35,解题思路:方法2 (2) 用一个嵌套的if语句处理: 输入x 若x 0, 则y = -1 否则 若 x = 0, 则y = 0 否则 y = 1 输出x和y,scanf(“%d”,36,scanf(“%d“,提倡内嵌if放在else中,scanf(“%d“,37,3.1关系运算符和关系表达式,关系运算就是“比较运算”。 把两个值进行比较,对比较的结果是否符合给定的条件进行判断。,关系运算符及其优先次序,38,例如: a3是一个关系表达式, 是一个

    11、关系运算符。 如果给定a的值为5 则满足给定的条件a3,“真”和“假”是逻辑运算结果的表达方式,因此:关系运算实际是逻辑运算中较简单的一种,因此表达式的值为“真”(即条件满足) 否则表达式的值为”假“,39,C语言有6种关系运算符: 大于 = 大于等于 = 等于(恒等于) != 不等于,优先级为6级,优先级为7级,结合方向为自左向右,3.1.1 关系运算符,40,例如: ca+b 相当于 c(a+b) 算术运算符优先级(4级)高于关系运算符(6级); a=bc 相当于 a=(bc) 赋值运算符优先级(14级)低于关系运算符(6级),41,定义: 用关系运算符把两个表达式连接起来的式子称为关系表

    12、达式。 表达式的值是一个“逻辑值”即“真”或“假”。,例如:关系表达式 5=3 的值为“假” 5=0 的值为“真”,可以是算术表达式或关系表达式。,用1代表“真” 0代表“假”,3.1.2 关系表达式,42,逻辑量可以与其他数值量进行混合运算 例:设 a=3 , b=2 , c=1 则表达式: ab 的值为1,即为”真“ b+cb=c 的值为1, 因为ab的值为1(真),等于c的值。,注意:c的值是为变量赋值时得到的整数值,而ab的值为逻辑值,但二者可运算。,注意:各运算符的优先级、结合方向,43,3.2 逻辑运算符和逻辑表达式,逻辑表达式: 用逻辑运算符把关系表达式或逻辑量连接起来的式子。,

    13、44,C语言有3种逻辑运算符: & 逻辑与(相当于AND) 优先级为11级 | 逻辑或(相当于OR) 优先级为12级 ! 逻辑非(相当于NOT) 优先级为 2级,其中:& 和 | 是双目运算符 要求有两个操作数 ! 是单目运算符 只要求一个操作数 例如 !(ab),3.2.1 逻辑运算符,45,逻辑运算举例:,判断年龄在13至17岁之内? age=13 & age=17,判断年龄小于12或大于65? age65,46,表达式 (ab)&(xy) 可以写成 ab&xy,a&b 若a,b均为真,则a&b为真 a|b 若a,b有1个为真,则a|b为真 !a 若a为真,则!a为假。,以上各例表达式的结

    14、果均为逻辑值“真”或“假”,47,逻辑运算的真值表,48,3.2.2 逻辑表达式,逻辑表达式的值应该是逻辑量“真”或“假” 编译系统在表示逻辑运算结果时 以数值“1”代表“真”,以0代表“假” 但在判断一个量是否为“真”时 以0代表“假”,以非0代表“真” 注意:将一个非零的数值认作为“真”,49,(1) 若a=4,则!a的值为0 (2) 若a=4,b=5,则a&b的值为1 (3) 则a|b的值为1 (4) 则!a|b的值为1 (5) 4 & 0 | 2的值为1,50,在一个表达式中的不同位置上出现数值,应区分那些是作为数值运算或关系运算的对象,那些是作为逻辑运算的对象。,例如: 53&83,

    15、 在关系运算符两侧的5和3是作为数值参加运算。 再进行 1&84-!0的运算。,51,应先进行!0的运算,结果为1。 (1是逻辑量,而!0中的0是数值) 然后进行4-1的运算。其中4为数值,1为逻辑量,但可进行运算。 结果为3,是数值。,52,83关系运算的两个操作数是数值, 结果为0,是逻辑量。 最后1&0是两个逻辑量进行逻辑与, 结果为0,是逻辑量。,53&84-!0 1&84-!0 1&84-1 1&83 1&0 0,53,因此,逻辑运算符两侧的运算对象不仅仅是0和1,或者是0和非0的整数,它可以是任意类型的数据。如可以是字符型、实型或指针型等。系统最终用0和非0来表示它的判断结果是真还

    16、是假。,例如:c&d 结果为1。 因为c和d的ASCII码值均非0。,54,由表可以推导出: 在逻辑表达式的求解过程中,并不是所有的逻辑运算符都要被执行。 只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,例如: (1) a&b&c 逻辑与 只有当a为真(非0)时,才需判断b的值。 同样也只有当a和b均为真时,才需判断c的值,55,又例如: (2) a|b|c 逻辑或 与逻辑与相反,只要a为真(非0)时,就不必判断b和c。 因为逻辑或,只要有1个运算对象为真,表达式就为真。,56,从上述(1)和(2)两个例子中可以看出: 对于逻辑与(&)运算符: 只有当左面的运算对象“非0

    17、”时,才进行右面的运算 对于 逻辑或(|)运算符: 只有当左面的运算对象“为0 ”时,才继续右面的运算,57,例如:设: a=1,b=2,c=3,d=4, 且: m 和 n 的原值为 1。 表达式:(m=ab)&(n=cd) 因ab的值为0,所以m为0, &右面的运算对象不必再运算,整个表达式的值为0,提示: 1)赋值运算符的优先级低于关系运算符 2)因(n=cd)未被执行,因此n的值未改变,仍为1,58,逻辑表达式的例子,利用关系运算符和逻辑运算符组成的逻辑表达式,可以表述复杂的条件。 例如:判别某一年是否闰年,59,分析: 一年实际是365天5小时48分45.5秒。 即一年要多出近6个小时

    18、,这样4年则多出24小时,即一天 把多出的一天加在2月末,就有了闰年时2月为29天,其他年份的2月为28天。 但实际上一年多出的不到6个小时, 据计算,多出的部分正好是400年多3天, 因此规定把能被100整除的天去掉,能被400整除的天留下 即:判断某年是否为闰年只需判断是否能被4整除且不能被100整除,还要加上能被400整除的年,60,因此描述成: 闰年的条件是符合下面二者之一: 能被4整除,但不能被100整除,如2008 能被400整除,如2000 (year%4=0&year%100!=0)|year%400=0,%为3级、=为7级、!=为7级、&为11级、|为12级、!为2级、()为

    19、1级。,61,逻辑型变量,数据类型说明符为: _bool或 _Bool 是C99所增加的一种数据类型 可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算,62,3.5 条件运算符和条件表达式,有一种if语句,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值 如:if (ab) max=a; else max=b;,max = (a b) ? a :b ;,条件运算符,条件表达式,63,3.5 条件运算符和条件表达式,条件表达式的一般形式为: 表达式?表达式: 表达式,64,3.5 条件运算符和条件表达式,条件运算符的执行顺序: 求解表达式1 若为

    20、非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值 若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,65,3.5 条件运算符和条件表达式,条件运算符优先于赋值运算符 13级 3目 条件运算符的结合方向为“自右至左” 以下为合法的使用方法: ab ? (max=a):(max=b); ab ? printf(“%d”,a): printf(“%d”,b);,66,3.5 条件运算符和条件表达式,例 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母; 若不是,不转换。然后输出最后得到的字符。,67,3.5 条件运算符和条件表达式,解题思路:

    21、用条件表达式来处理。 当字母是大写时,转换成小写字母, 否则不转换,68,3.5 条件运算符和条件表达式,#include int main() char ch; scanf(“%c”, ,69,3.4 用switch语句实现多分支选择结构,switch语句用来实现多分支选择结构 学生成绩分类 人口统计分类 按年龄分为老、中、青、少、儿童,70,3.4 用switch语句实现多分支选择结构,例3.6 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为7084分,C等为6069分 ,D等为 60分以下 。成绩的等级由键盘输入。,71,3.4 用switch语句实现多分支选择结构,解

    22、题思路: 判断出这是一个多分支选择问题 根据百分制分数将学生成绩分为4个等级 若用if语句,至少要用3层嵌套的if,进行3次检查判断 用switch语句进行一次检查即可得到结果,72,#include int main() char grade; scanf(“%c”, ,值为A,73,switch语句的作用是根据表达式的值,使流程跳转到不同的语句 switch语句的一般形式: switch(表达式) case 常量1 :语句1 case 常量2 :语句2 case 常量n :语句n default : 语句n+1 ,整数类型(包括字符型),不能相同,case均不满足时,74,例 编写用swi

    23、tch语句处理菜单命令的程序,解题思路: 在应用程序中,多用菜单对流程进行控制。例: 输入一个A或a字符,就会执行A操作; 输入一个B或b字符,就会执行B操作。,75,#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B: action2(a,b);break; default: putchar(a); return 0; ,voi

    24、d action1(int x,int y) printf(“x+y=%dn”,x+y); ,输入a或A,调用action1函数,执行A操作,76,#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B: action2(a,b);break; default: putchar(a); return 0; ,输入b或B,调用actio

    25、n2函数,执行B操作,void action2(int x,int y) printf(“x*y=%dn”,x*y); ,77,这是一个非常简单的示意程序 实际应用中,所指定的操作可能比较复杂: A:输入全班学生各门课的成绩 B:计算并输出每个学生各门课的平均成绩 C:计算并输出各门课的全班平均成绩 D:对全班学生的平均成绩由高到低排序并输出 可以按以上思路编写程序,把各action函数设计成不同的功能以实现各要求,78,3.6 选择结构程序综合举例,例 写一程序,判断某一年是否闰年。,解题思路:前面已介绍过判别闰年的方法 本例用不同的方法编写程序,79,用变量leap代表是否闰年的信息。 是

    26、闰年,leap=1; 非闰年,leap=0。 最后判断leap是否为(真), 若是,则输出“闰年”信息,80,算法: 不能被4整除,不是闰年; 能被4整除,不能被100整除,是闰年;(1996,2004) 能被4整除,能被100整除,能被400整除,是闰年;(1600) 利用NS图表示算法。,81,82,#include int main() int year,leap; printf(“enter year:“); scanf(“%d“,if (leap) printf(“%d is “,year); else printf(“%d is not “,year); printf(“a lea

    27、p year.n“); return 0; ,与if (leap!=0)含义相同,83,if(year%4!=0) leap=0; else if (year%100!=0) leap=1; else if (year%400!=0) leap=0; else leap=1;,if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0;,84,再分析算法: 可被400整除,一定能被100整除; 能被400或100整除,一定能被4整除; 因此把用关系运算表达的算法改为用逻辑运算

    28、表达,if(year%4=0 ,85,例 求 方程的解。,解题思路:处理以下各情况 ,不是二次方程 ,有两个相等实根 ,有两个不等实根。 ,有两个共轭复根。 应当以p+qi和p-qi的形式输出复根 其中:p=-b/2a q=( )/2a,86,87,#include #include int main() double a,b,c,disc,x1,x2,realpart,imagpart; scanf(“%lf,%lf,%lf“,实型不能用if (a=0),88,else disc=b*b-4*a*c; if(fabs(disc)=1e-6) printf(“has two equal roo

    29、ts:%8.4fn“,-b/(2*a); else,先算disc,以减少重复计算,if(disc1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(“has distinct real roots:%8.4fand%8.4fn“,x1,x2); else,disc=0,89, realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(“ has complex roots:n“); printf(“%8.4f+%8.4fin“,realpart,imagpart); pr

    30、intf(“%8.4f-%8.4fin“,realpart,imagpart); return 0; ,90,91,例 物流公司计算运费,解题思路: 运费的计算公式为: f=p*w*s*(1-d) 其中:p是每吨公里运费价格; w是货物重量; s是运输距离; d为折扣率。,92,路程越远,折扣越多,标准如下: s 250km 0% 250=s 500 2% 500=s1000 5% 1000=s2000 8% 2000=s3000 10% 3000=s 15%,93,分析问题:折扣是按250km的规律增加的。 共分为13个路程段。,路段C,94,#include int main() int

    31、c,s; float p,w,d,f; scanf(“%f,%f,%d”,case 4 : case 5 : case 6 : case 7: d=8;break; case 8: case 9 : case 10: case 11:d=10;break; case 12:d=15;break; f=p*w*s*(1-d/100.0); printf(“运费=%15.4f”,f); ,向0取整,95,96,作业: 习题: 3、5、6、7,97,关于作业: 1. 将源程序文件压缩后用邮件在规定时间内上交到: sdyc11121 2. 源程序文件名格式为: c_3_3.cpp c_3_5.cpp 3. 压缩文件名格式为: 学号姓名3.zip,

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:计算机精品课件:第3章-选择结构程序设计.ppt
    链接地址:https://www.163wenku.com/p-435643.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库