C语言-ch04-1-关系、逻辑和条件表达式教程课件_第1页
C语言-ch04-1-关系、逻辑和条件表达式教程课件_第2页
C语言-ch04-1-关系、逻辑和条件表达式教程课件_第3页
C语言-ch04-1-关系、逻辑和条件表达式教程课件_第4页
C语言-ch04-1-关系、逻辑和条件表达式教程课件_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

2023/1/61上一节我们学到了赋值表达式和赋值语句=、+=、左值printf()%d、%f......scanf()&、%lfgetchar()putchar()2023/1/61上一节我们学到了赋值表达式和赋值语句2023/1/62第四章选择结构程序设计

ConditionalOperatorandExpressionsBranching2023/1/62第四章选择结构程序设计

Conditio2023/1/63Tobeornottobe,thisisaquestion.2023/1/63Tobeornottobe,t2023/1/644.1选择结构和条件判断4.2用if语句实现选择结构4.3关系运算符和关系表达式4.4逻辑运算符和逻辑表达式4.5条件运算符和条件表达式4.6选择结构的嵌套4.7用switch语句实现多分支选择结构4.8选择结构程序综合举例内容2023/1/644.1选择结构和条件判断内容ifif(x%2==0){printf("Yes\n");}如果条件为真,输出Yes否则,什么也不做2023/1/65ifif(x%2==0)2023/1/652023/1/66输入两个整数,交换这两个数后输出inta,b,t;scanf("%d%d",&a,&b);t=a;a=b;b=t;printf("%d%d\n",a,b);2023/1/66输入两个整数,交换这两个数后输出inta2023/1/67

例4.3输入3个整数a,b,c,要求按由小到大的顺序输出。解题思路:可以先用伪代码写出算法:ifa>b,a和b对换

(a是a、b中的小者)ifa>c,a和c对换

(a是三者中最小者)ifb>c,b和c对换

(b是三者中次小者)顺序输出a,b,c排序问题2023/1/67例4.3输入3个整数a,b,c,要求2023/1/68inta,b,c,t;scanf("%d%d%d",&a,&b,&c);if(a>b)//a是a、b中的小者{t=a;a=b;b=t;}if(a>c)

//a是三者中最小者{t=a;a=c;c=t;}if(b>c)

//b是三者中次小者{t=b;b=c;c=t;}printf("%d%d%d\n",a,b,c);独占一行如果没有这个{},会发生什么?2023/1/68inta,b,c,t;独占一行如果2023/1/69else关键字if(x%2==0){ y=x/2;}else{ y=(x+1)/2;}如果条件为真,执行第一个分支如果条件为假,执行第二个分支2023/1/69else关键字if(x%2==0)输入一个整数,输出绝对值inta;scanf("%d",&a);if(a>0)printf("%d\n",a);elseprintf("%d\n",-a);2023/1/610输入一个整数,输出绝对值inta;2023/1/611else

if

关键字if(x%2==0){ y=x/2;}elseif(x%4==1){ y=2∗((x+3)/4);}else{ y=(x+1)/2;}11elseif关键字if(x%2==0)12关系运算符和表达式>,>=,<,<=,==,!=大于,大于等于,小于,小于等于,等于,不等于关系表达式(和逻辑表达式)的结果为0和10,表示假,即该关系不成立1,表示真,即该关系成立在所有涉及到真假判断的地方(if,for,while),0表示假,非0表示真表达式非0=>条件为真(true)if(a>1)if(1)if(100)12关系运算符和表达式>,>=,<,<=,==,!=2023/1/613优先级P378()[]->.!~++--+(正号)-*&(类型)sizeof*/%+-<<>><<=>>===!=&^|&&||?:=+=-=*=/=%=&=^=|=<<=>>=,2023/1/613优先级P378()[]->2023/1/614关系、算术、赋值运算符的优先级inta=3,b=2,c=1;c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)while(c=getchar()!=EOF)while((c=getchar())

!=EOF)算术运算符(高)赋值运算符(低)关系运算符2023/1/614关系、算术、赋值运算符的优先级inta2023/1/615分清==和=inta=1;

if(a==0)

printf("OK");inta=0;

if(a==0)

printf("OK");inta=1;

if(a=1)

printf("OK");inta=0;

if(a=0)

printf("OK");2023/1/615分清==和=inta=1;

i2023/1/616分清==和=常量放左边,能起点小作用:inta=0;

if(0==a)

printf("OK");inta=0;

if(0=a)

printf("OK");编译出错2023/1/616分清==和=常量放左边,能起点小作用2023/1/6174.4逻辑运算符逻辑运算,运算结果为1和0&&与运算,只有左右都为真,结果才是真(a>b&&b>c);a大于b,并且b大于c||或运算,只有左右都为假,结果才是假(a>b||b>c);a大于b,或者b大于c!求反,非(!a);如果a是0,结果非0,即1;如果a是非0,结果是0并不改变a的值if(a>b>c)?2023/1/6174.4逻辑运算符逻辑运算,运算结果为12023/1/618修改后的逻辑运算真值表ab!aa&&ba||b非0非0011非000010非0101001002023/1/618修改后的逻辑运算真值表ab!aa&&2023/1/619逻辑运算符的优先级!

