版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第4章选择结构程序设计2第四章选择结构程序设计一、关系运算符和关系表达式二、逻辑运算符和逻辑表达式三、使用if语句实现的选择结构四、条件运算符和条件表达式五、switch语句六、选择结构程序举例主要内容3关系运算符<<=>>===!=(6种)第四章选择结构程序设计优先级赋值<关系(后2<前4)<算术关系表达式用关系运算符将两个表达式连接起来的式子.算术、关系、逻辑、赋值、字符。值真(1)假(0)5>3一、关系运算符和关系表达式4219举例已知a=5,b=4,c=3,d=7求下列表达式的值a+b==c*da>b>ca!=b<ca+b==c*d0a>b>c10a!=b<c01算术运算符的优先级高于关系运算符不能用于判断b的值是否在a与c之间“<”运算符的优先级高于“!=”5逻辑运算符!(逻辑非)&&(逻辑与)||(逻辑或)运算规则优先次序赋值<||<&&<关系<算术<!第四章选择结构程序设计(1)!:取逻辑值的相反值。(2)&&:参加运算的两个逻辑值都为真时,结果为真(1)。(3)||:参加运算的两个逻辑值都为假时,结果为假(0)。逻辑表达式用逻辑运算符将关系表达式和逻辑量连接起来的式子。举例已知:(a=1b=0)1a||b&&0!a&&(5>3)||b0双目单目二、逻辑运算符和逻辑表达式6第四章选择结构程序设计二、逻辑运算符和逻辑表达式第五章选择结构程序设计举例5>3&&8<4-!00(5>3)&&(8<(4-!0))4&&5>3||(a=6)1逻辑运算符两侧的运算对象不但可以是0和1,也可以是0或非0的整数,也可是任何类型的数据。系统判定标准:0为假;非0为真。当“与运算”的左侧为0,或者“或运算”的左侧为1时,右侧的表达式不再进行计算。短路现象#include<stdio.h>voidmain(){inta=1,b=1;if(a>1&&(b=5))a=4;printf(“%d,%d”,a,b);}1,17第四章选择结构程序设计三、使用if语句实现的选择结构88案例1y=0x≤01x>0不成立(假)x≤0成立(真)y=1输入x输出yy=0if(表达式){
语句组1}else{
语句组2}x
<=
0y=0;y=1;9案例2x=-xx<0xx≥0不成立(假、0)x<0x=-x成立(真、1)输入x输出xif(表达式){
语句组1}else{
语句组2}x
<
0x=-x;x=x;10案例3y=-1x<01x>00x=0不成立(假)x
<
0成立(真)输入x输出yy=-1x
=
0不成立(假)成立(真)y=0y=1if(表达式){
语句组1}else{
语句组2}x
<
0y=-1;if(x=0)y=0;elsey=1;if(x==0)y=0;elsey=1;11选择结构单分支双分支if(表达式){语句组}多分支if(表达式){语句组1}
else{语句组2}if(表达式1){语句组1}elseif(表达式2){语句组2}……else{语句组n}if语句的嵌套switch语句第四章选择结构程序设计选择结构的分类12编程实现分段函数。练习输入xx<=0是否y=0否0<x<10是y=1/xx==10是否y=2.0/3*x+1x>10是否y=sqrt(5*x-1)0<x&&x<10x<10y=sqrt(5*x-1)if(x<=0)y=0;else
if(x<10)y=1/x;else
if(x==10)y=2.0/3*x+1;else
y=sqrt(5*x-1);输出yy=0x≤01/x0<x<10x>10x+1x=1013#include<stdio.h>#include<math.h>intmain(){floatx,y;
scanf("%f",&x);
if(x<=0)y=0;
elseif(x<10)y=1/x;
elseif(x==10)y=2.0/3*x+1;
elsey=sqrt(5*x-1);printf("x=%.2f,y=%.2f\n",x,y);return0;}第一次运行:5
x=5.00,y=0.2010
x=10.00,y=7.67第二次运行:程序如下:y=0x≤01/x0<x<10x>10x+1x=1014编程实现分段函数——换一种判断顺序举例输入xx<10是否y=1/x否x<=0是y=0x==10是否y=2.0/3*x+1y=sqrt(5*x-1)if(x<10)
if(x<=0)y=0;
elsey=1/x;else
if(x==10)y=2.0/3*x+1;
else
y=sqrt(5*x-1);输出yif(x<10)if(x<=0)y=0;elsey=1/x;elseif(x==10)y=2.0/3*x+1;elsey=sqrt(5*x-1);y=0x≤01/x0<x<10x>10x+1x=1015if语句的嵌套第四章选择结构程序设计if(表达式1)
if(表达式2)语句1
[else语句2][else
if(表达式3)语句3
[else语句4]]注意if与else的配对原则:从else入手,找它上面最近的未配对的if配对。if语句嵌套结构16练习第四章选择结构程序设计已知a=3b=4c=5d=0,d=?if(a>b)
d=a;else
if(c>b)d=c;elsed=b;if(a>b)
if(c>b)d=c;elsed=b;if(a>b)
{if(c>b)d=c;}elsed=b;if(a>b)
if(c>b)d=c;elsed=b;elsed=a;d=5d=3d=0d=417使用if语句中应注意的问题在if关键字之后的括弧内为表达式,该表达式通常是逻辑表达式或关系表达式,但也可以是其它任何合法的C表达式
条件判断表达式必须用括弧括起来,后面没有分号。但在语句之后必须加分号。如果希望在满足/不满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句#include<stdio.h>intmain(){floata,b,c,p,s;scanf(“%f%f%f”,&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=%7.2f\n”,s);
}elseprintf(“Notatriangle!\n”);return0;}18条件运算符条件表达式举例if(a>b)max=a;elsemax=b;第四章选择结构程序设计表达式1?表达式2:表达式3max=(a>b)?a:b;条件运算符的使用条件若if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值,则可以用简单的条件运算符来处理。取值表达式1为真,则取值为表达式2的值;表达式1为假,则取值为表达式3的值。四、条件运算符和条件表达式右结合方向19使用条件表达式求两个数的较大值。(自己看)#include"stdio.h"intmain(){floatnum1,num2,max=0;scanf("%f,%f",&num1,&num2);max=(num1>num2)?num1:num2;printf("%5.2f\n",max);return0;}例4.14第一次运行:3.2,4
4.00第二次运行:4,3.2
4.0020开关语句第四章选择结构程序设计switch(表达式){case常量表达式1:语句组1case常量表达式2:语句组2case常量表达式3:语句组3……case常量表达式n:语句组n
default:语句组n+1}五、switch语句实现多分支break;执行过程定位入口、依次执行、遇break跳出只能是整型或字符型21例4.17#include<stdio.h>intmain(){chargrade;printf(“请输入考试等级A~D:”);scanf(“%c”,&grade);switch(grade){case‘A’:printf(“80~100\n”);case‘B’:printf(“70~79\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“error\n”);}return0;}B
根据输入的考试成绩等级打印出百分制分数段。A:80~100B:70~79C:60~69D:<60说明:应在每一个printf后加break语句第四章选择结构程序设计70~7960~69<60Error22#include<stdio.h>intmain(){chargrade;printf(“请输入考试等级A~D:”);scanf(“%c”,&grade)switch(grade){case‘A’:printf(“80~100\n”);break;case‘B’:printf(“70~79\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“error\n”);}return0;}B
70~79最后一行的break可以省略。第四章选择结构程序设计例4.17根据输入的考试成绩等级打印出百分制分数段。A:80~100B:70~79C:60~69D:<6023思考(例4.18)#include<stdio.h>intmain(){intscore;printf(“请输入考试成绩0~100:”);scanf(“%d”,&score);if(score>100)printf(“请输入0~100之间的整数\n”);elseif(score>=80)printf(“A\n”);elseif(score>=70)printf(“B\n”);elseif(score>=60)printf(“C\n”);elseprintf(“D\n”);return0;}根据输入的考试成绩(百分制整数)打印出等级水平。(使用if~else语句实现)A:80~100B:70~79C:60~69D:<60思考:使用switch语句如何实现?程序第四章选择结构程序设计24#include<stdio.h>intmain(){intscore;printf(“请输入考试成绩0~100:”);scanf(“%d”,&score);switch(score){case80~100:printf(“A\n”);break;case70~79:printf(“B\n”);break;case60~69:printf(“C\n”);break;case<60:printf(“D\n”);break;default:printf(“请输入0~100之间的整数\n”);}return0;}根据输入的考试成绩(百分制整数)打印出等级水平。(使用switch语句实现)A:80~100B:70~79C:60~69D:<60思考:本程序有问题么?程序思考(例4.18)25#include<stdio.h>intmain(){intscore;printf(“请输入考试成绩0~100:”);scanf(“%d”,&score);switch(score){case0:printf(“D\n”);break;case1:printf(“D\n”);break;case2:printf(“D\n”);break;case3:printf(“D\n”);break;……case100:printf(“A\n”);break;default:printf(“请输入0~100之间的整数\n”);}return0;}
太麻烦了…有没有简单的办法呢?改进程序1101种情况思考(例4.18)根据输入的考试成绩(百分制整数)打印出等级水平。(使用switch语句实现)A:80~100B:70~79C:60~69D:<6026#include<stdio.h>intmain(){intscore,p;printf(“请输入考试成绩0~100:”);scanf(“%c”,&score);
p=score/10;switch(p){case0:printf(“D\n”);break;case1:printf(“D\n”);break;case2:printf(“D\n”);break;case3:printf(“D\n”);break;case4:printf(“D\n”);break;case5:printf(“D\n”);break;case6:printf(“C\n”);break;case7:printf(“B\n”);break;case8:printf(“A\n”);break;case9:printf(“A\n”);break;case10:printf(“A\n”);break;default:printf(“请输入0~100之间的整数\n”);}return0;}改进程序211种情况思考:不同case值时执行相同的操作,是否可以合并?第四章选择结构程序设计27#include<stdio.h>intmain(){intscore,p;printf(“请输入考试成绩0~100:”);scanf(“%c”,&score);p=score/10;switch(p){
case0:case1:case2:case3:case4:case5:printf(“D\n”);break;case6:printf(“C\n”);break;case7:printf(“B\n”);break;
case8:case9:case10:printf(“A\n”);break;default:printf(“请输入0~100之间的整数\n”);}return0;}改进程序3注意:多个case共用一组执行语句时,共用的执行语句写在最后一个case的后面。第四章选择结构程序设计28读程序写结果1#include<stdio.h>intmain(){intn=1,k=9;switch(n){case0:k--;case1:++k;case2:k=k+2;break;default:k=k+4;}printf("k=%d\n",k);return0;}
k=1229读程序写结果2#include"stdio.h"intmain(){ inta=2,b=7,c=5; switch(a>0) { case1:switch(b<0)
{ case1:printf("@");break; case2:printf("!");break; } case0:switch(c==5) {case0:printf("*");break; case1:printf("#");break; case2:printf("$");break; } default:printf("&"); } printf("\n"); return0;}#&30第四章选择结构程序设计例4.10求方程ax2+bx+c=0的解。(自学)真a=0真假输出“该方程不是二次方程”b2-4ac=0真输出两个实根:x1,x2输出两个相等实根:假b2-4ac>0假计算复根的实部和虚部:实部虚部输出两个复根:p+qi,p-qi六、选择结构程序设计举例31第四章选择结构程序设计#include<stdio.h>#include<math.h>intmain(){floata,b,c,disc,x1,x2,p,q;scanf("%f%f%f",&a,&b,&c);if(a==0)printf("该方程不是二次方程");else
{disc=b*b-4*a*c;
if
(disc==0)printf(“该方程有两个相等的实根:%8.4f\n",-b/(2*a));
else
if(disc>0)
{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(“该方程有两个不等的实根:%8.4fand%8.4f\n",x1,x2);}
else
{
p=-b/(2*a);q=sqrt(-disc)/(2*a);printf(“该方程有两个复根:\n");printf("%8.4f+%8.4fi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年心血管内科高血压常见并发症预防治疗模拟考核试题及答案解析
- 汉寿县2027届六年级数学第一学期期末达标测试试题含解析
- 陕西省西安市灞桥区2027届数学六上期末检测模拟试题含解析
- 2027届吉林省长春市52中赫行实验学校四上数学期末检测模拟试题含解析
- 2027届江苏省宿迁地区数学六年级第一学期期末综合测试试题含解析
- 雅安市荥经县2027届三上数学期末综合测试模拟试题含解析
- 古树名木评估与景观资源开发协议
- 2026农业机械装备制造行业市场供需现状研究投资评估未来趋势报告
- 河南省洛阳市汝阳县瑞云小学2027届六年级数学第一学期期末学业质量监测试题含解析
- 安徽省蚌埠市龙子湖区2025届数学三年级第二学期期中学业质量监测模拟试题含答案解析
- 南充市公安局2026年上半年第二次公开招聘警务辅助人员(20人)笔试参考题库及答案详解
- 消防救援支队公开招聘工作人员笔试试题(含详细答案)
- XX区企业厂界噪声监测报告
- 2026年北京公务员(行测)考试真题及答案
- 快速康复外科理念eras与围手术期护理课件
- 格林巴利综合症讲课
- 装潢材料购买合同范本
- 2026年陕西省中考语文真题
- 2026云南九九彩印有限公司毕业生招聘25人考试备考试题及答案详解
- 鸡苗养殖购买合同
- 2026年供应链管理三级试题及答案
评论
0/150
提交评论