版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
选择结构程序设计本章重点if语句的基本形式以及使用。if语句的嵌套。条件表达式。switch语句的形式以及使用。break语句在switch语句中的使用。2本章难点if语句的嵌套形式。switch语句的执行流程34.1if语句if语句也叫条件语句,用来判断给定的条件的真假,并根据条件判断的结果(真或假)从给定的两个操作中选择其中的一个执行。44.1.1if语句的3种基本形式1.两分支if语句if(表达式)语句1;else语句2;5需要注意的是,语句1和语句2是“互斥”的,当其中一个语句执行时,另一个语句就不可能执行。作为条件的“表达式”可以是任意类型的表达式,一般是关系表达式或逻辑表达式6【例4.1】所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153就是一个水仙花数,因为153=13+53+33。输入一个三位整数,判断该数是否是“水仙花数”。
7#include<stdio.h>intmain(){intn,m,a,b,c;printf("请输入一个三位整数:");scanf("%d",&n);a=n%10;b=n/10%10;c=n/100%10;m=a*a*a+b*b*b+c*c*c;if(n==m)printf("%d是水仙花数.\n",n,m);elseprintf("%d不是水仙花数.\n",n,m);return0;}82.单分支if语句if(表达式)语句1;这是if语句的简化形式。该语句执行时,先计算作为条件的“表达式”的值,如果该值为真(不等于0),那么就执行紧跟在其后的语句1,否则就什么都不做。9注意,如果if结构中的“语句”部分不是单个语句,而是一个语句序列的话,要使用一对花括号{}把这个语句序列括起来,即把它作为一个复合语句来处理。10【例4.2】输入三个整数a、b、c,将它们按照从小到大的顺序排序。【分析】这是一个简化的排序算法。基本思想就是:把三个数分别两两比较,若前者大于后者,则将两数互换。11【程序】#include<stdio.h>intmain(void){inta,b,c,t;printf("请输入三个整数:\n");scanf("%d%d%d",&a,&b,&c);if(a>b)//交换a和b的内容,下同{
t=a;
a=b;
b=t;}if(b>c){
t=b;
b=c;
c=t;}if(a>b)//注意,这里为什么又一次比较a和b呢?{
t=a;
a=b;
b=t;}printf("排序后的结果是:a=%d,b=%d,c=%d\n",a,b,c);return0;}123.if…else…if语句if(表达式1)
语句1;elseif(表达式2)
语句2;elseif(表达式3)
语句3;else
语句4;13这种if…else…if语句在执行时,首先计算并测试表达式1的值,若为真,则执行语句1;否则,再计算并测试表达式2的值,若为真,则执行语句2;否则,接着计算并测试表达式3的值,若为真,则执行表达式3;否则,当这3个表达式的值均不为真时,则执行语句4。144.1.2if语句的嵌套if语句的嵌套指的是在一个if语句中又包含一个或多个if语句。一般形式如下:if(表达式1)
if(表达式2)语句1;
else语句2;else
if(表达式3)语句3;
else语句4;在if语句的嵌套结构中,要特别注意if和else的匹配关系。C语言规定:每一个else都与在同一分程序中的尚未匹配的最近的if匹配。15if(表达式1)if(表达式2)
语句1;else
语句2;该if语句等价于:if(表达式1){
if(表达式2)
语句1;
else
语句2;}16如果要让else与if(表达式1)匹配,则程序应该调整为:if(表达式1){
if(表达式2)
语句1;}else
语句2;17【例4.3】输入一个年份值,判断这一年是否为闰年。【分析】首先给出闰年的判别条件,即能够被4整除并且不能被100整除的年份是闰年,或者,能够被400整除的也是闰年。此程序的关键就是要准确描述出判别是否为闰年的表达式。18算法如下。(1)给变量flag赋值为0。flag的值(或称为状态)起着决定动作的标志作用。在程序中恰当地使用状态变量(或标志变量)是程序设计的技巧之一。(2)输入一个年份值给变量year。(3)如果year能够被4整除并且不能被100整除或者year能够被400整除,则令flag等于1。(4)如果flag等于1,则输出该年为闰年,否则就输出该年不是闰年。19【程序】#include<stdio.h>intmain(void){intyear,flag=0;//flag初始化为0printf("请输入一个年份:");scanf("%d",&year);if(year>0){if((year%4==0&&year%100!=0)||year%400==0)
flag=1;if(flag==1)
printf("%d年是闰年\n",year);else
printf("%d年不是闰年\n",year);}else
printf("输入的年份不合理!\n");return0;}204.1.3条件表达式条件表达式是一种以条件运算符?:为运算符、以3个有不同类型要求的子表达式作为其运算分量的三目表达式(?:运算符也是C语言中唯一的三目运算符)。条件表达式的一般形式为:表达式1?表达式2:表达式321【说明】(1)条件表达式的执行顺序是,先计算并判断表达式1的值,若为真(非0),则求解表达式2并把表达式2的值作为整个条件表达式的值;若表达式1的值为假(等于0),则求解表达式3并把表达式3的值作为整个条件表达式的值。(2)注意条件运算符和其他运算符的优先级别高低的问题。比如:在t=x<y?x:y中,由于条件运算符的优先级高于赋值运算符,因此要先进行条件运算再进行赋值运算,即相当于t=(x<y?x:y)。(3)条件运算符的结合方向为“自右至左”。比如x>y?x:m>n?m:n相当于x>y?x:(m>n?m:n)。22(4)条件表达式语句可以用来代替简单的if…else语句。例如,“t=x<y?x:y;”可以用来代替“if(x<y)t=x;elset=y;”。234.2switch语句24switch语句也叫开关语句,是一个多分支语句,用来实现多分支选择结构。switch语句的一般形式为:switch(表达式){
caseE1:
语句块1;
break;
caseE2:
语句块2;
break;
[default:
默认语句块;
break;]}语句块X;25switch语句流程图26【说明】(1)switch后面括号内的“表达式”必须是整数类型的表达式。(2)case后面紧跟的E1、E2必须是整型常量或整型常量表达式,或是与整型兼容的表达式。C语言要求每一个case后的常量表达式必须互不相同。(3)switch语句执行时,先计算“表达式”的值,如果该值与某个case后紧跟的常量表达式的值相等,那么就从该case分支的语句开始往后执行。(4)如果所有的case后的常量表达式都与“表达式”的值不相同,则接着查找后面有无带default标号的分支,若有,则从default标号后面的语句往后执行,直至switch结构的结束。若无,则执行switch语句后面的语句块X。(5)如果在某个分支的执行过程中遇到break语句,则终止整个switch语句的执行。27(6)多个case语句可以共用一组执行语句,如:switch(x){case'A':case'B':case'C':printf("OK\n");break;}此例中,无论x的值为'A','B'或是'C',都是执行同一个语句序列。28【例4.4】使用switch语句编程实现下面的功能:给出一个百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'。90分以上为'A',大于或等于80分并且小于90分为'B',大于或等于70分并且小于80分为'C',大于或等于60分并且小于70分为'D',60分以下为'E'。【分析】用变量x表示成绩,为了把x所属的成绩段和某个整数对应起来,需要先执行(int)x/10。29【程序】#include<stdio.h>intmain(void){floatx;intrank;printf("请输入一个成绩值:");scanf("%f",&x);switch((int)x/10){case10:case9:printf("成绩等级为A\n");
break;case8:printf("成绩等级为B\n");break;case7:printf("成绩等级为C\n");break;case6:printf("成绩等级为D\n");break;case5:case4:case3:case2:case1:ca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版版权买卖合同的交付与支付条款2篇
- 电动门订购安装合同
- 代为垫付研发费用的协议(04版)
- VI设计合同书范本
- 二手房地产交易信息化服务合同
- 北京市某打桩公司2024年度承包合同
- 2024年度计算机软件开发与应用合同2篇
- 二零二四年度物业管理服务合同(综合版)
- 二零二四年风力发电项目开发与合作合同
- 二零二四年度建筑材料采购与贷款协议3篇
- YB∕T 081-2013 冶金技术标准的数值修约与检测数值的判定
- 视网膜激光治疗课件
- 学校体育测负荷密度表
- 安全生产执法课件
- 小学英语家长会课件(完整版)
- AI人工智能(PPT页)(共37张PPT)
- 安全文明施工措施费使用计划表完整优秀版
- 企业安全教育培训的调研报告13篇
- 二年级上册道德与法治10《我们不乱扔》说课稿二篇
- 手术物品准备完善率PDCA课件
- 小学数学西南师大五年级上册七总复习小数乘除法复习课教案
评论
0/150
提交评论