ch4选择分支结构.ppt

上传人:s****8 文档编号:67210257 上传时间:2022-12-24 格式:PPT 页数:48 大小:613.50KB
返回 下载 相关 举报
ch4选择分支结构.ppt_第1页
第1页 / 共48页
ch4选择分支结构.ppt_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《ch4选择分支结构.ppt》由会员分享,可在线阅读,更多相关《ch4选择分支结构.ppt(48页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、选择分支程序设计选择结构语句是指程序在运行中,能依据运行时某些变量或表达式的值,确定哪些程序段被执行以及哪些程序段不被执行。主要介绍两种选择结构语句:if语句和switch语句。9.5.1 选择性问题选择性问题现假设要计算函数现假设要计算函数y(x)y(x)的值,函数表示如下:的值,函数表示如下:-1 (x0)问题:在编程过程中,仅靠程序的顺序结构是否能完成?程序的书写永远是顺序的。解决的办法:必须实现对顺序书写的语句进行有选择的执行,这就是选择结构语句的功能。main()int x,y;printf(“请输入x的值:”);scanf(%d,&x);if(x0)y=1;else if(x=0)

2、y=0;else y=-1;printf(y=%dn,y);也可将if 语句改为:if(x=0)if(x0)y=1;else y=0;else y=-1;if条件语句的三种形式 if条件语句的三种形式:1 不带else的if语句(也称单分支选择语句)2 带else的if语句(也称双分支选择语句)3 if语句的嵌套 单分支选择语句-不带else的if语句ifif语句格式如下:语句格式如下:ifif(表达式)(表达式)语句;语句;exprstatement非0=0括号“()”不能缺省只能用一个语句,若有多个语句可用复合语句。有有时时我我们们会会根根据据某某个个条条件件是是否否成成立立来来决决定定做

3、做不不做做某某件件事事。比比如出门时,根据天下不下雨,来决定要不要带伞。即:如出门时,根据天下不下雨,来决定要不要带伞。即:如果(下雨)如果(下雨)带伞;带伞;功能:功能:功能:功能:当表达式的值为真,当表达式的值为真,当表达式的值为真,当表达式的值为真,则执行内嵌语句,否则执行则执行内嵌语句,否则执行则执行内嵌语句,否则执行则执行内嵌语句,否则执行 它的后继语句。它的后继语句。它的后继语句。它的后继语句。执行过程:执行过程:C C语语言言中中,用用括括号号括括起起来来的的语语句句块块与与一一个个单单语语句句等等价价,因因此此如如果果表表达达式式的的值值为为真真时时可可以以执执行行多多个个语语

4、句句。由由此此可可以以得得到到ifif语句的另一种形式:语句的另一种形式:ifif(表达式)(表达式)语句语句1 1;语句语句2 2;语句语句3 3;功能:功能:功能:功能:当表达式的值为当表达式的值为当表达式的值为当表达式的值为真,则执行内嵌语句,真,则执行内嵌语句,真,则执行内嵌语句,真,则执行内嵌语句,否则执行它的后继语句。否则执行它的后继语句。否则执行它的后继语句。否则执行它的后继语句。执行过程:执行过程:该语句该语句的执行过程如图5-2所示。执行语句执行语句1执行语句执行语句2执行语句执行语句3表达式值为真表达式值为真 NY【例例9.12】任意输入一个整数,求其绝对值并输出。任意输入

5、一个整数,求其绝对值并输出。分析分析 输入一个整数,此数可以是正数、零或负数,若为负数输入一个整数,此数可以是正数、零或负数,若为负数则将其转化为正数,若为正数或零什么也不做,最后输出结果。则将其转化为正数,若为正数或零什么也不做,最后输出结果。main()int x;printf(“请输入一个整数:”);scanf(%d,&x);if(x0)x=-x;printf(%dn,x);【例例9】输入一个整数,若是大于输入一个整数,若是大于10且小于且小于15,则输出,则输出“10X10&x15)printf(“10 x10)if(x15)printf(“10 x=b)为真,则执行)为真,则执行“p

