C语言-5分支结构程序课件_第1页
C语言-5分支结构程序课件_第2页
C语言-5分支结构程序课件_第3页
C语言-5分支结构程序课件_第4页
C语言-5分支结构程序课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第五章分支结构程序设计5.1关系运算符和表达式5.2 逻辑运算符和表达式5.3逻辑表达式的跳跃5.4 if语句5.5 switch语句C语言-5分支结构程序5.1关系表达式

由关系运算符、圆括号把两个表达式连接起来的式子。

——表示条件若所表示的条件成立、则其值为1(非0)、否则其值为0。关系运算符:<、<=、>、>=、==、!=例:

a>=2、3>9、’a’!=(a=8)、

x+(y=3)==k*z、(a!=3)>(k<l)978表达式值为1优先成立为1不成立为0非=C语言-5分支结构程序注意:数学中多个条件,例a>b>c>d

应表示为a>b&&b>c&&c>d不能顺手也写为a>b>c>d

关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。C语言-5分支结构程序5.2逻辑表达式:由逻辑运算符、圆括号把表达式连接起来的式子

——表示条件若所表示的条件成立、其值为1(非0)、否则其值为0逻辑运算符:&&(与)、||(或)、!(非)

&&和||均为双目运算符,具有左结合性。!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:!(非)→&&(与)→||(或)

“&&”和“||”低于关系运算符,“!”高于算术运算符。

C语言-5分支结构程序

按照运算符的优先顺序可以得出:

a>b&&c>d等价于

(a>b)&&(c>d)!b==c||d<a等价于

((!b)==c)||(d<a)a+b>c&&x+y<b等价于

((a+b)>c)&&((x+y)<b)

C语言-5分支结构程序例:设x=0,y=2,a=8,k=-1,q=1,z=1,则1、x+y>3&&a==8

→2>3&&1→0&&1

02、x+y&&’a’

→2&&97→

13、x+(y=3)==k*z||

!a→0+3==-1||

!a→0||0→04、(x!=7)||’a’→0!=7||97→1||97→1

5、!(x+y>3&&a==8)

→!(2>3&&1)→!(0&&1)→!0→16、!(k*q)→!(-1)→07、!!!x→!!(1)→!(0)→1C语言-5分支结构程序5.3逻辑表达式的跳跃作第一个,知道结果,后面不作,如:∥∥

&&&&非0不算0要算0不算非0要算C语言-5分支结构程序1、执行inta,b,c;a=b=c=0;++a||++b&&++c;

后a、b、c值分别为1、0、02、执行inta=5,b=6,x=1,y=2;(a=x>y)&&(b=x>y);后a、b值分别为0、6a=1停止不算值为0赋给a,停止不算C语言-5分支结构程序3、执行inta,b,c;a=b=c=-1;++a&&++b||++c;

后a、b、c值分别为0、-1、0

1a=02不算,值为03c=04整体为0C语言-5分支结构程序例1:main(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d\n",x||i&&j-3,i<j&&x<y);printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);

}运行结果:0,01,00,1

0X为非0为非0,后面不算为0,后面不算为1,后面要算C语言-5分支结构程序5.4选择结构(if语句)5.4.1if语句的三种形式

1、第一种形式为基本形式:if

if(表达式)语句语义:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。

表达式可以是任意合法表达式,后面不能加;C语言-5分支结构程序例2:voidmain(){inta,b,max;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);max=a;if(max<b)max=b;printf("max=%d",max);}

输入:2346

输出:max=46此语句用于提示输入max=23max=46C语言-5分支结构程序例3:voidmain(){inta,b,c,t;printf("\ninputtwonumbers:");scanf("%d%d%d",&a,&b,&c);if(a<b){t=a;a=b;b=t;}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);}

输入:1,6,2↙

输出:621实现数的互换功能:输入三个数,按照从大到小顺序输出C语言-5分支结构程序例4:从键盘输入一个字符,判断它是否小写字母。若是,将其转换成大写字母,否则不进行转换,作后输出该字母。#include<stdio.h>main(){ charc,a; c=getchar(); if(c<‘a’||c>‘z’)a=c;

/*判断非小写字母情况*/

if(c<=‘z’&&c>=‘a’)

a=c-32;*判断是否是小写字母情况*/ printf("%c\n",a);}main(){charc;c=getchar(); if(c<=‘z’&&c>=‘a’)a-=32; printf("%c\n",a-32);}C语言-5分支结构程序2、第二种形式为:if-else

