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

下载本文档

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

文档简介

1、第五章 分支结构程序设计 由关系运算符、圆括号把两个表达式连接起由关系运算符、圆括号把两个表达式连接起来的式子。来的式子。 若所表示的条件成立、则其值为若所表示的条件成立、则其值为1(非(非0)、)、否则其值为否则其值为0。、例:例: a=2 、39 、a != ( a=8 ) 、 x+(y=3)=k*z 、(a!=3)(kbcd 应表示为应表示为 不能顺手也写为不能顺手也写为 abcd 关系运算符都是双目运算符,其结合性均关系运算符都是双目运算符,其结合性均为为。 在六个关系运算符中,在六个关系运算符中,。由逻辑运算符、圆括号把表达式连接起来的式子由逻辑运算符、圆括号把表达式连接起来的式子若

2、所表示的条件成立、其值为若所表示的条件成立、其值为1(非非0)、否则其值为、否则其值为0& (与)(与) 、| (或)、!(非)(或)、!(非)和和均为均为,具有具有。 为为,具有,具有。逻辑运算符和其它运算符优先级的关系可表示如下:逻辑运算符和其它运算符优先级的关系可表示如下: 按照运算符的优先顺序可以得出:按照运算符的优先顺序可以得出: ab & cd 等价于等价于 (ab)&(cd) !b=c|da 等价于等价于 (!b)=c)|(dc&x+yc)&(x+y)3 a=8 23 0 2、x+y a 2 3、x+(y=3)=k*z !a 0+3=-1

3、!a 0|0 4、(x!=7) a 0!=7|971|97 5、 ( x+y3 a=8 ) !(231)!(01)!016、 ( k*q ) !(-1)7、!x !(1) !(0) 1作第一个,知道结果,后面不作,如:作第一个,知道结果,后面不作,如: & &1、执行、执行 int a,b,c; a=b=c=0; + +a|+ +b&+ +c; 后后a、b、c值分别为值分别为1、0、02、执行、执行 int a=5,b=6,x=1,y=2; (a=xy)&(b= xy); 后后a、b值分别为值分别为0、63、执行、执行 int a,b,c;a=b=c= - 1;

4、 + +a & + +b | + +c; 后后a、b、c值分别为值分别为0、-1、0 例例1:main()char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(%d,%dn,!x*!y,!x); printf(%d,%dn,x|i&j-3,ij&xy); printf(%d,%dn,i=5&c&(j=8),x+y|i+j+k); 1、第一种形式为基本形式、第一种形式为基本形式: if if(表达式表达式) 语句语句 语义:如果表达式的值为真,则执行其后的语句,语义:如果表达式的值为真,则执行其后的语

5、句,否则不执行该语句。其过程可表示为下图。否则不执行该语句。其过程可表示为下图。 表 达 式 可表 达 式 可以 是 任 意以 是 任 意合 法 表 达合 法 表 达式 , 后 面式 , 后 面不能加;不能加;例例2:void main() int a,b,max; printf(n input two numbers: ); scanf(%d %d,&a,&b); max=a; if (maxb) max=b; printf(max=%d,max); 例例3:void main() int a,b,c,t; printf(n input two numbers: ); sca

6、nf(%d %d %d ,&a,&b,&c); if (ab) t=a;a=b;b=t; if (ac) t=a;a=c;c=t; if (bb) printf(max=%dn,a); else printf(max=%dn,b); 3、第三种形式为、第三种形式为if-else-if形式:形式:语义:语义: 依次判断表达式的依次判断表达式的值,当出现某个值为值,当出现某个值为真时,则执行其对应真时,则执行其对应的语句。然后跳到整的语句。然后跳到整个个if语句之外继续执行语句之外继续执行程序。程序。 如果所有的表如果所有的表达式均为假,则执行达式均为假,则执行语句语句n。

7、然后继续执行。然后继续执行后续程序。后续程序。后面不能后面不能加;加;上面的语句为以下三种格式:上面的语句为以下三种格式:1、空语句、空语句2、一个语句(不引起转移)、一个语句(不引起转移)3、前后加大括号的语句(复合语句),、前后加大括号的语句(复合语句),也叫程序段,如:也叫程序段,如:int a; float b; a=3; b=7.0; 不能写成不能写成 #includestdio.h#includestdio.h voidvoid main() main() char c; char c; c=getchar(); c=getchar(); if(c32) if(c=0&c=

