逻辑表达与流程控制_第1页
逻辑表达与流程控制_第2页
逻辑表达与流程控制_第3页
逻辑表达与流程控制_第4页
逻辑表达与流程控制_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

逻辑表达与流程控制第一页,共四十七页,编辑于2023年,星期五

本章学习要点

关系运算逻辑运算if语句及if语句的嵌套switch语句

第二页,共四十七页,编辑于2023年,星期五5.1关系运算x<=15比较x和15的大小比较的结果:真假当x取值9.5时,x<=15的结果是:?当x取值21.3时,x<=15的结果是:?关系运算符x<yx<=yx==yx>yx>=yx!=y关系表达式:用关系运算符将2个表达式连接起来的式子。如:x<=1区分=和==

第三页,共四十七页,编辑于2023年,星期五运用关系表达式表示比较的数学式C关系表达式x≤10x≥10x≠10x=10x<=10x>=10x!=10x==10用关系表达式描述条件判断x是否为负数

x<0判断x是否不为零

x!=0

第四页,共四十七页,编辑于2023年,星期五5.2逻辑运算x<=1关系运算-1<=x<=10-11 x

x>=-1并且

x<=1x>=-1&&x<=1

第五页,共四十七页,编辑于2023年,星期五3种逻辑运算符逻辑与&&

逻辑或||逻辑非!XX&&

YYXYX||

YX!

X

第六页,共四十七页,编辑于2023年,星期五逻辑与

&&

逻辑或||逻辑非!(x>1)&&(y>1)(x>1)||(y>1)(x>1) !(x>1)即x<=1逻辑运算符的含义

第七页,共四十七页,编辑于2023年,星期五逻辑运算符的功能逻辑与

&&

逻辑或||逻辑非!

aba&&ba||b!a假假假假真假真假真真真假假真假真真真真假

第八页,共四十七页,编辑于2023年,星期五逻辑表达式逻辑表达式:用逻辑运算符将逻辑运算对象连接起来的式子。(ch>='a')&&(ch<='z')

