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

下载本文档

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

文档简介

关系运算符与关系表达式1逻辑运算符与逻辑表达式2if语句3switch语句4<小于

<=小于或等于

>大于

>=大于或等于

==等于

!=不等于

优先级和结合性:关系运算符的优先级低于算术运算符,关系运算符中>、>=、<、<=优先级相同;==和!=的优先级低于前四种。结合性:左结合

关系运算符4.1条件判断表达式4.1.1关系表达式

关系运算符都是双目运算符,要求两个操作数是同一种数据类型,其结果为逻辑值。按C语言的习惯,值为真(true)时用非0值(一般用1)表示;值为假(false)时用0表示。例:6>’a’运算结果:05+(6>’a’)

运算结果:54.1条件判断表达式

关系表达式是用关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式等表达式)连接起来的式子。

例如:

3+2==2*3;

表示判断3+2的结果和2*3的结果是否相等。关系表达式的一般形式为:

表达式关系运算符表达式4.1条件判断表达式逻辑运算符

&&与运算

||或运算

!非运算

其中,与运算符&&和或运算符||均为双目运算符,非运算符!为单目运算符4.1.2逻辑表达式a&&b当且仅当a,b都为真时,结果为真a||b当且仅当a,b都为假时,结果为假!a当a为真时,结果为假;

当a为假时,结果为真4.1条件判断表达式逻辑运算的真值表

ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假4.1条件判断表达式优先级:逻辑运算符中,非运算符(!)和单目的算术运算符同级,高于双目的算术运算符,优先于关系运算符,优先于逻辑运算符与(&&)和或(||)

a>b||c>d等价于(a>b)||(c>d)!a==b&&c>d等价于((!a)==b)&&(c>d)结合性:逻辑运算符中,非运算符(!)的结合性为右结合;与运算(&&)和或运算(||)的结合性为左结合。

逻辑运算符的优先级和结合性4.1条件判断表达式

逻辑表达式类似于关系表达式,是用逻辑运算符把两个表达式连接起来的式子。例如:

a+b&&a;

表示判断a+b和a的值是否为真,若都为真表达式为真。逻辑表达式的一般形式为:表达式逻辑运算符表达式

逻辑表达式4.1条件判断表达式【举例】分析下面程序段的运行结果

main(){inta=14,b=15,x;charc='A';x=(a&&b)&&(c<'B');printf("a=%d,b=%d",a,b);printf("x=%d",x);}4.1条件判断表达式逻辑运算符的“短路”现象由于&&和||运算的左结合性及运算特点,若&&运算符左边的表达式为假(或0),则其右边的表达式将不再运算,整个表达式的值必然为假;同理,若||运算符左边的表达式为真(或非0值),则其右边的表达式将不再运算,整个表达式的值必然为真。例如:

a=0&&b=b-1

逻辑表达式的值为0。同理:

a=1||b=b-1逻辑表达式的值为1。

4.1条件判断表达式if语句switch语句4.3选择结构单分支结构双分支结构多分支结构if语句的嵌套if语句4.3选择结构单分支if语句的基本形式为:

if(表达式)

语句

执行过程:该语句的执行过程是先判断表达式,当表达式为“真”,执行语句,如果为“假”,则跳出单分支if语句,执行其后的其他语句。单分支if语句4.3选择结构main(){floata;printf("pleaseinputthescore:");scanf("%f",&a);if(a>=60)printf("pass\n");}【举例】从键盘输入学生成绩并判断是否及格,若及格输出“pass”4.3选择结构思考:从键盘输入学生成绩并判断是否及格,若及格输出“pass”,不及格输出“fail”双分支if语句

双分支if语句为if-else形式,语句的结构为:

if(表达式)

语句1

else

语句2

执行过程:该语句的执行过程是先判断表达式,当表达式为“真”,执行语句1,如果为“假”,执行语句2,择其一执行后,跳出双分支if语句,再执行其后的其他语句。4.3选择结构【例3-5】输入两个整数,输出其中的大数。用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。程序如下:main(){inta,b;printf("inputtwonumbers:");scanf("%d%d",&a,&b);if(a>b)printf("max=%d\n",a);elseprintf("max=%d\n",b);}多分支if语句

多分支选择结构的if语句一般形式为:

if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式n)语句n

else语句n+1

执行过程:该语句的执行过程是先判断表达式1,当表达式1为“真”,执行语句1,如果为“假”,判断表达式2,如果为“真”则执行语句2,否则再判断表达式3,以此类推,直到最后一个表达式n,如果仍然为“假”,则执行语句n+1,执行完,跳出多分支if语句,执行其后的其他语句。4.3选择结构多分支if语句的控制流程

4.3选择结构【举例1】:有一函数如下,输入x,输出y的值。x-9(x<0)y(x)=3x+5(0≤x<4)

9x-7(x≥4)

#include"stdio.h"voidmain(){floatx,y;printf("请输入x的值:");scanf("%f",&x);if(x<0)y=x-9;elseif(x<4)y=3*x+5;elsey=9*x-7;printf("y值为:%.2f\n",y);}4.3选择结构【举例2】将一个百分制的成绩转化成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.3选择结构#include<stdio.h>main(){inta;printf("inputthescore:");scanf("%d",&a);if(a<0||a>100)printf("dataerror\n");else{if(a>=90)printf("A\n");elseif(a>=80)printf("B\n");elseif(a>=70)printf("C\n");elseif(a>=60)printf("D\n");elseprintf("E\n");}}【注意】if语句的条件表达式一般是逻辑表达式或关系表达式,但也可以是其它任何类型的表达式,只要表达式的值非0,即为“真”;表达式值为0,即为“假”。

