概述
顺序结构看完了,然后来看看选择结构。
很好理解,选择么。选这个,要么选那个,要么都不选。就这么EASY。
简单看看知识点。
1、关系运算符与关系表达式
关系运算符比较两个表达式并决定两者的关系,关系运算的结果是假(0)或真(非0)。表5-1中给出了C语言中的关系运算符。
表5-1
操作符 | 用法 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
== | 等于 |
!= | 不等于 |
使用关系运算符时要注意以下几点:
⑴ 由两个字符组成的运算符之间不可加空格,如>=不能写成> =。
⑵ 关系运算符中,>、>=、<、<= 四种运算符的优先级相同,==和!=两种运算符的优先级相同,且前四种运算符的优先级高于后两种。
⑶ 关系运算符、算术运算符和赋值运算符之间的优先次序依次是:算术运算符级别最高,关系运算符次之、赋值运算符最低。关系运算符按照从左到右的顺序结合。
由关系运算符组成的表达式,称为关系表达式,如: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语句的条件或循环判断条件之中,一般不单独使用。
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程序中,经常会使用逻辑运算符,将简单的条件组合起来,形成更复杂的条件。
【例5-1】判断某年份(year)是否为闰年的条件是看此年份是否满足下述两个条件之一:
⑴ 能被4整除但不能被100整除;
⑵ 能被400整除;
由此得到作为判断某年份是闰年的逻辑表达式:
year%4==0&&year%100!=0||year%400==0
反之,可得到判断某年份不是闰年的逻辑表达式:
!(year%4==0&&year%100!=0||year%400==0 )
3、if语句
1) 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< Number2)
{ Number1= Number2;
printf (“The bigNumber is %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(“Passedn”);
else
printf(“Failedn”);
【例5-5】某商品的零售价为每公斤8.5元,批发价为每公斤6.5元,购买量在10公斤以上,便可按批发价计算,设某顾客购买此商品weight公斤,请编程计算该顾客需付费(pay)多少?
程序如下:
main()
{
float weight,pay;
printf(“Please input the weight:”);
scanf(“%f”,&weight);
if (weight>=10)
pay=weight*6.5;
else
pay=weight*8.5;
printf(“You should pay %f yuansn”,pay);
}
2) if语句的嵌套
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;
【例5-6】根据输入的百分制成绩(score),要求输出成绩等级(grade)A、B、C、D、E。90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。用if语句实现,程序如下:
main()
{
int score;
char grade;
printf(“n Please input a score(0~100):”);
scanf(“%d”,&score);
if (score>=90)
grade=’A’;
else if (score>=80)
grade=’B’;
else if (score>=70)
grade=’C’;
else if (score>=60)
grade=’ D’;
else
grade=’E’;
printf(“The grade is %c.n”,grade);
}
程序的运行情况如下:
Please input a score(0~100):
86
The grade is B.
-
条件运算符
假设要编制一个程序,求两数中的较大数。执行的过程是比较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?“Passedn” :“Failedn”);。
4、switch 语句
-
switch语句的一般格式
switch(表达式)
{ case 值1:语句1;
[break;]
case 值2:语句2;
[break;]
……
case 值N:语句N;
[break;]
[default: 语句N+1;]
}
其中的表达式的数据类型只能为整型或字符型,语句可以是任何有效的语句或语句块。
-
switch语句的执行过程
执行switch语句时,首先计算switch后表达式的值,然后在switch语句中寻找与该表达式的值相匹配的case值,如果找到,则执行该case后的各语句,直至遇到一个break语句为止;如果找不到匹配的case值,则执行switch的默认语句(default),直到switch语句体结束。如果找不到匹配的case值且不存在默认语句(default),则跳过switch语句体,什么也不做。
若【例5-6】用switch语句来实现,则程序如下:
main()
{
int score,m;
printf(“nPlease input a score(0~100):n”);
scanf(“%d”,&score);
m=score/10;
switch(m)
{
case 9:
case10:printf(“nThe grade is A.”);break;
case 8:printf(“nThe grade is B.”);break;
case 7:printf(“nThe grade is C.”);break;
case 6:printf(“nThe grade is D.”);break;
default:printf(“nThe grade is E.”);
}
}
假设运行时输入75,则m=7,执行case 7:后的语句printf(“nThe grade is C.”);遇break;结束switch语句的执行。程序的运行情况如下:
Please input a score(0~100):
75
The grade is C.
break语句用于改变程序流程。当在switch语句中执行break语句时,break语句使程序从该结构中退出,程序接着执行该结构后的第一条语句。如果去掉上例中的所有break语句,运行程序并输入75,则程序的运行情况如下:
Please input a score(0~100):
75
The grade is C.
The grade is D.
The grade is E.
注意:该算法中。Switch语句后的表达式是m(=score/10)而不是score,这样处理可以大大减少分支数目,简化程序。
5、程序设计举例
【例5-7】对分段函数:
x (x<1)
y= 2x-1 (1≤x<10)
3x-11 (x≥10)
输入x的值,求y值。
#include “stdio.h”
main()
{
float x,y;
printf(“n”);
scanf(“%f ”,&x);
if(x<1)
y=x;
else if(x>=10)
y=3*x-11;
else y=2*x-1;
printf(“ y=%f”,y);
}
程序的运行情况如下:
⑴ 运行时输入一个小于1的数
Please input x:
-2
y=-2.000000
⑵ 运行时输入一个介于1和10之间的数
Please input x:
8
y=15.000000
【例5-8】编程求一元二次方程ax2+bx+c=0的实数根。
#include “stdio.h”
main()
{
float a,b,c,delta,x1,x2;
printf(“nPlease input a,b,c:”);
scanf(“%f,%f,%f”,&a,&b,&c);
delta=b*b-4*a*c;
if(delta<0)
printf(“There is no real fact!”);
else if(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的情况
Please input a,b,c:
8,9,1
x1=-0.125000,x2=-1.000000
⑵ 运行时输入使△=0的情况
Please input a,b,c:
4,8,4
x1=-1.000000
【例5-9】输入1~7之间的任意数字,程序将按照用户的输入数据输出对应的星期值。如用户输入3,则程序输出Wednesday。如果输入1~7以外的数字,则提示输入错误。
main()
{
int week;
printf(“nPlease input a integer(1~7):n”);
scanf(“%d”,&score);
switch(week)
{
case 1:printf(“Mondayn”);break;
case 2:printf(“Tuesdayn”);break;
case 3:printf(“Wednesdayn”);break;
case 4:printf(“Thursdayn”);break;
case 5:printf(“Fridayn”);break;
case 6:printf(“Saterdayn”);break;
case 7:printf(“Sundayn”);break;
default:printf(“The input is wrong!n”);
}
}
程序的运行情况:
⑴ Please input a integer(1~7):
5
Friday
⑵ Please input a integer(1~7):
9
The input is wrong!
选择结构也比较简单。
哎呀,就不多说了。
最后
以上就是懵懂路人为你收集整理的c语言学习----选择结构程序设计的全部内容,希望文章能够帮你解决c语言学习----选择结构程序设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复