C语言基础及教程 10_第1页
C语言基础及教程 10_第2页
C语言基础及教程 10_第3页
C语言基础及教程 10_第4页
C语言基础及教程 10_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

学习目标掌握关系运算和逻辑运算的运算规则,熟悉条件表达式的构成掌握if语句和switch语句的使用方法掌握逻辑推理与判断问题的数值化求解方法能够使用if语句和switch语句,进行选择结构程序设计增强法制观念,德智体美劳全面发展案例导入案例4谁是盗贼【问题描述】公安人员审问四名盗贼嫌疑犯。已知,这四名人当中仅有一名是盗贼,还知道这四个人中每人要么是诚实的,要么是说谎的。在回答公安人员的问题中:甲说:“乙没有偷,是丁偷的。”乙说:“我没有偷,是丙偷的。”丙说:“甲没有偷,是乙偷的。”丁说:“我没有偷。”根据这四人的答话,小明想了想,用笔在纸上画了画,5分钟后作出答案:是乙偷的。请问:小明是怎么知道的,他的判断正确吗?知识学习【知识准备】

谁是盗贼的算法要点:首先把问题进行数值化处理,根据对话列出条件表达式,最后用C语言选择结构,计算表达式的值,验证小明给出的判断。本案例涉及到C语言的条件表达式,以及选择结构。日常生活中,经常需要判断某一个“条件”是否成立,并根据条件作出选择。要完成上面的任务,必须熟悉条件表达式的构成和运算规则,掌握逻辑推理与判断问题的数值化处理方法,熟悉使用if语句进行选择结构程序设计。本章学习内容如下:4.1条件判断表达式4.2算术、关系、逻辑、赋值混合运算4.3选择结构4.4综合应用第二知识空间:数值化示例*4.1条件判断表达式(知识学习)4.1.1关系表达式1.关系运算符关系运算是指对两个运算量之间大小的比较,关系运算的结果为逻辑值或称“布尔”(boolean)值,其值只有两种可能“真”或“假”,6种关系运算符见下表。表4-1关系运算符4.1条件判断表达式2.关系表达式用关系运算符将两个表达式连接起来的式子称为关系表达式。其一般形式为:<表达式1><关系运算符><表达式2>例如,下面的关系表达式都是合法的。a+b>5,a<=b+c,a-6>b+2,a!=b+14.1条件判断表达式3.关系表达式的值---逻辑值(“真”或“假”)C编译系统没有“逻辑”类型数据,用1和0分别表示逻辑值的“真”和“假”。在进行判断时系统视非零值为“真”,零值为“假”;而关系运算的结果若为“真”则其值为1,若为“假”则其值为0。例如:3+5==2*4即判断(3+5)是否等于(2*4),结果值为1。3<=5!=4先判断(3<=5),结果为0,再进行0!=4,结果值为1。2+3!=5>5-3等价于(2+3)!=(5>(5-3)),结果值为1。x=5>4>=3等价于先求5>4结果为1,再进行1>=3的比较,结果为0,即关系运算的结果值为0,最后将0赋值给变量x。4.1条件判断表达式4.1.2逻辑表达式1.逻辑运算符逻辑运算是表示运算对象的逻辑关系。C语言提供3种逻辑运算符见下表。表4-2逻辑运算符4.1条件判断表达式2.运算规则逻辑运算真值表见表4-3。即:&&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”;||:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”;!:当运算量的值为“真”时,运算结果为“假”,否则为“真”。表4-3逻辑运“真值表”4.1条件判断表达式3.逻辑表达式用逻辑运算符(&&、||、!)把一个或两个表达式连接起来的式子,称为逻辑表达式。其一般形式为:!表达式或表达式1&&表达式2或表达式1||表达式2例如:!4结果值为0。3&&4结果值为1。3||0结果值为1。3&&0||2等价于(3&&0)||2,结果值为1。!4||3&&2等价于(!4)||(3&&2),结果值为1。4.1条件判断表达式【例4.2】逻辑表达式应用举例。#include<stdio.h>intmain(){charch='A’;inta=0,b=2,c=5;floatx=100,y=3.14;printf("%d,%d\n",ch&&a,a||b);

printf("%d,%d\n",!a,(x&&y)||(!!a&&c));

return0;}运行结果如下:0,11,1

4.2算术、关系、逻辑、赋值混合运算当表达式中包含多个运算符时,根据运算符的优先级来决定运算顺序,高优先级的先参加运算,运算符的优先详见下表。!(非)—>算术运算—>关系运算—>&&—>||—>赋值运算4.2算术、关系、逻辑、赋值混合运算!(非)—>算术运算—>关系运算—>&&—>||—>赋值运算【例4.3】混合运算举例。(1)5>3&&2||8<4-!0=((5>3)&&2)||(8<(4-(!0)))=(1&&2)||(8<(4-1))=1//第一个操作数(1&&2)被判定为“真”,不再判定第二操作数(2)!(3>4)&&!5||2=(!(3>4)&&(!5))||2=(1&&0)||2=0||2=14.3选择结构只有一个条件可供选择,就是单分支结构;提供两个条件只能选其一,就是双分支结构;从多个条件选其一,就是多分支结构。4.3.1if语句1.单分支if语句格式:if(表达式)语句;功能:如果表达式的值为“真”(非0),则执行语句;