6、rintf(%f,%fn,a,b);”,如,如果条件(果条件(a=b)printf(%f,%fn,a,b);if(ab)t=a;a=b;b=t;printf(%5.2f,%5.2f,a,b);tab【例例】输入一个输入一个C语言学生的成绩(百分制),将其转换成五语言学生的成绩(百分制),将其转换成五分制(分制(A,B,C,D,E)输出。)输出。分析分析 从键盘输入一个从键盘输入一个C语言学生的成绩,存入变量语言学生的成绩,存入变量C_Score中中,如果条件(如果条件(C_Score=90且且C_Score=90&C_Score=80&C_Score=70&C_Score=60&C_Score

7、 70)printf(“D”);if(C_Score=b)printf(%f,%fn,a,b);if(a=b)printf(%f,%fn,a,b);else printf(%f,%fn,b,a);main()int a,b,max;printf(”n 请输入两个数请输入两个数:”);scanf(”%d%d”,&a,&b);max=a;if(max=b)max=a;else max=b;if(cmax)max=c;printf(最大的数为:%dn,max);分析分析 要输出最大的要输出最大的一个,必须将三个一个,必须将三个数进行比较;进行数进行比较;进行比较时,先比较其比较时,先比较其中两个,获

8、得较大中两个,获得较大的,再与第三个数的,再与第三个数做比较,最后得到做比较,最后得到三个数中的最大值。三个数中的最大值。要进行两个数的比要进行两个数的比较,经常用到较,经常用到if语句,比较的结果语句,比较的结果可以作为下一步操可以作为下一步操作的条件。作的条件。【例例9.15】输入三个数,按从小到大的顺序输出。输入三个数,按从小到大的顺序输出。分析分析 用变量用变量a、b、c分别存放三个数;对其进行比分别存放三个数;对其进行比较后,较后,a中存放最小值,中存放最小值,c中存放最大值,中存放最大值,b中存放中中存放中间值。间值。如果如果ab,则将,则将a和和b对调对调(a是是a、b中的小者)

9、。中的小者)。如果如果ac,则将,则将a和和c对调对调(a是是a、c中的小者,中的小者,a也也就是就是a、b、c中的最小者)。中的最小者)。如果如果bc,则将,则将b和和c对调对调(b是是b、c中的小者,也就中的小者,也就是三者中的中间者)。是三者中的中间者)。main()float a,b,c,t;/*t为两个变量值交换的中间变量*/printf(“请输入三个实数(以逗号分隔)”);scanf(“%f,%f,%f”,&a,&b,&c);if(ab)t=a;a=b;b=t;/*a、b值互换*/if(ac)t=a;a=c;c=t;/*a、c值互换*/if(bc)t=b;b=c;c=t;/*b、c

10、值互换*/printf(%10.2f,%10.2f,%10.2fn,a,b,c);vif语句嵌套:l一般形式:if(expr1)if(expr2)statement1 else statement2else if(expr3)statement3 else statement4内嵌if内嵌ifif(expr1)if(expr2)statement1 else statement2内嵌ifif(expr1)if(expr2)statement1else statement3 内嵌ifif(expr1)statement1else if(expr3)statement3 else statemen

11、t4内嵌if现假设要计算函数现假设要计算函数y(x)y(x)的值,函数表示如下:的值,函数表示如下:-1 (x0)main()int x,y;printf(“请输入x的值:”);scanf(%d,&x);if(x=0)if(x0)y=1;else y=0;else y=-1;printf(y=%dn,y);n n特殊形式:特殊形式:n n格式:格式:if(expr1)statement1else if(expr2)statement2else if(expr3)statement3.else statementn expr1statemnt1非0=0expr2expr3statemntnsta

12、temnt3statemnt2非0非0=0=0u执行过程:main()int x,y;printf(“请输入x的值:”);scanf(%d,&x);if(x0)y=1;else if(x=0)y=0;else y=-1;printf(y=%dn,y);例:if(salary1000)index=0.4;else if(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;/*区分字符*/#include main()char c;printf(Enter a charac

13、ter:);c=getchar();if(c=0&c=A&c=a&c=z)printf(The character is a lower lettern);else printf(The character is other charactern);例 判断输入字符种类运行:Enter a character:The character is a control character运行:Enter a character:8 The character is a digit运行:Enter a character:D The character is a capital letter运行:En

14、ter a character:h The character is a lower letter运行:Enter a character:F1 The character is other charactern nif else if else 配对原则:配对原则:配对原则:配对原则:缺省缺省缺省缺省 时,时,时,时,elseelse总是和总是和总是和总是和它上面离它最近的未配对的它上面离它最近的未配对的它上面离它最近的未配对的它上面离它最近的未配对的if if配对配对配对配对 if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);if(a=b)

15、printf(“a=b”);else printf(“a!=b”);例修改:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);造成有两种不同的解释如:if(a=b&x=y)printf(“a=b,x=y”);if(3)printf(“OK”);if(a)printf(“%d”,a);l说明:uif后面的表达式类型任意u语句可以是复合语句u if(x)if(x!=0)if(!x)if(x=0)例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;else x

16、+;y+;printf(“%d,%dn”,x,y);Compile Error!switch 语句 格式:switch(表达式)case 常量常量表达式1:语句序列1 case 常量常量表达式2:语句序列2 case 常量常量表达式3:语句序列3 case 常量常量表达式n:语句序列n default:语句序列n+1 执行过程为:当表达式的值等于常量表达式i的值,则从语句序列i开始执行到语句序列n+1为止。若表达式的值不等于任何一个常量表达式的值,则只执行default后面的语句。一般在每个语句序列之后加一个break语句,这样在执行语句序列i之后,使流程跳出switch结构,实现多分支选择结

17、构。一般为整型或一般为整型或字符型表达式字符型表达式可以是一个语句,也可以是几个语句。switch语句(开关分支语句)v一般形式:switch(表达式)case E1:语句组 1;break;case E2:语句组 2;break;.case En:语句组 n;break;default:语句组;break;v执行过程:switch表达式语句组1语句组2语句组n语句组.E 1E 2Endefaultcase v说明:lE1,E2,En是常量表达式,且值必须互不相同l语句标号作用,必须用break跳出lcase后可包含多个可执行语句,且不必加 lswitch可嵌套l多个case可共用一组执行语句