&&

||(非>与>或)与其他运算符的优先次序!(高)算术运算符关系运算符&&和||赋值运算符(低)2023/1/619逻辑运算符的优先级!&&2023/1/620逻辑表达式举例若a=4,则!a的值为0若a=4,b=5,则a&&b的值为1a和b值分别为4和5,则a||b的值为1a和b值分别为4和5,则!a||b的值为14&&0||2的值为15>3&&8<4-!002023/1/620逻辑表达式举例若a=4,则!a的值为2023/1/621怎么表示"如果分数80小于等于grade且小于90,则五分制分数为A"?if(80<=grade<90),错if(grade>=80&&grade<90),对if((grade>=80)&&(grade<90)),加括号最好怎么表示"如果字符型变量c为‘Y’或‘y’"?if(c=='Y'||'y'),错if(c=='Y'||c=='y'),对2023/1/621怎么表示"如果分数80小于等于grade2023/1/622逻辑表达式的自动优化a&&b&&ca为0时,表达式一定为0,不需判断b和c只有a为真(非0)时,才需要判断b和c的值a||b||c只要a为真(非0),就不需要判断b和c的值例inta=1,b=2,c=3,d=4,m=1,n=1;(m=a>b)&&(n=c>d)2023/1/622逻辑表达式的自动优化a&&b&&2023/1/623判断闰年判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:P20①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year%100!=0)||(year%400==0)如果表达式值为1,则闰年;否则为非闰年2023/1/623判断闰年判别某一年是否闰年,用逻辑表达式244.4.3逻辑型变量与C++或Java不同,没有boolean类型(inC89/C90)inC99,增加_Bool类型如果想用bool类型,使用stdbool.h244.4.3逻辑型变量与C++或Java不同,没有bo2023/1/6254.5条件表达式条件表达式的一般形式为表达式1?表达式2:

表达式3把a和b中的最大值赋值给maxif(a>b)

max=a;

else

max=b;

max=(a>b)?a:b;

这种表达式切忌用得过于繁杂2023/1/6254.5条件表达式条件表达式的一般形式为2023/1/626条件表达式的执行顺序表达式1?表达式2:

表达式3求解表达式1若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值2023/1/626条件表达式的执行顺序表达式1?表达式2:2023/1/627优先级()[]->.!~++--+-*&(类型)sizeof*/%+-<<>><<=>>===!=&^|&&||?:=+=-=*=/=%=&=^=|=<<=>>=,2023/1/627优先级()[]->.2023/1/628结合方向"自右至左"以下为合法的使用方法,但不推荐。a>b?(max=a):(max=b);max=(a>b?a:b);a>b?printf("%d",a):printf("%d",b);2023/1/628结合方向"自右至左"2023/1/629例4.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。charch;printf("请输入一个字符,按回车结束:");scanf("%c",

&ch);ch

=

(ch>='A'&&ch<='Z')

?

(ch+32)

:

ch;printf("%c\n",

ch);2023/1/629例4.4输入一个字符,判别它是否大写字2023/1/630这一节我们学到了关系运算符和表达式>,>=,<,<=,==,!==和==的区别逻辑运算符和表达式&&||!?:if2023/1/630这一节我们学到了关系运算符和表达式2023/1/631上一节我们学到了赋值表达式和赋值语句=、+=、左值printf()%d、%f......scanf()&、%lfgetchar()putchar()2023/1/61上一节我们学到了赋值表达式和赋值语句2023/1/632第四章选择结构程序设计

ConditionalOperatorandExpressionsBranching2023/1/62第四章选择结构程序设计

Conditio2023/1/633Tobeornottobe,thisisaquestion.2023/1/63Tobeornottobe,t2023/1/6344.1选择结构和条件判断4.2用if语句实现选择结构4.3关系运算符和关系表达式4.4逻辑运算符和逻辑表达式4.5条件运算符和条件表达式4.6选择结构的嵌套4.7用switch语句实现多分支选择结构4.8选择结构程序综合举例内容2023/1/644.1选择结构和条件判断内容ifif(x%2==0){printf("Yes\n");}如果条件为真,输出Yes否则,什么也不做2023/1/635ifif(x%2==0)2023/1/652023/1/636输入两个整数,交换这两个数后输出inta,b,t;scanf("%d%d",&a,&b);t=a;a=b;b=t;printf("%d%d\n",a,b);2023/1/66输入两个整数,交换这两个数后输出inta2023/1/637

例4.3输入3个整数a,b,c,要求按由小到大的顺序输出。解题思路:可以先用伪代码写出算法:ifa>b,a和b对换

(a是a、b中的小者)ifa>c,a和c对换

(a是三者中最小者)ifb>c,b和c对换

