C语言程序设计-基于计算思维的培养 课件 第4章 选择结构_第1页
C语言程序设计-基于计算思维的培养 课件 第4章 选择结构_第2页
C语言程序设计-基于计算思维的培养 课件 第4章 选择结构_第3页
C语言程序设计-基于计算思维的培养 课件 第4章 选择结构_第4页
C语言程序设计-基于计算思维的培养 课件 第4章 选择结构_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第四章选择结构目录/Contents关系运算条件运算逻辑运算单分支控制的if语句双分支控制的if-else语句多路选择的switch语句switch语句中的break语句关系运算符关系运算符描述举例值关系运算符<小于3<51(true)>大于2>11(true)<=小于等于7<=81(true)>=大于等于5>=60(false)等式运算符==相等3==40(false)!=不等2!=61(true)注意:应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6例注意区分“=”与“==”,常把==误写为=inta;......if(a=1)printf(“aequaltob”);elseprintf(“anotequaltob”);1==a延伸:用b+c==a不用a==b+c关系运算符逻辑运算符描述举例值逻辑运算符!逻辑非a=0,!a1(true)&&逻辑与a=1,b=1,a&&b1(true)||逻辑或a=0,b=0,a||b0(false)逻辑运算符声明和初始化:intx=7,y=7;doublea=0.0,b=5.5;表达式等价表达式值!(x-y)+1(!(x-y))+12!x-y+1((!x)-y)+1-6!!(a+3.0)!(!(a+3.0))1!a*!!b(!a)*(!(!b))1逻辑非运算符举例逻辑运算符aba&&ba||bFFFFFTFTTFFTTTTT声明和初始化:inta=1,b=1,c=3;doublex=0.0,y=2.0;表达式等价表达式值a&&b&&c(a&&b)&&c1x||a&&b-3x||(a&&(b–3))1a<b&&x<y(a<b)&&(x<y)0a<b||x<y(a<b)||(x<y)1二元逻辑运算符的真值表二元逻辑运算符的优先级和结合性举例逻辑运算符判断ch是大写英文字母(ch>='A')&&(ch<='Z')判断某一年year是否是闰年的条件是满足下列二者之一能被4整除,但不能被100整除;能被400整除;

year%4==0&&year%100!=0||year%400==0优先级:%

==(!=)

&&

||

((year%4==0)&&(year%100!=0))||(year%400==0)复合表达式【例3.1】(a>=1)&&(b++==5)

(0>=1)&&(b++==5)

0&&(b++==5)

0a0b5c15d17尽量使用最少的操作数来确定表达式的值,这就意味着表达式中的某些操作数可能不会被计算(短路)

复合表达式问题的提出需要判断的问题很多,例如:◆判断某年是否为闰年;◆对n个数进行由大到小排序;◆旅游行程安排;◆计算分段函数的值;◆根据一元二次方程的系数,判断方程的解、求根。分支判断◆分支:根据某个条件做出不同选择,决定下一步的操作。条件分支分支语句◆条件:逻辑表达式。◆分支语句:条件+语句组装在一起,形成逻辑结构。单分支if语句格式:if(expression)statement执行过程:条件成立时,执行分支语句;否则,不执行任何分支语句条件语句非0=0单分支控制语法:

if

(expression) statement;或

if

(expression){ statement1; statement2; }复合语句compoundstatement被当做一条语句看待表达式非0为真单分支控制语法:

if

(expression) statement;或

if

(expression){ statement1; statement2; }不要忘记大括号!!不要忘记圆括号!!单分支控制单分支控制#include<stdio.h>intmain(){ intx,y; scanf("%d",&x); y=x; if(x<0) y=-x; printf("x=%d,|x|=%d\n",x,y); return0;}【例4.1】

从键盘输入任意一个整数,求其绝对值。【例题4.2】输入两个整数a、b,使a总是保存较大的数。if(a<b){t=a;a=b;b=t;}a<b?交换a,b的值非0=0#include<stdio.h>intmain(){inta,b,t;printf(“pleaseinputtwonumbers:\n”);scanf(“%d%d”,&a,&b);if(a<b){t=a;a=b;b=t;}printf(“%d\t%d”,a,b);return0;}单分支控制典型错误1:分支语句的复合语句没有{}#include<stdio.h>intmain(){inta,b,t;printf(“pleaseinputtwonumbers:\n”);scanf(“%d%d”,&a,&b);if(a<b)t=a;a=b;b=t;printf(“%d\t%d”,a,b);return0;}典型错误2:条件表达式后多加分号#include<stdio.h>intmain(){inta,b,t;printf(“pleaseinputtwonumbers:\n”);scanf(“%d%d”,&a,&b);if(a<b);{t=a;a=b;b=t;}printf(“%d\t%d”,a,b);return0;}典型错误3:使用赋值运算符表示相等关系◆判断变量a的值是否等于10:if(a=10)…◆正确的书写方式:if(a==10)…◆原因:误用赋值运算符表示相等关系;◆技巧:if(10==a)…◆报错:误写成if(10=a)…条件语句1语句2非0=0if…else语句格式:if(expression)statement1elsestatement2执行过程:如果条件成立,执行语句1;否则,执行语句2。然后,共同转向下一条语句继续执行。双分支选择控制语句双分支选择控制【例4.3】