判断ch是否为小写英文字母(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')

判断ch是否为英文字母

第九页,共四十七页,编辑于2023年,星期五条件的表示例1写出满足下列条件的C表达式。ch是空格或者回车。

ch==''||ch=='\n'number是偶数。

number%2==0year是闰年,即year能被4整除但不能被100整除,或year能被400整除。

(year%4==0&&year%100!=0)||(year%400==0)

第十页,共四十七页,编辑于2023年,星期五5.3选择控制结构if语句

1if语句的简单形式if(表达式)语句

第十一页,共四十七页,编辑于2023年,星期五例2打印出不及格的成绩

第十二页,共四十七页,编辑于2023年,星期五例3输入一个整数,输出它的绝对值分析:当number<0时,number=-number;当number>=0时,?

第十三页,共四十七页,编辑于2023年,星期五#include<stdio.h>intmain(void){intnumber; printf("Enteranumber:");scanf("%d",&number);if(number<0){number=-number;}printf("Theabsolutevalueis%d.\n",number);return0;}运行结果:Enteranumber:10

Theabsolutevalueis10.运行结果:Enteranumber:-300

Theabsolutevalueis300.

第十四页,共四十七页,编辑于2023年,星期五2.if~else结构

if(表达式)语句1else语句2

第十五页,共四十七页,编辑于2023年,星期五解我们可以使用两种方法编程:方法一:用两个简单的if语句实现:

main(){floatscore;scanf(″%f″,&score);

if(score<60.0)printf(″score=%5.1f---Fail\n″,score);if(score>=60.0)printf(″score=%5.1f---Pass\n″,score);}例4打印成绩≥60分为“Pass”,否则为“Fail”。

第十六页,共四十七页,编辑于2023年,星期五方法二:用if~else语句实现:

main(){floatscore;scanf(″%f″,&score);if(score<60.0)printf(″score=%5.1f---Fail\n″,score);elseprintf(″score=%5.1f---Pass\n″,score);}

第十七页,共四十七页,编辑于2023年,星期五条件运算符的使用

当if~else结构中的语句是表达式语句时,就可以使用条件运算符实现:

if(表达式1)表达式2;

else表达式3;用条件运算符表示:表达式1?表达式2:表达式3

第十八页,共四十七页,编辑于2023年,星期五如下列语句段:x=10;if(x>9)y=100;elsey=200;用条件运算符改写程序段:x=10;y=x>9?100:200;

第十九页,共四十七页,编辑于2023年,星期五例5输入x的值,当x>0时调用sqrt(x),否 则调用fabs(x)。

#include<stdio.h>#include<math.h>main(){floatx,y;scanf(″%f″,&x);y=x>0?sqrt(x):fabs(x);printf(″x=%f,y=%f\n″,x,y);}

第二十页,共四十七页,编辑于2023年,星期五3多分支结构与嵌套的if语句和switch语句多分支结构有多种形式实现方法:嵌套的

if语句

else–if语句嵌套的if-else语句switch语句

第二十一页,共四十七页,编辑于2023年,星期五(1)嵌套的if语句if(表达式)

语句1else

语句2

if语句

if语句

else–if语句嵌套的if-else语句

第二十二页,共四十七页,编辑于2023年,星期五if(表达式1)语句1elseif(表达式2)语句2……elseif(表达式n-1)语句n-1else语句n假表达式1表达式2语句1语句2语句n-1语句n真

表达式n-1假真

假假真

第二十三页,共四十七页,编辑于2023年,星期五嵌套的if–else语句if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4

表达式1表达式3语句4真假表达式2语句3语句1语句2真真假假

第二十四页,共四十七页,编辑于2023年,星期五if(x<1)y=x+1;elseif(x<2)y=x+2;elsey=x+3;if(x<2)if(x<1)y=x+1;elsey=x+2;elsey=x+3;

x<2

x<1y=x+1y=x+2真

假真

y=x+3假假

x<1

x<2y=x+1y=x+2真

假真

y=x+32种嵌套if语句的比较

第二十五页,共四十七页,编辑于2023年,星期五else和if的匹配if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4if(表达式1)if(表达式2)语句1elseif(表达式3)语句3else语句4else与最靠近它的、没有与别的else匹配过的if匹配if(表达式1)if(表达式2)语句1elseif(表达式3)语句3else语句4{}

第二十六页,共四十七页,编辑于2023年,星期五练习:分段计算水费分段计算水费(要求使用嵌套的if-else语句)

第二十七页,共四十七页,编辑于2023年,星期五

输入一个学生成绩,当成绩≥90时,打印“VeryGood”;当80≤成绩<90时,打印“Good”;当60≤成绩<80时,打印“Pass”;当成绩<60分,打印“Fail”。

例6设计下面的程序

第二十八页,共四十七页,编辑于2023年,星期五方法一:elseif结构来实现main(){floatscore;scanf(″%f″,&score);

if(score>=90)printf(″VeryGood\n″);elseif(score>=80)printf(″Good\n″);elseif(score>=60)printf(″Pass\n″);elseprintf(″Fail\n″);}

第二十九页,共四十七页,编辑于2023年,星期五main(){floatscore;scanf(″%f″,&score);if(score>=80)if(score>=90)printf(″VeryGood\n″);

elseprintf(″Good\n″);elseif(score>=60)printf(″Pass\n″);elseprintf(″Fail\n″);}方法二:if嵌套结构来实现

第三十页,共四十七页,编辑于2023年,星期五

main(){floatscore;scanf(″%f″,&score);if(score<60)printf(″Fail\n″);elseif(score>=60)printf(″Pass\n″);elseif(score>=80)printf(″Good\n″);elseprintf(″VeryGood\n″);}分析改写成以下形式:

第三十一页,共四十七页,编辑于2023年,星期五(2)switch语句

处理多分支选择问题,3种情况1)在switch语句的每个语句段中都使用break语句switch(表达式){case常量表达式1:语句段1;break;case常量表达式2:语句段2;break;....…case常量表达式n:语句段n;break;default:语句段n+1;break;}

第三十二页,共四十七页,编辑于2023年,星期五

假设自动售货机出售4种商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),售价分别是每份3.0、2.5、4.0和3.5元。在屏幕上显示以下菜单,用户可以连续查询商品的价格,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。当用户输入编号1-4,显示相应商品的价格;输入0,退出查询;输入其他编号,显示价格为0。[1]Selectcrisps[2]Selectpopcorn[3]Selectchocolate[4]Selectcola[0]Exit例7查询自动售货机中商品的价格

