c语言课件10c选择结构程序设计_第1页
c语言课件10c选择结构程序设计_第2页
c语言课件10c选择结构程序设计_第3页
c语言课件10c选择结构程序设计_第4页
c语言课件10c选择结构程序设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章选择结构程序设计 关系运算关系运算用来比较数值与数值之间的关系关系运算符有、=、=、b 的结果为d=ab 的结果为b+cb= =c 的结果为f=abc 的结果为110104a3 的结果为0=与= = 的区别:例:int b=3;请求出下列两个表达式的值 及b的值。 1、b=5; 2、b= = 5;表达式的值为5,b的值为5表达式的值为0,b的值为3if (x=2)printf(“win!”); 改错if (x= =2) printf(“win!”);if 后接关系表达式,结果为逻辑值:真或假 逻辑运算C语言提供了三种逻辑运算符: ! (逻辑非) & (逻辑与) | (逻辑或)高低 ! (

2、逻辑非)是单目运算符,优先级最高 & (逻辑与)、 | (逻辑或)是双目运算符,优先级高于赋值运算符,低于关系运算符 逻辑表达式就是用逻辑运算符将逻辑量连接起来的式子 逻辑表达式的结果为1(真)或0(假)高高低低逻辑运算的真值表 0 0 0 1 1 0 1 1 pq!pp&qp|q3&2 的结果为 10&2 的结果为 110011110000000100000011011100111111543的结果为1对吗?错, 54&43为16=6=6的结果为01(1)两个表达式作&,只要一个的值为0,不必计算另一个,该表达式的值为0;(2)两个表达式作| |,只要一个的值为1,不必计算另一个,该表达式的

3、值肯定为1.#include void main()int a=0,b=1,c=1; (a+)&(b+)&(c+); printf(%d,%d,%d,a,b,c);结果: 1 , 1 , 1总结常用运算符的优先级非算关逻赋逻辑非算术运算关系运算逻辑运算赋值运算一、求下列逻辑表达式的值(设 a=3,b=4,c=5)(1) a+bc&b=c7545100(2) !(ab)&!c|b+c/2054160201二、根据下列描述写出C语言表达式(1) 判断某数能否被3、7、11整除(该数为num)能被11整除能被3整除能被7整除且且num%3=0num%7=0num%11=0&C语言表达式为:num%3

4、=0&num%7=0&num%11=0闰年的条件满足下列二者之一:(2) 判断某年是否为闰年(该年为year)能被4整除且不能被100整除能被400整除能被4整除不能被100整除能被400整除且或year%4=0year%100!=0year%400=0&|C语言表达式为:(year%4=0&year%100!=0)|year%400=04.1 if 语句if 语句的三种形式if 语句与条件运算符1if (表达式) 语句;2if (表达式) 语句1;else 语句2;3复合 if 语句 if (表达式1) 语句1; else if (表达式2)语句2; . else if (表达式n)语句n;

5、 else 语句 n+1;if语句就是根据某一条件决定执行某一语句,二者选其一,它有三种形式:表达式语句YN表达式语句1YN语句24.1.1 if语句的三种形式例 1 从键盘输入一个字符,如果是字母,则输出,否则不输出。 #include void main() char c; scanf(“%c”,&c); if (c=A&c=a&c=z) printf(“%c”,c); c (较大者)a(较小者)1、变量说明2、输入三个数3、按大小排序4、按顺序输出b (较大者)a (较小者)b (较小者)13a、b、cabcc (较大者)2a例2 输入三个数,按由小到大顺序输出程序如下:#include

6、 void main( )float a,b,c,t; scanf(“%f%f%f“,&a,&b,&c); if (ab) t=a; a=b; b=t; if (ac) t=a;a=c;c=t;if (bc) t=b;b=c;c=t;printf(“%5.2f, %5.2f,%5.2f”,a,b,c); 若一个语句不能完成该操作可以使用复合语句 用 括起来的多个语句 组成一个复合语句#include void main( ) float a,b,c,d,t; scanf(%f%f%f%f, &a,&b,&c,&d); if (ab) t=a; a=b; b=t; if (ac) t=a; a=

7、c; c=t ; if (ad) t=a;a=d; d=t ; if (bc) t=b;b=c;c=t; if (bd) t=b;b=d;d=t; if (c=90elsex=75x=60elseABCDelse程序如下:#include void main( ) int score; char grade; printf(“请输入学生成绩:”); scanf(“%d”,&score); if (score=90) grade=A; else if (score=75) grade=B ; else if (score=60) grade=C; else grade=D; printf(“学生

8、成绩是%d,等级是%cn”, score,grade); 注意:else 总是与最近的一个if匹配请思考:有一函数:y=-1 (x0) 编一程序,输入一个x值,输出y值。有以下几种写法,请大家判断那些正确?程序1: void main( )int x,y; scanf(“%d”,&x); if (x=0) if (x0) y=1; else y=0; else y=-1; . . . . . . X=0X0X=0X0) y=1; else y=0; . . . . . . 程序4: . . . . . y=0; if (x=0) if (x0) y=1;else y= -1; . . . .