编写程序,从键盘输入一个整数,判断它是偶数还是奇数。NoYesInputaOutputevena%2==0?StartEndOutputodd#include<stdio.h>intmain(){inta;printf("pleaseinputanumber:");scanf("%d",&a);if(a%2==0)printf("%disanevennumber.",a);elseprintf("%disanoddnumber.",a);return0;}条件运算符和条件表达式#include<stdio.h>main(){inta,b,max;

printf("Inputa,b:");scanf("%d,%d",&a,&b);

if(a>b) max=a;

else max=b;printf("max=%d",max);}}

max=a>b?a:b;表达式1?表达式2:表达式3【例4.4】比较两个整数的最大数。if语句的嵌套if语句嵌套形式1:if(表达式1) if(表达式2)语句1 else 语句2else

语句3if语句嵌套形式2if(表达式1) {if(表达式2)语句1}else语句2if语句的嵌套if语句嵌套形式3if(表达式1)

语句1else if(表达式2)

语句2 else

语句3if语句的嵌套C语言规定,else与离它最近的if,即第二个if结合。例如:if(y!=0) if(x!=0) result=x/y; else printf("Error:yisequalto0.\n");这个例子中,else与离它最近的if,即内层的if结合。如果要让else与外层的if结合,则应把内层的if语句用花括号括起来:if(y!=0){ if(x!=0) result=x/y;}else printf("Error:yisequalto0.\n");if语句的嵌套注意,要辨别if语句的嵌套层次,一种方法是把每个else同与它结合的if对齐排列,另一种方法是直接加花括号。if(a>b){ if(a>c) max=a; else max=c;}else{ if(b>c) max=b; else max=c;}if语句的嵌套多分支控制的级联式语句级联式if语句的一般格式为:if(表达式1)

语句1elseif(表达式2)

语句2…elseif(表达式n-1)

语句n-1else

语句n多分支控制的级联式语句【例4.5】

编写程序,计算证券公司对证券用户买卖股票时收取的佣金。佣金根据股票交易额采用某种变化的比例进行计算。表4-6给出了证券交易佣金,最低佣金为39元。股票交易额范围佣金低于2500元30元+1.7%2500~6250元56元+0.66%6250~20000元76元+0.34%20000~50000元100元+0.22%50000~500000元155元+0.11%超过500000元255元+0.09%表4-6证券交易佣金多分支控制的级联式语句/*采用级联式if语句计算证券交易佣金*/#include<stdio.h>intmain(){ floatexpenses,value; scanf("%f",&value); if(value<2500.00) expenses=30.00+0.017*value; elseif(value<6250.00) expenses=56.00+0.0066*value; elseif(value<20000.00) expenses=76.00+0.0034*value; elseif(value<50000.00) expenses=100.00+0.0022*value; elseif(value<500000.00) expenses=155.00+0.0011*value; else expenses=255.00+0.0009*value; if(expenses<39.00) expenses=39.00; printf("expenses:¥%.2f",expenses); return0;}switch(表达式){caseE1:

语句组1;break;caseE2:

语句组2;break;…….caseEn:

语句组n;break;[default:

语句组;break;]}switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase

多分支开关语句多分支开关语句switch(表达式){

case

value1:

statement1; break;

case

value2:

statement2; break;

……

default

:

statementX; break;}不要忘记大括号!!不要忘记冒号!!不要忘记空格!!

必须是int或char!类型多分支开关语句例如

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n"); break; case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break; } printf("End");假设grade=1,so……thisstepwillbeexecuted.Later……caseisterminatedhere.Jumpto…A_AEnd_多分支开关语句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n"); break; case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break; } printf("End");…thisstepwillbeexecuted.Later…C_CEnd_假设grade=3,so……caseisterminatedhere.Jumpto…多分支开关语句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n"); break; case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break;}printf("End");Now…whatwillhappenifthisbreakistakenoutfromtheprogram?多分支开关语句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n");

case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break; } printf("End");Nomore!多分支开关语句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n");

case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break; } printf("End");…thisstepwillbeexecuted.Later…B_C_假设grade=2,so……caseisterminatedhere.Jumpto…End_…executioncontinues.Thus,thisstepisexecuted.So…多分支开关语句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n");

case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break;} printf("End");Now…whatwillhappenifthesebreaksaretakenoutfromtheprogram?And…ifgrade=1?And…ifgrade=34?最好不省略!【例4.6】

判断任意日期是该年的第几天。#include<stdio.h>intmain(){ intyear,month,day,total; printf("请输入年,月,日数据:\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month) { case1:total=day;break; case2:total=day+31;break; case3:total=day+31+28;break; case4:total=day+31+28+31;break; case5:total=day+31+28+31+30;break;

多分支开关语句 case6:total=day+31+28+31+30+31;break;

温馨提示

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

评论

0/150

提交评论