当前位置:
文档之家› C语言程序设计第3章 选择结构流程和应用
C语言程序设计第3章 选择结构流程和应用
流程图如图3-3所示,若“条件”为 “真”,则执行“语句1”;否则执行 “语句2”。 此处的“语句1”和“语句2”可以是简单 语句,也可以是用一对大括号“{ }”括 起来的复合语句。
条件
Y
N
语句1
语句2
试一试
问题3.5 编一程序控制电灯开关。从键盘输入1 表示开灯,这时显示“the light is On”,输入0 或其它数表示关灯,显示“the light is off” 。 【解题步骤】 1.定义整型变量iOnOff; 2.从键盘接收用户输入存入变量iOnOff; 3.根据iOnOff是否为1输出电灯的开关状态。 若iOnOff=1,则输出”the light is On”,否则电 灯为关灯状态,输出”the light is off”。
流程图
试一试
问题3.7 从键盘输入一个自变量x,求分段函数 y=f(x)的值,f(x)的表达式如下: 【解题步骤】 1.定义整型变量iX,iY; 2.从键盘输入数据放iX; 3.根据iX的值,选择相应的函数表达式计算iY; 4.输出iY。
流程图
程序代码
#include “stdio.h” void main() { int iX,iY; printf("please input a integer:"); scanf("%d",&iX); if(iX>5) iY=iX+3; else if(iX<0) iY=2*iX+30; else iY=0; printf("f(%d)=%d",iX,iY); getch(); }
关系表达式
用关系运算符把两个表达式连接起来的式 子称为关系表达式。一般形式为: 表达式1 关系运算符 表达式2 该表达式执行时,先计算“表达式1”和 “表达式2”的值,然后进行比较,比较的 结果为真时关系表达式的值为1,否则为0。
试一试
问题3.1 关系运算符和关系表达式的用法演示。请观察程序运行结果。 【程序代码】 #include “stdio.h” void main() { int iX=3,iY=4,iZ=5; printf("iX=%d,iY=%d,iZ=%d\n",iX,iY,iZ); printf("iX>iY is %d\n",iX>iY); printf("iX<iY is %d\n",iX<iY); printf("iX<iY==iX>iY is %d\n",iX<iY==iX>iY); printf("iX<=iY is %d\n",iX<=iY); printf("(iX+iY)==iZ is %d\n",(iX+iY)==iZ); }
第3章 选择结构流程和应用
本章内容中我们将学习 1 选择结构判定条件的构成 2 单分支与双分支选择结构程序设计 3 多分支选择结构程序设计
1 选择结构判定条件的构成
关系运算符与关系表达式 逻数之间进行比较的运算符,其 运算结果为逻辑值(或称“布尔”值,boolean) “真”或“假”。 C语言中提供六种关系运算符,如 表3-1所示。
小结
1. 不要把关系运算符“==”误用为赋值运算符“=”。比如,如果将判断 iX是否 等于8的关系表达式“iX == 8”写成“iX = 8”,那么它永远为“真”(不管 iX原来的值是多少)。 2.正确书写关系表达式。如果表示“iX大于等于5,且iX小于等于20”,在数学 中可写为式子:5 ≤iX ≤ 20,而在C程序中,如果写成下面的表达式: 5 <= iX <= 20 则是错误的。但这种错误是一种语义上的错误,而不是语法上的错误,编 译器查不出来,编译时不会报告错误,但运行时,不论iX为何值(比如为 3或60)表达式的值都是“真”,所以这种错误比较“隐蔽”,不易被发 现,希望引起注意。正确的写法应该是: 5 <= iX &&iX <= 20 3.算术运算符、关系运算符、逻辑运算符、赋值运算符在一起进行混合运算 时,各类运算符的优先级如下所示(自左至右,从高到低): !(非) —> 算术运算 —> 关系运算 —> && —> || —> 赋值运算
2 单分支和双分支选择结构程序设计
简单if语句 if-else语句 条件运算符与条件表达式
简单if语句
学一学 简单if语句的形式为: if ( 条件表达式 ) 语句
其流程图如图3-1所示。语句的执 行过程是先计算“条件表达式”, 若值为“真”,则执行“语句”; 否则什么也不做。此处的“语句” 可以是简单语句,也可以是用一对 大括号“{ }”括起来的复合语句。
流程图
程序代码
#include “stdio.h” void main() { int iOnOff; printf("please input 1 or a integer:"); scanf("%d",&iOnOff); if(iOnOff==1) printf("\nthe light is on."); else printf("\nthe light is off."); getch(); }
3 多分支选择结构程序设计
嵌套if-else语句 switch语句
嵌套if-else语句
学一学 所谓嵌套就是在if-else语句的if或else子句中又包含了一个或多个ifelse语句。其目的是解决多分支选择问题,其一般形式为: if ( 条件1 ) 语句1; else if ( 条件2 ) 语句2; else if ( 条件3 ) 语句3; ┇ else if(条件n-1)语句n-1; else 语句n; 这是由双路选择语句所构成的多路选择结构。此处的“语句1”、 “语句2”…“语句n”可以是简单语句,也可以是用一对大括号“{ }” 括起来的复合语句。语句流程图如图3-6所示。
练一练
问题: 1.请用if-else语句实现问题3-6的双分支选 择结构。 2.用条件表达式实现问题3-5的双分支选择 结构。
小结
1.if和else同属于一个if语句,else不能作为语句单独使用,它只是if语句的一 部分,与if配对使用。因此程序中不可以没有if而只有else。 2.if-else 语句在执行时,只能执行与if有关的语句或者执行与else有关的语句, 而不可能同时执行两者。 3.if语句的表达式可以是任意类型的C语言的合法的表达式,除常见的关系表 达式或逻辑表达式外,也允许是其它类型的数据,如整型、实型、字符型 等。 4.在if 和else的后面,可以是单条语句,也可以复合语句。单条语句时,注 意别忘记写分号“;”,复合语句时要注意“{}”的后面不能加“;”。 5.条件运算符的其结合性为“从右到左”(即右结合性)。比如 表达式iA>iB?iA:iC>iD?iC:iD相当于iA>iB?iA:(iC>iD?iC:iD),如果 iA=1,iB=2,iC=3,iD=4,则上述条件表达式的值等于4。 6.条件表达式一般形式(表达式1 ?表达式2 :表达式3)中的“表达式1”、 “表达式2”、“表达式3”的类型,可以各不相同。“表达式2”和“表达式3” 不仅可以是数值表达式,也可以是赋值表达式或函数表达式。比如 iX>iY?printf(“%d”,iX):printf(“%d”,iY) 如果iX=3,iY=4,则条件表达式执行结果为输出iY的值。
试一试
问题3.6 编一程序从键盘输入两个整数,输出较大 的一个。 解题步骤: 1.定义整型变量iX,iY用来存放两个整数; 2.定义变量iMax,存放两个数中较大的一个; 3.从键盘接收用户输入; 4.比较iX和iY,大者放iMax中; 5.输出iMax。
流程图
程序代码
#include “stdio.h” void main() { int iX,iY,iMax; printf("please inpit 2 integers :"); scanf("%d,%d",&iX,&iY); iMax = iX>iY?iX:iY; printf("iMax=%d",iMax); getch(); }
条件运算符与条件表达式
学一学 C语言中有一种特有的运算符称为条件运算符, 即“?:”。它在某种程度上可以起到逻辑判 断的作用,一样可以实现双分支选择结构。由 条件运算符构成的表达式称为条件表达式,与 if-else语句具有相同的功能。其一般形式为: 表达式1 ?表达式2 :表达式3 运算规则为:如果“表达式1”的值为真, 则条 件表达式的运算结果等于“表达式2”的值,否 则,运算结果等于“表达式3”的值。
试一试
问题3.2 逻辑运算符和逻辑表达式的用法演示。请观察程序运行结果。 【程序代码】 #include “stdio.h” void main() { int iX=3,iY=4; printf("iX=%d,iY=%d\n",iX,iY); printf("iX<=5&&iX>=-5 is %d\n",iX<=5&&iX>=-5); printf("iX<iY||iX+iY==8 is %d\n",iX<iY||iX+iY==8); printf("'A'&&iX-iY<0 is %d\n",'A'&&iX-iY<0); printf("!2.56 is %d\n",!2.56); printf("!99&&iX<iY||iX*iY==12 is %d",!99&&iX<iY||iX*iY==12) ; getch(); }