第4章 选择结构程序设计pptConvertor.docx

上传人:b****6 文档编号:7614357 上传时间:2023-01-25 格式:DOCX 页数:32 大小:23.54KB
下载 相关 举报
第4章 选择结构程序设计pptConvertor.docx_第1页
第1页 / 共32页
第4章 选择结构程序设计pptConvertor.docx_第2页
第2页 / 共32页
第4章 选择结构程序设计pptConvertor.docx_第3页
第3页 / 共32页
第4章 选择结构程序设计pptConvertor.docx_第4页
第4页 / 共32页
第4章 选择结构程序设计pptConvertor.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

第4章 选择结构程序设计pptConvertor.docx

《第4章 选择结构程序设计pptConvertor.docx》由会员分享,可在线阅读,更多相关《第4章 选择结构程序设计pptConvertor.docx(32页珍藏版)》请在冰豆网上搜索。

第4章 选择结构程序设计pptConvertor.docx

第4章选择结构程序设计pptConvertor

第4章选择结构程序设计

4.1选择结构和条件判断

4.2用if语句实现选择结构

4.3关系运算符和关系表达式

4.4逻辑运算符和逻辑表达式

4.5条件运算符和条件表达式

4.6选择结构的嵌套

4.7用switch语句实现多分支选择结构

4.8选择结构程序综合举例

4.1选择结构和条件判断

在现实生活中,需要进行判断和选择的情况是很多的

如果你在家,我去拜访你

如果考试不及格,要补考

如果遇到红灯,要停车等待

周末我们去郊游

70岁以上的老年人,入公园免票

4.1选择结构和条件判断

在现实生活中,需要进行判断和选择的情况是很多的

处理这些问题,关键在于进行条件判断

由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断

4.1选择结构和条件判断

C语言有两种选择语句:

(1)if语句,实现两个分支的选择结构

(2)switch语句,实现多分支的选择结构

4.1选择结构和条件判断

例4.1在例3.5的基础上对程序进行改进。

题目要求是求方程的根。

由键盘输入a,b,c。

假设a,b,c的值任意,并不保证。

需要在程序中进行判别,如果,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。

解题思路:

输入a,b,c

计算disc

disc<0

计算x1,x2

输出无实根

输出x1,x2

#include

#include

intmain()

{

doublea,b,c,disc,x1,x2,p,q;

scanf("%lf%lf%lf",&a,&b,&c);

disc=b*b-4*a*c;

计算b2-4ac,disc的值变为-15

if(disc<0)

printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q;

x2=p-q;

printf(“realroots:

\nx1=%7.2f\n

x2=%7.2f\n”,x1,x2);

}

return0;

}

-15<0为真

#include

#include

intmain()

{

doublea,b,c,disc,x1,x2,p,q;

scanf("%lf%lf%lf",&a,&b,&c);

disc=b*b-4*a*c;

计算b2-4ac,disc的值变为8

if(disc<0)

printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q;

x2=p-q;

printf(“realroots:

\nx1=%7.2f\n

x2=%7.2f\n”,x1,x2);

}

return0;

}

8<0为假

p的值变为-1

q的值变为0.71

x1的值变为-0.29

x2的值变为-1.71

if(disc<0)

printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q;

x2=p-q;

printf(“realroots:

\nx1=%7.2f\n

x2=%7.2f\n”,x1,x2);

}

return0;

}

选择结构,用if语句实现的

if(disc<0)

printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q;

x2=p-q;

printf(“realroots:

\nx1=%7.2f\n

x2=%7.2f\n”,x1,x2);

}

return0;

}

复合语句

4.2用if语句实现选择结构

4.2.1用if语句处理选择结构举例

4.2.2if语句的一般形式

4.2.1用if语句处理选择结构举例

例4.2输入两个实数,按代数值由小到大的顺序输出这两个数。

解题思路:

只需要做一次比较,然后进行一次交换即可

用if语句实现条件判断

关键是怎样实现两个变量值的互换

A

B

互换前

A

B

互换后

4.2.1用if语句处理选择结构举例

A

B

C

4.2.1用if语句处理选择结构举例

A

B

C

4.2.1用if语句处理选择结构举例

A

B

C

4.2.1用if语句处理选择结构举例

#include

intmain()

{floata,b,t;

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

if(a>b)

{t=a;

a=b;

b=t;

}

printf("%5.2f,%5.2f\n",a,b);

return0;

}

