最实用的C语言教程5.docx

上传人:b****2 文档编号:687604 上传时间:2023-04-29 格式:DOCX 页数:21 大小:50.17KB
下载 相关 举报
最实用的C语言教程5.docx_第1页
第1页 / 共21页
最实用的C语言教程5.docx_第2页
第2页 / 共21页
最实用的C语言教程5.docx_第3页
第3页 / 共21页
最实用的C语言教程5.docx_第4页
第4页 / 共21页
最实用的C语言教程5.docx_第5页
第5页 / 共21页
最实用的C语言教程5.docx_第6页
第6页 / 共21页
最实用的C语言教程5.docx_第7页
第7页 / 共21页
最实用的C语言教程5.docx_第8页
第8页 / 共21页
最实用的C语言教程5.docx_第9页
第9页 / 共21页
最实用的C语言教程5.docx_第10页
第10页 / 共21页
最实用的C语言教程5.docx_第11页
第11页 / 共21页
最实用的C语言教程5.docx_第12页
第12页 / 共21页
最实用的C语言教程5.docx_第13页
第13页 / 共21页
最实用的C语言教程5.docx_第14页
第14页 / 共21页
最实用的C语言教程5.docx_第15页
第15页 / 共21页
最实用的C语言教程5.docx_第16页
第16页 / 共21页
最实用的C语言教程5.docx_第17页
第17页 / 共21页
最实用的C语言教程5.docx_第18页
第18页 / 共21页
最实用的C语言教程5.docx_第19页
第19页 / 共21页
最实用的C语言教程5.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

最实用的C语言教程5.docx

《最实用的C语言教程5.docx》由会员分享,可在线阅读,更多相关《最实用的C语言教程5.docx(21页珍藏版)》请在冰点文库上搜索。

最实用的C语言教程5.docx

最实用的C语言教程5

第5章选择结构程序设计

选择结构又叫分支结构,用于在几个可选择的分支之间进行选择。

选择结构是结构化程序设计的基本结构之一,在C程序中,可以使用if和switch两种语句进行逻辑判断,实现选择结构。

本章将详细介绍如何在C程序中实现选择结构。

5.1关系运算和逻辑运算

5.1.1关系运算符与关系表达式

关系运算符比较两个表达式并决定两者的关系,关系运算的结果是假(0)或真(非0)。

表5-1中给出了C语言中的关系运算符。

使用关系运算符时要注意以下几点:

表5-1

操作符

用法

>

大于

>=

大于或等于

<

小于

<=

小于或等于

==

等于

!

=

不等于

⑴由两个字符组成的运算符之间不可加空格,如>=不能写成>=。

⑵关系运算符中,>、>=、<、<=四种运算符的优先级相同,==和!

=两种运算符的优先级相同,且前四种运算符的优先级高于后两种。

⑶关系运算符、算术运算符和赋值运算符之间的优先次序依次是:

算术运算符级别最高,关系运算符次之、赋值运算符最低。

关系运算符按照从左到右的顺序结合。

由关系运算符组成的表达式,称为关系表达式。

关系运算符两边的运算对象可以是C语言中任意合法的表达式,例如:

a>=b、(a=3)>(d=4)、a>b==c。

在C语言中,没有专门的“逻辑值”,而是用零来代表“假”,用非零来代表“真”,因此,关系运算的结果是1或0。

例如:

设a=4,b=2,则关系表达式a>=b的结果为“真”,表达式值=1。

关系表达式2*5>1+6的结果为“真”,表达式值=1。

关系表达式2+3==1+4*2的结果为“假”,表达式值=0。

关系表达式5+(8>1+6)的值=6。

关系运算符“==”和赋值运算符“=”很容易混淆,必须注意两者之间的区别。

⑴赋值运算符“=”

赋值运算的一般形式为:

<变量名>=<表达式>

赋值运算符的左面只能是一个变量名,用等号右面的表达式的值对其赋值。