8、0&c=a&c=a&c=a&c=a&cb) a+;b+; else a=0;b=10; if(ab) a+;b+;; else a=0;b=10;;不能写成不能写成 在条件语句中,只执行单个的赋值语句时,可使用在条件语句中,只执行单个的赋值语句时,可使用条件表达式来实现。条件表达式来实现。 条件运算符为条件运算符为和和,它是一个,它是一个,即有,即有三个参与运算的量。三个参与运算的量。条件表达式的一般形式为:条件表达式的一般形式为: 如果表达式如果表达式1的值为真,则以表达式的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式的值作为条件表达式的

9、值,否则以表达式2的值作的值作为整个条件表达式的值。为整个条件表达式的值。例如条件语句:例如条件语句: 可用条件表达式写为可用条件表达式写为: 执行该语句的语义是:执行该语句的语义是:如如ab为真,则把为真,则把a赋予赋予max,如如ab为为假假,则把,则把b 赋予赋予max。使用条件表达式时,还应使用条件表达式时,还应以下几点:以下几点:1)条件运算符的运算优先级低于关系运算符和)条件运算符的运算优先级低于关系运算符和 算术运算符,但高于赋值符。算术运算符,但高于赋值符。 因此:因此: 可以去掉括号而写为可以去掉括号而写为 2)条件运算符)条件运算符是是。3)条件运算符的结合方向是)条件运算

10、符的结合方向是。 例如:例如: 应理解为应理解为 这也就是条件表达式嵌套的情形,即其中的这也就是条件表达式嵌套的情形,即其中的表达式表达式3又是一个条件表达式。又是一个条件表达式。例例6:计算:计算方法一:方法一:void main( ) float x,y; scanf (”%f ”,&x); if (x3) y=x*x+2; else y=3*x+7*x*x; printf(”y=%fn”,y);例例7:从键盘输入任意的两个实数,按从小到大顺序:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。输出这两个数,请编程实现。void main( ) float a,b;

11、 scanf (”%f%f ”,&a,&b); if (ab) a=a+b;b=a-b;a=a-b; printf(”%f,%fn”,a,b);可用语句可用语句代替代替a=a+b;b=a-b;a=a-bt=a;a=b;b=t例例8:p105 5.5 计算计算方法一:方法一:main( ) float x,y; scanf (”%f ”,&x); if (x1) y=x; else if ( x10 ) y=2*x-1; else y=3*x-11; printf(”y=%fn”,y);)10(113)101 (12) 1(xxxxxxy方法二:方法二:void main

12、( ) float x,y; scanf (”%f ”,&x); if (x1) y=x; else if ( x10 ) y=2*x-1; else y=3*x-11; printf(”y=%fn”,y);)10(113)101 (12) 1(xxxxxxy 、方法三:方法三:if (x10) if x1 y=x; else y=2*x-1; else y=3*x-11; 后不能加后不能加 和和 可一起省略可一起省略 若上面分段函数改为若上面分段函数改为则程序改为则程序改为void main( ) float x,y; scanf (”%f ”,&x); else if (

13、x1) y=x; else if ( x10 ) y=2*x-1; else y=3*x-11; printf(”y=%fn”,y);)2010(113)101 (12) 12(xxxxxxy程序应改为程序应改为void main( ) float x,y; scanf (”%f ”,&x); else if ( x1) y=x; printf(”y=%fn”,y); else if (1=x & x10 ) y=2*x-1; printf(”y=%fn”,y); else y=3*x-11; printf(”y=%fn”,y); 当当if语句中的执行语句又是语句中的执行语句又

14、是if语句时,则构成语句时,则构成了了if 语句嵌套的情形。语句嵌套的情形。其一般形式可表示如下:其一般形式可表示如下: 或或 ; 在嵌套内的在嵌套内的if语句可能又是语句可能又是if-else型的,这将型的,这将会出现多个会出现多个if和多个和多个else重叠的情况,这时要重叠的情况,这时要特别注意特别注意if和和else的配对问题。的配对问题。 加加如:如: if(表达式表达式1) if(表达式表达式2) 语句语句1; else 语句语句2;其中的其中的else究竟是与哪一个究竟是与哪一个if配对呢配对呢? 是是 还是还是 例例10:写出下面两程序的输出结果:写出下面两程序的输出结果1 v

15、oid main( ) int x=2,y=-1,z=2; if ( xy ) if ( y0 ) z=0; else z=1; printf (”%dn”,z); void main( ) int a=1,b=3,c=5,d=4; if ( ab ) if ( cd ) x=1; else if ( ac ) if ( bd ) x=2; else x=3; else x=6; else x=7; printf (”%dn”,x); 为了使逻辑关系清晰:为了使逻辑关系清晰:(1)按下面所示书写程序:按下面所示书写程序: void main( ) int a=1,b=3,c=5,d=4; if

16、 ( ab ) if ( cd ) x=1; else if ( ac ) if ( bd ) x=2; else x=3; else x=6; else x=7; printf (”%dn”,x); (2)适当地加大括号:)适当地加大括号: x=-3; if (x0) y=-1;printf (”x0)y=1; printf (”x0,y=%dn”,y);把上面与下面比较把上面与下面比较x=-3;if (x=0) if (x0) y=1;printf (”x0,y=%dn”,y);else y=-1;printf (”xb) printf(abn); else printf(ab) prin

