程序设计基础(C语言)(第2版)(微课版) 课件 第4章 选择结构_第1页
程序设计基础(C语言)(第2版)(微课版) 课件 第4章 选择结构_第2页
程序设计基础(C语言)(第2版)(微课版) 课件 第4章 选择结构_第3页
程序设计基础(C语言)(第2版)(微课版) 课件 第4章 选择结构_第4页
程序设计基础(C语言)(第2版)(微课版) 课件 第4章 选择结构_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

第4章选择结构程序设计目录CONTENTS简单选择结构多分支选择结构选择结构程序举例4.14.24.3智能控制项目实践附简单选择结构4.1简单选择结构单分支if语句双分支if语句if语句分类if语句分类01if语句是条件选择语句,它通过给定的条件来进行判断,从而决定要执行的操作03单分支if语句0201双分支if语句多分支if语句单分支if语句02格式:if(表达式)语句;功能:首先计算表达式的值。若表达式的值为“真”(非0),则执行语句;若表达式的值为“假”(为0),则直接转到此if语句的下一条语句去执行。例如4.1中:if(a>0)printf("a=%d\n",a);如果a>0为真,则输出a的值,否则执行后面的语句。单分支if语句执行流程图例4.2:从键盘输入两个整数,输出其中的较小数运行结果:Inputtwonumbers:-2345min=-23#include"stdio.h"intmain(){inta,b,min;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);

min=a;

if(min>b)min=b;printf(“min=%d\n",min);return0;

}例4.3:小明的姐姐在假日旅行社工作,旅行社为了争取更多的游客,给出优惠措施:团购五人(及以上),团费8折。姐姐请小明帮忙,做一个可以根据输入的人数和团费,计算实际支付团费的程序。小明该怎么写这个程序呢?运行结果:输入人数p=6↙团费c=430↙总费用为:344.00#include<stdio.h> intmain() { intp; floatc; printf("输入人数p="); scanf("%d",&p); printf("输入团费c="); scanf("%f",&c);

if(p>=5) c=c*0.8; printf(“每人费用为:%.2f\n",c); return0; } 双分支if语句03格式:if(表达式)

语句1;else语句2;功能:首先判断表达式的值,若表达式的值为“真”(非0),则执行语句1;否则,执行语句2。例如:if(x>y)printf(“%d”,x);else

printf(“%d”,y);如果如果x>y为真,则打印x的值,否则x>y为假,执行else语句,打印y值。

双分支if语句执行流程图例4.4:用双分支if语句形式改写例4.2为:#include"stdio.h"intmain(){inta,b,min;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);

min=a;

if(min>b)min=b;printf("min=%d\n",min);return0;

}#include"stdio.h"intmain(){inta,b;printf("inputtwonumbers:");scanf("%d%d",&a,&b);

if(a>b)printf(“min=%d\n",b);else

printf(“min=%d\n",a);return0;}例4.5:判断一个正整数的奇偶性,并输出结果分析:一个数如果能被2整除,则是偶数,否则是奇数。我们用对2取余的方法来验证这个是否为偶数。若n%2余数为0,说明n是一个偶数,或n%2余数不为0,则n是一个奇数。#include“stdio.h”intmain(){intn;printf(“请输入一个正整数:");/*提示输入一个数*/scanf("%d",&n);if(n%2==0)/*若n%2余数=0,则说明数n是一个偶数*/

printf(“%d是偶数!\n”,n);else

printf(“%d是奇数!\n”,n);return0;}例:从键盘输入一个两位正整数,判断该数中是否含有数字3,若是输”YES”,否则输出”NO”:提示:假设该数为num个位:num%10十位:num/10#include"stdio.h"intmain(){intnum,ge,shi;printf("请输入一个两位正整数:");scanf("%d",&num);ge=num%10;shi=num/10;

if(ge==3||shi==3) printf("YES\n"); else printf("NO\n");return0;}多分支选择结构4.2

多分支选择结构多分支if语句多分支switch语句if语句的嵌套多分支if与switch语句的比较多分支if语句01多分支if语句一般形式为:if(表达式1)

