C语言 分支结构程序设计_第1页
C语言 分支结构程序设计_第2页
C语言 分支结构程序设计_第3页
C语言 分支结构程序设计_第4页
C语言 分支结构程序设计_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

第2章分支结构程序设计本章要点C语言中有哪些关系运算和逻辑运算?关系运算和逻辑运算的优先级如何?如何用IF语句构成分支结构?如何用SWITCH语句构成多分支结构?Yoursitehere语言教材主要内容2.1求分段函数2.2求两数中的最大值2.3求付费金额2.4输出成绩等级2.5输出最大值2.6分支结构程序设计实例1.3.求圆的周长2.7字母大小写转换Yoursitehere语言教材2.1求分段函数【例2-1】用C语言实现数学上的一个分段函数:

1,x>0y=-1,其他

源程序:#include<stdio.h>voidmain(){inty;floatx;printf("Inputx:\n");scanf("%f",&x);

2.1.1程序解析Yoursitehere语言教材2.1求分段函数if(x>0)y=1;elsey=-1;printf("y=%d\n",y);return0;}运行结果:

Inputx:3.6y=1Yoursitehere语言教材2.1求分段函数2.1.2关系运算及其表达式1.关系运算符关系运算是逻辑运算中比较简单的一种,“关系运算”就是“比较运算”。即,将两个值进行比较,判断是否符合或满足给定的条件。如果符合或满足给定的条件,则称关系运算的结果为“真”;如果不符合或不满足给定的条件,则称关系运算的结果为“假”。

操作符用法>大于>=大于或等于<小于<=小于或等于==等于!=不等于表2-1关系运算符Yoursitehere语言教材2.1求分段函数使用关系运算符时要注意以下几点:(1)由两个字符组成的运算符之间不可加空格,用空格从中分开写就会产生语法错误。例如:a>=b;是错误的,但是可以写成:a>=b;在运算符的两侧增加空格会提高可读性。同样将运算符写反,例如:=>、=<、=!等形式会产生语法错误。(2)关系运算符、算术运算符和赋值运算符之间的优先次序依次是:算术运算符级别最高,关系运算符次之、赋值运算符最低。关系运算符按照从左到右的顺序结合。(3)由于计算机内存放的实数与实际中的实数存在着一定的误差,如果对浮点数进行==(相等)或!=(不相等)的比较,容易产生错误结果。应该尽量避免。Yoursitehere语言教材2.1求分段函数2.关系表达式由关系运算符组成的表达式,称为关系表达式。关系运算符两边的运算对象可以是C语言中任意合法的表达式。(1)赋值运算符“=”赋值运算的一般形式为:<变量名>=<表达式>赋值运算符的左面只能是一个变量名,用等号右面的表达式的值对其赋值。运算结果的数据类型取决于赋值号左面变量的数据类型,可以是整型、实型、字符型等。(2)关系运算符“==”一般形式为:<表达式1>==<表达式2>关系运算“==”是在两个表达式之间进行的,左面的表达式可以是一个变量,也可以是一个常数或表达式。运算结果的数据类型只能为整型(0或1)。Yoursitehere语言教材2.1求分段函数2.1.3逻辑运算及其表达式1.逻辑运算符

表2-2逻辑运算符运算符含义优先级||逻辑或(OR)低&&逻辑与(AND)中!逻辑非(NOT)高Yoursitehere语言教材三种逻辑运算符含义说明如下;(1)&&逻辑与(相当日常生活中:而且,并且,只在两条件同时成立时为“真”)(2)||逻辑或(相当日常生活中:或,两个条件只要有一个成立时即为“真”)(3)!逻辑非(条件为真,运算后为假,条件为假,运算后为真)与运算符&&和或运算符||均为双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。2.1求分段函数Yoursitehere语言教材2.1求分段函数表2-3逻辑运算规则ab!a!ba&&ba||b非0非00011非0001010非01001001100其求值规则说明如下:(1)与运算(&&):参与运算的两个量都为真时,结果才为真,否则为假。(2)或运算(||):参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。(3)非运算(!):参与运算量为真时,结果为假;参与运算量为假时,结果为真。Yoursitehere语言教材2.1求分段函数2.逻辑表达式逻辑表达式类似于关系表达式,是用逻辑运算符把两个表达式连接起来的式子。逻辑表达式逻辑表达式的一般形式为:表达式逻辑运算符表达式。其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。例如:(a&&b)&&c根据逻辑运算符的左结合性,上式也可写为:a&&b&&c。逻辑表达式的值是式中各种逻辑运算的最后值。C语言编译系统在给出逻辑运算结果时,以1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”(即认为一个非0的数值是“真”)。Yoursitehere语言教材2.2求两数种的最大值【例2-2】输入两个整数,输出其中的大数。源程序:#include<stdio.h>voidmain(){inta,b,max;/*max-临时变量/printf(“Inputtwointegers:\n”);scanf(“%d%d”,&a,&b);max=a;if(max<b)max=b;/*求a,b中最大值*/printf(“max=%d\n”,max);return0;}2.2.1程序解析Yoursitehere语言教材运行结果:Inputtwointegers:27max=7Inputtwointegers:310max=102.2求两数种的最大值Yoursitehere语言教材2.2求两数中的最大值2.2.2if语句实现分支基本if语句格式如下:

if(表达式)语句;其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。该语句的执行过程如图2-1所示。

表达式值为真执行语句NYYoursitehere语言教材2.2求两数中的最大值C语言中,用括号括起来的语句块与一个单语句等价,因此如果表达式的值为真时可以执行多个语句。由此可以得到if语句的另一种形式:if(表达式){语句1;语句2;语句3;}Yoursitehere语言教材2.2求两数种的最大值源程序:#include<stdio.h>voidmain(){inta,b;printf(“Inputtwointegers:\n”);scanf(“%d%d”,&a,&b);if(a<b){a=b;printf(“max=%d\n”,a);return0;}}Yoursitehere语言教材运行结果:Inputtwointegers:27max=7Inputtwointegers:310max=102.2求两数种的最大值Yoursitehere语言教材2.3求付费金额【例2-3】某商品的零售价为每公斤8.5元,批发价为每公斤6.5元,购买量在10公斤以上,便可按批发价计算,设某顾客购买此商品公斤数(weight),请编程计算该顾客需付费(pay)多少?源程序:#include<stdio.h>voidmain(){floatweight,pay;printf(“Pleaseinputtheweight:\n”);scanf(“%f”,&weight);if(weight>=10)pay=weight*6.5;elsepay=weight*8.5;printf(“Youshouldpay%fyuans\n”,pay);}2.3.1程序解析Yoursitehere语言教材运行结果:Pleaseinputtheweight:12Youshouldpay78.000000yuansPleaseinputtheweight:5Youshouldpay42.500000yuans2.3求付费金额Yoursitehere语言教材2.3求付费金额2.3.2二分支结构if…else语句有时,我们需要在某种条件下让程序执行一个分支,否则执行另一分支。这时,可以采用if……else语句。其语句格式如下:if(表达式)语句1;else语句2;该语句的执行过程如图2-3所示。表达式语句1语句2Yoursitehere语言教材2.3求付费金额源程序:#include<stdio.h>voidmain(){inta,b;printf(“Inputtwointegers:\n”);scanf(“%d%d”,&a,&b);if(a>b)printf(“max=%d\n”,a);elseprintf(“max=%d\n”,b);return0;}Yoursitehere语言教材运行结果:Inputtwointegers:27max=7Inputtwointegers:310max=102.3求付费金额Yoursitehere语言教材2.3求付费金额2.3.3if…else语句的嵌套if和else子句中,可以是任意合法的C语句或语句块,如果这子句是个if语句,则构成了if语句的嵌套。内嵌的if语句可以嵌套在if子句中,也可以嵌套在else子句中。嵌套的if语句有以下几种格式:1.if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;…elseif(表达式m)语句m;else语句n;其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。Yoursitehere语言教材其执行过程如图2-4所示。

2.3求付费金额表达式1表达式2表达式m语句n语句m语句2语句1NNNYoursitehere语言教材2.3求付费金额【例2-4】根据输入的百分制成绩(score),要求输出成绩等级(grade)A、B、C、D、E。90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。源程序:#include<stdio.h>voidmain(){intscore;chargrade;printf(“\nPleaseinputascore(0~100):”);scanf(“%d”,&score);

if(score>=90)

grade=’A’;elseif(score>=80)

grade=’B’;elseif(score>=70)

grade=’C’;

elseif(score>=60)

grade=’D’;elsegrade=’E’;printf(“Thegradeis%c\n”,grade);return0;}Yoursitehere语言教材运行结果:Pleaseinputascore(0~100):91ThegradeisAPleaseinputascore(0~100):86ThegradeisBPleaseinputascore(0~100):73ThegradeisCPleaseinputascore(0~100):65ThegradeisDPleaseinputascore(0~100):39ThegradeisE2.3求付费金额Yoursitehere语言教材2.3求付费金额【例2-5】判别键盘输入字符的类别。源程序:#include<stdio.h>voidmain(){charc;printf("inputacharacter:");c=getchar();if(c<32)printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thisisasmallletter\n");elseprintf("Thisisanothercharacter\n");return0;}Yoursitehere语言教材运行结果:Pleaseinputacharacter:(键盘输入“回车符”)ThisisacontrolcharacterPleaseinputacharacter:5ThisisadigitPleaseinputacharacter:FThisisacapitalcharacterPleaseinputacharacter:fThisisasmallcharacterPleaseinputacharacter:=Thisisanothercharacter2.3求付费金额Yoursitehere语言教材2.3求付费金额2.if(…)if(…)语句1;

