《C语言程序设计》第3章 分支结构程序设计写字字帖_第1页
《C语言程序设计》第3章 分支结构程序设计写字字帖_第2页
《C语言程序设计》第3章 分支结构程序设计写字字帖_第3页
《C语言程序设计》第3章 分支结构程序设计写字字帖_第4页
《C语言程序设计》第3章 分支结构程序设计写字字帖_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

第3章分支结构程序设计第3章分支结构程序设计学习目标本章主要要求掌握关系表达式与逻辑表达式、分支结构的设计思想、实现分支结构判断条件的构成、实现分支结构的语句、分支结构程序设计举例。第3章分支结构程序设计3.1关系运算符和关系表达式3.2逻辑运算符和表达式3.3if语句3.4switch语句3.1关系运算符和关系表达式3.1.1关系运算符及其优先次序3.1.2关系表达式3.1.1关系运算符及其优先次序在C语言程序设计中,常常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。在C语言中有以下关系运算符:<小于<=小于或等于>大于>=大于或等于==等于!=不等于关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在上述六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。3.1.2关系表达式用关系运算符将两个数值或数值表达式连接起来的式子称为关系表达式。

一般格式:表达式关系运算符表达式3.1.2关系表达式例如:a+b>c-dx<=5/35*i==k+1由于表达式也可以又是关系表达式,因此在关系表达式中允许出现嵌套的情况。例如:a>(b>c),a!=(c==d)关系表达式的值是真”和“假”,用“1”和“0”表示。例如:3>0的值为“真”,即为1。2>7不成立,故其值为假,即为0。例3.1分析下面程序的运行结果。#include<stdio.h>voidmain(){

int

a,b,c;

scanf("%d%d%d",&a,&b,&c);a=b!=c;

//

将关系表达式的值赋给a

printf("a=%d,b=%d,c=%d\n",a,b,c);

a==(b=c++*3);

//a与b进行相等比较

printf("a=%d,b=%d,c=%d\n",a,b,c);

a=b>c>2;

//

将关系表达式的值赋给a

printf("a=%d,b=%d,c=%d\n",a,b,c);}运行结果:234↙a=1,b=3,c=4a=1,b=12,c=5a=0,b=12,c=53.2逻辑运算符和表达式

3.2.1逻辑运算符及其优先次序3.2.2逻辑表达式3.2.1逻辑运算符及其优先次序3种逻辑运算符:&&(逻辑与)

||(逻辑或)

!(逻辑非)&&和||是双目(元)运算符!是一目(元)运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子3.2.1逻辑运算符及其优先次序与运算&&

:参与运算的两个量都为真时,结果才为真,否则为假。例如:1>0&&6>2由于1>0为真,6>2也为真,相与的结果也为真。或运算||

:参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如:3>0||3>8由于3>0为真,相或的结果也就为真。非运算!

:参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(3>0)由于3>0为真,非运算的结果为假。3.2.2逻辑表达式由逻辑运算符将逻辑量连接起来构成的式子称为逻辑表达式。一般格式:表达式逻辑运算符表达式其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。3.2.2逻辑表达式例如:(a&&b)&&c根据逻辑运算符的左结合性,上式也可写为:a&&b&&c

逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。例3.2分析下面程序的运行结果。#include<stdio.h>voidmain(){

int

x,y,z,m;

x=y=z=0;

//

给变量x、y、z赋值0

m=++x&&++y||++z;

printf("m=%dx=%dy=%dz=%d",

m,x,y,z);}运行结果:m=1

x=1

y=1

z=0分析:由于“++x&&++y”为1,表达式“++x&&++y||++z”值已完全确定,所以表达式中的“++z”被忽略。例3.3若有定义语句:intk1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为()(2011年9月全国计算机等级考试二级C试题选择题第17题)A.0和1 B.0和20C.10和1D.10和20分析:在执行表达式k1=k1>k2时,先进行关系比较,k1(10)是小于k2(20)的,所以k1>k2的值为0,再将0赋值给k1,所以此时k1=0,表达式值为0。由于是逻辑与(&&)连接,有一个表达式为0,逻辑表达式结果为0,此时,逻辑与后面的表达式不用参与运算,所以k2值不变,仍然是20。选B。3.3if语句3.3.1不含else子句的if语句3.3.2含else子句的if语句3.3.3嵌套的if语句3.3.4条件表达式构成的选择结构3.3.1不含else子句的if语句一般形式:

if(表达式)语句其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图:图3.1不含else子句的if语句流程图例3.4输入两个整数,输出其中的大数。#include"stdio.h"voidmain(){

int

a,b,max;

printf("\ninputtwonumbers:\n");

scanf("%d%d",&a,&b);

max=a;

if(max<b)max=b;

printf("max=%d",max);}运行结果:inputtwonumbers:35↙max=5例3.5有以下程序(2011年3月全国计算机等级考试二级C试题填空题第7题)#include<stdio.h>main(){intx;scanf("%d",&x);if(x>15)printf("%d",x-5);if(x>10)printf("%d",x);if(x>5)printf("%d\n",x+5);}若程序运行时从键盘输入12<回车>,则输出结果为

。分析:本题执行过程如下,输入12后,首先判断第一个if条件,12>15为假,所以第一个if语句不执行。接着进行第二个if条件判断,12>10为真,执行后面语句,所以输出12。然后继续执行第三个if条件判断,12>5为真,if语句继续被执行,就在输出12后继续输出x+5,即17。所以完整输出结果为1217。3.3.2含else子句的if语句一般形式:if(表达式)语句1;else语句2;其语义是:如果表达式的值为真,则执行语句1,否则执行语句2。其过程可表示为下图:图3.2含else子句的if语句流程图例3.6输入两个整数,输出其中的大数。#include"stdio.h"voidmain(){

int

a,b,max;printf("\ninputtwonumbers:\n");scanf("%d%d",&a,&b);if(a>b)printf("max=%d\n",a);elseprintf("max=%d\n",b);} 运行结果:inputtwonumbers:35↙max=53.3.3嵌套的if语句当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。一般形式:

if(表达式)

if语句;

或者:

if(表达式)

if语句;

else

if语句;例如:

if(表达式1)

if(表达式2)

语句1;

else

语句2;其中的else究竟是与哪一个if配对呢?C语言规定,if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。例3.7比较两个数的大小关系。#include"stdio.h"voidmain(){

int

a,b;printf("pleaseinputa,b:\n");scanf("%d%d",&a,&b);if(a!=b)if(a>b)printf("a>b\n");elseprintf("a<b\n");elseprintf("a=b\n");

}运行结果:Pleaseinputa,b:35↙a<b嵌套的if语句结构中,比较常用到的结构形式是if-else-if结构。使用if-else-if形式,结构更加清晰易懂。一般形式:if(表达式1)

语句1;

elseif(表达式2)

语句2;

elseif(表达式3)

语句3;

…elseif(表达式m)

语句m;

else

语句n;其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。

例3.8判别键盘输入整数是正整数、负整数或者是零#include"stdio.h"main(){

intc;

printf("inputanumber:\n");

scanf("%d",&c);

if(c<0)

printf("Thisisanegativenumber\n");elseif(c>0)

printf("Thisispositivenumber\n");else

printf("Thisiszero\n");}运行结果:Pleaseinputa,b:30↙Thisisapositivenumber3.3.4条件表达式构成的选择结构C语言另外还提供了一个特殊的运算符——条件运算符,由此构成的表达式也可以形成简单的选择结构,这种选择结构能以表达式的形式内嵌在允许出现表达式的地方,使得可以根据不同的条件使用不同的数据参与运算。条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。由条件运算符组成的式子称为条件表达式。一般形式:表达式1?表达式2:表达式3其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。例如条件语句:if(a>b)max=a;

elsemax=b;可用条件表达式写为max=(a>b)?a:b;执行该语句的语义是:如a>b为真,则把a赋予max,否则把b赋予max。例3.9用条件表达式重新编程,输出两个数中的大数。

#include"stdio.h"voidmain(){

int

a,b,max;printf("\ninputtwonumbers:\n");scanf("%d%d",&a,&b);printf("max=%d\n",a>b?a:b);

}运行结果:inputtwonumbers56↙max=63.4switch语句一般形式:switch(表达式){case常量表达式1:语句1;

case常量表达式2:语句2;

…case常量表达式n:语句n;

default:语句n+1;

}3.4switch语句其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。3.4switch语句例3.10成绩等级查询:在进行评定时通常会将成绩分为几个等级,0~59分为不合格,60~79分为及格,80~89分为良好,90~100为优秀。输入一个成绩,给出对应的等级。#include"stdio.h"voidmain(){intnum;floatC;