if(表达式)

语句1;

else

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

后面不能加;C语言-5分支结构程序voidmain(){inta,b;printf("inputtwonumbers:");scanf("%d%d",&a,&b);if(a>b)printf("max=%d\n",a);elseprintf("max=%d\n",b);}

输入:2346

输出:max=46

输入两个整数输出其中大数例2的改写C语言-5分支结构程序3、第三种形式为if-else-if形式:if(表达式1)

语句1;

elseif(表达式2)

语句2;

elseif(表达式3)

语句3;

elseif(表达式m)

语句m;

else

语句n;语义:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。后面不能加;C语言-5分支结构程序此为真,做语句1,其它语句都不做C语言-5分支结构程序上面的语句为以下三种格式:1、空语句2、一个语句(不引起转移)3、前后加大括号的语句(复合语句),也叫程序段,如:{inta;floatb;a=3;b=7.0;};允许在复合语句前部定义变量,只能在复合语句中使用{inta;a=3;floatb;b=7.0;}变量要在最前面定义不能写成C语言-5分支结构程序

#include"stdio.h"voidmain(){输入:Acharc;输出:Thisisacapitalletterc=getchar();if(c<32)printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thisisasmallletter\n");elseprintf("Thisisanothercharacter\n");}一个语句例5C语言-5分支结构程序4、在使用if语句中应注意以下问题:1)在三种形式的if语句中,在if之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5)语句;

if(b)语句;都是允许的。只要表达式的值为非0,即为“真”。如在:if(a=5)…;中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。C语言-5分支结构程序又如,有程序段:

if(a=b)printf("%d",a);elseprintf("a=0");

本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。=为赋值运算符,比较运算符为==

C语言-5分支结构程序2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。例如:

if(a>b){a++;b++;}else{a=0;b=10;}

if(a>b){a++;b++;};

else{a=0;b=10;};不能写成复合语句C语言-5分支结构程序5.4.2

条件运算符和条件表达式

在条件语句中,只执行单个的赋值语句时,可使用条件表达式来实现。条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。条件表达式的一般形式为:

表达式1?

表达式2:

表达式3

求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。非00C语言-5分支结构程序例如条件语句:

if(a>b)max=a;elsemax=b;可用条件表达式写为:

max=(a>b)?a:b;执行该语句的语义是:如a>b为真,则把a赋予max,如a>b为假,则把b赋予max。C语言-5分支结构程序使用条件表达式时,还应注意以下几点:1)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此:max=(a>b)?a:b

可以去掉括号而写为max=a>b?a:b2)条件运算符?和:是一对运算符,不能分开单独使用。3)条件运算符的结合方向是自右至左。例如:a>b?a:c>d?c:d

应理解为a>b?a:(c>d?c:d)

这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。C语言-5分支结构程序例6:计算方法一:voidmain(){floatx,y;scanf(”%f”,&x);if(x>3)y=x*x+2;elsey=3*x+7*x*x;printf(”y=%f\n”,y);}

x2

+2(x>3)y=3x+7x2(x≤3)表达式,成立值为1y=x>3?x*x+2:3*x+7*x*x;C语言-5分支结构程序例7:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。voidmain(){floata,b;scanf(”%f%f”,&a,&b);if(a>b){a=a+b;b=a-b;a=a-b;}/*实现a与b的互换*/printf(”%f,%f\n”,a,b);}可用语句if(a>b){floatt;t=a;a=b;b=t;}代替复合语句可以定义变量C语言-5分支结构程序a=a+b;b=a-b;a=a-bt=a;a=b;b=ta3+1ba-b=3aa-3=1a3b1t3b3a1a3b1C语言-5分支结构程序例8:P1055.5计算方法一:main(){floatx,y;scanf(”%f”,&x);if(x<1)y=x;elseif(1<=x&&x<10)y=2*x-1;elsey=3*x-11;printf(”y=%f\n”,y);}表达式1表达式2非00语句1语句2语句3非001<=x&&可省略吗?可以C语言-5分支结构程序方法二:voidmain(){floatx,y;scanf(”%f”,&x);if(x<1)y=x;else{if(x<10)y=2*x-1;elsey=3*x-11;}printf(”y=%f\n”,y);}{

、}

可省略y=x<1?x:(

x<10?2*x-1:3*x-11);等价(、)可省略C语言-5分支结构程序方法三:if(x<10)

{if(x<1)y=x;elsey=2*x-1;}

