第四章 分支选择结构.docx

上传人:b****5 文档编号:6859857 上传时间:2023-01-11 格式:DOCX 页数:12 大小:137.66KB
下载 相关 举报
第四章 分支选择结构.docx_第1页
第1页 / 共12页
第四章 分支选择结构.docx_第2页
第2页 / 共12页
第四章 分支选择结构.docx_第3页
第3页 / 共12页
第四章 分支选择结构.docx_第4页
第4页 / 共12页
第四章 分支选择结构.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

第四章 分支选择结构.docx

《第四章 分支选择结构.docx》由会员分享,可在线阅读,更多相关《第四章 分支选择结构.docx(12页珍藏版)》请在冰豆网上搜索。

第四章 分支选择结构.docx

第四章分支选择结构

第四章分支选择结构

§4.1关系运算符和关系表达式

一.关系运算符及其优先次序

C语言提供6种关系运算符(两个级别):

<,<=,>,>=优先级高

==,!

=优先级低

关系运算符与其它运算符的关系:

 

例:

c>a+b相当于c>(a+b)

a>b!

=c相当于(a>b)!

=c

a==b

a=b>c相当于a=(b>c)

二.关系表达式

用关系运算符将两个表达式连接起来的式子,称为关系表达式。

关系表达式的值是一个逻辑值(真或假),C语言没有逻辑型数据,以1表示“真”,0表示“假”。

例:

a=3,b=2,c=1

则:

a>b取值为1

a==b取值为0

f=a>b>cf的值为0(结合性:

从左到右)

§4.2逻辑运算符和逻辑表达式

一.逻辑运算符及其优先次序

C语言提供三种逻辑运算符:

 

逻辑运算的真值表:

a

b

!

a

!

b

a&&b

a||b

逻辑运算符与其它运算符的关系:

 

二.逻辑表达式

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

逻辑表达式取逻辑值。

C语言判断一个非0的值为“真”,以0为“假”,这个值可以是任何类型的数据(整型,字符型,实型或指针型等)。

如:

5>3&&2||8<4-!

0结果为1

注意:

逻辑表达式的求解过程:

并不是所有的逻辑运算符都被执行,只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。

具体来讲:

1.a&&b&&c:

若a为0,则表达式为0,不必判断b和c;

若a为非0,则判断b,以此类推。

2.a||b||c:

若a为非0,则表达式为1,不必判断b和c;

若a为0,则判断b,以此类推。

如:

a=1,b=2,m=3,n=3求解表达式(m=a>b)&&(n=0)

因a>b为0,则m=a>b为0,则表达式为0;n=0不执行,因此表达式求解后:

a=1,b=2,m=0,n=3。

例:

判别某一年year是否闰年。

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

1.被4整除,但不被100整除。

2.能被400整除。

因此判断闰年的表达式为:

(year%4==0&&year%100!

=0)||year%400==0

§4.3if语句

一.if语句的二种形式:

1.if(表达式)语句

如:

t=x;

if(t

 

2.

if(表达式)语句1

else语句2

如:

if(x>y)t=x;

elset=y;

例:

输入一个百分制的成绩,输出其等级。

 

main()

{intmark;

scanf(“%d”,&mark);

if(mark>=90&&mark<=100)printf(“优\n”);

elseif(mark>=80&&mark<90)printf(“良\n”);

elseif(mark>=70&&mark<80)printf(“中\n”);

elseif(mark>=60&&mark<70)printf(“及格\n”);

elseif(mark>=0&&mark<60)printf(“不及格\n”);

elseprintf(“输入错误\n”);

}

说明:

1.〈表达式〉一般为逻辑表达式或关系表达式,也可以是其它类型的表达式(如:

整型,实型,字符型,指针型),以非0为真,0为假。

2.else前面有一个分号,但不要认为是两个语句,if~else~是一个完整的语句。

3.在if和else后面只能是一个语句,若需要多个语句完成,则应使用复合语句(用大括号{}将几个语句括起来)。

如:

求三角形a,b,c的面积。

#include“math.h”

main()

{floata,b,c,s,area;

scanf(“%f%f%f”,&a,&b,&c);

if(a+b>c&&a+c>b&&b+c>a)

{s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf(“area=%f\n”,area);

}

elseprintf(“\n这不是一个三角形。

\n”);

}

例1:

输入两个实数,按从小到大排序输出。

main()

{floata,b,t;

scanf(“%f%f”,&a,&b);

if(a>b)

{t=a;a=b;b=t;}

printf(“%f%f”,a,b);

}

例2:

输入三个实数,按从小到大排序输出。

main()

{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;}/*先求出三个数中最小的数放在a中。

*/

if(b>c)

{t=b;b=c;c=t;}

printf(“%f%f”,a,b,c);

}