如:if(a=5)printf(“%d\n”,a);

(2)在if语句的三种形式中,分支对应的语句如果为多条语句,则这些语句必须用花括号“{}”括起来组成一个复合语句。4.3选择结构(3)在if语句中,条件表达式必须用括号括起来。在每一个else语句之前必须加分号,整个语句结束处也必须有分号。例如:if(a>b)max=a;elsemax=b;

虽然if和else之间加了分号,但if…else仍是一条语句,都同属于一个if语句。else子句也是if语句的一部分,和if语句配对使用,不能单独使用。4.3选择结构4.3.2if语句的嵌套在if语句中又包含一个或多个if语句的情形,称为if语句的嵌套,一般形式如下:if(表达式1)

if(表达式2)

语句1

else

语句2else

if(表达式3)

语句3

else

语句44.3选择结构【例3-6】编程求解如下符号函数值。y=-1(x<0时)y=0(x=0时)y=1(x>0时)//算法1:多分支if语句#include<stdio.h>voidmain(){intx,y; printf("请输入x:"); scanf("%d",&x);

if(x<0)y=-1;

elseif(x==0)y=0;elsey=1; printf("x=%d,y=%d\n",x,y);}4.3选择结构//算法2:if语句的嵌套#include<stdio.h>voidmain(){ intx,y; printf("请输入x:"); scanf("%d",&x);

if(x!=0)

if(x<0)y=-1;

elsey=1;

elsey=0; printf("x=%d,y=%d\n",x,y);}4.3选择结构if语句的嵌套_注意事项

在if语句的嵌套结构中,要注意if和else的对应情况。C语言的语法规定if~else配对原则为缺省{}时,else总是和它上面离它最近的,未配对的if配对。

缩排格式,能使程序格式更清晰,但不会影响程序的编译运行。有时为了实现if~else的正确配对可以加{}。4.3选择结构4.3.3条件运算符

由“?”和“:”组合而成,是三目运算符,要求有3个操作对象,并且三个操作对象都是表达式。

一般形式:

表达式1?表达式2:表达式3

在条件语句中,若只执行单个赋值语句,我们常使用条件运算来表示。

如:

if(a>b)max=a;

elsemax=b;

用条件运算可以表示为:

max=(a>b)?a:b;4.3选择结构【举例】从键盘输入两个整数,求其中较大数并输出。#include<stdio.h>voidmain(){ inta,b,max; printf("请输入2个整数:"); scanf("%d%d",&a,&b); max=a>b?a:b;//a>b?a:b是一个条件表达式

printf("较大数是%d\n",max);}4.3选择结构switch语句专门用于解决多分支选择问题其一般形式为:

switch(表达式){case常量表达式1:语句组1;break;case常量表达式2:语句组2;break;……case常量表达式n:语句组n;break;default:语句组n+1;}4.3.4switch语句

4.3选择结构执行过程:

先计算switch后表达式的值,然后将该值与case标号后的各常量相比较,跳到与其值相当的case分支处,执行该case内的相关语句,一直执行到break语句;若是与所有case标号后的值都不相等,则执行default后对应语句,若此时没有default语句,则不执行任何分支,跳出switch语句,执行其后的其他语句。4.3选择结构【例3-9】该程序要求输入一个数字,计算机输出一个对应的星期几的单词(输入6和7时,分别对应Saturday和Sunday。程序如下:

main(){inta;printf("inputintegernumber:");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");}}main(){inta;printf("inputintegernumber:");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");}}【举例】

用switch语句编写程序,根据输入的成绩输出相应的A、B、C、D和E等级,其中A:90~100;B:80~89;C:70~79;D:60~69;E:0~59。4.3选择结构#include<stdio.h>voidmain(){ intscore;printf("请输入成绩:");scanf("%d",&score);switch(score/10) { case10: case9:printf("你的成绩等级是A.\n");break; case8:printf("你的成绩等级是B.\n");break; case7:printf("你的成绩等级是C.\n");break; case6:printf("你的成绩等级是D.\n");break; default:printf("你的成绩等级是E.\n"); }}

①switch后面的表达式可以是int、char和枚举型中的一种;②case每个后面的表达式必须互不相同,否则会出现矛盾的现象;③case后面的常量表达式仅起语句标号的作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以要加上break语句,以便结束switch语句;④default标号后的语句只是在找不到匹配值时才执行,即使放在第一句,也是如此,但我们习惯性将其放在switch语句的最后一句;⑤switch测试表达式值与case后表达式常量是否相等,而if可进行表达式的真假判断,二者是不同的。4.3选择结构4.4情景应用——案例拓展【案例

】判断闰年

【问题描述】

从键盘输入一个表示年份的整数,判断该年份是否为闰年,并显示判断结果。

【算法设计】设year为某一年份,year为闰年的条件是:year可以被4整除且不可以被100整除,或者year可以被400整除,可用如下表达式来表示:(year%4==0&&year%100!=0)||year%400==04.4情景应用——案例拓展参考代码如下:#include<stdio.h> voidmain() { intyear; printf("请输入年份:"); scanf("%d",&year); if((year%4==0&&year%100!=0)||year%400==0) printf("%d是闰年.\n",year);//打印是闰年

elseprintf(

温馨提示

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

最新文档

评论

0/150

提交评论