否则不执行该语句。4.3选择结构【例4.4】编写一个单分支结构程序,用于显示用户输入数据的绝对值。解题分析:问题转化为求y=|x|。如果x<0,则y取x的值是错误的,需重新为y取-x的值;最后输出x和y的值。#include<stdio.h>intmain(){floatx,y;printf("请输入x:");scanf("%f",&x);y=x;if(x<0)y=-x;printf("y=|%10.4f|=%10.4f\n",x,y);return0;}运行结果如下:请输入x:-2.5↙(回车)y=|┖┚┖┚┖┚-2.5000|=┖┚┖┚┖┚┖┚2.50004.3选择结构2.双分支if语句格式:if(表达式)语句1;else语句2;功能:如果表达式的值为“真”(非0),则执行语句1;否则执行语句2。其流程图如图4-2所示。4.3选择结构3.多分支if语句格式:if(表达式1)语句1elseif(表达式2)语句2┇elseif(表达式n)语句nelse语句n+1功能:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句,然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n+1,然后继续执行后续语句。4.3选择结构算法设计如下:(1)声明变量x,y。(2)输入自变量x的值。(3)如果x<2,则y=x3-4x;

如果8>x≥2,则y=2x+1;

如果x≥8,则y=x2-x+3。(4)输出函数值y。#include<stdio.h>intmain(){floatx,y;//声明变量x,yprintf("请输入x的值:");scanf("%f",&x);//输入自变量x的值//依据x值,套用多分支if语句计算y值if(x<2)y=x*x*x-4*x;elseif(x<8)y=2*x+1; elsey=x*x-x+3;printf(“函数值y=%f\n”,y);//输出y值return0;}4.3选择结构4.if语句使用注意事项(1)if后面的条件表达式必须用圆括号括起来。(2)每个表达式后面的语句如果不止有一条C语言语句时,必须用一对花括号“{}”括起来组成复合语句;否则只能执行前面的一条语句。例如:if(a>b){a++;b++}else{a=0;b=1;}(3)表达式可以是任意类型的C语言合法表达式,除常见的算术表达式、关系表达式或逻辑表达式外,也可以是其它表达式,如赋值表达式,甚至也可以是一个变量。4.3选择结构4.3.2if语句的嵌套if语句的嵌套,就是在if语句中又包含了一个或多个if语句。if语句的主要两种嵌套形式。1.嵌套在if子句中if(表达式){if语句//被嵌套if语句}else语句2;2.嵌套在else子句中if(表达式)语句1;else{if语句//被嵌套if语句}4.3.2if语句的嵌套算法1:嵌套在else子句中,就变成了多分支结构#include<stdio.h>intmain(){intx,y;printf("请输入x:");scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0; elsey=1;printf("x=%d,y=%d\n",x,y);return0;}算法2:嵌套在if子句中。#include<stdio.h>intmain(){intx,y;printf("请输入x:");scanf("%d",&x);if(x!=0)if(x<0)y=-1; elsey=1; elsey=0;printf("x=%d,y=%d\n",x,y);return0;}4.3.3条件运算符(?:)条件运算符:“?:”,C语言中唯一的三目运算符。格式:<表达式1>?<表达式2>:<表达式3>功能:首先计算表达式1的值,如果表达式1的值为非0(真),则整个条件表达式的值取表达式2的值;否则,整个条件表达式的值取表达式3的值。#include<stdio.h>intmain(){inta,b,max;printf("请输入2个整数:");scanf("%d%d",&a,&b);max=a>b?a:b;printf("较大数是%d\n",max);return0;}【例4.8】从键盘输入2个整数,求其中较大数并输出。4.3.4switch语句功能与多分支if语句很相似,表达方式直观、简单、有效。1.switch语句的语法格式switch(<表达式>){case<常量表达式1>:<语句序列1>;[break;]case<常量表达式2>:<语句序列2>;[break;]……case<常量表达式n>:<语句序列n>;[break;][default:<语句序列n+1>;[break;]]}4.3.4switch语句2.switch语句执行过程(1)首先计算switch后的表达式的值。(2)然后将结果值与case后的常量表达式值比较,如果找到相匹配的case,程序就执行相应的语句序列,直到遇到break语句,switch语句执行结束;如果找不到匹配的case,就归结到default处,执行它的语句序列,直到遇到break语句为止;如果没有default,则不执行任何操作。3.使用switch语句的注意事项(1)switch后面的“表达式”和“常量表达式”必须是整数类型或枚举类型,如int、char、sbyte、ushort、short、uint、int、ulong、long。(2)case后的“常量表达式”必须互异,不能重复,其中default和<语句序列n+1>可以省略。(3)switch语句中的case和default的出现次序是任意的,且case的次序不要求按常量表达式的大小顺序排列。(4)case后面的常量表达式仅起语句标号作用,必须在运行前就是确定的,不能改变的。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。3.使用switch语句的注意事项【例4.9】用switch语句编写程序,根据输入的成绩输出相应的A、B、C、D和E等级,其中A:90~100;B:80~89;C:70~79;D:60~69;E:0~59。本题的关键是要将输入的百分制分数,设法转化为五分制等级制,从而套用开关语句输出相应等级信息。算法设计如下:(1)定义变量(2)输入成绩(3)将成绩转化为五分制等级制(分数/10)(4)按等级变量,套用switch语句,输出输入成绩的等级。3.使用switch语句的注意事项intmain(){ intiScore,temp;//(1)定义变量printf("请输入成绩:");scanf("%d",&iScore);//(2)输入成绩temp=iScore/10;//(3)将成绩百分制转化为五分制等级制switch(temp)//(4)按等级变量,套用switch语句{ case10: case9:printf("你的成绩等级是A.\n");break; case8:printf("你的成绩等级是B.\n");break; case7:printf("你的成绩等级是C.\n");break; case6:printf("你的成绩等级是D.\n");break; case5:case4:case3: case2:case1:case0:printf("你的成绩等级是E.\n");break;}}运行结果如下:请输入成绩:45↙你的成绩等级是E.案例4谁是盗贼【问题分析】假设用变量A、B、C、D分别代表四个人,变量的值为1代表该人是盗贼,为0就不是盗贼。由题目已知:四人中仅一人是盗贼,且这四人中每个人要么说真话,要么说假话,而由于甲、乙、丙三人都说了两句话:“X没有偷,Y偷了”,故不论该人是否说谎,他提到的两人之中必有一人是小偷。故在列条件表达式时,可以不关心谁说谎,谁说实话。这样,可列出下列条件表达式:甲说:“乙没有偷,是丁偷的。”B+D=1