运算结果的数据类型取决于赋值号左面变量的数据类型,可以是整型、实型、字符型等。

如表达式str=‘a’是一个赋值表达式,结果是字符型的。

⑵关系运算符“==”

关系运算“==”的一般形式为:

<表达式1>==<表达式2>

关系运算“==”是在两个表达式之间进行的,左面的表达式可以是一个变量,也可以是一个常数或表达式。

运算结果的数据类型只能为整型(0或1)。

如表达式str==‘a’是一个关系表达式,结果是0或1。

关系运算往往作为条件出现在if语句的条件或循环判断条件之中,一般不单独使用。

5.1.2逻辑运算符与逻辑表达式

C语言提供三种逻辑运算符,如表5-2所示:

表5-2

运算符

含义

优先级

||

逻辑或(OR)

&&

逻辑与(AND)

逻辑非(NOT)

在一个逻辑表达式中如果包含多个逻辑运算符,按优先级由高到低(!

(非)→&&(与)→||(或))进行运算。

如:

a&&!

b相当于(!

a)&&(!

b)

a||b&&c相当于a||(b&&c)

表5-3中给出了C语言中的逻辑运算规则。

表5-3

a

b

!

a

!

b

a&&b

a||b

非0

非0

0

0

1

1

非0

0

0

1

0

1

0

非0

1

0

0

1

0

0

1

1

0

0

用逻辑运算符将关系表达式或逻辑量连接起来构成逻辑表达式。

在C程序中,经常会使用逻辑运算符,将简单的条件组合起来,形成更复杂的条件。

例如,为了表示数学表达式0≤a≤5,我们可以使用这样一个逻辑表达式:

a>=0&&a<=5。

【例5-1】判断某年份(year)是否为闰年的条件是看此年份是否满足下述两个条件之一:

⑴能被4整除但不能被100整除;

⑵能被400整除;

由此得到作为判断某年份是闰年的逻辑表达式:

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

=0||year%400==0

假设year=1900,将year值代入此表达式,得到表达式的值=0,说明1900年不是闰年;假设year=2000,将year值代入此表达式,得到表达式的值=1,说明2000年是闰年。

反之,可得到判断某年份不是闰年的逻辑表达式:

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

=0||year%400==0)

【例5-2】计算机等级考试分笔试和上机考试两部分,可以通过以下逻辑表达式来判定某考生是否通过考试:

笔试>=60&&机试>=60,该考生通过考试;

笔试<=60||机试<=60,该考生未通过考试但可以参加补考;

笔试<=60&&机试<=60,该考生未通过考试且不能参加补考。

逻辑运算符与其他运算符之间的优先级顺序由高到低按以下规定:

逻辑非(!

)算术运算符关系运算符逻辑与(&&)逻辑或(||)赋值运算符逗号运算符。

5.2if语句

5.2.1if语句的格式

简单if语句格式如下:

if(表达式)

语句;

有时我们会根据某个条件是否成立来决定做不做某件事。

比如出门时,根据天下不下雨,来决定要不要带伞。

即:

如果(下雨)

带伞;

这就可以用一个最简单的if语句来表示。

括号中的表达式可以是任何形式的,但它通常情况下包含一个关系表达式,如果它的结果为真,则执行语句,否则就跳过去不执行。

该语句的执行过程如图5-1所示。

 

图5-1

例如:

if(Number1>=Number2)

Number1=Number2;

该代码对变量Number1和Number2的值进行比较,如果Number1较大,则把Number2的值赋给Number1。

C语言中,用括号括起来的语句块与一个单语句等价,因此如果表达式的值为真时可以执行多个语句。

由此可以得到if语句的第二种形式:

if(表达式)

{语句1;

语句2;

语句3;

}

该语句的执行过程如图5-2所示。

下面是有关if用法的一个简单的例子。

【例5-3】