elsey=3*x-11;

}

后不能加;{、}

(、)

可一起省略等价y=x<10?(x<1?x:2*x-1):3*x-11;

C语言-5分支结构程序若上面分段函数改为则程序改为voidmain(){floatx,y;scanf(”%f”,&x);if(x<=-2||x>20)printf(”输入的数据是错误的”);elseif(-2<x&&x<1)y=x;elseif(1<=x&&x<10)y=2*x-1;elsey=3*x-11;printf(”y=%f\n”,y);}此语句出错与否都输出此程序有否缺陷?C语言-5分支结构程序程序应改为voidmain(){floatx,y;scanf(”%f”,&x);if(x<=-2||x>20)printf(”输入的数据是错误的”);elseif(-2<x&&x<1){y=x;printf(”y=%f\n”,y);}

elseif(1<=x&&x<10){y=2*x-1;printf(”y=%f\n”,y);}else{y=3*x-11;printf(”y=%f\n”,y);}}C语言-5分支结构程序5.4.3

if语句的嵌套

当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。其一般形式可表示如下:

if(表达式)或

if(表达式)

if语句;

if语句;

else

if语句;在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。

加;C语言-5分支结构程序如:if(表达式1)if(表达式2)

语句1;

else

语句2;其中的else究竟是与哪一个if配对呢?是if(表达式1)

还是if(表达式1)

if(表达式2)

if(表达式2)

语句1;

语句1;

else

else

语句2;

语句2;

注意:if与else的配对关系——else总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。

√×C语言-5分支结构程序例10:写出下面两程序的输出结果1.voidmain(){intx=2,y=-1,z=2;if(x<y)if(y<0)z=0;elsez=1;printf(”%d\n”,z);}结果:一个语句不成立时执行2C语言-5分支结构程序voidmain(){inta=1,b=3,c=5,d=4;if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;printf(”%d\n”,x);}

结果:2C语言-5分支结构程序为了使逻辑关系清晰:

(1)按下面所示书写程序:

voidmain(){inta=1,b=3,c=5,d=4;if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;printf(”%d\n”,x);}C语言-5分支结构程序(2)适当地加大括号:x=-3;

if(x<0)

{y=-1;printf(”x<0,y=%d\n”,y);}

elseif(x>0)

{y=1;printf(”x>0,y=%d\n”,y);}把上面与下面比较x=-3;if(x>=0)if(x>0){y=1;printf(”x>0,y=%d\n”,y);}else{y=-1;printf(”x<0,y=%d\n”,y);}结果:x<0,y=-1无结果C语言-5分支结构程序例11:void

main(){inta,b;printf("pleaseinputA,B:");scanf("%d%d",&a,&b);if(a==b)printf("A=B\n");elseif(a>b)printf("A>B\n");elseprintf("A<B\n");}输入:输出:if(a!=b)if(a>b)printf("A>B\n");elseprintf("A<B\n");elseprintf("A=B\n");等价2346A<BC语言-5分支结构程序例12:输入一年份,判别是否闰年。year被4整除真真真真假假假假year被100整除leap=0leap=1leap=1leap=0leapyear被400整除输出闰年输出非闰年C语言-5分支结构程序voidmain(){intyear,leap;scanf(“%d”,&year);if(year%4==0){if(year(%100==0){if(year%400)==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf(“%dis“,year);elseprintf(“%dis“,year);printf(“aleapyear.\n“);}根据leap输出结果C语言-5分支结构程序5.5

switch语句(另一种分支语句)5.5.1格式:switch(任意类型表达式)

{case常量表达式1:语句1;case常量表达式2:语句2;

case常量表达式n:语句n;default:语句n+1;}注:①常量表达式中运算对象只能为常量或符号常量(整型或字符型),各个值必须互不相同

②default允许出现在前面或中间③switch(任意类型表达式)后不带分号不要忘记空格不带;C语言-5分支结构程序5.5.2功能:若switch后面表达式值的整数(字符常量)部分与某个case后面表达式值相等,则就执行该case后面的语句,否则就执行default后面的语句语句1语句2语句3……值1,入口1继续后面执行继续后面执行值2,入口3C语言-5分支结构程序例13:voidmain(){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");}}输入:3入口

执行C语言-5分支结构程序输出:

WednesdaThursdayFridaySaturdaySundayerror

“case常量表达式”相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有后面case语句的情况。C语言-5分支结构程序5.5.3

break语句:专用于跳出switch语句在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

voidmain(){…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");}}入口

C语言-5分支结构程序Switch语句常用形式:switch(任意类型表达式){case整型或字符型常量表达式1:语句1;break;case整型或字符型常量表达式2:语句2;break;

…case整型或字符型常量表达式n:语句n;break;default:语句n+1;}

default后面不加breakC语言-5分支结构程序在使用switch语句时还应注意以下几点:1)case后的各常量表达式的值不能相同,否则会出现错误。

2)case后,允许有多个语句,可以不用{}括起来。

3)case和default子句的先后顺序可以变动,而不会影响程序执行结果。

4)default子句可以省略不用。C语言-5分支结构程序例14:若有宏定义:#definek2

和定义:floatw;inta=2,b;则合法的switch语句是[]A.switch(w)B.switch(a+b)

{case1.0:printf(”*\n”);

{case1printf(”*\n”);case2.0:printf(”**\n”);}caseaprintf(”**\n”):}C.switch(w+1.76)

D.switch(a);

{casek-1:printf(”*\n”);

{case1:printf(”*\n”);default:printf(”\n”);

case2:printf(”**\n”);

case1+2:printf(”***\n”);}

default:printf(”\n”);}C

不能为实型不能为变量,少;不能加分号C语言-5分支结构程序例15:P105

先接收从键盘输入的一个等级制成绩,然后输出对应的百分制成绩。转换规则如下:

A:85——100B:70——84C:60——69D<60C语言-5分支结构程序voidmain(){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\n”);

break;default:case10:printf(”Error\n”);

}}C语言-5分支结构程序

