第四章-选择结构程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

if
else
( ) 语句2
语句3
例如: if ( ){ if 语句3 等价于: if ( ) ( ) 语句1 }else if ( ) 语句2 else
{ if ( ) 语句1 }
else if else ( ) 语句2
语句3
下面的嵌套格式被经常使用 if (表达式1) 语句1 else if (表达式2)
格式1:if子句中嵌套具有else子句的if语句
if ( 表达式1) if ( 表达式2 ) 语句1
else
else 语句3
语句2
当表达式1的值为真时,执行内嵌的 if – else 语句;否则,执行 语句3。
格式2:if子句中嵌套不含else子句的if语句 if ( 表达式1)
{ if
else 语句2
条件运算符?:

条件表达式

写出关于变量 x 的关系表达式



x x x x x
是奇数 是偶数 是数字字符 是大写字符 是3位正整数



x%2 !(x % 2) x >= '0' && x <= '9' x >= 'A' && x <= 'Z' x > 99 && x < 1000
真 表达式1 假 语句1 真表达式2 假 语句2 …… 真 表达式n 假 语句n
语句2
…… else 语句n if (表达式n)
语句n+1
程序
编写程序,根据输入的学生成绩,给出相应的等级。
main ( )
(3) 注意 :如果没有内嵌语句n + 1 { int score; 则格式中的最后一个else可以省略,这 scanf ( " %d " , & score ) ; 种情况下,if结构中若一个条件也不满 足,则相当于不执行任何操作。 if (score>=90)
格式4:else子句中嵌套不含else子句的if语句 if ( 表达式1)
语句1
else if ( 表达式2 ) 语句2
当表达式1的值为真时,执行语句1;否则,再判断表达式2, 若为真则执行语句2,否则什么也不执行。
格式5:if内嵌语句和else子句中均嵌套含else子句的if语句 if ( 表达式1)
if
else else if else
( 表达式2 )
语句2
语句1
( 表达式3 ) 语句4
语句3
当表达式1的值为真时,执行内嵌if-else语句;否则,再判 断表达式3,若为真则执行其中内嵌的if-else语句,否则什么 也不执行。
例如: if ( ) 语句3 等价于: if ( ) if else ( ) 语句1 if ( ) 语句1 else if ( ) 语句2 else
(内嵌)语句
后续语句
4.2、 if 语句的一般形式
1. if 语句的形式二 (1) 语句格式 if (表达式) 语句1 else 语句2
后续语句 真 假
表达式
语句1
语句2
例:从键盘输入一个数x, 将其绝对值输出到显示器。
算法步骤: 说明:算法过程可用流程图 表示。 (1)从键盘输入x(可用scanf函数, x可定义为实型数)。
( 表达式2 ) 语句1 }
当表达式1的值为真时,执行内嵌的if语句;否则,执行语句2。 注意:在这里,内嵌if语句的一对大括号不能缺少。
格式3:else子句中嵌套含else子句的if语句 if ( 表达式1 )
语句1
else if else ( 表达式2 ) 语句3 语句2
当表达式1的值为真时,执行语句1;否则,再判断表达式2, 若为真则执行语句2,否则执行语句3。
(2)若 x < 0 则 x = -x 。
输入x 真 x=-x x<0 假
void main ( )
(3)输出x
(可用printf函数)。
{
float x;
scanf ("%f",&x); if ( x<0 ) x<0 x = -x; /*if的内嵌语句*/ printf(―%f\n‖,x); /*后续语句*/
case case
ˊ A ˊ : printf ( ― 优 ” ) ;
ˊ B ˊ : printf ( ― 良 ” ) ; ˊ C ˊ : printf ( ― 中 ” ) ;
break ;
break ; break ;
case
case
ˊ D ˊ : printf ( ― 及格 ” ) ;
break ;
例: 从键盘输入两个整数 a 和b, 保证小数存在a中,大数存 在b中,并将它们打印出来 。 算法步骤: (1)从键盘输入a和b(可用scanf函数,a和b可定义为整型数)。 (2) 若 a > b 则 a与b交换。 (3) 输出 a, b (可用printf函数)。
涉及:a与b交换操作可以进一步求精为:
4.7
switch(表达式) { case
switch 语句
2. 功能:将表达式的值 与各常量表达式相比较, 若与常量表达式i相等, 则 执 行 语 句 i, 语 句 i+1,…, 语 句 n+1 。 若 所 有的常量表达式值都不 与表达式值相匹配 ,则 执 行 default 后 的 语 句 (default可以没有)。 若语句中含有break语句, 则 跳 出 switch , 执 行 switch的后续语句。
ˊ E ˊ : printf ( ― 不及格 ” ); break ;
default : printf ( ― error \n ‖ ) ;
}
结果为:? 若grade为‘A’,则输出为:优
注意:
(1)switch后的表达式类型一般为整型、字符型、或枚举型。 C的新标准允许所有类型。
(2)常量表达式1~ n的值必须互不相同。

1000<profit≤2000
2000<profit≤5000 5000<profit≤10000 10000<profit
提成10%;
提成15%; 提成20%; 提成25%。



算法设计要点: 为使用switch语句,必须将利润profit与提 成的关系,转换成某些整数与提成的关系。分析 本 题 可 知 , 提 成 的 变 化 点 都 是 1000 的 整 数 倍 (1000、2000、5000、……),如果将利润 profit整除1000,则当:
1.switch的语句格式:
常量表达式1:语句1
case
…… case
常量表达式2:语句2
常量表达式n:语句n :语句n + 1
default }
例如:若已知x在1到10之间,要按如下公式计算y。 x-1 (1≤x<2) sinx (2≤x<3) y= 1+x2 (3≤x<5) 2x-5 (5≤x<8) x/3 (8≤x<10)
第四章 选择结构程序设计
4.2、if 结构 (p87)
if 语句的一般形式
4.6、选择结构的嵌套 (p99)
4.7、switch语句实现多分支选择(p102)
4.8、选择结构程序设计举例
4.2、
if 语句的一般形式
真 表达式 假
1. if 语句的形式一 (1) 语句格式: if (表达式) 内嵌语句 后续语句
Leabharlann Baidu
ˊ E ˊ : printf ( ― 不及格 ” ); break ;
default : printf ( ― error \n ‖ ) ; } 结果为:? 若grade为‘A’,则输出为:优良中及格不及格error
例如:根据考试成绩的等级,打印出评语。
switch ( grade ) {
case
case 3 : case 4 : y = 1 + x * x ; break; case 5 : case 6 : case 7 : y = 2 * x – 5; case 8 : case 9 : } y = x / 3; break;
例如:根据考试成绩的等级,打印出评语。 switch ( grade ) {
printf ( ― 优秀 \n ‖ ) ; else if (score>=80) printf ( ― 良好 \n " ) ; else if (score>=70) printf ( ―中等 \n " ) ; else if (score>=60) /*内嵌语句3*/ /*内嵌语句2*/ /*内嵌语句1*/
printf ( “ 合格 ” ) ; break ;
4.8 选择结构程序设计举例

[例] 求一元二次方程ax2+bx+c=0的解(a≠0)。

[例] 已知某公司员工的保底薪水为500,某月所接工程的利 润profit(整数)与利润提成的关系如下(计量单位:元):

profit≤1000
没有提成;
a=b;
b=t; } 注意,这里不用加“ ;”
/*if内嵌语句是三条语句组成的复合语句。须由{ }括起。* / printf(―%d,%d\n‖,a,b) ; /* if语句的后续语句 */
}
4.6、 选择结构的嵌套
if语句的内嵌语句又包含一个或多个if语句—嵌套。if语句可 以嵌套出很多种情况,下面列出一般的嵌套格式。
(3)break语句用于跳出switch。在case后的语句都有break的 情况下,case的出现次序不影响执行结果。
(4)若没有break语句则执行结果不同。
例如,若去掉上例中的5个break语句,程序执行时输入A,则输 出结果为: 优良中及格不及格error (5多个case可以共用一组执行语句。例如: case ‘A’ : case ‘B’ : case ‘C ‘ : case ‘D’:
profit≤1000 1000<profit≤2000 2000<profit≤5000 5000<profit≤10000 10000<profit 对应0、1 对应1、2 对应2、3、4、5 对应5、6、7、8、9、10 对应10、11、12、……
printf(―及格\n"); /*内嵌语句4*/ else
printf(―不及格\n‖); /*内嵌语句5*/
}
其他举例: (1)输入两个实数,按代数值由小到大的顺序输出 这两个数。 (2)输入3个数a、b、c,要求按从小到大的顺序输 出(仔细体会其中的算法) 问题:若输入10个数,请将最大(或最小)的数 打印输出? (3)实现输出sgn(x)函数
( x > = 5 && x < 8 ) if
( x > = 8 && x < 10 )
若用switch语句可以写成: (对照 P103 switch语句格式) switch ( ( int ) x ) y = x – 1; break; y = sin ( x ) ; break;
{ case 1 : case 2 :
设计选择结构程序,要考虑两个方面的问题: 一:在C语言中如何来表示条件判断? 用关系表达式或逻辑表达式 二:在C语言中实现选择结构用什么语句? 实现选择结构用if语句或switch语句。
第四章 选择结构程序设计

关系表达式

关系运算符 > >= <
<=
==
!=

逻辑表达式

逻辑运算符 ! && ||
打印输出x
}
例: 从键盘输入一个数x, 求其绝对值y, 并输出到显示器。
输入x 假 y=-x 真 y=x
算法步骤:
(1) 键盘输入x (可用scanf函数, x可 定义为实型数)。 (2) 若 x > 0 则 y = x ; 否则y = - x。 (可用printf函数)
x>0
(3) 输出y
打印输出y
若用if语句可以写成
if
( x >= 1 && x < 2 )
if else
y = x – 1;
else
( x >= 2 && x < 3 ) y = sin ( x ) ; if else ( x >= 3 && x < 5 ) if else y = 1 + x * x ; y = 2 * x – 5; y = x / 3;
case
case case case case
ˊ A ˊ : printf ( ― 优 ” ) ;
ˊ B ˊ : printf ( ― 良 ” ) ; ˊ C ˊ : printf ( ― 中 ” ) ; ˊ D ˊ : printf ( ― 及格 ” ) ;
break ;
break ; break ; break ;
t = a ; a = b ; b = t ; 注意:写成 /* t为中间变量 */
a = b ; b = a ;
是错误的。
程序
void
main ( )
{ int a , b , t ; scanf("%d %d",&a,&b) ; /*输入两个整数a和b*/ if (a>b) { t=a; /* 若 a >b 则 a与b交换 */
相关文档
最新文档