17、tf(abn); else printf(abn); else printf(a=bn);例例12:输入一年份,判别是否闰年。输入一年份,判别是否闰年。void main()int year,leap; scanf(“%d”,&year); if(year%4=0) if(year(%100=0) if(year%400)=0) leap=1; else leap=0; else leap=1; else leap=0; if(leap)printf(“%d is “,year); else printf(“%d is “,year); printf(“a leap year. n“)

18、; 若若switch后面表达式值的后面表达式值的部分与某个部分与某个case后面表达式值相后面表达式值相等,则就执行该等,则就执行该case后面的语句,否则就执后面的语句,否则就执行行default后面的语句后面的语句例例13:void main()int a; printf(input integer number: ); scanf(%d,&a); switch(a) case 1:printf(mondayn); case 2:printf(tuesdayn); case 3:printf(wednesdayn); case 4:printf(thursdayn); case 5

19、:printf(fridayn); case 6:printf(saturdayn); case 7:printf(sundayn); default:printf(errorn);在每一每一case语句之后增加语句之后增加break 语句,语句, 使每一次执行使每一次执行之后均可跳出之后均可跳出switch语句,从而避免输出不应有的语句,从而避免输出不应有的结果结果。 void main() switch (a) case 1:printf(mondayn);break; case 2:printf(tuesdayn); break; case 3:printf(wednesdayn);br

20、eak; case 4:printf(thursdayn);break; case 5:printf(fridayn);break; case 6:printf(saturdayn);break; case 7:printf(sundayn);break; default:printf(errorn); switch语句常用形式:语句常用形式:switch (任意类型表达式任意类型表达式) case 整型或字符型常量表达式整型或字符型常量表达式1 :语句:语句1; break; case 整型或字符型常量表达式整型或字符型常量表达式2 :语句:语句2; break; case 整型或字符型常量

21、表达式整型或字符型常量表达式n:语句:语句n; break; default : 语句语句n+1; default后后面不加面不加 break在使用在使用switch语句时还应语句时还应注意注意以下几点:以下几点:1)case后的各常量表达式的值不能相同,否后的各常量表达式的值不能相同,否则会出现错误。则会出现错误。 2)case后,允许有多个语句,可以不用后,允许有多个语句,可以不用括括起来。起来。 3)case和和default子句的先后顺序可以变动,子句的先后顺序可以变动,而不会影响程序执行结果。而不会影响程序执行结果。 4)default子句可以省略不用。子句可以省略不用。 例例14:

22、若有宏定义:若有宏定义:#define k 2 和定义:和定义:float w; int a=2,b; 则合法的则合法的switch语句是语句是 bswitch (a+b) case 1 printf(”*n”); case a printf(”*n”):cswitch (w+1.76) case k-1 :printf(”*n”); default : printf(”n”); case 1+2:printf(”*n”); 例例15:p105 先接收从键盘输入的一个等级制成绩,先接收从键盘输入的一个等级制成绩,然后输出对应的百分制成绩。转换规则然后输出对应的百分制成绩。转换规则如下:如下:

23、a:85100 b :7084 c :6069 d 60void main( )char grade; scanf(“%c”,&grade); switch(grade) case a:printf(”85100n”); break; case b:printf(”7084n”); break; case c:printf(”6069n”); break; case d: printf(”60n”); break; default: case 10:printf(”errorn”); 例例16:先接收从键盘输入的一个百分制:先接收从键盘输入的一个百分制成绩,然后输出对应的五分制成绩。转

24、成绩,然后输出对应的五分制成绩。转换规则如下:换规则如下: 90100 a 8089 b 7079 c 6069 d 100|cj0) printf(”input error!”); else if ( cj60) printf(”en”); else switch(cj/10) case 6:printf(”dn”); break; case 7:printf(”cn”); break; case 8:printf(”bn”); break; case 9: case 10:printf(”an”); 例例17:计算器程序。用户输入运算数和四则运算符,计算器程序。用户输入运算数和四则运算符,输出计算结果。输出计算结果。void main() float a,b; char c;

温馨提示

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

评论

0/150

提交评论