if(Number1

{Number1=Number2;

printf(“ThebigNumberis%d”,Number1);

}

在这个例子中,如果Number1小于Number2,不仅要给Number1赋值,还要输出Number1。

有时,我们需要在某种条件下让程序执行一个分支,否则执行另一分支。

这时,可以采用If……else语句。

if(表达式)

语句1;

else

语句2;

【例5-4】在学生分数高于或等于60分时显示Passed,否则显示Failed。

如图5-3所示。

图5-3

程序如下:

if(grade>=60)

printf(“Passed\n”);

else

printf(“Failed\n”);

【例5-5】某商品的零售价为每公斤8.5元,批发价为每公斤6.5元,购买量在10公斤以上,便可按批发价计算,设某顾客购买此商品weight公斤,请编程计算该顾客需付费(pay)多少?

程序如下:

main()

{

floatweight,pay;

printf(“Pleaseinputtheweight:

”);

scanf(“%f”,&weight);

if(weight>=10)

pay=weight*6.5;

else

pay=weight*8.5;

printf(“Youshouldpay%fyuans\n”,pay);

}

5.2.2if语句的嵌套

if和else子句中,可以是任意合法的C语句或语句块,如果这子句是个if语句,则构成了if语句的嵌套。

内嵌的if语句可以嵌套在if子句中,也可以嵌套在else子句中。

嵌套的if语句有以下几种格式:

if(条件1)

if(条件2)

语句1;

else

语句2;

else

语句3;

if(条件1)

语句1;

else

if(条件2)

语句2;

else

语句3;

if(条件1)

if(条件2)

语句1;

else语句2;

else

if(条件3)

语句3;

else语句4;

一般说来,嵌套的if语句可以对多种情况进行测试。

【例5-6】根据输入的百分制成绩(score),要求输出成绩等级(grade)A、B、C、D、E。

90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。

用if语句实现,程序如下:

main()

{

intscore;

chargrade;

printf(“\nPleaseinputascore(0~100):

”);

scanf(“%d”,&score);

if(score>=90)

grade=’A’;

elseif(score>=80)

grade=’B’;

elseif(score>=70)

grade=’C’;

elseif(score>=60)

grade=’D’;

else

grade=’E’;

printf(“Thegradeis%c.\n”,grade);

}

程序的运行情况如下:

Pleaseinputascore(0~100):

86

ThegradeisB.

5.2.3条件运算符

假设要编制一个程序,求两数中的较大数。

执行的过程是比较a是否大于b,如果是,则较大数(max)为a,否则令max等于b。

程序如下:

if(a>b)

max=a;

else

max=b;

C语言提供了一种特殊的条件运算符,可以简化上面的语句。

条件表达式的一般形式:

表达式1?

表达式2:

表达式3

条件表达式的执行过程:

先计算表达式1的值,如果表达式1的值不等于0,则求解表达式2,表达式2的值作为整个条件表达式的值,否则,求解表达式3,表达式3的值作为整个条件表达式的值。

若用条件运算符表示,则上面的语句可表示如下:

max=a>b?

a:

b

↓↓↓

表达式①②③

条件运算符的优先级高于赋值运算,低于其他运算。

其功能相当于一个if-else语句。

例如【例5-4】就可用条件表达式来实现:

printf(grade>=60?

“Passed\n”:

“Failed\n”);。

由此可见,使用条件表达式可以简化程序。

5.3switch语句

5.3.1switch语句的一般格式

对于复杂的if语句,如果嵌套过多就会使程序结构复杂。

许多语言都有另一种可选语句,在C语言中,它称为switch语句。

if语句只对一个值进行检验,而switch语句根据不同值产生不同分支。

switch语句的一般形式为:

switch(表达式)

{case值1:

语句1;

[break;]

case值2:

语句2;

[break;]

……

case值N:

语句N;

[break;]

[default:

语句N+1;]

}

其中的表达式的数据类型只能为整型或字符型,语句可以是任何有效的语句或语句块。

5.3.2switch语句的执行过程

执行switch语句时,首先计算switch后表达式的值,然后在switch语句中寻找与该表达式的值相匹配的case值,如果找到,则执行该case后的各语句,直至遇到一个break语句为止;如果找不到匹配的case值,则执行switch的默认语句(default),直到switch语句体结束。

如果找不到匹配的case值且不存在默认语句(default),则跳过switch语句体,什么也不做。

若【例5-6】用switch语句来实现,则程序如下:

main()

{

intscore,m;

printf(“\nPleaseinputascore(0~100):

\n”);

scanf(“%d”,&score);

m=score/10;

switch(m)

{

case9:

case10:

printf(“\nThegradeisA.”);break;

case8:

printf(“\nThegradeisB.”);break;

case7:

printf(“\nThegradeisC.”);break;

case6:

printf(“\nThegradeisD.”);break;

default:

printf(“\nThegradeisE.”);

}

}

假设运行时输入75,则m=7,执行case7:

后的语句printf(“\nThegradeisC.”);遇break;结束switch语句的执行。

程序的运行情况如下:

Pleaseinputascore(0~100):

75

ThegradeisC.

break语句用于改变程序流程。

当在switch语句中执行break语句时,break语句使程序从该结构中退出,程序接着执行该结构后的第一条语句。

如果去掉上例中的所有break语句,运行程序并输入75,则程序的运行情况如下:

Pleaseinputascore(0~100):

75

ThegradeisC.

ThegradeisD.

ThegradeisE.

注意:

该算法中。

Switch语句后的表达式是m(=score/10)而不是score,这样处理可以大大减少分支数目,简化程序。

5.4程序设计举例

【例5-7】对分段函数:

x(x<1)

y=2x-1(1≤x<10)

3x-11(x≥10)

用scanf()函数输入x的值,求y值。

#include“stdio.h”

main()

{

floatx,y;

printf(“\n”);

scanf(“%f”,&x);

if(x<1)

y=x;

elseif(x>=10)

y=3*x-11;

elsey=2*x-1;

printf(“y=%f”,y);

}

程序的运行情况如下:

⑴运行时输入一个小于1的数

Pleaseinputx:

-2

y=-2.000000

⑵运行时输入一个介于1和10之间的数

Pleaseinputx:

8

y=15.000000

【例5-8】编程求一元二次方程ax2+bx+c=0的实数根。

#include“stdio.h”

main()

{

floata,b,c,delta,x1,x2;

printf(“\nPleaseinputa,b,c:

”);

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

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

if(delta<0)

printf(“Thereisnorealfact!

”);

elseif(delta==0)

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

printf(“x1=%f”,x1);

}

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

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

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

}

