内容正文:
第三章 选择结构
C语言程序设计
选择结构和条件判断
C语言有两种选择语句:
(1)if语句,实现两个分支的选择结构
(2)switch语句,实现多分支的选择结构
C语言程序设计
用if语句处理选择结构举例
例:输入两个实数,按代数值由小到大的顺序输出这两个数。
C语言程序设计
解题思路:
只需要做一次比较,然后进行一次交换即可
用if语句实现条件判断
关键是怎样实现两个变量值的互换
★
●
A
B
互换前
●
★
A
B
互换后
用if语句处理选择结构举例
C语言程序设计
★
●
A
B
C
★
用if语句处理选择结构举例
C语言程序设计
★
●
A
B
C
★
●
用if语句处理选择结构举例
C语言程序设计
A
B
C
★
●
★
用if语句处理选择结构举例
●
C语言程序设计
#include <stdio.h>
int main()
{ float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{ t=a;
a=b;
b=t;
}
printf("%5.2f,%5.2f
",a,b);
return 0;
}
将a和b的值互换
如果a>b
C语言程序设计
#include <stdio.h>
int main()
{ float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{ t=a;
a=b;
b=t;
}
printf("%5.2f,%5.2f
",a,b);
return 0;
}
选择结构,用if语句实现的
C语言程序设计
例:输入3个数a,b,c,要求按由小到大的顺序输出。
C语言程序设计
解题思路:可以先用伪代码写出算法:
if a>b,a和b对换 (a是a、b中的小者)
if a>c,a和c对换 (a是三者中最小者)
if b>c,b和c对换 (b是三者中次小者)
顺序输出a,b,c
C语言程序设计
#include <stdio.h>
int main()
{ float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
{ t=a; a=b; b=t; }
if(a>c)
{ t=a; a=c; c=t; }
if(b>c)
{ t=b; b=c; c=t; }
printf("%5.2f,%5.2f,%5.2f
",a,b,c);
return 0;
}
如果 a>b,将a和b对换
a是a、b中的小者
C语言程序设计
#include <stdio.h>
int main()
{ float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
{ t=a; a=b; b=t; }
if(a>c)
{ t=a; a=c; c=t; }
if(b>c)
{ t=b; b=c; c=t; }
printf("%5.2f,%5.2f,%5.2f
",a,b,c);
return 0;
}
如果 a>c,将a和c对换
a是三者中的小者
C语言程序设计
#include <stdio.h>
int main()
{ float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
{ t=a; a=b; b=t; }
if(a>c)
{ t=a; a=c; c=t; }
if(b>c)
{ t=b; b=c; c=t; }
printf("%5.2f,%5.2f,%5.2f
",a,b,c);
return 0;
}
如果 b>c,将b和c对换
b是三者中的次小者
C语言程序设计
if语句的一般形式
if (表达式) 语句1
[ else 语句2 ]
关系表达式
逻辑表达式
数值表达式
方括号内的部分为可选的
C语言程序设计
if语句的一般形式
if (表达式) 语句1
[ else 语句2 ]
简单的语句
复合语句
另一个if语句等
C语言程序设计
最常用的3种if语句形式:
1. if (表达式) 语句1 (没有else子句)
2. if (表达式) 语句1
else 语句2 (有else子句)
3. if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
┆
else if(表达式m) 语句m
else 语句m+1
(在else部分又嵌套了多层的if语句)
C语言程序设计
if(number > 500) cost = 0.15;
else if (number > 300) cost = 0.10;
else if (number > 100) cost = 0.075;
else if (number > 50) cost = 0.05;
else cost=0;
if (number > 500) cost = 0.15;
else
if (number > 300) cost = 0.10;
else
if (number > 100) cost = 0.075;
else
if (number > 50) cost = 0.05;
else cost = 0;
等价于
分号不能丢
C语言程序设计
说明:
(1)整个if语句可写在多行上,也可写在一行上
但都是一个整体,属于同一个语句
(2)“语句1”…“语句m”是if中的内嵌语句
内嵌语句也可以是一个if语句
(3)“语句1”…“语句m”可以是简单的语句,也可以是复合语句
C语言程序设计
关系运算符及其优先次序
关系运算符:
用来对两个数值进行比较的比较运算符
C语言提供6种关系运算符:
① < (小于) ② <= (小于或等于)
③ > (大于) ④ >= (大于或等于)
⑤ == (等于) ⑥ != (不等于)
优先级相同 (高)
优先级相同 (低)
C语言程序设计
关系运算符及其优先次序
关系、算术、赋值运算符的优先级
算术运算符 (高)
赋值运算符 (低)
关系运算符
C语言程序设计
关系运算符及其优先次序
c>a+b 等效于 c>(a+b)
a>b==c 等效于 (a>b)==c
a==b<c 等效于 a==(b<c)
a=b>c 等效于 a=(b>c)
C语言程序设计
关系表达式
关系表达式
用关系运算符将两个数值或数值表达式连接起来的式子
关系表达式的值是一个逻辑值,即“真”或“假”
在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”
C语言程序设计
逻辑运算符及其优先次序
3种逻辑运算符:
&&(逻辑与) ||(逻辑或) !(逻辑非)
&&和||是双目(元)运算符
!是一目(元)运算符
逻辑表达式
用逻辑运算符将关系表达式或其他逻辑量连接起来的式子
C语言程序设计
逻辑运算符及其优先次序
判断年龄在13至17岁之内?
age>=13 && age<=17
判断年龄小于12或大于65?
age<12 || age>65
C语言程序设计
逻辑运算符及其优先次序
a b ! a ! b a && b a || b
真 真 假 假 真 真
真 假 假 真 假 真
假 真 真 假 假 真
假 假 真 真 假 假
逻辑运算的真值表
C语言程序设计
逻辑运算符及其优先次序
逻辑运算符的优先次序
! → && → || (!为三者中最高)
与其他运算符的优先次序
! (高)
算术运算符
关系运算符
&& 和 ||
赋值运算符 (低)
C语言程序设计
逻辑表达式
逻辑表达式的值应该是逻辑量“真”或“假”
编译系统在表示逻辑运算结果时
以数值1代表“真”,以0代表“假”
但在判断一个量是否为“真”时
以0代表“假”,以非0代表“真”
注意:将一个非零的数值认作为“真”
C语言程序设计
逻辑表达式
(1) 若a=4,则!a的值为0
(2) 若a=4,b=5,则a && b的值为1
(3) a和b值分别为4和5,则a||b的值为1
(4) a和b值分别为4和5,则!a||b的值为1
(5) 4 && 0 || 2的值为1
C语言程序设计
逻辑表达式
修改后的逻辑运算真值表
a b ! a ! b a && b a || b
非0 非0 0 0 1 1
非0 0 0 1 0 1
假 非0 1 0 0 1
假 0 1 1 0 0
C语言程序设计
逻辑表达式
判别某一年是否闰年,用逻辑表达式表示
闰年的条件是符合下面二者之一:
①能被4整除,但不能被100整除,如2008
②能被400整除,如2000
(year % 4 == 0 && year 100 !=0)
|| year % 400 == 0
如果表达式值为1,则闰年;否则为非闰年
C语言程序设计
条件运算符和条件表达式
有一种if语句,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值
如:if (a>b)
max=a;
else
max=b;
max = (a > b) ? a : b;
条件运算符
C语言程序设计
条件运算符和条件表达式
有一种if语句,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值
如:if (a>b)
max=a;
else
max=b;
max = (a > b) ? a : b;
条件表达式
C语言程序设计
条件运算符和条件表达式
条件表达式的一般形式为
表达式1?表达式2: 表达式3
C语言程序设计
条件运算符和条件表达式
条件运算符的执行顺序:
求解表达式1
若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值
若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值
C语言程序设计
条件运算符和条件表达式
条件运算符优先于赋值运算符
条件运算符的结合方向为“自右至左”
以下为合法的使用方法:
a>b ? (max=a):(max=b);
a>b ? printf(“%d”,a): printf(“%d”,b);
C语言程序设计
条件运算符和条件表达式
例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。
C语言程序设计
条件运算符和条件表达式
解题思路:用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换
C语言程序设计
条件运算符和条件表达式
#include <stdio.h>
int main()
{
char ch;
scanf("%c",&ch);
ch=(ch>='A' && ch<='Z‘)?(ch+32):ch;
printf("%c
",ch);
return 0;
}
C语言程序设计
选择结构的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套
一般形式:
if( )
if( ) 语句1
else 语句2
else
if( ) 语句3
else 语句4
内嵌if
else总是与它上面最近的未配对的if配对
C语言程序设计
选择结构的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套
if ()
{
if () 语句1
}
else语句2
内嵌if
{ }限定了内嵌if范围
C语言程序设计
选择结构的嵌套
例:有一函数:
编一程序,输入一个x值,要求输出相应的y值。
C语言程序设计
选择结构的嵌套
解题思路:
用if语句检查x的值,根据x的值决定赋予y的值
由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现
C语言程序设计
选择结构的嵌套
解题思路:方法1
(1) 先后用3个独立的if语句处理:
输入x
若 x < 0, 则y =-1
若 x = 0, 则y = 0
若 x > 0, 则y = 1
输出x和y
scanf("%d",&x);
if(x<0) y = -1;
if(x==0) y = 0;
if(x>0) y = 1;
printf("x=%d,y=%d
",x,y);
C语言程序设计
选择结构的嵌套
解题思路:方法2
(2) 用一个嵌套的if语句处理:
输入x
若x < 0, 则y = -1
否则
若 x = 0, 则y = 0
否则 y = 1
输出x和y
scanf("%d",&x);
if(x<0) y=-1;
else
if(x==0) y=0;
else y=1;
printf("x=%d,y=%d
",x,y);
C语言程序设计
选择结构的嵌套
解题思路:方法2
(2) 用一个嵌套的if语句处理:
输入x
若x < 0, 则y = -1
否则
若 x = 0, 则y = 0
否则 y = 1
输出x和y
scanf("%d",&x);
if(x<0) y=-1;
else
if(x==0) y=0;
else y=1;
printf("x=%d,y=%d
",x,y);
scanf("%d",&x);
if (x>=0)
if (x>0) y=1;
else y=0;
else y=-1;
printf("x=%d,y=%d
",x,y);
提倡内嵌if放在else中
C语言程序设计
用switch语句实现多分支选择结构
switch语句用来实现多分支选择结构
学生成绩分类
85分以上为’A’等
70~84分为’B’等
60~69分为’C’等
……
人口统计分类
按年龄分为老、中、青、少、儿童
C语言程序设计
用switch语句实现多分支选择结构
例: 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分 ,D等为 60分以下 。成绩的等级由键盘输入。
C语言程序设计
用switch语句实现多分支选择结构
解题思路:
判断出这是一个多分支选择问题
根据百分制分数将学生成绩分为4个等级
如果用if语句,至少要用3层嵌套的if,进行3次检查判断
用switch语句进行一次检查即可得到结果
C语言程序设计
#include <stdio.h>
int main()
{ char grade;
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{ case 'A': printf("85~100
");break;
case 'B': printf("70~84
");break;
case 'C': printf("60~69
");break;
case 'D': printf("<60
");break;
default: printf("enter data error!
");
}
return 0;
}
值为A
C语言程序设计
#include <stdio.h>
int main()
{ char grade;
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{ case 'A': printf("85~100
");break;
case 'B': printf("70~84
");break;
case 'C': printf("60~69
");break;
case 'D': printf("<60
");break;
default: printf("enter data error!
");
}
return 0;
}
C语言程序设计
不能少
#include <stdio.h>
int main()
{ char grade;
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{ case 'A': printf("85~100
");break;
case 'B': printf("70~84
");break;
case 'C': printf("60~69
");break;
case 'D': printf("<60
");break;
default: printf("enter data error!
");
}
return 0;
}
C语言程序设计
值为C
#include <stdio.h>
int main()
{ char grade;
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{ case 'A': printf("85~100
");break;
case 'B': printf("70~84
");break;
case 'C': printf("60~69
");break;
case 'D': printf("<60
");break;
default: printf("enter data error!
");
}
return 0;
}
C语言程序设计
值为F
#include <stdio.h>
int main()
{ char grade;
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{ case 'A': printf("85~100
");break;
case 'B': printf("70~84
");break;
case 'C': printf("60~69
");break;
case 'D': printf("<60
");break;
default: printf("enter data error!
");
}
return 0;
}
C语言程序设计
此行位置有问题,应如何修改?
switch语句的作用是根据表达式的值,使流程跳转到不同的语句
switch语句的一般形式:
switch(表达式)
{ case 常量1 :语句1
case 常量2 :语句2
┇ ┇ ┇
case 常量n :语句n
default : 语句n+1
}
整数类型(包括字符型)
C语言程序设计
switch语句的作用是根据表达式的值,使流程跳转到不同的语句
switch语句的一般形式:
switch(表达式)
{ case 常量1 :语句1
case 常量2 :语句2
┇ ┇ ┇
case 常量n :语句n
default : 语句n+1
}
不能相同
C语言程序设计
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{ case 'A': printf("85~100
");break;
case 'B': printf("70~84
");break;
case 'C': printf("60~69
");break;
case 'D': printf("<60
");break;
default: printf("enter data error!
");
}
C语言程序设计
今天的课程就讲到这里。
谢谢大家!
C语言程序设计
$$