《C语言程序设计教程》课件第4章 选择结构程序设计_第1页
《C语言程序设计教程》课件第4章 选择结构程序设计_第2页
《C语言程序设计教程》课件第4章 选择结构程序设计_第3页
《C语言程序设计教程》课件第4章 选择结构程序设计_第4页
《C语言程序设计教程》课件第4章 选择结构程序设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第四章

选择结构程序设计教学目标:掌握if语句的用法掌握switch语句的用法学会使用选择结构程序设计教学重点与难点:学会使用选择结构程序设计第四章选择结构程序设计3第四章选择结构程序设计选择结构又称为分支结构,是一种常见的程序控制结构。在日常生活中,如果天气晴朗,我们就去郊游;或者如果考试不及格,那么要参加补考。即根据条件进行判断,然后依据判断的结果进行相应的情况处理。在C语言中,选择结构分为两类:(1)if选择结构:根据条件进行判断,选择执行不同的分支语句。(2)switch选择结构:计算表达式的值,然后进行判断,选择执行多分支其中一个分支。44.1if语句4.1.1结构化算法if语句分为三种形式,单分支、双分支和多分支结构。1.单分支选择结构单分支结构是最简单的选择结构,其语法的一般格式为:if(表达式)语句;或者if(表达式){

语句块;}执行过程:if后面括号中的表达式是要判断的条件,如果表达式的值为真,则执行后面的语句或语句块;如果表达式的值为假,则不会执行后面的语句或语句块。执行流程如图4.1所示。54.1.1if语句的三种形式图4.1单分支选择结构【例4.1】从键盘上输入两个整数,比较它们的大小,并按照从小到大的顺序输出。

分析:将存放在两个变量x和y中的数进行交换,必须借助于第三个变量才能实现。64.1.1if语句的三种形式关键代码如下:If(x<y){t=x;x=y;y=t;}程序如下:#include<stdio.h>main(){intint1,int2,t;printf("请输入两个整数:\n");scanf("%d,%d",&int1,&int2);if(int1>int2){

t=int1;int1=int2;/*两个数交换需借助第三个变量t*/int2=t;}printf("%d,%d\n",int1,int2);}74.1.1if语句的三种形式程序运行结果:请输入两个整数:99,78↙78,9984.1.1if语句的三种形式【例4.2】从键盘上输入三个数,并按照从小到大的顺序输出。分析:一共比较三次第一次比较:如果a>b,将a和b交换。第二次比较:如果a>c,将a和c交换,两次比较后a为最小数。第三次比较:如果b>c,将b和c交换,得到较小数和最大数。程序如下:#include<stdio.h>main(){floata,b,c,t;printf("请输入三个数:\n");scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;/*a和b比较后交换*/b=t;9}if(a>c){t=a;a=c;/*a和c比较后交换*/c=t;}if(b>c){t=b;b=c;/*b和c比较后交换*/c=t;}printf("排序后结果为:%5.2f,%5.2f,%5.2f\n",a,b,c);}4.1.1if语句的三种形式程序运行结果:请输入三个数:123.67,98.75,76.34↙排序后结果为:76.34,98.75,123.67思考:如果将例题中改为按照从大到小的顺序输出,程序如何变动?104.1.1if语句的三种形式2.双分支选择结构双分支结构语法的一般格式为:if(表达式){语句块1;}else{语句块2;}执行过程:if后面括号中的表达式是要判断的条件,如果表达式的值为真,则执行语句块1;如果表达式的值为假,则执行语句块2,执行流程如图4.2所示。图4.2双分支选择结构114.1.1if语句的三种形式3.多分支选择结构多分支结构用于多种条件判断,其语法的一般格式为:if(表达式1){语句块1;}elseif(表达式2){语句块2;}elseif(表达式3){语句块3;}

