版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章选择结构程序设计
掌握关系表达式和逻辑表达式的组成及运算理解选择结构(分支结构)程序设计的概念掌握if语句、switch语句的基本结构及执行过程学会简单的选择结构程序设计4.1案例:红绿灯【例4-1】十字路口倒计时牌中时间结束后显示红灯还是绿灯?当前是红灯?显示绿灯显示红灯是否4.1案例:红绿灯#include<stdio.h>voidmain(){ intcolor; intred=1; /*用变量red存储1来代表红灯*/ printf(“Pleaseinputcolor(1-red,2-green):”); scanf(“%d”,&color); if(color==red) printf(“Pleasedisplaygreen\n”); elseprintf(“Pleasedisplayred\n”);}4.2关系运算符与关系表达式4.2.1关系运算符关系运算符>、>=、<、<=
==、!=
优先级结合性左结合a>b<c 等价于 (a>b)<ca!=b>c 等价于 a!=(b>c)
==、!=>、>=、<、<=算术运算符C语言处理判断和输出判断结果示意图C语言非01、-2、9010?014.1关系运算符与关系表达式4.2.2关系表达式表达式关系运算符表达式a>b'a'+1!='b'3.1415==3.14163>4<5a>=100a>994.3逻辑运算符与逻辑表达式4.3.1逻辑运算符逻辑运算符!(逻辑非)、&&(逻辑与)、||(逻辑或)4.3逻辑运算符与逻辑表达式优先级结合性非运算符(!)的结合性为右结合;与运算符(&&)和或运算符(||)的结合性为左结合。==、!=>、>=、<、<=算术运算符&&!、++、--等||【例4-2】分析下面程序段的运行结果
#include<stdio.h>voidmain(){ charc; inta,b; c='A'; a=1; b=2; printf("c>\'B\'=%d\n",c>'B'); printf("a>b>2=%d\n",a>b>2);}4.4逻辑运算符的短路现象若&&运算符左边的表达式为假(或0),则其右边的表达式将不再运算,整个表达式的值必然为假若||运算符左边的表达式为真(或非0值),则其右边的表达式将不再运算,整个表达式的值必然为真3<5||++bABCD【例4-3】测试短路现象#include<stdio.h>voidmain(){ inta,b; a=b=0; a||++b;printf("%d,%d\n",a,b); a=b=1; a||++b;printf("%d,%d\n",a,b); a=b=0; a&&++b;printf("%d,%d\n",a,b); a=b=1; a&&++b;printf("%d,%d\n",a,b);}4.5if语句4.5.1单分支if语句if(表达式)语句;【例4-4】从键盘输入一个整数,判断是否是偶数,若是,则输出“Yes”。#include<stdio.h>voidmain(){ inta; printf("Pleaseinputa:"); scanf("%d",&a); if(a%2==0) printf("Yes\n");}4.3if语句4.5.2双分支if语句形式为:if(表达式)
语句1;else
语句2;【例4-5】从键盘输入一个整数,判断是否是偶数,若是,则输出“Yes”,否则输出“No”#include<stdio.h>voidmain(){ inta; printf("Pleaseinputa:"); scanf("%d",&a); if(a%2==0) printf("Yes\n"); else printf("No\n");}【例4-6】从键盘输入两个整数,输出其中最大者#include<stdio.h>voidmain(){ inta,b; printf("Pleaseinputa,b:"); scanf("%d,%d",&a,&b); if(a>b) printf("max=%d\n",a); else printf("max=%d\n",b);}4.5.3多分支选择结构多分支选择结构的if语句一般形式为:if(表达式1)语句1;
else
if(表达式2)语句2;…
else
if(表达式n)语句n;
else
语句n+1;4.5.3多分支选择结构流程图语句1表达式1语句1表达式1语句1表达式1语句n+1000非0非0非04.6案例:打车费用的计算计算方式为:3公里以内8元;3公里以上0车型每公里1.5元,1车型每公里2元。#include<stdio.h>voidmain(){ inttaxiType; floats; floatmoney; printf("Inputtaxitype(0,1):"); scanf("%d",&taxiType); printf("Inputs:"); scanf("%f",&s); if(s<3) money=8; else if(taxiType==0) money=8+(s-3)*1.5; else money=8+(s-3)*2; printf("money=%.2f\n",money);}4.7if语句的嵌套if(表达式)
if(表达式) 语句1;
else
语句2;else
if(表达式) 语句3;
else
语句4;
C语言规定else总是和其前面最近的没有else配对的if配对。4.8案例:闰年的判断【例4-8】输入一个正整数作为年份,编程判断该年是不是闰年。若是输出“YES”,否则输出“NO”。
【分析】满足下面条件之一即为闰年:能被4整除,但不能被100整除。能被400整除。#include"stdio.h"voidmain(){ intyear; scanf("%d",&year); if(year%400==0)printf("Yes\n"); else if(year%4==0&&year%100!=0)printf("Yes\n"); else printf("NO\n");}year%400==0||(year%4==0&&year%100!=0)4.9条件运算符和条件表达式?:
表达式1?
表达式2:表达式3if(x>y)max=x;elsemax=y;max=x>y?x:y优先级右结合性:a>b?a:c>d?c:d等价于a>b?a:(c>d?c:d)【例4-9】用条件运算符输出3个整数中的最大者#include<stdio.h>voidmain(){ inta,b,c,max; printf("inputa,b,c:"); scanf("%d,%d,%d",&a,&b,&c); max=a>b?a:b; max=c>max?c:max; printf("max=%d\n",max);}4.10switch语句switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}【例4-10】输入一个十进制数,根据输入的数输出所对应的英文星期单词,若所输入的数小于1或大于7,则输出“Error”。
#include<stdio.h>voidmain(){ inta; printf("Inputa:"); scanf("%d",&a); switch(a) { case1:printf("Monday\n"); case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("Error\n");}}4.10switch语句switch(表达式){
case常量表达式1:语句1;break;
case常量表达式2:语句2;break;…
case常量表达式n:语句n;break;
default:语句n+1;}修改后的例4-10程序#include<stdio.h>voidmain(){ inta; printf("Inputa:"); scanf("%d",&a); switch(a) { case1:printf("Monday\n");break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; default:printf("Error\n");break; }}【注意】switch后跟的“表达式”允许为任何类型的表达式,其数据类型和case后面的常量表达式的数据类型一致。每一个case后的各常量表达式的值不允许重复,否则会报错。每一个case后允许有多条语句,可以不用花括号“{}”括起来。case和default子句出现的先后顺序可以变动,不会影响程序的执行结果。default子句也可以省略不用。多个case可以共用一组执行语句。例如:…case'A':case'B':case'C':printf("Pass\n");break;关于break4.11案例:判断输入的整数是否含有数字6
【例4-11】输入一个100以内的十进制正整数,判断该数是否包含数字字符“6”。若是输出“Yes!”,否则输出“No!”。#include<stdio.h>voidmain(){inta; printf("Inputa:"); scanf("%d",&a); if(a==6||(a%10==6||a/10==6)) printf("Yes!\n"); else printf("No!\n");}4.12案例:三个数的排序【例4-12】输入3个数,按从小到大的顺序输出。#include"stdio.h"voidmain(){ inta,b,c,t; printf("Inputa,b,c:"); scanf("%d,%d,%d",&a,&b,&c); if(a>b){t=a;a=b;b=t;} if(b>c){t=b;b=c;c=t;} if(a>b){t=a;a=b;b=t;} printf("%d<=%d<=%d\n",a,b,c);}4.13案例:分数等级的划分【例4-13】将一个百分制的成绩(设是整数)转化成5个等级90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。
例如,输入75,则显示C。
【分析】先判断输入的数据是否在合理的分数范围(0~100)内,然后再判断是哪个分数段:90分以上输出A,80~89分输出B,70~79分输出C,60~69分输出D,否则显示E。4.13案例:分数等级的划分#include<stdio.h>voidmain(){ inta; printf("Inputa:"); scanf("%d",&a); if(a<0||a>100) printf("Inputdataerror\n"); else if(a>=90) printf("A\n"); else if(a>=80) printf("B\n"); else if(a>=70) printf("C\n"); else if(a>=60) printf("D\n"); else printf("E\n");}【分析】使用switch语句,当然最笨的办法是每一个分数一个case分支,将需要101个分支,显然这种程序不值得推荐。那么有没有简化的办法呢?
其实,任何好的算法都是对问题分析和提炼的结果。题目中60分以上都是每10分一个层次,60分以下是一个层次。只要把每个层次的共性找到就容易找到简化程序的办法了。以60~69为例。每个分数的十位数都是6,对于该层次的成绩,整除10的结果都是6。同样对于70~79、80~89、90~99都是一样。而69分以下的成绩整除10的结果都小于6。
【例4-13】将一个百分制的成绩(设是整数)转化成5个等级(用switch语句完成)#include<stdio.h>voidmain(){ inta; printf("Inputa:");scanf("%d",&a); if(a<0||a>100)printf("Inputdataerror\n"); else switch(a/10) { case10: case9:printf("A\n");break; case8:printf("B\n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手术室准备与器械摆设制度
- 学生心理辅导方案计划
- 广告方案策划范文
- 财务咨询服务合同范文
- 售后服务流程
- 少先队中队委工作职责
- 城市公共卫生体系建设制度
- 2024年智能电网技术研发合作合同
- 小学“双减”政策的课后服务制度
- 机房应急响应方案
- 2024年中国华电集团招聘笔试参考题库含答案解析
- 中国心血管病预防指南(2017)
- 空调维保投标方案(技术方案)
- 【教学创新大赛】《数字电子技术》教学创新成果报告
- 咖啡因提取的综合性实验教学
- GONE理论视角下宜华生活财务舞弊案例分析
- 初中语文默写竞赛方案
- 2023电力建设工程监理月报范本
- 汽车空调检测与维修-说课课件
- 氨水浓度密度对照表
- 白雪歌送武判官归京公开课一等奖课件省课获奖课件
评论
0/150
提交评论