程序的运行情况如下:

⑴运行时输入使△>0的情况

Pleaseinputa,b,c:

8,9,1

x1=-0.125000,x2=-1.000000

⑵运行时输入使△=0的情况

Pleaseinputa,b,c:

4,8,4

x1=-1.000000

【例5-9】输入1~7之间的任意数字,程序将按照用户的输入数据输出对应的星期值。

如用户输入3,则程序输出Wednesday。

如果输入1~7以外的数字,则提示输入错误。

main()

{

intweek;

printf(“\nPleaseinputainteger(1~7):

\n”);

scanf(“%d”,&score);

switch(week)

{

case1:

printf(“Monday\n”);break;

case2:

printf(“Tuesday\n”);break;

case3:

printf(“Wednesday\n”);break;

case4:

printf(“Thursday\n”);break;

case5:

printf(“Friday\n”);break;

case6:

printf(“Saterday\n”);break;

case7:

printf(“Sunday\n”);break;

default:

printf(“Theinputiswrong!

\n”);

}

}

程序的运行情况:

⑴Pleaseinputainteger(1~7):

5

Friday

⑵Pleaseinputainteger(1~7):

9

Theinputiswrong!

本章小结

关系运算符包括>、<、>=、<=、==、!

=,关系运算符用来比较两个表达式并决定两者的关系,运算的结果是假(0)或真(非0)。