二.if语句的嵌套

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

一般形式:

if()

if()语句1

else语句2

else

if()语句3

else语句4

注意:

if与else的配对关系:

if()

if()语句1

else语句2此else应与内层if配对,若要与外层if配对,应用如下方式:

if()

{if()语句1}

else语句2

观察如下几个程序段:

求函数的值。

 

 

三.条件运算符

一般形式:

表达式1?

表达式2:

表达式3

流程图:

 

条件运算符是C语言中唯一的一个三目运算符。

如:

if(a>b)max=a;

elsemax=b;

说明:

1.优先级:

 

如:

a>b?

a:

b+1相当于(a>b)?

a:

(b+1)

2.结合方向:

从右到左

如:

a>b?

a:

c>d?

c:

d相当于a>b?

a:

(c>d?

c:

d)

3.表达式1的类型可与表达式2和表达式3的类型不同。

表达式2的类型也可与表达式3的类型不同,此时条件表达式的值的类型为二者中较高的类型。

如:

x>y?

1:

1.5若x<=y时取值1.5,若x>y则取值1.0。

例:

输入一个字符,判别它是否大写字母,若是,将它转换成小写字母;否则不转换。

最后输出得到的字符。

main()

{charch;

scanf(“%c”,&ch);

ch=(ch>=’A’&&ch<=’Z’)?

(ch+32):

ch;

printf(“%c\n”,ch);

}

§4.4switch语句

if语句是两个分支选择语句,switch语句是多分支选择语句。

一般形式:

switch(<表达式>)

{case常量表达式1:

语句1

case常量表达式2:

语句2

case常量表达式n:

语句n

default:

语句n+1

}

例:

输入一个百分制的成绩,输出其等级。

main()

{intmark,tag;

scanf(“%d”,&mark);

tag=mark/10;

switch(tag)

{case10:

case9:

printf(“\n优”);break;

case8:

printf(“\n良”);break;

case7:

printf(“\n中”);break;

case6:

printf(“\n及格”);break;

case5:

case4:

case3:

case2:

case1:

case0:

printf(“\n不及格”);break;

default:

printf(“\n输入错误”);

}

}

说明:

1.switch后面的表达式一般为整型、字符型或枚举型(C标准只能这三种类型),ANSI标准允许任何类型的表达式。

2.执行过程:

先计算switch后面〈表达式〉的值,再与case中的常量进行比较:

若与某个case中常量相等,则执行其后的语句,以及此后的所有语句;

若与所有case中常量都不相等,则执行default之后的所有语句。

break语句:

中止switch语句的执行。

3.每个case的常量表达式值必须互不相同。

4.各个case的顺序可以是任意的。

每个case后面可以有多个语句。

default语句也可放在前面。

5.多个case可以共用一组执行语句。

§4.5程序举例

例:

求ax2+bx+c=0方程的解。

有以下几种可能性:

1.a=0不是二次方程;

2.b2-4ac=0有两个相等的实根=-b/(2*a);

3.b2-4ac>0有两个不等的实根:

4.b2-4ac<0有两个共轭复根:

#include“math.h”

main()

{floata,b,c,disc,x1,x2,p,q;

scanf(“%f%f%f”,&a,&b,&c);

if(fabs(a)<=1e-6)

printf(“不是二次方程。

\n”);

else

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

if(fabs(disc)<=1e-6)

printf(“有两个相等的实根:

%f\n”,-b/(2*a));

else

if(disc>1e-6)

{x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf(“x1=%f,x2=%f\n”,x1,x2);

}

else

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

q=sqrt(-disc)/(2*a);

printf(“两个复根:

\n”);

printf(“%f+%fi\n”,p,q);

printf(“%f-%fi\n”,p,q);

}

}

}

 

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

当前位置:首页 > PPT模板 > 动物植物

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

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