语句1;elseif(表达式2)

语句2;

……elseif(表达式n)

语句n;else

语句n+1;

多分支if语句执行流程图注意:每一个else和if中间有空格例4.7:输入分数,要求为0~100的整数,输出相应的成绩等级。 #include<stdio.h> intmain() { intscore; chargrade; printf("请输入你的分数(0~100):"); scanf("%d",&score); if(score>=90) grade='A'; elseif(score>=80) grade='B'; elseif(score>=70) grade='C'; elseif(score>=60) grade='D'; else grade='E'; printf("你的成绩等级是:%c\n",grade); return0; }(1)输入90~100,输出A。(2)输入80~89,输出B。(3)输入70~79,输出C。(4)输入60~69,输出D。(5)输入0~59,输出E。例4.8:某购物网站推出以下优惠促销活动:购物满50元,打9折;购物满100元,打8折;购物满200元,打7折;购物满300元,打6折;编程计算当购物满s元时,实际付款额为多少?运行结果:输入消费额:623↙实际付款额为:373.80元#include<stdio.h>intmain(){floats,f;printf("输入消费额:\n");scanf("%f",&s);

if(s<50)f=s;elseif(s<100)f=s*0.9;elseif(s<200)f=s*0.8;elseif(s<300)f=s*0.7;elsef=s*0.6;printf("实际付款额为:%.2f元\n",f);return0;}if语句的嵌套02

If语句用于条件执行,一个或者多个条件中,哪个条件满足就执行该条件下的语句。但是当一个条件满足时还需要同时满足另外的一个或者多个条件时怎么办呢?

比如:对于任意的整数,判断其能否被3整除同时被5或者7整除。逻辑与&&和逻辑或||num%3==0&&(num%5==0||num%7==0)嵌套if语句if语句的嵌套02嵌套if语句:

if(表达式1) if(表达式2)

语句1; else

语句2;

语义是:如果表达式1的值为真-则判断表达式2,表达式2为真,则执行语句1,否则执行语句2。

语句1和语句2可以是复合语句。C语言中规定:在嵌套if语句中,if和else按照“就近配对”的原则配对,即相距最近且还没有配对的一对if和else首先配对。if语句的嵌套02例如:#include"stdio.h"intmain(){intn=3,z,a=5,b=2;

if(n<0)

if(a>b) z=a;

else z=b;printf("z=%d",z);return0;}#include"stdio.h"intmain(){intn=3,z,a=5,b=2;

if(n<0){if(a>b) z=a;}else z=b;

printf(“z=%d”,z);return0;}报错,无输出Z=2if语句的嵌套02例4.9:对于任意的整数,判断其能否被3整除同时被5或者7整除,若成立输出”YES”,否则输出“NO”。#include<stdio.h>intmain(){intnum;printf("pleaseinputnum:");scanf("%d",&num);if(num%3==0){if(num%5==0||num%7==0)printf("yes\n");elseprintf("no\n");}elseprintf("no\n");return0;}运行结果:pleaseinputnum:344↙no请按任意键继续...pleaseinputnum:63↙yes请按任意键继续...if语句应注意的问题(1)if表达式可以是逻辑表达式、关系表达式、赋值表达式,也可以为一个变量;(2)if(k=9),if(c)都是合法的,只要是非0即可执行对应语句;(3)表达式用括号括起来,后面不能加分号,后面跟的语句要加分号;(4)如果条件后面的语句不是单语句,需要用{}括起来,}后面不能加分号;(5)嵌套关系中尽量按层次缩进,增加程序可读性。22多分支switch语句03应用if条件语句可以很方便地实现条件分支,通常我们使用if语句来进行模糊条件匹配,但是当我们进行多个精确匹配时,如果用if语句来解决问题,程序结构会显得很复杂,甚至凌乱。switch语句尤其擅长处理一些分支较多且很有规律的精确匹配问题,代码描述起来不仅方便而且直观。说明多分支switch语句03switch语句一般形式为:switch(表达式){case常量1:语句1;[break;]case常量2:语句2;[break;]……case常量n:语句n;[break;]default:语句n+1;}