else语句2;

elseif(…)语句3;

else语句4;应当注意if与else的配对关系。特别是if/else子句数目不一样时(if子句数量只会大于或等于else子句数量)。Yoursitehere语言教材2.3求付费金额【例2-6】编程实现下面函数:

-1(x<0)y=0(x=0),编一个程序,输入x,输出y。

1(x>0)算法1:源程序:#include<stdio.h>voidmain(){intx,y;printf(“Inputthex:”);scanf(“%d”,&x);Yoursitehere语言教材if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;printf(“Theyis:%d”,y);return0;}运行结果:Inputthex:-2Theyis:-1Inputthex:0Theyis:0Inputthex:3Theyis:12.3求付费金额Yoursitehere语言教材2.3求付费金额算法2:源程序:#include<stdio.h>voidmain(){intx,y;printf(“Inputthex:”);scanf(“%d”,&x);if(x<0)y=-1;elseif(x=0)y=0;elsey=1;printf(“Theyis:%d”,y);return0;}Yoursitehere语言教材运行结果:Inputthex:-2Theyis:-1Inputthex:0Theyis:0Inputthex:3Theyis:1在使用if语句中还应注意以下问题:(1)在三种形式的if语句中,在if关键字之后均为表达式。(2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。(3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。2.3求付费金额Yoursitehere语言教材2.4输出成绩等级【例2-7】从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。源程序:#include<stdio.h>voidmain(){intscore,gradeprintf(“Inputascore(0~100):”);scanf(“%d”,&score);grade=score/10;/*转化成switch语句中的case标号*/

2.4.1程序解析Yoursitehere语言教材switch(grade){case10:case9:printf(“grade=A\n”);break;case8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;case5:case4:case3:case2:case1:case0:printf(“grade=E\n”);break;default:printf(“Thescoreisoutofrange!\n”);}return0;

}2.4输出成绩等级Yoursitehere语言教材运行结果:Inputascore(0~100):95grade=AInputascore(0~100):83grade=BInputascore(0~100):77grade=CInputascore(0~100):61grade=DInputascore(0~100):37grade=E2.4输出成绩等级Yoursitehere语言教材2.4输出成绩等级2.4.2用switch语句实现多分支的程序结构多分支可以使用嵌套的if语句处理,但如果分支较多,嵌套的if语句层数多,程序冗长,降低可读性。C语言提供switch语句直接处理多分支选择。其一般形式:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2………case常量表达式n:语句ndefault:语句n+1}Yoursitehere语言教材2.4输出成绩等级说明:switch括号后面的表达式,允许为任何类型。各个常量表达式的值必须互不相同,否则出现矛盾。各个case,default出现的顺序不影响执行结果。执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。此时,“case常量表达式”只是起到语句标号的作用,并不在此处进行条件判断。case后面如果有多条语句,不必用{}括起来。多个case可以共用一组执行语句。Yoursitehere语言教材2.4输出成绩等级【例2-8】将一个星期数字转换成星期的英文名称。

源程序:

#include<stdio.h>voidmain(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){

case1:printf("Monday\n");

case2:printf("Tuesday\n");

case3:printf("Wednesday\n");

case4:printf("Thursday\n");

case5:printf("Friday\n");

case6:printf("Saturday\n");

case7:printf("Sunday\n");

default:printf("error!\n");

}return0;}Yoursitehere语言教材运行结果:inputintegernumber:3WednesdayThursdayFridaySaturdaySundayerror!

2.4输出成绩等级Yoursitehere语言教材2.4输出成绩等级2.4.3switch语句的执行逻辑与break语句的作用添加break语句后的switch结构如下:switch(表达式){case常量表达式1:语句1break;case常量表达式2:语句2break;………case常量表达式n:语句nbreak;default:语句n+1break;}Yoursitehere语言教材2.4输出成绩等级添加break语句后的例2-8源程序如下:源程序:

#include<stdio.h>voidmain(){

inta;

printf("inputintegernumber:");

scanf("%d",&a);

switch(a){

case1:printf("Monday\n");break;

case2:printf("Tuesday\n");break;

case3:printf("Wednesday\n");break;

case4:printf("Thursday\n");break;

case5:printf("Friday\n");break;

case6:printf("Saturday\n");break;

case7:printf("Sunday\n");break;

default:printf("error!\n");break;

}return0;}Yoursitehere语言教材2.4输出成绩等级运行结果:inputintegernumber:3Wednesday【例2-9】运输公司对用户计算运费。路程s越远,每公里运费越低。标准如下:

