收藏 分享(赏)

第四章 选择结构.ppt

上传人:kpmy5893 文档编号:8465379 上传时间:2019-06-29 格式:PPT 页数:38 大小:257.50KB
下载 相关 举报
第四章 选择结构.ppt_第1页
第1页 / 共38页
第四章 选择结构.ppt_第2页
第2页 / 共38页
第四章 选择结构.ppt_第3页
第3页 / 共38页
第四章 选择结构.ppt_第4页
第4页 / 共38页
第四章 选择结构.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、第四章 选择结构程序设计,本章重点,选择结构的含义,If语句的使用方法,Switch语句的使用方法,所谓选择结构,是指根据不同的情况做出不同的选择,执行不同的操作。此时就需要对某个条件做出判断,根据这个条件的具体取值情况,决定应该执行何种操作。在解决实际问题中,许多时候需要根据给定的条件进行选择处理:条件满足时做什么,条件不满足时做什么。解决这类问题需要采用选择结构程序来实现。在C语言中,用if语句或switch语句来实现选择结构的程序设计。,4.1 if语句,3-x x0,2/x x0,y=,求解该问题的流程如下: (1)输入x; (2)如果x0 则 y=3-x,否则y=2/x; (3)输出

2、y的值。 在此例中,要先判断x的值满足什么条件,然后根据判定的结果执行两种操作中的一种。,单分支选择if语句的形式为:if(表达式)语句 其执行过程是:首先求解表达式的值,若表达式的值为真(即为一个非0值),则执行表达式后面的语句;否则不执行任何操作,4.1.1 单分支if语句,单分支if语句流程图,表达式,语句,假(0),真(非0),例:输入两个数,比较其大小,将较大的数输出。 分析: (1)输入两个数据 a,b; (2)进行判断,如果ab,则输出a; 否则,输出b #include “stdafx.h“ #include void main() float a,b;printf(“请输入两