将a和b的值互换

如果a>b

#include

intmain()

{floata,b,t;

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

if(a>b)

{t=a;

a=b;

b=t;

}

printf("%5.2f,%5.2f\n",a,b);

return0;

}

选择结构,用if语句实现的

例4.3输入3个数a,b,c,要求按由小到大的顺序输出。

解题思路:

可以先用伪代码写出算法:

ifa>b,a和b对换(a是a、b中的小者)

ifa>c,a和c对换(a是三者中最小者)

ifb>c,b和c对换(b是三者中次小者)

顺序输出a,b,c

#include

intmain()

{floata,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\n",a,b,c);

return0;

}

如果a>b,将a和b对换

a是a、b中的小者

#include

intmain()

{floata,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\n",a,b,c);

return0;

}

如果a>c,将a和c对换

a是三者中的小者

#include

intmain()

{floata,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\n",a,b,c);

return0;

}

如果b>c,将b和c对换

b是三者中的次小者

4.2.2if语句的一般形式

if(表达式)语句1

[else语句2]

关系表达式

逻辑表达式

数值表达式

方括号内的部分为可选的

4.2.2if语句的一般形式

if(表达式)语句1

[else语句2]

简单的语句

复合语句

另一个if语句等

最常用的3种if语句形式:

1.if(表达式)语句1(没有else子句)

2.if(表达式)语句1

else语句2(有else子句)

3.if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式3)语句3

elseif(表达式m)语句m

else语句m+1

(在else部分又嵌套了多层的if语句)

if(number>500)cost=0.15;

elseif(number>300)cost=0.10;

elseif(number>100)cost=0.075;

elseif(number>50)cost=0.05;

elsecost=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;

elsecost=0;

等价于

分号不能丢

说明:

(1)整个if语句可写在多行上,也可写在一行上

但都是一个整体,属于同一个语句

(2)“语句1”…“语句m”是if中的内嵌语句

内嵌语句也可以是一个if语句

(3)“语句1”…“语句m”可以是简单的语句,也可以是复合语句

4.3关系运算符和关系表达式

4.3.1关系运算符及其优先次序

4.3.2关系表达式

4.3.1关系运算符及其优先次序

关系运算符:

用来对两个数值进行比较的比较运算符

C语言提供6种关系运算符:

①<(小于)②<=(小于或等于)

③>(大于)④>=(大于或等于)

⑤==(等于)⑥!

=(不等于)

优先级相同(高)

优先级相同(低)

4.3.1关系运算符及其优先次序

关系、算术、赋值运算符的优先级

4.3.1关系运算符及其优先次序

c>a+b等效于c>(a+b)

a>b==c等效于(a>b)==c

a==b

a=b>c等效于a=(b>c)

4.3.2关系表达式

关系表达式

用关系运算符将两个数值或数值表达式连接起来的式子

关系表达式的值是一个逻辑值,即“真”或“假”

在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”

4.4逻辑运算符和逻辑表达式

4.4.1逻辑运算符及其优先次序

4.4.2逻辑表达式

4.4.3逻辑型变量

4.4.1逻辑运算符及其优先次序

3种逻辑运算符:

&&(逻辑与)||(逻辑或)!

(逻辑非)

&&和||是双目(元)运算符

!

是一目(元)运算符

逻辑表达式

用逻辑运算符将关系表达式或其他逻辑量连接起来的式子

4.4.1逻辑运算符及其优先次序

判断年龄在13至17岁之内?

age>=13&&age<=17

判断年龄小于12或大于65?

age<12||age>65

4.4.1逻辑运算符及其优先次序

a

b

!

a

!

b

a&&b

a||b

逻辑运算的真值表

4.4.1逻辑运算符及其优先次序

逻辑运算符的优先次序

!

→&&→||(!

为三者中最高)

与其他运算符的优先次序

!

(高)

算术运算符

关系运算符

&&和||

赋值运算符(低)

4.4.2逻辑表达式

逻辑表达式的值应该是逻辑量“真”或“假”

编译系统在表示逻辑运算结果时

以数值1代表“真”,以0代表“假”

但在判断一个量是否为“真”时

以0代表“假”,以非0代表“真”

注意:

将一个非零的数值认作为“真”

4.4.2逻辑表达式

