第4章 C语言教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章选择结构程序设计4.1关系运算符与关系表达式4.2逻辑运算符与逻辑表达式4.3if语句4.4switch语句4.5结构嵌套程序举例(其中4.1、4.2两节已在第二章中详细介绍,此处不再赘述。)上一页下一页教学目的和基本要求:要求学生掌握选择结构程序设计,嵌套程序设计,学会运用if语句及switch语句。教学重点:if语句、嵌套程序。上一页下一页很多问题是顺序结构解决不了的看这样一个例子:计算分段函数x在大于等于0和小于0两种不同的情况时,函数将用不同的表达式来求y的值,这时就需要在计算y的值之前,先对x的值进行判断,C语言中用选择语句来实现这一判断。算法N-S图如右上图所示。x0YNy=3-xy=2xN-S图上一页下一页C语言中的选择语句有两种:双分支选择语句if多分支选择语句switch上一页下一页4.3if语句if(表达式)语句首先先判断表达式的值表达式语句真假语句表达式若为非0则执行语句若为0则跳过该语句1.if语句的最简单形式:执行过程:if语句的简单形式,在语法上视为一条语句。上一页下一页main(){floatx,y;scanf(“%f”,&x);y=2*x;if(x0)y=3-x;printf(“y=%.2f”,y);}例:计算分段函数上一页下一页2.if语句的双分支形式:if(表达式)语句1else语句2首先先判断表达式的值若为非0则执行语句1若为0则执行语句2表达式语句1真假语句2表达式语句1语句2执行过程:if语句的双分支形式,在语法上视为一条语句。上一页下一页main(){floatx,y;scanf(“%f”,&x);if(x0)y=3-x;elsey=2*x;printf(“y=%.2f”,y);}例:计算分段函数上一页下一页例:输入两个数,比较其大小,将较大的数输出。算法分析:(1)输入两个数据a,b;(2)如果ab则输出a;否则,输出b。#includestdio.hmain(){floata,b;scanf(“%f,%f”,&a,&b);if(ab)printf(“%f”,a);elseprintf(“%f”,b);}上一页下一页if语句的语句1和语句2又称为if的执行语句。if的执行语句在语法上是一条语句,可以是任何类型的语句,简单语句、复合语句、空语句、流程控制语句都可以作为if的执行语句。下面我们通过一个例子分别介绍用不同的语句作为if的执行语句的情形:例:计算分段函数:y=2*xx=-102+x-10x=0x-20x=10x/10x10上一页下一页方法一:用简单语句#includestdio.hmain(){floatx,y;scanf(“%f”,&x);if(x=-10)y=2*x;if(-10x&&x=0)y=2+x;if(0x&&x=10)y=x-2;if(x10)y=x/10;printf(“\ny=%f”,y);}上一页下一页方法二:用if语句做语句2#includestdio.hmain(){floatx,y;scanf(“%f”,&x);if(x=-10)y=2*x;elseif(x=0)y=2+x;elseif(x=10)y=x-2;elsey=x/10;printf(“\ny=%f”,y);}这种用if语句作为上一层if语句的语句2的结构,称为if语句的多分支选择结构。上一页下一页多分支选择语句一般形式:if(表达式)语句1elseif(表达式)语句2else…先判断表达式1的值非0就执行下面的语句为0就执行下一个判断一直这样做下去表达式1真语句1假表达式2表达式3语句4语句3语句2真真假假直到得出最后结果流程图如左:上一页下一页方法三:语句1与语句2都为if语句#includestdio.hmain(){floatx,y;scanf(“%f”,&x);if(x=0)if(x=-10)y=2+x;elsey=2*x;elseif(x=10)y=x-2;elsey=x/10;printf(“\ny=%f”,y);}这种用if语句作为上一层if语句的语句1和语句2的结构,称为if语句的嵌套。上一页下一页if语句的二层嵌套结构如下:if(表达式1)if(表达式1_2)语句1_1else语句1_2elseif(表达式2_1)语句2_1else语句2_2表达式1_2表达式1表达式1_2语句1_1语句1_2语句2_1语句2_2非000非00非0上一页下一页if语句编程举例:例1.写一个程序完成下列功能:输入一个分数score当score60输出E当60=score70输出D当70=score80输出C当80=score90输出B当90=score输出A上一页下一页#includestdio.hmain(){floatscore;scanf(“%f”,&score);if(score60)printf(“%c”,’E’);elseif(score70)printf(“%c”,’D’);elseif(score80)printf(“%c”,’C’);elseif(score90)printf(“%c”,’B’);elseprintf(“%c”,’A’);}程序如下:上一页下一页例2:编程实现:根据两个数sex和tall分类,如果sex为’F’,当tall大于等于150时,输出A,否则输出B;若sex不为’F’,当tall大于等于170时,输出A,否则输出B。分析:•根据sex分支•在sex为’F’的分支中判断tall是否=150•在sex不为’F’的分支中判断tall是否=170上一页下一页#includestdio.hmain(){inttall;charsex;printf(“inputsexandtall:”);scanf(“%c%d”,&sex,&tall);if(sex==’F’)if(tall=150)printf(“A”);elseprintf(“B”);elseif(tall=170)printf(“A”);elseprintf(“B”);}程序如下:上一页下一页4.4Switch语句if语句是根据表达式的值是否为0来判断执行哪一分支的,某些情况下,要根据表达式的不同值来判断执行哪一分支,如表达式的值为‘a’,’b’,’c’时,分别执行不同的操作。虽然也可以用多条if语句来完成这一工作,但c语言中提供了一条switch语句,可以更方便的完成。上一页下一页switch(表达式){case常量1:语句块1;case常量2:语句块2;…………………….case常量n:语句块n;default:语句块n+1;}Switch语句的基本形式:执行过程:其中每个语句块都可以是0到多条语句,可以有选择的包含或不包含结束语句break;注意:case后面的值不能为变量。先计算表达式的值,判断与case后的哪个常量值相等,若与常量i的值相等,则从语句块i开始执行,直到遇到第一条break语句结束,或执行完语句块n+1结束。若与任何一个常量的值都不相等,直接执行语句块n+1。上一页下一页例:看下面的程序在几种不同输入情况下的输出:#includestdio.hmain(){chari;scanf(“%c”,&i);switch(i){case‘a’:i++;printf(“%c”,i);break;case‘b’:i++;printf(“%c”,i);default:i=i+2;printf(“%d”,i);}}1.输入:a输出:b2.输入:b输出:c1013.输入:c输出:101上一页下一页例:编程:根据输入的学生的成绩判断等级。当成绩score≥90时为A等;成绩70≤score90为B等;成绩60≤score70为C等;成绩score60为D等(score为整数)。分析:设score为整型数,利用两个整数相除,结果自动取整的特性,score和score/10有如下对应关系:scorescore/1090以上10,970~897,860~69660以下5,4,3,2,1,0因此,可以用score/10的值来确定分支。上一页下一页#includestdio.hmain(){intscore;scanf(%d,&score);switch(score/10){case10:case9:printf(%d:A\n,score);break;case8:case7:printf(%d:B\n,score);break;case6:printf(%d:C\n,score);break;default:printf(%d:D\n,score);}}程序:上一页下一页4.5结构嵌套程序举例例4.7求方程ax2+bx+c=0的实数解。分析:根据3个系数的不同情况,方程的根有如下几种情况。(1)a=0,不是二次方程;(2)b2-4ac=0,有两个相等的实根;(3)b2-4ac0,有两个不等的实根,求x1和x2;(4)b2-4ac0,没有实数解。上一页下一页例4.8输入年号,判断它是否为闰年。分析:如果此年号能被400整除,则它是闰年;如果能被4整除,而不能被100整除,则也是闰年,否则不是闰年。程序流程如右图所示。上一页下一页例4.9输入一个由两个数据和一个算术运算符组成的表达式,根据运算符完成相应的运算,并将结果输出。分析:输入形如a+b的表达式,a和b为整型数。如果运算符是“+”、“-”、“*”中的任意一个,则进行相应的运算。如果运算符为“%”或“/”,则应先判断b是否为0,并做相应处理。如果运算符不合法,则报错。再见!同学们:

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功