3、个数:“);scanf(“%f,%f“,双分支选择语句为if-else,语句的结构形式为:if(表达式)语句1else 语句2其执行过程是:首先求解表达式的值,若表达式的值为真(即为一个非0值),则执行语句1;当表达式的值为假(为0),则执行语句2,4.1.2 双分支if语句,双分支if语句流程图,表达式,语句1,语句2,真(非0),假(0),例:设计一个猜数游戏,由计算机产生一个随机数,再从键盘输入一个数,若输入的数等于随机数,则输出“you are right”,否则输出“you are wrong”。 分析: (1)c语言的库函数rand()用以产生随机数,它的取值范围是032767之间

4、的一个正整数,; (2)定义一个整型变量magic获取调用rand()函数时产生的随机数 (3)定义一个整型变量guess接收键盘输入的数 (4)比较magic和guess的值是否相等 (5)输出结果。,多分支选择语句的结构形式为:if(表达式1)语句1else if(表达式2)语句2else if(表达式n)语句n;else 语句n+1;其执行过程是:首先判断表达式1的值,若表达式1的值不等于0,则执行语句1,后面的语句再不执行;否则执行相应的else后面的语句,判断表达式2的值,若表达式2的值不等于0,则执行语句2,后面的语句再不执行,否则执行后面的else语句依此类推。,4.1.3 多分

5、支if语句,多分支控制流程图,【例4-3】要求判别键盘输入字符的类别。可根据输入字符的ASCII码来判别类型。在0和9之间的为数字,在A和Z之间为大写字母,在a和z之间为小写字母,其余则为其它字符。 分析: 定义一个字符变量接收键盘输入的值;,#include “stdafx.h“ #include “stdio.h“ main()char c;printf(“input a character: “);c=getchar();if(c=0,if后面跟随的“表达式”,一般为逻辑表达式或关系 表达式。 例如: if(a= =b & x= =y)printf(“a=b x=y”) 但也可以为任意的

6、数值类型(包括整型、实型、字 符型、指针型)表达式。 例如:if(6) printf(“ok”) 是合法的,执行结果输出ok,4.1.4 if语句的相关说明,在第二种和第三种if语句中,每一个else前面有一个 “;”,整个语句结束处也有一个“;”, 例如:if(ab)printf(“max=%dn”,a) ;else 各有一个分号printf(“max=%dn”,b) ;这是因为是if语句中的内嵌语句所要求的,若无此分号,就 会出现语法错误。但注意:else子句是if语句的一部分,它们 同属于一个if语句。Else不能作为语句单独使用,必须与if配 对使用。,在if和else后面只含有一个内

7、嵌的操作语句,当内嵌的操作有 多条时,必须用花括号“ ”括起来。组成一条复合语句且 使用时“”外不再加“;”。 例如:已知三角形的三条边,要求该三角形的面积。 部分程序段为: if( a+bc ,4.1.5 if语句的嵌套,在if语句的内嵌语句(格式中的语句1或语句2)中,又出现 了if语句,称为if语句的嵌套,主要用于多分支的选择结构。 一般形式如下: if(表达式1)if(表达式2) 语句1 内嵌if语句1else 语句2 else if(表达式3) 语句3内嵌if语句2else 语句4,必须注意if与else的配对关系。else总是与它上面的最近的if配对。如: if (表达式1)if(

8、表达式2) 语句1 else if(表达式3) 语句2编程者希望的内嵌if (将else与第一个if配对)else 语句3 实际上,系统执行的是else与第二个else配对 if (表达式1)if(表达式2) 语句1 else if(表达式3) 语句2 系统执行的内嵌if (将else与第二个if配对)else 语句3 因此,使用if嵌套时,为达到程序设计者的企图,可以加花括号来确定配 对关系,如 if (表达式1)if(表达式2) 语句1 使用复合语句达到else与第一个if配对 else if(表达式3) 语句2 else 语句3,If嵌套执行流程图,if语句实现了两种分支的选择控制,但如

9、果分支较多时,嵌套的if层数多,不仅程序冗长而且可读性降低。C语句提供的switch语句是用来直接处理多分支选择结构的语句,实际上是if-else语句的变型。其特点是根据一个表达式的多种值,选择多个分支,4.2 switch语句,switch语句的一般形式如下:switch(表达式) case 常量C1:语句1case 常量C2:语句2case 常量Cn:语句ndefault: 语句n+1其执行过程是:计算表达式的值,并逐个与其 后的常量表达式值比较,当表达式的值与某个常量 表达式的值相等时,即执行其后的语句,直到遇到 break语句为止。如表达式的值与所有case后的常量 表达式均不相同时,

10、则执行default后的语句。,Switch语句流程图,Switch语句的说明,(1)Switch后面括号内的表达式,允许为c语句中的任何类型,若表达式的值不是整数则自动取整。 (2)C1,C2,Cn是常量表达式,它们必须与Switch后面括号内的表达式同一类型并且其值要互不相同。 (3)若希望执行完一组操作语句后退出Switch结构,可以用break语句终止Switch的继续执行。Break的作用中断正在执行的语句。在switch语句中的作用是:执行某个语句组后,将退出该switch语句。如果省略了break语句,则执行完某个语句组后,将继续执行其后的所有语句组。,(4)Case和defau

11、lt后可面得操作语句可以是简单语句,也可以是复合语句,且这里的复合语句不必加 (5)switch可以嵌套 (6)多个case可共用一组执行语句如:case A:case B:case C:printf(“score60n”);break;,例: 编写一个程序,输出给定的某年某月的天数。根据历法,第1、3、5、7、8、10、12月的每月为31天,第4、6、9、11月的每月为30天,2月份闰年为29天,平年为28天。判断闰年的规则是:如果此年号可以被4整除,但不能被100整除,则是闰年;或者该年份可以被400整除,则是闰年;否则不是闰年。 分析: (1)如果x能被y整除,则余数为0,即如果x%y=

12、0,则表示x能被y整除; (2)首先设置一个标志leap,当year能被400整除,leap值设为1,表示该年为闰年,否则leap值设为0,表示该年不是闰年; (3)然后根据leap的值确定二月份的天数,#include “stdafx.h“ #include main() int year,mon,days,leap; printf(“年,月:“); scanf(“%4d,%2d“, ,【例4-5】 编写一个程序,用来进行十进制和十六进制,十进制和八进制之间的相互转换。 分析: 对于十进制和十六进制,十进制和八进制之间的相互转换看 起来比较复杂,但可以通过数值输出时的格式描述来实现。 %d格

13、式符输出十进制数;%o格式符输出八进制数;%x格式符输出十六 进制数;所以,当输入一个数值时,按需要的转换数的数制输出就达到 目的了。 对于设计要求来说,各种数制间的转换要求是任意的,可以通过设置选 择开关变量choice,由用户输入14之间的某一个数字,实现进行十- 十六、十六-十、十-八、八-十之间的转换,当然还可以设置更 多的选择达到如八-十六等转换。 开关变量choice与switch语句联合使用就达到程序设计的要求了。,/* decimal:十进制,hexadecimal:十六进制,octal:八进制 */ #include main() int choice,num; printf

14、(“n*conversion*“);printf(“n* 1. decimal to hexadecimal *“);printf(“n* 2. hexadecimal to decimal *“);printf(“n* 3. decimal to octal *“);printf(“n* 4. octal to decimal *“);printf(“n*“);printf(“nenter your choice(14): “);scanf(“%d“,&choice);switch(choice) case 1: printf(“nenter decimal number: “);scanf

15、(“%d“,&num);printf(“%d in hexadecimal is :%x“,num,num);break;case 2: printf(“nenter hexadecimal number: “);scanf(“%x“,&num);printf(“%x in decimal is :%d“,num,num);break;case 3: printf(“nenter decimal number: “);scanf(“%d“,&num);printf(“%d in octal is :%o“,num,num);break;case 4: printf(“nenter octal

16、number: “);scanf(“%o“,&num);printf(“%o in decimal is %d“,num,num);break;default: printf(“n your choice is error! “);,【例4-6】编写一个程序,计算购货款。 设某商店售货,按购买货物的款数多少分别给予不同的优惠 折扣: 购货不足250元的,没有折扣; 购货满250元,不足500元,折扣5%; 购货满500元,不足1000元,折扣7.5%; 购货满1000元,不足2000元,折扣10%; 购货满2000元,折扣15%。 分析: 首先要定义一个变量用来存放购买货物的款数; 然后根据款

17、数满足的条件决定使用哪个优惠折扣; 最后计算出折扣后的款数并输出。,#include “stdafx.h“ #include main( ) float m,d,amount; printf(“nEnter your money for buying :“); scanf(“%f“, ,【例4-7】编一程序将以英寸为单位表示的长度转换为以厘米为单位表示的长度;或者反之,从厘米转换为英寸。 已知:1英寸=2.54厘米 分析: 实现英寸和厘米之间的相互转换,根据以上的单位转换规律 可以实现; 用c语言实现这一转换,if结构和switch结构都可以实现控制 语句的分支; 根据设计要求,设置一个开关变

18、量select用来选择实现的转换 种类; select=1表示将英寸转换为厘米,select=2表示将厘米 转换成英寸。 最后根据换算公式求解,并输出结果。,#include “stdafx.h“ #include main( ) int select;float leng,r=2.54;printf(“nPlease choose (1:inch to cm,2:cm to inch) : “);scanf(“%d“, ,#include “stdafx.h“ #include main( ) int select;float leng,r=2.54;printf(“nPlease choose (1:inch to cm,2:cm to inch) : “);scanf(“%d“,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报