switch多分支选择结构流程图main(){chargrade;scanf(“%c”,&grade);switch(grade){case‘A’:printf(“85---100\n”);case‘B’:printf(“70--84\n”);case‘C’:printf(“60---69\n”);case‘D’:printf(“<60”);default:printf(“Error\n”);}}input‘B’output:

70---8460--69<60

Errorprintf(“70—84”);break;实例:2503多分支switch语句#include<stdio.h>intmain(){chargrade;scanf(“%c”,&grade);switch(grade){case‘A’:printf(“85---100\n”);break;case‘B’:printf(“70--84\n”);break;case‘C’:printf(“60---69\n”);break;case‘D’:printf(“<60”);break;default:printf(“Error\n”);}

return0;

}input‘B’output:

70---842603多分支switch语句(1)表达式只能是顺序类型(除了实型以外的简单类型),它的一个取值只能在所有值表中出现一次。switch(a){case1:printf(“level1”);break;case2:printf(“level2”);break;case3:printf(“level3”);break;case4:printf(“level4”);break;case5:printf(“level5”);break;case2:printf(“level0”);break;}在值表中,2出现了两次27说明03多分支switch语句(2)如果某个分支语句结束后,出现了break语句,则程序跳出分支语句;如果某个分支没有出现break语句,则会自动执行后续的语句。switch(a){case1:printf(“level1\n”);break;case2:printf(“level2\n”);case3:printf(“level3\n”);case4:printf(“level4\n”);case5:printf(“level5\n”);break;case0:printf(“level0\n”);break;}当a=2时:输出:level2level3level4level528说明03多分支switch语句(3)多个分支可以共用一组语句,即某些分支的语句可以为空。switch(a){case1:printf(“level1\n”);break;case2:case3:case4:printf(“level4\n”);case5:printf(“level5\n”);break;case0:printf(“level0\n”);break;}当a=2、a=3、a=4时,执行相同的语句。29说明03多分支switch语句(4)值表中的排列无大小顺序的差别,值表中的类型必须和表达式类型相同。switch(a){case1:printf(“level1\n”);break;case4:printf(“level4\n”);case2:printf(“level2\n”);case3:printf(“level3\n”);case5:printf(“level5\n”);break;}当a=2、a=3、a=4时,执行相同的语句。30说明03多分支switch语句例:给定月份,求该月共有多少天(假设2月都为28天)。#include"stdio.h"intmain(){ intm; printf("请输入月份:"); scanf("%d",&m); switch(m) {case1: case3: case5: case7: case8: case10: case12:printf("%d月是31天!\n",m);break; case2:printf("%d月是28天!\n",m);break; default:printf("%d月是30天!\n",m); } return0;}选择结构程序设计举例05多分支if语句与switch语句的比较04多分支if结构和switch结构都可以用来解决多分支问题,两个语句使用原则如下:(1)多分支if语句的条件表达式比较直接,switch语句表达式需要构造。(2)多分支if语句适用于模糊条件匹配,如要判断一个值是否处在某个区间;而switch适用于精确匹配。(3)分支较少时,if效率比switch高;分支较多且取值有规律时,适合采用switch。(4)switch的效率一般比if要高,switch的表达式只计算一次选择结构程序设计实例4.3

例4.12:3只小猪——输入3只小猪的体重,比较后按从大到小的顺序输出。运行结果:请任意输入3只小猪的体重(0~30千克,空格分隔):21916↙从大到小排列为:21169#include<stdio.h>intmain(){

inta,b,c,t;

printf("请任意输入3只小猪的体重(0~30千克,空格分隔):\n");

scanf("%d%d%d",&a,&b,&c);

if(a<b){t=a;a=b;b=t;}//用了3个并列的if语句解决问题

if(a<c){t=a;a=c;c=t;}

if(b<c){t=b;b=c;c=t;}