printf("\t成绩等级查询\n\n");

printf("请输入成绩:");

scanf("%f",&C);num=(int)(C/10);

switch(num){case10:case9:

printf("等级为优秀!\n");break;case8:

printf("等级为良好!\n");break;case7:case6:

printf("等级为合格。\n");break;default:

printf("等级为不合格。\n");break;}}运行结果:成绩等级查询请输入成绩:95↙等级为优秀!3.4switch语句选择结构应用程序举例:例3.11输入一个字符,请判断是字母、数字还是特殊字符?#include<stdio.h>voidmain(){charch;printf("请输入一个字符:");/*在双引号内的字符串中,可以出现汉字,不影响程序运行*/ch=getchar();if((ch>=’a’&&ch<=’z’)||(ch>=’A’&&ch<=’Z’))printf("\n它是一个字母!\n");/*注意前后的\n,养成良好的编辑习惯*/elseif(ch>=’0’&&ch<=’9’)printf("\n它是一个数字!\n");elseprintf("\n它是一个特殊字符!\n");}运行结果:请输入一个字符:A↙

它是一个字母!例3.12闰年判断程序。#include<stdio.h>voidmain(){intyear;printf("Typeinayear:\n");scanf("%d",&year);if(year%400==0||year%4==0&&year%100!=0)printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}运行结果:Typeinayear:2006<回车>2006isaleapyear分析:闰年有两种情况,设年份为year,则:⑴当year是400的整倍数时为闰年,条件表示为:year%400==0⑵当year是4的整倍数,但不是100的整倍数时为闰年,条件表示为:year%4==0&&year%100!=0综合上述两种情况,得到闰年条件的逻辑表达式:year%400==0||year%4==0&&year%100!=0例3.13

编写程序,根据输入的学生成绩给出相应的等级,大于或等于90分以上的等级为A,6O分以下的等级为E,其余每10分为一个等级。#include<stdio.h>main(){intg;

printf("Enterg:");scanf("%d",&g);

printf("g=%d:",g);

if(g>=90)printf("A\n");

elseif(g>=80)printf("B\n");

elseif(g>=70)printf("C\n");

elseif(g>=60)printf("D\n");

elseprintf("E\n");}运行结果:Enterg:92↙g=92:A分析:当执行以上程序时,首先输入学生的成绩,然后进入if语句。if语句中的表达式将依次对学生成绩进行判断,若能使某if后的表达式值为1,则执行与其相应的子句,之后便退出整个if结构。例3.14将上面的例子改成switch语句。#include<stdio.h>main(){intg;

printf("Enterg:");scanf("%d",&g);

printf("g=%d:",g);switch(g/10){case10:

case9:printf("A\n");break;

case8:printf("B\n");break;

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

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

default:printf("E\n");

}}运行结果:Enterg:56↙g=56:E例3.15求一元二次方程ax2+bx+c=0的解(a≠0)。#include"math.h"#include"stdio.h"main(){floata,b,c,disc,x1,x2,p,q;scanf(“%f,%f,%f”,&a,&b,&c);disc=b*b-4*a*c;if(fabs(disc)<=1e-6) /*fabs():求绝对值库函数*/printf(“x1=x2=%7.2f\n”,-b/(2*a)); /*输出两个相等的实根*/else{if(disc>1e-6){x1=(-b+sqrt(disc))/(2*a); /*求出两个不相等的实根*/x2=(-b-sqrt(disc))/(2*a);printf("x1=%7.2f,x2=%7.2f\n",x1,x2);}else{p=-b/(2*a); /*求出两个共轭复根*/q=sqrt(fabs(disc))/(2*a);printf(“x1=%7.2f+%7.2fi\n“,p,q);/*输出两个共轭复根*/printf(”x2=%7.2f-%7.2fi\n“,p,q);}}}

运行结果:2,6.5,3↙x1=-0.56,x2=-2.69例3.16已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):profit≤1000 没有提成;1000<profit≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000 提成20%;10000<profit 提成25%。算法分析:为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、……),如果将利润prof

温馨提示

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

评论

0/150

提交评论