sc=(int)(s/250)ds<250km0没有折扣250≤s<50012%500≤s<10002,35%1000≤s<20004,5,6,78%2000≤s<30008,9,10,1110%s≥300012,13…15%Yoursitehere语言教材2.4输出成绩等级源程序:

#include<stdio.h>

voidmain(){intc,s;floatp,w,d,f;scanf(“%f,%f,%d”,&p,&w,&s);if(s>=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;Yoursitehere语言教材2.4输出成绩等级

case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/100.0);printf(“freight=%15.4f\n”,f)return0;}运行结果:100,20,30freight=588000.0000!

Yoursitehere语言教材2.5输出最大值【例2-10】输入两个数,输出其中最大值。

源程序:#include<stdio.h>voidmain(){

floata,b,max;printf(″Input2realsplease:″);scanf(″%f%f″,&a,&b);max=a>b?a∶b;printf(″Themaxis%f\n″,max);return0;}2.5.1程序解析Yoursitehere语言教材运行结果:Input2realsplease:8956Themaxis89.000000Input2realsplease:21-9Themaxis21.0000002.5输出最大值Yoursitehere语言教材2.5输出最大值2.5.2条件表达式及其分支结构如果在条件语句中,只执行单个的赋值语句时,常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。它的一般形式为表达式1?表达式2:表达式3其求值规则为:若表达式1的值为真(非0),则以表达式2的值作为该条件表达式的值;否则取表达式3的值作为该条件表达式的值。Yoursitehere语言教材2.5输出最大值使用条件表达式时,还应注意以下几点:1.条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此max=(a>b)?a:b可以去掉括号而写为max=a>b?a:b。2.条件运算符?和:是一对运算符,不能分开单独使用,是C语言中唯一的三元运算符。3.条件运算符的结合方向是自右至左。4.条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为赋值语句,并且两个分支都给同一个变量赋值时才能代替if语句。Yoursitehere语言教材2.5输出最大值【例2-11】要求从键盘输入一个字符,判断它是否是大写字母,如果是,将它转换成小写字母;否则,不转换。最后将结果输出。源程序:#include<stdio.h>voidmain(){

charch;scanf(“%c”,&ch);ch=(ch>=’A’&&ch<=’Z’)?(ch+32):ch;printf(“%c”,ch);return0;}

Yoursitehere语言教材运行结果:Input2realsplease:8956Aabb2.5输出最大值Yoursitehere语言教材2.6分支结构程序设计实例【例2-12】编写程序,输入3个整数,输出其中的最小值。

源程序:#include<stdio.h>voidmain(){inta,b,c,min;printf("inputthreenumber:\n");scanf("%d%d%d",&a,&b,&c);min=a;if(min>b)min=b;

if(min>c)min=c;printf("min=%d\n",min);return0;}

Yoursitehere语言教材2.6分支结构程序设计实例【例2-13】输入三个数x,y,z,请把这三个数由小到大输出。

源程序:#include<stdio.h>voidmain(){

intx,y,z,t;

scanf("%f%f%f",&x,&y,&z);

if(x>y)

{t=x;x=y;y=t;}if(x>z){t=z;z=x;x=t;}Yoursitehere语言教材2.6分支结构程序设计实例if(y>z){t=y;y=z;z=t;}printf("smalltobig:%f%f%f\n",x,y,z);return0;}Yoursitehere语言教材2.6分支结构程序设计实例【例2-14】企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数?源程序:#include<stdio.h>voidmain(){longinti;intbonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);

bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;Yoursitehere语言教材2.6分支结构程序设计实例

if(i<=100000)

bonus=i*0.1;

elseif(i<=200000)

bonus=bonus1+(i-100000)*0.075;

elseif(i<=400000)

bonus=bonus2+(i-200000)*0.05;

elseif(i<=600000)

bonus=bonus4+(i-400000)*0.03;

elseif(i<=1000000)

bonus=bonus6+(i-600000)*0.015;

else

bonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);return0;Yoursitehere语言教材2.6分支结构程序设计实例【例2-15】判断某一年是否是闰年。

源程序:#include

<stdio.h>voidmain(){

int

year;

printf("Pleaseinputtheyear:");scanf("%d",&year);if(year%400==0||year%4==0&&year%100!=0)

printf("%d

isaleapyear!",year);else

printf("

%d

isnotaleapyear!",year);return0;Yoursitehere语言教材2.6分支结构程序设计实例【例2-16】输入某年某月某日,判断这一天是这一年的第几天?

源程序:#include

<stdio.h>voidmain(){intday,month,year,sum,leap;printf("\npleaseinputyear,month,day\n");scanf("%d,%d,%d",&year,&month,&day);switch(month){case1:sum=0;break;

case2:sum=31;break;

case3:sum=59;break;

case4:sum=90;break;

case5:sum=120;break;

case6

温馨提示

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

评论

0/150

提交评论