printf("从大到小排列为:%d%d%d\n",a,b,c);

return0;}选择结构程序设计举例05例4.13:输入两个操作数和运算符,计算其值。假设两个操作数均为整数且运算符有+、-、*、/。运行结果:45+↙4+5=9请按任意键继续...30/↙Dividedbyzero!请按任意键继续...248/↙24/8=3请按任意键继续...73/↙7/3=2.33请按任意键继续...选择结构程序设计举例05#include<stdio.h> intmain() { inta,b; charc; scanf("%d%d%c",&a,&b,&c);

switch(c) {

case'+':printf("%d%c%d=%d\n",a,c,b,a+b);break; case'-':printf("%d%c%d=%d\n",a,c,b,a-b);break;

case'*':printf("%d%c%d=%d\n",a,c,b,a*b);break;

case'/':

{if(b==0) //当分母为0时

printf("Dividedbyzero!\n"); else

{ if(a%b==0)//当a能被整除时

printf("%d%c%d=%d\n",a,c,b,a/b);

else//当a不能被整除时

printf(“%d%c%d=%d\n”,a,c,b,(double)a/b); }

}break;

default:printf("InputError!\n");}

return0; }

选择结构程序设计举例例4.14:输入某年某月某日,判断这一天是这一年的第几天。运行结果:pleaseinputyear,month,day202035↙itisthe65thday!pleaseinputyear,month,day202135↙itisthe64thday!#include<stdio.h> intmain() { intday,month,year,sum,leap; printf("请输入年、月、日\n"); scanf("%d%d%d",&year,&month,&day);

switch(month)/*先计算某月以前月份总天数*/ { case1:sum=0;break; case2:sum=31;break;

case3:sum=31+28;break; case4:sum=31+28+31;break; case5:sum=2*31+28+30;break; case6:sum=3*31+28+30;break;

case7:sum=3*31+28+2*30;break; case8:sum=4*31+28+2*30;break; case9:sum=5*31+28+2*30;break; case10:sum=5*31+28+3*30;break; case11:sum=6*31+28+3*30;break; case12:sum=6*31+28+4*30;break; default:printf("dataerror"); } sum=sum+day;/*再加上某天天数*/ {

if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闫年*/

leap=1;

else

leap=0; } if(leap==1&&month>2)

sum++; printf("itisthe%dthday!",sum); return0;}

05选择结构程序设计举例例4.15:自动贩卖机:1、2或3代表不同饮品,显示用户选择了什么饮品。运行结果:选择一款饮品1.Coffee2.Tea3.Coca-Cola请输入1~3的整数:2↙TheTeawaschosen#include<stdio.h>

#include<stdlib.h>

intmain(){ intdrink; printf("选择一款饮品\n"); printf("1.Coffee\n"); printf("2.Tea\n"); printf("3.Coca-Cola\n"); printf("请输入1~3的整数:"); scanf("%d",&drink); system("cls");//清屏,使用时需包含头文件stdlib.h switch(drink) { case1: printf("TheCoffeewaschosen");break; case2: printf("TheTeawaschosen");break; case3: printf("TheCoca-Colawaschosen");break; default: printf("\nerror!\n");break; } printf("\n"); return0;

} 05用大模型了解历史上关于诚信的故事选择结构程序设计举例例4.16:铁路运货的费用与里程数有关:不足50千米,1元/(吨·千米);大于等于50千米、小于100千米,0.9元/(吨·千米);大于等于100千米、小于200千米,0.8元/(吨·千米);大于等于200千米,0.7元/(吨·千米)。计算里程数为s千米时的运费。运行结果:输入里程数:128.4↙117.72#include<stdio.h> intmain() {

floats,total;

printf("输入里程数:");

scanf("%f",&s);

if(s>0&&s<50)//注意关系与逻辑运算符的用法

total=s*1;

elseif(s>=50&&s<100)

total=50*1+(s-50)*0.9;

elseif(s>=100&&s<200)

total=50*1+50*0.

温馨提示

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

最新文档

评论

0/150

提交评论