逻辑运算符包括&&、||、!

,用逻辑运算符将关系表达式或逻辑量连接起来构成逻辑表达式。

逻辑运算的结果也是假(0)或真(非0)。

关系表达式和逻辑表达式往往作为条件出现在if语句的条件或循环判断条件之中,一般不单独使用。

各类运算符之间按照规定的优先级顺序由高到低进行运算。

选择结构又叫分支结构,用于在几个可选择的分支之间进行选择。

C语言中用if和switch两种语句实现选择结构。

if语句的嵌套是指if语句中的子句本身又是一个if语句。

内嵌的if语句可以嵌套在if子句中,也可以嵌套在else子句中。

嵌套的if语句中又可再嵌套,构成多重嵌套。

switch语句又叫多分支语句,根据switch后表达式的不同值执行不同分支。

习题

1.语言中用______表示“真”,用______表示“假”。

2.a的初值为2,b的初值为3,c的初值为4,求下列表达式的值:

⑴a==3

⑵a=3

⑶a&&b

⑷a||b+c&&b-c

⑸!

((a

c||1)

⑹a

a:

c

c:

a

3.下列程序的输出结果为:

(5分)

main()

{

inta、b、c;

a=b=c=1;

b=b+c;

a=a+b;

printf(“%d\n”,(c

b:

a);

}

结果________________。

4.能正确表示a和b同时为正或同时为负的逻辑表达式是()

A)(a>0||b>0)&&(a<0||b<0)B)a>0&&b>0C)a+b>0D)a*b>0

5.设intx=1,y=1;表达式(!

x||y--)的值是()

A)0B)1C)2D)-1

6.设有如下程序

main()

{floatx=2.0,y;

if(x<0.0)y=0.0;

elseif(x<10.0)y=1.0/x;

elsey=1.0;

printf(“%f\n”,y);

}

该程序的输出结果是()

A)0.000000B)0.250000C)0.500000D)1.000000

7.设有如下程序

main()

{inta=2,b=-1,c=2;

if(b<0);c=0;

elsec++;

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

}

该程序的输出结果是()

A)0B)1C)2D)有语法错

8.设有如下程序

main()

{inta=100;

if(a>0)printf(“%d\n”,a>100);

elseprintf(“%d\n”,a<=100);;

}

该程序的输出结果是()

A)0B)1C)100D)-1

9.设有如下程序

main()

{intx=1,a=0,b=0;

switch(x)

{case0:

b++;

case1:

a++;

case2:

a++;b++;

}

printf(“a=%d,b=%d\n”,a,b);

}

该程序的输出结果是()

A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2

10.若有定义:

floatw;inta,b;则合法的switch语句是()

A)switch(w)B)switch(a);

{case1.0:

printf("*\n");{case1printf("*\n");

case2.0:

printf("**\n");case2printf("**\n");

}}

C)switch(b)D)switch(a+b)

{case1:

printf("*\n");{case1:

printf("*\n");

default:

printf("**\n");case2:

printf("**\n");

case1+2:

printf("\n");default:

printf("\n");

}}

11.输入一个年份,判断它是否为闰年。

12.从键盘输入三个整数a、b、c,编程求最大数并输出结果。

13.为了鼓励节约用水,作如下规定:

每人月用水量在10m3或10m3以下,收费为1.8元/m3,用水量在10到20m3之间的,超出部分收费为2.5元/m3,用水量超过20m3的,超出20m3的部分收费为3.5元/m3。

设某人某月份用水xm3,编程求其应付水费y。

14.某百货商场进行打折促销活动,消费金额(p)越高,折扣(d)越大,标准如下:

消费金额折扣

p<1000%

100≤p<2005%

200≤p<50010%

500≤p<100015%

p≥100020%

编程,从键盘输入消费金额,输出折扣率和实付金额(f)。

要求:

(1)用if语句实现;

(2)用switch语句实现。

 

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2