……elseif(表达式n){语句块n;}else{语句块n+1;}124.1.1if语句的三种形式执行过程:if后面括号中的表达式是要判断的条件,首先计算表达式1的值,如果为真,则执行语句块1;否则(表达式1的值为假)计算表达式2的值,如果为真,则执行语句块2;否则(表达式2的值为假)计算表达式3的值,如果为真,则执行语句块3;以此类推……;如果表达式1、表达式2……表达式n的值都为假,则执行语句块n+1。执行流程如图4.3所示。134.1.1if语句的三种形式图4.3多分支选择结构144.1.1if语句的三种形式【例4.4】从键盘上输入学生期末考试成绩,若成绩为90~100分输出“优秀”,80~89分输出“良好”,70~79分输出“中等”,60~69分输出“及格”,0~59分输出“不及格”。程序如下:#include<stdio.h>main(){floatscore;printf("请输入学生期末考试成绩(0—100):\n");scanf("%f",&score);if(score>=90&&score<=100)printf("优秀!\n");elseif(score>=80&&score<=89)printf("良好!\n");elseif(score>=70&&score<=79)printf("中等!\n");elseif(score>=60&&score<=69)15printf("及格!\n");

elseprintf("不及格!\n");}程序运行结果:请输入学生期末考试成绩(0—100):97↙优秀!请输入学生期末考试成绩(0—100):75↙中等!请输入学生期末考试成绩(0—100):56↙不及格!4.1.1if语句的三种形式注意:当多分支中有多个表达式同时满足时,只执行第一个与之匹配的语句块。因此要注意对多分支中条件表达式的书写次序,防止某些值被过滤掉。4.1.1if语句的三种形式16思考:若将例4.4中程序改为以下两种写法,结果分别会如何?程序段一如下:#include<stdio.h>main(){floatscore;printf("请输入学生期末考试成绩(0-100):\n");scanf("%f",&score);if(score>=90)printf("优秀!\n");elseif(score>=80)printf("良好!\n");elseif(score>=70)printf("中等!\n");elseif(score>=60)printf("及格!\n");

elseprintf("不及格!\n");}174.1.1if语句的三种形式程序段二如下:#include<stdio.h>main(){floatscore;printf("请输入学生期末考试成绩(0-100):\n");scanf("%f",&score);if(score>=60)printf("及格!\n");

elseif(score>=70)printf("中等!\n");elseif(score>=80)printf("良好!\n");elseif(score>=90)printf("优秀!\n");

elseprintf("不及格!\n");}184.1.2if语句的嵌套在一个if语句中又可以包含一个或多个if语句,称为if语句的嵌套。其语法的一般格式为:if(表达式1)if(表达式2)语句块1;else语句块2;elseif(表达式3)语句块3;else语句块4;执行过程:首先判断表达式1,如果表达式1的值为真,再判断表达式2,如果表达式2的值为真,则执行语句块1;否则(表达式2的值为假)执行语句块2;如果表达式1的值为假,再判断表达式3,如果表达式3的值为真,则执行语句块3;否则(表达式3的值为假)执行语句块4。194.1.2if语句的嵌套思考:以下两种情况中else分别和哪个if配对?情况1:if(表达式1)if(表达式2)语句1;else语句2;情况2:if(表达式1){if(表达式2)语句1;}else语句2;程序如下:#include<stdio.h>main(){intx,y;printf("请输入x:\n");scanf("%d",&x);if(x>0) y=2*x;elseif(x==0) y=0;else y=-x;printf("y的值为:%d\n",y);}20【例4.6】分段函数求解。从键盘上输入整数x,求y的值。4.1.2if语句的嵌套程序运行结果:请输入x:8↙y的值为:16请输入x:-2↙y的值为:2214.2switch语句日常生活中,经常会遇到多重选择的问题。除了使用多分支if…elseif语句外,C语言还提供了另一种结构——switch语句。switch语句又称为开关语句,主要用于实现多分支选择结构。其语法的一般格式为:switch(表达式){case常量表达式1:语句块1;break;case常量表达式2:语句块2;break;