18、如:case A:case B:case C:printf(“score60n”);break;.例 switch(score)case 5:printf(“Very good!”);case 4:printf(“Good!”);case 3:printf(“Pass!”);case 2:printf(“Fail!”);default :printf(“data error!”);运行结果:score为5时,输出:Very good!Good!Pass!Fail!data error!score为为百分制(0100分),编程实现上述功能。例:编写一个能进行两个操作数加减乘除四则运算的计数器模拟

19、程序。main()char op;float x,y;printf(input a arithmetic expression:);scanf(%f%c%f,&x,&op,&y);switch(op)case +:printf(=%fn,x+y);break;case -:printf(=%fn,x-y);break;case *:printf(=%fn,x*y);break;case /:if (y!=0.0)printf(=%fn,x/y);else printf(Divisor is zeron);break;default:printf(Illegal operatorn);输入:两个

20、操作数和运算符计算:根据运算符确定运算输出:运算结果+进行加运算。-进行减运算。*进行乘运算。/进行除运算。【例例9.18】输入一个十进制无符号短整型数,然后按用户输入的代输入一个十进制无符号短整型数,然后按用户输入的代码,分别以十进制(代码码,分别以十进制(代码D)、八进制(代码)、八进制(代码O)、十六进制(代码)、十六进制(代码X)数输出。)数输出。main()unsigned short x;char c;scanf(%d,%c,&x,&c);switch(c)case d:case D:printf(%dDn,x);break;case o:case O:printf(%oOn,x)

21、;break;case x:case X:printf(%xXn);break;default:printf(input error!n);【例例4.4】寻找两数中的大数寻找两数中的大数 用用if-elseif-else语句语句main()int a,b;printf(n请输入两个数:请输入两个数:n);scanf(a=%d,b=%d,&a,&b);if(ab)printf(max=%dn,a);else printf(max=%dn,b);程序举例程序举例2 某公司招聘条件如下:熟练掌握C和VB。具有3年以上工作经验或重点大学毕业。年龄在35岁以下。根据用户输入条件,判断应聘者是否符合条件。

22、3 根据用户输入的生日计算其实足实足年龄。#include main()char cvb,collage;int work,age;printf(Is familiar with C and VB(y/n):);cvb=getche();printf(work age:);scanf(%d,&work);printf(Is key university(y/n):);collage=getche();printf(input your age:);scanf(%d,&age);if(cvb=y|cvb=Y)&(work=3|collage=y|collage=Y)&age35)printf(p

23、ass!n);else printf(fail.n);main()int year,month,day,age;int byear,bmonth,bday;printf(input today date(y,m,d):);scanf(%d%d%d,&year,&month,&day);printf(input your birthday(y,m,d):);scanf(%d%d%d,&byear,&bmonth,&bday);age=year-byear;if(monthbmonth)age-;if(month=bmonth&day0,有两个不等实根。b2-4ac0,有两个共轭复根。#inclu

24、de math.hmain()float a,b,c,disc,x1,x2,realpart,imagpart;scanf(%f,%f,%f,&a,&b,&c);printf(The equation);if (fabs(a)=1e-6)printf(is not quadratic);else disc=b*b-4*a*c;if (fabs(disc)1e-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 realpart=-b

25、/(2*a);imagpart=sqrt(-disc)/(2*a);printf(has complex roots:n);printf(%8.4f+%8.4fin,realpart,imagpart);printf(%8.4f-%8.4fin,realpart,imagpart);给出一百分制成绩,要求输出成绩等级A、B、。90分以上为A,8089分为B,7079分为,6069分为,60分以下为。main()int x;scanf(%d,&x);x=x/10;if (x10|x0)printf(成绩输入有错,请重新输入n);else switch (x)case 10:case 9:prin

26、tf(An);break;case 8:printf(Bn);break;case 7:printf(Cn);break;case 6:printf(Dn);break;default:printf(En);9 输入三角形的三条边长值,判断它们能否构成三角形,若能构成,则再判断是等边三角形还是等腰三角形还是一般三角形。7 执行以下程序段后,a的值是 int a,x=65;if(x%3)a=1;else a=0;8 若有int a,b,t;scanf(“%d%d”,&a,&b);,则在输入两个整数后,实现a中总是存放a,b中较小者的语句是t=a;a=b;b=t;1#include main()i

27、nt a,b,c;printf(input a,b,c:);scanf(%d%d%d,&a,&b,&c);if(a0&b0&c0&a+bc&a+cb&b+ca)if(a=b&b=c)printf(This is an equilateral triangle.n);else if(a=b|b=c|a=c)printf(This is an isoceles triangle.n);else printf(This is a triangle.n);else printf(This is Not a triangle.n);【例4.9】有一个函数如下:编写一程序,输入x值输出y值。x2 (10 x20)y=x+1 (x10)6x+9(x20)#include ”stdio.h”main()float x,y;printf(“请输入请输入x:”);scanf(“%f”,&x);if(x=10&x=20)y=6*x+9;printf(“y=%fn”,y);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com