版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章选择结构程序设计3.1引例3.2关系运算符和关系表达式3.3逻辑运算符和逻辑表达式3.4用if语句实现选择结构3.5条件运算符和条件表达式3.6if语句的嵌套3.7实现多分支选择的switch语句3.1引例【例3.1】根据输入的学生成绩,判断该生成绩是否合格。【问题分析】首先需要输入学生成绩,然后根据该学生成绩进行判断,如果大于等于60分,就在屏幕输出“合格”,否则,就输出“不合格”。这是一个简单的选择结构3.1引例【例3.1】根据输入的学生成绩,判断该生成绩是否合格。NYscore≥60输出“不合格”输出“合格”图3-1条件判断流程图#include<stdio.h>intmain(void){ floatscore; printf("score=");scanf("%f",&score); if(score>=60) printf("合格!\n"); else printf("不合格!\n");return0;}3.2关系运算符和关系表达式关系运算符:用来对两个数值进行比较的比较运算符C语言提供6种关系运算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)
⑤==(等于)⑥!=(不等于)优先级相同(高)优先级相同(低)3.2关系运算符和关系表达式关系、算术、赋值运算符的优先级算术运算符(高)赋值运算符(低)关系运算符3.2关系运算符和关系表达式c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)3.2关系运算符和关系表达式关系表达式用关系运算符将两个数值或数值表达式连接起来的式子关系表达式的值是一个逻辑值,即“真”或“假”在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”3.2关系运算符和关系表达式若a=3,b=2,c=1,则:关系表达式“a>b”的值为“真”,表示为1。关系表达式“(a>b)==c”的值为“假”,表示为0。关系表达式“b+c<a”的值为“假”,表示为0。注意比较两个实数是否相等,不能直接用“==”来判断。 因为精度问题,实数在计算机中实际表示时存在误差。因此,相等的两实数,在计算机实际表示时可能不相等。判断两个实数a、b是否相等一般通过比较a、b之差的绝对值是否小于一个给定的精度来判断,如表达式fabs(a-b)<1e-6
成立,说明如果a、b之差的绝对值小于,就认为a、b相等。3.3逻辑运算符和逻辑表达式在公交车上给老人和小孩让座(1)年龄age>65(2)年龄age<12age>65||age<123.3逻辑运算符和逻辑表达式参赛者年龄必须是6岁到12岁(1)年龄age>=6(2)年龄age<=12。age>=6&&age<=123.3逻辑运算符和逻辑表达式3种逻辑运算符:&&(逻辑与)||(逻辑或)!(逻辑非)&&和||是双目(元)运算符!是一目(元)运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子3.3逻辑运算符和逻辑表达式ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假逻辑运算的真值表3.3逻辑运算符和逻辑表达式逻辑运算符的优先次序!→&&→||(!为三者中最高)与其他运算符的优先次序!(高)算术运算符关系运算符&&和||赋值运算符(低)3.3逻辑运算符和逻辑表达式逻辑表达式的值应该是逻辑量“真”或“假”编译系统在表示逻辑运算结果时以数值1代表“真”,以0代表“假”但在判断一个量是否为“真”时以0代表“假”,以非0代表“真”注意:将一个非零的数值认作为“真”3.3逻辑运算符和逻辑表达式(1)若a=4,则!a的值为0(2)若a=4,b=5,则a&&b的值为1(3)a和b值分别为4和5,则a||b的值为1(4)a和b值分别为4和5,则!a||b的值为1(5)4&&0||2的值为13.3逻辑运算符和逻辑表达式修改后的逻辑运算真值表ab!a!ba&&ba||b非0非00011非000101假非01001假011003.3逻辑运算符和逻辑表达式inta=-3,b=8,c=0;求下列表达式的值!aa&&bc||(a<b)a||(b=c)c&&(b=a)3.3逻辑运算符和逻辑表达式判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表达式值为1,则闰年;否则为非闰年3.4用if语句实现选择结构
条件语句模块A语句模块B成立不成立图3-3选择结构3.4用if语句实现选择结构
1.单分支if语句单分支if语句的一般形式如下:
if(<条件表达式>)语句【例3.2】编程,输入一个字符,判别它是否为大写字母,如果是,将它转化成小写字母;如果不是,不转换。然后输出最后得到的字符。【程序分析】这个问题的算法很简单,先输入一个字符,然后判断该字符是否是大写字母,如果是,就将该字符加上32,最后输出该字符。【例3.2】编程,输入一个字符,判别它是否为大写字母,如果是,将它转化成小写字母;如果不是,不转换。然后输出最后得到的字符。ch=ch+32YN图3-4算法流程图ch>='A'&&ch<='Z'?输出ch输入ch#include<stdio.h>intmain(void){ charch; printf("Inputaletter:\n"); scanf("%c",&ch); if(ch>='A'&&ch<='Z') ch=ch+32; printf("%c\n",ch); return0;}【例3.3】输入3个数a,b,c,要求按由小到大的顺序输出。【解题步骤】(1)输入a,b,c(2)如果a>b,将a和b交换(交换后,a是a,b中的小者)(3)如果a>c,将a和c交换(交换后,a是a,c中的小者,因此,a是三者中最小者)(4)如果b>c,将b和c交换(交换后,b是b,c中的小者,也是三者中的次小者)(5)输出a,b,c。#include<stdio.h>intmain(void){ floata,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b)
{
t=a; a=b; b=t;
} if(a>c)
{
t=a; a=c; c=t;
}
if(b>c)
{
t=b; b=c; c=t;
}
printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}3.4用if语句实现选择结构2.双分支if语句双分支if语句的一般形式如下:
if(<条件表达式>) 语句1 else
语句2【例3.4】根据输入x的值,按以下公式计算y的值。【解题步骤】由键盘输入数据x;进行条件判断,根据x的值计算y的值;输出数据为y。#include<stdio.h>intmain(void){ intx,y; printf(“x=”);scanf(“%d”,&x); if(x>=0) y=1+x; else y=1-x; printf(“y=%d\n”,y);return0;}YNx≥0?y=1+xy=1-x图3-5条件判断流程图【例3.5】根据用户输入三角形的三边a,b,c,用海伦公式计算三角形的面积s,计算公式为:
其中【问题分析】输入数据为三角形的三边a,b,c,输出数据为面积s,可用双精度类型定义这些变量。在计算面积s之前,首先要判断用户输入的a,b,c是否能构成一个三角形(即两边之和要大于第三边),如果能构成三角形,计算面积s并输出,否则,输出不能构成三角形的提示信息,程序可用双分支if语句来实现判断。图3-6算法流程图YN输入a,b,c输出“不能构成三角形”计算面积s输出面积s能构成三角形?结束#include<stdio.h>#include<math.h>intmain(void){doublea,b,c,p,s;printf("请输入三边的边长:\n");scanf("%lf%lf%lf",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){/*能构成三角形*/ p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("面积s为%lf\n",s);}else/*不能构成三角形*/ printf("不能构成三角形!\n");return0;}3.5条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;条件运算符3.5条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;条件表达式3.5条件运算符和条件表达式条件表达式的一般形式为表达式1?表达式2:
表达式33.5条件运算符和条件表达式条件运算符的执行顺序:求解表达式1若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值3.5条件运算符和条件表达式条件运算符优先于赋值运算符条件运算符的结合方向为“自右至左”以下为合法的使用方法:a>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);3.5条件运算符和条件表达式条件运算符优先于赋值运算符条件运算符的结合方向为“自右至左”(x>y)?
printf("1"):(c==0)?printf("2"):printf("3")
3.5条件运算符和条件表达式
【例3.6】(用条件运算符改写例3.4)程序根据输入x的值,按以下公式计算y的值。
#include<stdio.h>intmain(void){intx,y;printf(“请输入x的值\n”);scanf(“%d”,&x);y=x>=0?(1+x):(1-x);
printf(“y=%d\n”,y);return0;
} 3.6if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套一般形式:if()if()语句1else语句2elseif()语句3else语句4内嵌ifelse总是与它上面最近的未配对的if配对3.6if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套if(){
if()语句1}
else语句2内嵌if{}限定了内嵌if范围3.6if语句的嵌套【例3.7】编写程序,根据用户输入x的值,求出相应的y值,求值公式为: x(x<1)y=2x-1(1≤x<10)3x–11(x≥10)
3.6if语句的嵌套方法1:用单条件if语句对每一种情况分别进行处理。(1)输入x(2)若x<1,y=x(3)若1≤x<10,y=2x-1(4)若x≥10,y=3x–11(5)输出y
#include<stdio.h>intmain(void){intx,y;printf(“请输入x的值:\n”);scanf(“%d”,&x);
if(x<0) y=x;if(x>=0&&x<5) y=2*x-1;
if(x>=5) y=3*x-11;printf(“y=%d\n”,y);return0;}
3.6if语句的嵌套方法2:用嵌套的if语句进行多条件处理。(1)输入x(2)若x<1,y=x
否则 若x<10,y=2x-1
否则 y=3x–11(3)输出y
if(x<1) y=x;
else
if(x<10)
y=2*x-1;
else y=3*x-11;
3.6if语句的嵌套方法3:使用嵌套的if语句还可以这样进行处理:(1)输入x(2)若x≥1若x≥10,y=3x–11否则y=2x-1
否则y=x(3)输出y
if(x>=1)
if(x>=10) y=3*x-11;
else y=2*x-1;else
y=x;
【例3.8】编程,输入百分制成绩,要求输出等级,其对应关系为:90~100分为A等,80~89分为B等,70~79分为C等,60~69分为D等,为60分以下为E等。#include<stdio.h>intmain(void){ floatscore; printf("请输入百分制成绩:\n"); scanf("%f",&score); if(score<0||score>100) printf("输入成绩错误!\n"); else if(score>=90) printf("等级为A\n"); elseif(score>=80) printf("等级为B\n"); elseif(score>=70) printf("等级为C\n"); elseif(score>=60) printf("等级为D\n"); else printf("等级为E\n"); return0;}
if(score>=90) printf("等级为A\n");
elseif(score>=80) printf("等级为B\n");
elseif(score>=70) printf("等级为C\n");
elseif(score>=60) printf("等级为D\n");
else printf("等级为E\n");3.7实现多分支选择的switch语句switch语句的一般形式如下:switch(<表达式>){ case常量1:语句序列1 case常量2:语句序列2 …… case常量n:语句序列n default:语句序列n+1}【例3.9】编程实现简单的计算器功能,要求用户按如下格式从键盘输入算式: 操作数1运算符op 操作数2计算并输出表达式的值,其中算术运算符包括:加减乘除。#include<stdio.h>#include<math.h>intmain(void){ floata,b; charop; printf("请输入算式:"); scanf("%f%c%f",&a,&op,&b);
switch(op) //根据输入的运算符确定执行的运算
{
case'+': //加法运算
printf("%f+%f=%f\n",a,b,a+b);
break;
case'-': //减法运算
printf("%f-%f=%f\n",a,b,a-b);
break;
case'*': //乘法运算
printf("%f*%f=%f\n",a,b,a*b);
break;
case'/': //除法运算
if(fabs(b)<=1e-7) //检验除数是否为0 printf("除数不能为0\n"); else printf("%f/%f=%f\n",a,b,a/b);
break;
default: //非法运算符
printf("输入错误!");
break;
} return0;}
switch(op){
case‘+’:
printf("%f+%f=%f\n",a,b,a+b);
break;
case‘-’:
printf("%f-%f=%f\n",a,b,a-b);
break;
case'*': printf("%f*%f=%f\n",a,b,a*b);
break;
case'/':
if(fabs(b)<=1e-7) printf("除数不能为0\n");
else printf("%f/%f=%f\n",a,b,a/b);
break;
default: printf("输入错误!");
break;
【例3.10】用switch语句改写例3.8程序,输入百分制成绩,要求输出等级,其对应关系为:90~100分为A等,80~89分为B等,70~
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度房地产项目文化创意产业合作开发合同3篇
- 二零二五年店铺店面装修工程设计与施工工期管理合同2篇
- 2024门窗安装工程安全生产责任与保险合同3篇
- 2025年度房屋买卖合同终止及债权债务清算协议3篇
- 2025年度彩钢棚体育场馆建设与租赁合同3篇
- 2025年度房屋墙面粉刷与室内空气净化设备租赁合同3篇
- 2024年软件许可使用合同:软件开发者与使用者之间的软件授权协议
- 二零二五年度老旧房屋改造转租合作协议书3篇
- 2025年度智能物流解决方案授权独家代理合同3篇
- 2024年艺术品租赁合同条款
- 【MOOC】外科护理学-中山大学 中国大学慕课MOOC答案
- 年度学校办公室工作总结
- 2025版国家开放大学法律事务专科《民法学(2)》期末纸质考试总题库
- 纺织厂消防管道安装协议
- 【MOOC】思辨式英文写作-南开大学 中国大学慕课MOOC答案
- 生物人教版(2024版)生物七年级上册复习材料
- 期末测试卷(试题)-2024-2025学年五年级上册数学北师大版
- 企业地震应急预案管理方案
- 国有企业品牌建设策略方案
- 房地产园林绿化行业研究报告:市场规模统计、供需态势及发展前景预测报告(智研咨询)
- 家政培训讲师课件
评论
0/150
提交评论