C语言 选择结构程序设计.ppt_第1页
C语言 选择结构程序设计.ppt_第2页
C语言 选择结构程序设计.ppt_第3页
C语言 选择结构程序设计.ppt_第4页
C语言 选择结构程序设计.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章 选择结构程序设计,5.1 关系运算符和表达式 5.2 逻辑运算符和表达式 5.3 if语句 5.4 条件运算符和表达式 5.5 switch语句,5.1 关系表达式,由关系运算符、圆括号把两个表达式连接起来的式子。 表示条件 若所表示的条件成立、则其值为1(非0)、否则其值为0。 关系运算符:、=、=、!= 例: a=2 、39 、a != ( a=8 ) 、 x+(y=3)=k*z 、(a!=3)(kl),97,8,表达式 值为1,优先,成立为1 不成立为0,非=,注意:数学中多个条件,例 abcd 应表示为 ab a=b=c=0; + +a|+ +b 后a、b值分别为0、6,a=1

2、 停止不算,值为 0 赋给a, 停止不算,3、执行 int a,b,c;a=b=c= - 1; + +a 后a、b、c值分别为0、-1、0,1,a=0,2,不算,值为0,3,c=0,4,整体为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 运行结果:0,0 1,0 0,1,0,X为非0,为非0,后面不算,为0,后面不算,判断某一年是否闰年。 (闰年的条件是符合下面两个条件之一:1、能被4整除,但不能被100整除;2、能被4整除,又能被4

3、00整除)。因为能够被400整除一定能被4整除所以第二个条件可以简化为能够被400整除。判断闰年的条件可以用一个逻辑表达式表示: (year%4=0 printf(n input two numbers: ); scanf(%d %d, 输入:23 46 输出:max=46,此语句用于提示输入,max=23,max=46,例3:void main() int a,b,c,t; printf(n input two numbers: ); scanf(“%d,%d,%d , 输入:1,6,2 输出:6 2 1,实现数的互换,功能:输入三个数,按照从大到小顺序输出,例4:从键盘输入一个字符,判断它

4、是否小写字母。若是,将其转换成大写字母,否则不进行转换,作后输出该字母。 #include main() char c,a; c=getchar(); if(cz ) a=c; /*判断非小写字母情况*/ if(c=a) a=c-32; *判断是否是小写字母情况*/ printf(%cn,a); ,main() char c; c=getchar(); if(c=a)c-=32; printf(%cn,c);,2、第二种形式为: if-else if(表达式) 语句1; else 语句2; 语义:如果表达式的值为真,则执行语句1,否则执行语句2 。,后面不能加;,void main() int

5、 a, b; printf(input two numbers: ); scanf(%d %d, 输入:23 46 输出:max=46,输入两个整数,输出其中大数,例2的改写,3、第三种形式为if-else-if形式: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句n;,语义: 依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。,后面不能加;,此为真,做语句1,其它语句都不做,

6、上面的语句为以下三种格式: 1、空语句 2、一个语句(不引起转移) 3、前后加大括号的语句(复合语句),也叫程序段,如: int a; float b; a=3; b=7.0;,;,允许在复合语句前部定义变量,只能在复合语句中使用,int a; a=3; float b; b=7.0;,变量要在最前面定义,不能写成,#includestdio.h void main() 输入:A char c; 输出:This is a capital letter c=getchar(); if(c=0 ,例5,4、在使用if语句中应注意以下问题: 1)在三种形式的if语句中,在if之后均为表达式。 该表达

7、式通常是逻辑表达式或关系表达式, 但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。 例如: if(a=5) 语句; if(b) 语句; 都是允许的。只要表达式的值为非0,即为“真”。 如在: if(a=5); 中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。,又如,有程序段: if(a=b) printf(%d,a); else printf(a=0); 本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。,=为赋值运算符,比较运算符为=,2)在if语句中,条件判断表达式

8、必须用括号括起来,在语句之后必须加分号。 3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。 例如: if(ab) a+;b+; else a=0;b=10;,if(ab) a+;b+;; else a=0;b=10;;,不能写成,if语句的嵌套,当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。 其一般形式可表示如下: if(表达式) 或 if(表达式) if语句; if语句; else if语句; 在嵌套内的if语句可能又是if-else型的,这将会出现

9、多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。,加;,如:,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配对,因此对上述例子应按前一种情况理解。,例10:写出下面两程序的输出结果,1 void main( ) int x=2,y=-1,z=2; if ( xy ) if ( y0 ) z=0; els

10、e z=1; printf (”%dn”,z); 结果:,一个语句,2,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); 结果:,2,为了使逻辑关系清晰:(1)按下面所示书写程序:,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

11、; else x=6; else x=7; printf (”%dn”,x); ,(2)适当地加大括号:,x=-3; if (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 (”x0,y=%dn”,y);,结果:x0,y=-1,无结果,例11: void main() int a,b; printf(please input A,B: ); scanf(%d%d, 输入: 输出:,if(a!=b) if(ab) printf(A

12、Bn); else printf(ABn); else printf(A=Bn);,23 46,AB,5.4 条件运算符和条件表达式,在条件语句中,只执行单个的赋值语句时,可使用条件表达式来实现。 条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。 条件表达式的一般形式为: 表达式1? 表达式2 : 表达式3 求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。,非 0,0,例如条件语句: if(ab) max=a; else max=b; 可用条件表达式写为: max=(ab)?a:b; 执行该语句的语义是: 如ab为

13、真,则把a赋予max, 如ab为假,则把b 赋予max。,使用条件表达式时,还应注意以下几点: 1)条件运算符的运算优先级低于关系运算符和 算术运算符,但高于赋值符。 因此:max=(ab)?a:b 可以去掉括号而写为 max=ab?a:b 2)条件运算符?和:是一对运算符,不能分开 单独使用。 3)条件运算符的结合方向是自右至左。 例如:ab?a:cd?c:d 应理解为 ab?a:(cd?c:d) 这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。,例6:计算,方法一: void main( ) float x,y; scanf (”%f ”, ,表达式,成立值为1,y=x3

14、 ? x*x+2 : 3*x+7*x*x;,例7:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。 void main( ) float a,b; scanf (”%f%f ”,代替,复合语句可以定义变量,a=a+b;b=a-b;a=a-b t=a;a=b;b=t,例8: 计算,方法一: main( ) float x,y; scanf (”%f ”,1=x scanf (”%f ”, , 、 可省略,y= x1? x :( x10 ? 2*x-1 : 3*x-11);,(、)可省略,方法三:,if (x10) if (x1) y=x; else y=2*x-1; else

15、y=3*x-11;, 后不能加;, 、 和 (、) 可一起省略,y= x10? ( x1 ? x :2*x-1 ): 3*x-11;,若上面分段函数改为 则程序改为 void main( ) float x,y; scanf (”%f ”, ,此语句出错与否都输出,此程序有否缺陷?,程序应改为 void main( ) float x,y; scanf (”%f ”,例18:求方程ax2+bx+c=0的两个实根 #include void main( ) double a,b,c,x1,x2,disc; scanf (”%lf%lf%lf ”, ,b*b-4*a*c0, 有解,题目改为:求二次

16、方程ax2+bx+c=0的两个根,a!=0, 一定有解 要认真分析题目,达到题目要求,void main( ) double a,b,c,x1,x2,disc,p,q; scanf (”%lf,%lf,%lf”, ,5.5 switch语句(另一种分支语句),5.5.1 格式:switch(任意类型表达式) case 常量表达式1: 语句1; case 常量表达式2: 语句2; case 常量表达式n: 语句n; default: 语句n+1; 注:常量表达式中运算对象只能为常量或符号常量(整型或字符型),各个值必须互不相同 default 允许出现在前面或中间 switch(任意类型表达式)

17、 后不带分号,不要忘 记空格,不带;,5.5.2 功能:若switch后面表达式值的整数(字符常量)部分与某个case后面表达式值相等,则就执行该case后面的语句,否则就执行default后面的语句,例13:,void main() int a; printf(input integer number: ); scanf(%d, ,输入:3,输出: Wednesda Thursday Friday Saturday Sunday error,“case 常量表达式”相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出

18、现了继续执行所有后面case语句的情况。,5.5.3 break语句:专用于跳出switch语句,在每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。 void main() switch (a) case 1:printf(Mondayn);break; case 2:printf(Tuesdayn); break; case 3:printf(Wednesdayn);break; case 4:printf(Thursdayn);break; case 5:printf(Fridayn);break; case 6:printf

19、(Saturdayn);break; case 7:printf(Sundayn);break; default:printf(errorn); ,Switch语句常用形式:,switch (任意类型表达式) case 整型或字符型常量表达式1 :语句1; break; case 整型或字符型常量表达式2 :语句2; break; case 整型或字符型常量表达式n:语句n; break; default : 语句n+1; ,default后面不加 break,在使用switch语句时还应注意以下几点:,1)case后的各常量表达式的值不能相同,否则会出现错误。 2)case后,允许有多个语句

20、,可以不用括起来。 3)case和default子句的先后顺序可以变动,而不会影响程序执行结果。 4)default子句可以省略不用。,例14:若有宏定义:#define k 2 和定义:float w; int a=2,b; 则合法的switch语句是 Aswitch (w) Bswitch (a+b) case 1.0:printf(”*n”); case 1 printf(”*n”); case 2.0:printf(”*n”); case a printf(”*n”): Cswitch (w+1.76) Dswitch (a) ; case k-1 :printf(”*n”); cas

21、e 1: printf(”*n”);default : printf(”n”); case 2:printf(”*n”); case 1+2:printf(”*n”); default : printf(”n”);,C,不能为实型,不能为变量,少;,不能加分号,例15:,先接收从键盘输入的一个等级制成绩,然后输出对应的百分制成绩。转换规则如下: A:85100 B :7084 C :6069 D 60,void main( ) char grade; scanf(“%c”, ,例16:先接收从键盘输入的一个百分制成绩,然后输出对应的五分制成绩。转换规则如下: 90100 A 8089 B 70

22、79 C 6069 D 60 E,void main( ) int cj; printf(”Input a integer number(0-100)n”); scanf(“%d”, ,90100 A 8089 B 7079 C 6069 D 60 E,例17:计算器程序。用户输入运算数和四则运算符,输出计算结果。,void main() float a,b; char c; printf(input expression: a+(-,*,/)b n); scanf(%f%c%f, ,字符相当于整数,输入:11 + 13 输出:25.000000,本例可用于四则运算求值。switch语句用于判断运算符,然后输出运算值。当输入运算符不是+,-,*,/时给出错误提示。,例19:输入某年某月某日,判断这一天是这一年的第几天,需考虑闰年的情形。 注:符合以下条件之一是闰年: 能被4整除,但不能被100整除; 能被400整除。 算法分析: 以5

温馨提示

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

评论

0/150

提交评论