乙说:“我没有偷,是丙偷的。”B+C=1

丙说:“甲没有偷,是乙偷的。”A+B=1

丁说:“我没有偷。” A+B+C+D=1案例4谁是盗贼【算法设计】(1)定义四个变量A、B、C、D分别代表四个人,变量的值为1代表是窃贼;(2)根据对话,列出判断条件表达式:

b+d==1&&b+c==1&&a+b==1&&a+b+c+d==1(*)(3)从小明的答案:b=1;a=c=d=0表达式(*)的值是否为真? 如果表达式(*)的值为真,则判断正确,否则小明的判断错误。案例4谁是盗贼【算法设计】参考代码如下:#include<stdio.h>voidmain(){inta,b,c,d;b=1; /*盗贼者是乙*/a=c=d=0; /*盗贼者不是甲、丙、丁*/if(b+d==1&&b+c==1&&a+b==1&&a+b+c+d==1)printf("小明的判断正确,盗窃者是乙\n");elseprintf("小明的判断错误,盗窃者不是乙\n");}4.4综合应用案例4-1身体质量指数【问题描述】

作为新时代的大学生,除了有远大的理想外,必须有一个健康的身体。然而随着人们生活水平的提高,越来越多的儿童和成人呈现肥胖的趋势,但肥胖的程度与体重身高相关联。国际上常用身体质量指数(BMI)作为衡量人体肥胖程度和是否健康的重要标准,主要用于统计分析。BMI的定义如下:BMI=体重(kg)/身高2(m)BMI可以客观地衡量一个人的肥胖程度或者健康程度。我国卫生部门统计衡量标准见表4-5。表4-5BMI衡量标准BMI值<18.518.5~2424~28>=28分类偏瘦正常偏胖肥胖案例4-1身体质量指数【算法设计】(1)定义变量(2)输入一个人的身高和体重信息(3)利用表达式:BMI=体重(kg)/身高2(m),计算BMI值(4)用if-else语句,依据BMI衡量标准,输出结论。

#include<stdio.h> intmain() { floatfHigh,fWeigh,fBmi; printf("请输入身高(m)和体重(kg):"); scanf("%f%f",&fHigh,&fWeigh); fBmi=fWeigh/(fHigh*fHigh); if(fBmi<18.5F)printf("你偏瘦"); elseif(fBmi<=24.0F)printf("你正常"); elseif(fBmi<28.0F)printf("你偏胖"); elseprintf("你肥胖");return0; }

案例4-2计算职员工资【问题描述】已知某公司员工的底薪为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):profit≤1000 没有提成;1000<profit≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000 提成20%;10000<profit 提成25%。 请输入某员工利润,输出应得月薪。案例4-2计算职员工资【算法设计】员工的月薪=底薪500+利润profit*提成比例。提成比例依据利润分段计算,在5段中选一,为解决相邻两个区间的重叠问题,最简单的方法

温馨提示

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

评论

0/150

提交评论