(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

4.4.2逻辑表达式

修改后的逻辑运算真值表

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

4.4.2逻辑表达式

判别某一年是否闰年,用逻辑表达式表示

闰年的条件是符合下面二者之一:

①能被4整除,但不能被100整除,如2008

②能被400整除,如2000

(year%4==0&&year100!

=0)

||year%400==0

如果表达式值为1,则闰年;否则为非闰年

4.4.3逻辑型变量

这是C99所增加的一种数据类型

可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算

4.5条件运算符和条件表达式

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

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

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

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

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

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

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

有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值

如:

if(a>b)

max=a;

else

max=b;

条件运算符

4.5条件运算符和条件表达式

有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值

如:

if(a>b)

max=a;

else

max=b;

max=(a>b)?

a:

b;

条件表达式

4.5条件运算符和条件表达式

条件表达式的一般形式为

表达式1?

表达式2:

表达式3

4.5条件运算符和条件表达式

条件运算符的执行顺序:

求解表达式1

若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值

若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值

4.5条件运算符和条件表达式

条件运算符优先于赋值运算符

条件运算符的结合方向为“自右至左”

以下为合法的使用方法:

a>b?

(max=a):

(max=b);

a>b?

printf(“%d”,a):

printf(“%d”,b);

4.5条件运算符和条件表达式

例4.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。

然后输出最后得到的字符。

4.5条件运算符和条件表达式

解题思路:

用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换

4.5条件运算符和条件表达式

#include

intmain()

{

charch;

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z‘)?

(ch+32):

ch;

printf("%c\n",ch);

return0;

}

4.6选择结构的嵌套

在if语句中又包含一个或多个if语句称为if语句的嵌套

一般形式:

if()

if()语句1

else语句2

else

if()语句3

else语句4

内嵌if

else总是与它上面最近的未配对的if配对

4.6选择结构的嵌套

在if语句中又包含一个或多个if语句称为if语句的嵌套

if()

{

if()语句1

}

else语句2

内嵌if

{}限定了内嵌if范围

4.6选择结构的嵌套

例4.5有一函数:

编一程序,输入一个x值,要求输出相应的y值。

4.6选择结构的嵌套

解题思路:

用if语句检查x的值,根据x的值决定赋予y的值

由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现

4.6选择结构的嵌套

解题思路:

方法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\n",x,y);

4.6选择结构的嵌套

解题思路:

方法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;

elsey=1;

printf("x=%d,y=%d\n",x,y);

4.6选择结构的嵌套

解题思路:

方法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;

elsey=1;

printf("x=%d,y=%d\n",x,y);

scanf("%d",&x);

if(x>=0)

if(x>0)y=1;

elsey=0;

elsey=-1;

printf("x=%d,y=%d\n",x,y);

提倡内嵌if放在else中

4.7用switch语句实现多分支选择结构

switch语句用来实现多分支选择结构

学生成绩分类

85分以上为’A’等

70~84分为’B’等

60~69分为’C’等

……

人口统计分类

按年龄分为老、中、青、少、儿童

4.7用switch语句实现多分支选择结构

例4.6要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。

成绩的等级由键盘输入。

4.7用switch语句实现多分支选择结构

解题思路:

判断出这是一个多分支选择问题

根据百分制分数将学生成绩分为4个等级

如果用if语句,至少要用3层嵌套的if,进行3次检查判断

用switch语句进行一次检查即可得到结果

#include

intmain()

{chargrade;

scanf("%c",&grade);

printf("Yourscore:

");

switch(grade)

{case'A':

printf("85~100\n");break;

case'B':

printf("70~84\n");break;

case'C':

printf("60~69\n");break;

case'D':

printf("<60\n");break;

default:

printf("enterdataerror!

\n");

}

return0;

}

值为A

#include

intmain()

{chargrade;

scanf("%c",&grade);

printf("Yourscore:

");

switch(grade)

{case'A':

printf("85~100\n");break;

case'B':

printf("70~84\n");break;

case'C':

printf("60~69\n");break;

case'D':

printf("<60\n");break;

default:

printf("enterdataerror!

\n");

}

return0;

}

不能少

#include

intmain()

{chargrade;

scanf("%c",&grade);

printf("Yourscore:

");

switch(grade)

{case'A':

printf("85~100\n");break;

case'B':

printf("70~84\n");break;

case'C':

printf("60~69\n");break;

case'D':

printf("<60\n");break;

default:

printf("enterdataerror!

\n");

}

return0;

}

值为C

#include

intmain()

{chargrade;

scanf("%c",&gra

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1