(b是三者中次小者)顺序输出a,b,c排序问题2023/1/67例4.3输入3个整数a,b,c,要求2023/1/638inta,b,c,t;scanf("%d%d%d",&a,&b,&c);if(a>b)//a是a、b中的小者{t=a;a=b;b=t;}if(a>c)

//a是三者中最小者{t=a;a=c;c=t;}if(b>c)

//b是三者中次小者{t=b;b=c;c=t;}printf("%d%d%d\n",a,b,c);独占一行如果没有这个{},会发生什么?2023/1/68inta,b,c,t;独占一行如果2023/1/639else关键字if(x%2==0){ y=x/2;}else{ y=(x+1)/2;}如果条件为真,执行第一个分支如果条件为假,执行第二个分支2023/1/69else关键字if(x%2==0)输入一个整数,输出绝对值inta;scanf("%d",&a);if(a>0)printf("%d\n",a);elseprintf("%d\n",-a);2023/1/640输入一个整数,输出绝对值inta;2023/1/641else

if

关键字if(x%2==0){ y=x/2;}elseif(x%4==1){ y=2∗((x+3)/4);}else{ y=(x+1)/2;}11elseif关键字if(x%2==0)42关系运算符和表达式>,>=,<,<=,==,!=大于,大于等于,小于,小于等于,等于,不等于关系表达式(和逻辑表达式)的结果为0和10,表示假,即该关系不成立1,表示真,即该关系成立在所有涉及到真假判断的地方(if,for,while),0表示假,非0表示真表达式非0=>条件为真(true)if(a>1)if(1)if(100)12关系运算符和表达式>,>=,<,<=,==,!=2023/1/643优先级P378()[]->.!~++--+(正号)-*&(类型)sizeof*/%+-<<>><<=>>===!=&^|&&||?:=+=-=*=/=%=&=^=|=<<=>>=,2023/1/613优先级P378()[]->2023/1/644关系、算术、赋值运算符的优先级inta=3,b=2,c=1;c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)while(c=getchar()!=EOF)while((c=getchar())

!=EOF)算术运算符(高)赋值运算符(低)关系运算符2023/1/614关系、算术、赋值运算符的优先级inta2023/1/645分清==和=inta=1;

if(a==0)

printf("OK");inta=0;

if(a==0)

printf("OK");inta=1;

if(a=1)

printf("OK");inta=0;

if(a=0)

printf("OK");2023/1/615分清==和=inta=1;

i2023/1/646分清==和=常量放左边,能起点小作用:inta=0;

if(0==a)

printf("OK");inta=0;

if(0=a)

printf("OK");编译出错2023/1/616分清==和=常量放左边,能起点小作用2023/1/6474.4逻辑运算符逻辑运算,运算结果为1和0&&与运算,只有左右都为真,结果才是真(a>b&&b>c);a大于b,并且b大于c||或运算,只有左右都为假,结果才是假(a>b||b>c);a大于b,或者b大于c!求反,非(!a);如果a是0,结果非0,即1;如果a是非0,结果是0并不改变a的值if(a>b>c)?2023/1/6174.4逻辑运算符逻辑运算,运算结果为12023/1/648修改后的逻辑运算真值表ab!aa&&ba||b非0非0011非000010非0101001002023/1/618修改后的逻辑运算真值表ab!aa&&2023/1/649逻辑运算符的优先级!

&&

||(非>与>或)与其他运算符的优先次序!(高)算术运算符关系运算符&&和||赋值运算符(低)2023/1/619逻辑运算符的优先级!&&2023/1/650逻辑表达式举例若a=4,则!a的值为0若a=4,b=5,则a&&b的值为1a和b值分别为4和5,则a||b的值为1a和b值分别为4和5,则!a||b的值为14&&0||2的值为15>3&&8<4-!002023/1/620逻辑表达式举例若a=4,则!a的值为2023/1/651怎么表示"如果分数80小于等于grade且小于90,则五分制分数为A"?if(80<=grade<90),错if(grade>=80&&grade<90),对if((grade>=80)&&(grade<90)),加括号最好怎么表示"如果字符型变量c为‘Y’或‘y’"?if(c=='Y'||'y'),错if(c=='Y'||c=='y'),对2023/1/621怎么表示"如果分数80小于等于grade2023/1/652逻辑表达式的自动优化a&&b&&ca为0时,表达式一定为0,不需判断b和c只有a为真(非0)时,才需要判断b和c的值a||b||c只要a为真(非0),就不需要判断b和c的值例inta=1,b=2,c=3,d=4,m=1,n=1;(m=a>b)&&(n=c>d)2023/1/622逻辑表达式的自动优化a&&b&&2023/1/653判断闰年判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:P20①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year%100!=0)||(year%400==0)如果表达式值为1,则闰年;否则为非闰年2023/1/623判断闰年判别某一年是否闰年,用逻辑表达式544.4.3逻辑型变量与C++或Java不同,没有boolean类型(inC89/C90)inC99,增加_Bool类型如果想用bool类型,

温馨提示

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

评论

0/150

提交评论