第三十三页,共四十七页,编辑于2023年,星期五表达式的值=常量表达式2的值表达式语句段1语句段2语句段n语句段n+1表达式的值=常量表达式1的值表达式的值=常量表达式n的值其他breakbreakbreakbreakswitch(choice){case1:price=3.0;break;case2:price=2.5;

break;case3:price=4.0;break;case4:price=3.5;break;default:price=0.0;break;}

第三十四页,共四十七页,编辑于2023年,星期五#include<stdio.h>intmain(void){intchoice,i;doubleprice;

for(i=1;i<=5;i++)

{printf("[1]Selectcrisps\n");printf("[2]Selectpopcorn\n");printf("[3]Selectchocolate\n");printf("[4]Selectcola\n");printf("[0]exit\n");

printf("Enterchoice:");scanf("%d",&choice);

if(choice==0)break;

switch(choice){case1:price=3.0;break;case2:price=2.5;break;case3:price=4.0;break;case4:price=3.5;break;default:price=0.0;break;}printf("price=%0.1f\n",price);

}printf("Thanks\n");}[1]Selectcrisps[2]Selectpopcorn

[3]Selectchocolate[4]Selectcola

[0]ExitEnterchoice:1price=3.0[1]Selectcrisps[2]Selectpopcorn

[3]Selectchocolate[4]Selectcola

[0]ExitEnterchoice:7price=0.0

[1]Selectcrisps[2]Selectpopcorn

[3]Selectchocolate[4]Selectcola

[0]ExitEnterchoice:0Thanks

第三十五页,共四十七页,编辑于2023年,星期五2)在switch中不使用breakswitch(表达式){case常量表达式1:语句段1;case常量表达式2:语句段2;....…case常量表达式n:语句段n;default:语句段n+1;}

第三十六页,共四十七页,编辑于2023年,星期五switch(choice){case1:price=3.0;case2:price=2.5;case3:price=4.0;case4:price=3.5;default:price=0.0;}表达式的值=常量表达式2的值表达式语句段1语句段2语句段n语句段n+1表达式的值=常量表达式1的值表达式的值=常量表达式n的值其他

第三十七页,共四十七页,编辑于2023年,星期五3)在switch的某些语句段中使用breakswitch(choice){case1:price=3.0;break;case2:price=2.5;case3:price=4.0;break;case4:price=3.5;default:price=0.0;}

第三十八页,共四十七页,编辑于2023年,星期五

用switch语句输出学生的分数等级。设分数大于等于90分者为A等,70分~90分为B等(含70),60分~70分为C等(含60),60分以下为D等,分数为浮点数。

编程思路:

switch后的表达式必须是有类型而且求出的结果应当是一个个离散的值,而不是一个数值范围。应该想办法把一个范围转换成一个确定的值,这是使用switch语句的关键。我们可以把分数除以10再取整,即可变成离散的数值,就可以用switch语句解决了。例8设计下面程序

第三十九页,共四十七页,编辑于2023年,星期五

#include<stdio.h>main(){inti;floatscore;printf("Inputascore:");scanf("%f",&score);i=score/10;switch(i){case10:case9:printf("A");break;case8:case7:printf("B");break;case6:printf("C");break;default:printf("D");}return0;}

第四十页,共四十七页,编辑于2023年,星期五例9:输入两个整数a和b,按从小到大的顺序输出。算法设计:

scanf(“%d%d”,&a,&b);

如果a>b,则a和b交换值;

printf(“%d%d”,a,b);

5.3程序举例

第四十一页,共四十七页,编辑于2023年,星期五#include<stdio.h>main(){inta,b,t;printf("请输入两个整数:");scanf("%d%d",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%d%d",a,b);}

第四十二页,共四十七页,编辑于2023年,星期五例10:输入三个整数a,b,c,按从小到大的顺序输出。算法设计:

scanf(“%d%d%d”,&a,&b,&c);

如果a>b,则a和b交换值;如果a>c,则a和c交换值;如果b>c,则b和c交换值;

printf(“%d%d%d”,a,b,c);

第四十三页,共四十七页,编辑于2023年,星期五#include<stdio.h>main(){inta,b,c,t;

温馨提示

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

评论

0/150

提交评论