例16:先接收从键盘输入的一个百分制成绩,然后输出对应的五分制成绩。转换规则如下:

90——100A80——89B70——79C60——69D<60EC语言-5分支结构程序voidmain(){intcj;printf(”Inputaintegernumber(0----100)\n”);scanf(“%d”,&cj);if(cj>100||cj<0)printf(”Inputerror!”);elseif(cj<60)printf(”E\n”);elseswitch(cj/10)

{case6:printf(”D\n”);break;case7:printf(”C\n”);

break;case8:printf(”B\n”);

break;case9:case10:printf(”A\n”);

}}90~100A80~89B70~79C60~69D<60E整数除整数C语言-5分支结构程序例17:计算器程序。用户输入运算数和四则运算符,输出计算结果。voidmain(){floata,b;charc;printf("inputexpression:a+(-,*,/)b\n");scanf("%f%c%f",&a,&c,&b);switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;default:printf("inputerror\n");}}字符相当于整数输入:11+13输出:25.000000本例可用于四则运算求值。switch语句用于判断运算符,然后输出运算值。当输入运算符不是+,-,*,/时给出错误提示。C语言-5分支结构程序例18:求方程ax2+bx+c=0的两个实根#include<math.h>voidmain(){doublea,b,c,x1,x2,disc;scanf(”%lf%lf%lf”,&a,&b,&c);disc=b*b-4*a*c;if(disc<=0)printf(”输入错误”);else{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(”x1=%f,x2=%f\n”,x1,x2);}}b*b-4*a*c>0,有解C语言-5分支结构程序题目改为:求二次方程ax2+bx+c=0的两个根

disc>=0真假输出两个复根输出两个实根disc=b2-4aca==0真假输出:“非二次方程”输入a,b,ca!=0,一定有解要认真分析题目,达到题目要求C语言-5分支结构程序voidmain(){doublea,b,c,x1,x2,disc,p,q;scanf(”%lf,%lf,%lf”,&a,&b,&c);if(a==0)printf(”非二次方程”);else{disc=b*b-4*a*c;if(disc>=0){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(”x1=%f,x2=%f\n”,x1,x2);}else{p=-b/(2*a);q=sqrt(-disc)/(2*a);printf(”x1=%f+%fi,x2=%f-%fi\n”,p,q,p,q);}}}C语言-5分支结构程序例19:输入某年某月某日,判断这一天是这一年的第几天,需考虑闰年的情形。注:符合以下条件之一是闰年:①能被4整除,但不能被100整除;②能被400整除。算法分析:以5月4日为例,先把1~4月份的天数加起来,然后再加上本月的4天即本年的第几天。闰年情形只需当输入月份大于3时需要考虑。若是闰年,2月份应是29天。C语言-5分支结构程序voidmain(){intday,month,year,sum

温馨提示

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

评论

0/150

提交评论