……case常量表达式n:语句块n;break;default:语句块n+1;}224.2switch语句执行过程:先计算表达式的值,并依次与case后面的常量表达式比较,如果表达式的值与常量表达式1的值相等,则执行其后面的语句块1;否则若与常量表达式2的值相等,则执行其后面的语句块2;以此类推……;否则若与常量表达式n的值相等,则执行后面的语句块n;如果表达式的值与所有case后的常量表达式都不相同,则执行default后面的语句块n+1。case后的break表示跳出switch语句,执行流程如图4.4所示。234.2switch语句图4.4switch选择结构244.2switch语句使用switch语句应注意以下几点:(1)switch后面括号中的表达式一般是整型或字符型。(2)case后面的常量表达式类型必须和switch后面的表达式类型相同,并且不能使用变量。(3)case关键字和常量表达式之间需有空格,常量表达式的值必须互不相同。(4)每执行一个case语句后,为了使流程能够跳出switch结构,必须使用break语句结束switch语句的执行,否则流程会按顺序依次执行后续的case语句。254.2switch语句例如:switch(grade){case1:printf("A!");case2:printf("B!");case3:printf("C!");case4:printf("D!");}因为case后没有break语句,所以程序会一直向下执行。因此当grade值为1时,程序运行结果为:A!B!C!D!26(5)case后面的语句块可以是一条语句或多条语句,也可是空语句,但不需要用大括号括起来。(6)当case后面常量表达式与switch后面的表达式均不匹配时,则执行default后面的语句块,default可以放在程序的任何位置,不一定要位于最后。(7)多个case可以共用一个语句块。例如:switch(n){case1:case2:case3:printf("优秀!");break;}4.2switch语句274.2switch语句【例4.7】将例题4.4改为用switch语句实现。从键盘上输入学生期末考试成绩,若成绩为90~100分输出“优秀”,80~89分输出“良好”,70~79分输出“中等”,60~69分输出“及格”,0~59分输出“不及格”。程序如下:#include<stdio.h>main(){intscore;printf("请输入学生期末考试成绩(0-100):\n");scanf("%d",&score);switch(score/10){case10:case9:printf("优秀!\n");break;case8:printf("良好!\n");break;case7:printf("中等!\n");break;case6:printf("及格!\n");break;

default:printf("不及格!\n");

}}284.2switch语句程序运行结果:请输入学生期末考试成绩(0—100):95↙优秀!请输入学生期末考试成绩(0—100):85↙良好!请输入学生期末考试成绩(0—100):68↙及格!请输入学生期末考试成绩(0—100):57↙不及格!思考:若将程序中的break语句去掉,结果会如何?294.3程序综合实例【例4.9】从键盘上输入三角形的三条边长,判断是否能构成三角形,然后计算三角形的面积并输出。假设a、b、c为三角形的三条边长,令s=(a+b+c)/2,则三角形面积公式:area=程序如下:#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;printf("请输入三角形的三条边长:\n");scanf("%f,%f,%f",&a,&b,&c);/*输入三角形的三条边长*/if(a<0||b<0||c<0)printf("输入的a,b,c均不能为负数!\n");else30if(a+b>c&&b+c>a&&c+a>b){s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));/*计算三角形的面积*/printf("三角形的面积:%5.2f\n",area);}elseprintf("不能构成三角形,请重新输入!\n");return0;}4.3程序综合实例程序运行结果:请输入三角形的三条边长:5.7,9.8,7.5↙三角形的面积:21.30请输入三角形的三条边长:1,2,3↙不能构成三角形,请重新输入!314.3程序综合实例【例4.12】一元二次方程求解。从键盘上输入a、b、c的值,对一元二次方程ax2+bx+c=0求解。分析:根据方程的求解情况,分为以下几种:(1)当a=0,b≠0时,此时是一元一次方程。当a=0,b=0时,此时方程式并不合法,提示错误信息。(2)

当a≠0时,此时为一元二次方程,根分为三种情况:①当b2-4ac=0,方程有两个相等的实根,即②当b2-4ac>0,方程有两个不同的实根,即③当b2-4ac<0,方程有两个不同的虚根,即324.3程序综合实例程序如下:#include<stdio.h>#include<math.h>main(){doublea,b,c,x1,x2,delt,real,imaginary;printf("请输入a、b、c的值:\n");scanf("%lf,%lf,%lf",&a,&b,&c); /*输入三角形的三条边长*/if(a==0){if(b!=0) { x1=-b/c;/*此时为一元一次方程求根*/printf("方程的解为:%5.2lf\n",x1); }elseprintf("输入的值不合法,请重新输入!\n");33}

温馨提示

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

评论

0/150

提交评论