9、. . X0X=0elseelse程序1结果:x0 y=1程序2结果:x0 y=1程序3结果:x0 y=1程序4结果:x0 y=1对对错错程序举例-if的嵌套结构例5 写程序,判断某一年是否是闰年. #include 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(“%

10、d is not”,year);printf(“a leap year .n”);如:求b的绝对值:if (b0) abs_b= -b;else abs_b= b;abs_b= -babs_b= babs_b= -b:babs_b=(b0)?-b:b;abs_b=(b0)?-b:b;条件表达式的一般形式: e1? e2 :e3 若e1为真,则此条件表达式取值为e2的值,若e1为假,则取值为e3的值。例1:写出计算c=a+|b| 的条件表达式 :if (b0) c=a-b;else c=a+b; c=b0?a-b:a+b;4.1.2 条件运算符与条件语句之间的关系例2:判断一字符变量a是否为大写

11、字母,若是,则将它转换成小写。if ( a=A) a=a+32;a=(a=A)?a+32:a 条件运算符的优先级大于赋值运算符,小于关系运算符,结合方向也是自右而左;用条件表达式求三个数的最大值:max=(ab)?a:b)c?(ab)?a:b):ca,b两数最大值例3:执行下列语句后,a的值是_,b的值是_,c的值是_.int a,b,c,m=1,n=0;a=(- -m= =n+)?- -m:+n;b=m+;c=- -n;m=0m= =n该表达式值为1n=1m= -1a= -1b= -1,m= -1+1=0n=1-1=0, c=0-1-104.2 switch语句 if语句是在二种情况中作出选

12、择,一旦要选择的条件比较多,用if层层嵌套就比较麻烦。switch语句可以对多分支进行选择。格式: switch (表达式) case 常量表达式1:语句1; case 常量表达式2:语句2; . . . . . . case 常量表达式n:语句n; default : 语句n+1; 表达式语句1语句2. . .语句3语句n若要每执行一条语句即跳出switch语句,要使用break格式: switch (表达式) case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; . . . . . . case 常量表达式n:语句n;break; default :

13、语句n+1; 语句n+1out常量表达式1常量表达式2常量表达式3常量表达式ndefaultbreak break break break 例1 根据学生成绩等级划分成绩段。等级A,分数在90100之间,等级B分数在7589之间,等级C,分数在6074之间;等级D,分数在059之间#include void main( )char grade; scanf(“%c”,&grade); switch (grade) case A:printf(“90100n”); break; case B:printf(“7589n”); break; case C:printf(“6074n”); brea

14、k; case D:printf(“059n”); break; default :printf(“输入错误n”); 例2:测试变量ch(字符类型)是数字、空白还是其它 字符。09都是数字,换行、退格、空格都可当作是 空白字符。switch(ch )case 0: printf(“Its a digitn”); case 1: printf(“Its a digitn”); . . . . . . case 9: printf(“Its a digitn”); break; case 32: printf(“Its a white n”); case n: printf(“Its a whit

15、en”); case b: printf(“Its a whiten”);break; default: printf(“Its a charn”); 例3:输入年月日,输出该日是这一年中的第几天(考虑闰年)编程思想:利用switch语句下滑趋势做累加求和请思考:如果是2010年5月4日应该如何算?1月天数+2月天数+3月天数+4月天数+4再思考:如果是x月y日应该如何算?1月天数+x-1月天数+y#include void main()int y,m,d,yy,days=0; printf(Please input year-month-date:); scanf(%d-%d-%d,&y,&

16、m,&d); if(y%4=0&y%100!=0|y%400=0) /*将二月份的天数放入yy中*/ yy=29; else yy=28; switch(m) case 12: days+=30; /*将11月份的天数加进来*/ case 11: days+=31; /*将10月份的天数加进来*/ case 10: days+=30; /*将9月份的天数加进来*/ case 9: days+=31; /*将8月份的天数加进来*/ case 8: days+=31; /*将7月份的天数加进来*/ case 7: days+=30; case 6: days+=31; case 5: days+=30; case 4: days+=31; case 3: days+=yy; /*将2月份的天数加进来*/ case 2: days+=31; /*将1月份的天数加进来*/ days+=d; printf(tIts the %d day of the year.n,days); 使用switch语句时应注意:switch后表达式的类型与case后常量表达式类型应一致.表达式类型一般使用整型或字符型。case后常量表达式应为单个常量,或是不含变量的常量表达式,但不能为变量。case后的常量表达式的值不能有相同的,如果有相同就意味着有两个入

温馨提示

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

评论

0/150

提交评论