Linux嵌入式学习——c语言选择结构设计
Linux嵌入式学习——c语言选择结构设计
一、if语句
c语言中选择结构最常用的是if语句实现的。
1.1if语句的一般格式
if(表达式) 语句1
[else 语句2]
表达式可以是关系表达式,逻辑表达式,数值表达式。
1.2if语句常用的3种形式
(1)if(表达式) 语句1 //没有else字句部分
(2)if(表达式) //有else字句的部分
语句1
else
语句2
(3)if(表达式1) 语句1 (在else部分又嵌套了多层的if语句)
else if(表达式2) 语句2
else if(表达式3) 语句3
. .
. .
. .
else if(表达式m) 语句m
else 语句m+1
例如:
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)//在if语句的else部分嵌套了一个if语句
cost = 0.10;
else
if(number > 100)//在if语句的else部分又嵌套了一个if语句
cost = 0.075;
else
if(number > 50)//在第二层内嵌的if语句的else部分又嵌套了一个if语句
cost = 0.05;
else
cost = 0;//在第三层内嵌的if语句中的else子句
**在系统对if语句进行编译的时候,若发现内嵌套语句结束,还要检查后面是否有else,如果没有则认为if语句结束,如果有else语句,则把else语句作为if语句的一部分,注意:else字句不能单独使用,必须与if语句配套使用。
1.3if语句的嵌套
一般形式
if的数目和else的数目相同,从内层到外层一一对应。
if()
if() 语句1
else 语句2
else
if() 语句3
else 语句4
如果if和else的数目不一致,可以加花括号确定配对关系
if()
{
if() 语句1
}
else 语句2
二、关系运算符和关系表达式
在c语言中常把比较运算符称为关系运算符,是将两个数值进行比较,判断其比较的结果是否满足给定的条件。
2.1关系运算符及其优先次序
关系运算符 | 含义 |
---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
- 前四种优先级别相同,后两种优先级别相同。前4种高于后2种。
- 关系运算符的优先级低于算数运算符。
- 关系运算符的优先级高于赋值运算符。
注意:有多级运算符的时候,建议加上括号,便于理解。
例如:
c > a+b//关系运算符的优先级低于算数运算符
等价于
c > (a+b)
2.2关系表达式
关系表达式是将两个数值或者数值表达式连接起来的式子,关系表达式的值是一个逻辑值,“真”或“假”。
例如:
- d = a>b;//由于a>b为真所以赋值后d的值为1
- d = a>b;//若a>b为假,那么赋值后d的值为0
三、逻辑运算符和逻辑表达式
用逻辑运算符将关系表达是或其他逻辑量连接起来的式子就是逻辑表达式。
3.1逻辑运算符及优先次序
3中逻辑运算符
-
与(AND)符号(&&)含义:同真为真,一假为假
-
或(OR)符号(||)含义:全假为假,有真为真
-
非(NOT)符号(!)含义:取反
-
“&&”和“||”是双目运算,要求有两个运算对象
例如:(a>b) && (b>c)或者 (a>b) || (b>c) -
"!"是单目运算符,只要求有一个运算对象
例如:! (a>b)
优先级
3.2逻辑表达式
逻辑表达式是一个逻辑值“真”或“假”
用1表示真,用0表示假
注意:以0代表为假,以非0代表为真
例如:
- a = 4,b = 5;a&&b为真
- a = -1,b =5;a&&b为真
逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是字符型,浮点型,枚举型,或者指针型的纯量型数据,最后系统不符都会以0和非0来判断他们是属于“真”还是“假”
例如:
- ‘c’ &&'d’因为c和d的ASCII码不为0故按真值处理
注意:在逻辑表达式中,并不是所有的逻辑运算符都会被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。
例如:
- a && b && c。只有a为真(非0)时,才需要判断b的值。只有在a和b都为真的时候才需要判断c的值。如果a为假,就不用判断b和c(此时整个表达式已经确定为假),如果a为真,b为假,不用判别c
对于&&运算符,只有a不等于0,a为真的时候,才可以进行后面的运算
- a||b||c。只要a为真(非0),就不必判断b和c.只有a为假,才判别b,a和b都为假,才判断c
对于||运算符,只有a=0的时候,才进行右边的运算
四、三目运算符和表达式
4.1三目运算符的一般形式
表达式1?表达式2:表达式3
如果表达式1为真,取表达式2的值
如果表达式1为假,取表达式3的值
例如:
max = (a>b)? a:b //a大于b吗,如果大于,就把a的值赋给m否则把b的值赋给m
a>b? (max = a):(max = b);
等价于:
if(a>b) max = a;
else max = b;
a>b ? printf("%d",a):printf("%d",b)
等价于:
if(a>b)
printf("%d",a);
五、switch语句
5.1switch一般形式
switch(表达式)
{
case 常量1 :语句1
case 常量2 :语句2
. . .
. . .
case 常量n :语句n
default: 语句n+1
}
说明
- 表达式的类型应该是整型(包括字符型)
- case后面跟一个常量或者常量表达式
- 可以没有default标号,如果没有与switch表达式相匹配的case常量,则不执行任何语句,则转到switch语句的下一个语句
- 各个case标号出现次序不影响执行结果
- 每一个case常量必须不同,否则矛盾
注意:
在执行一个case子句后,应当用break语句使流程跳出switch结构,即终止switch语句的执行,最后一个case子句中可以不加break语句,因为流程已经到了switch结构的结束处。
六、综合举例
写一个程序判断某一年为闰年
思路:满足以下条件之一
可以用逻辑表达式来写。
①能被4整除,但不能被100整除,如2008
②能被400整除,如2000
(year%4==0 && year%100!=0) || year%400==0
year为整数(年份),如果上述表达式的值为真,则year为闰年,否则不是闰年。
!((year%4==0 && year%100!=0) || year%400==0)
(year%4!=0) || (year%100==0 && year%400!=0)
可以加一个!来判断非闰年,表达式为真,则year为非闰年。
代码1如下:
- year代表年份,leap是一个标志变量,用来表示相应的年份是否为闰年。leap=1表示为闰年,leap=0表示非闰年。
#include <stdio.h>
int main()
{
int year,leap;
printf("enter year:");
scanf("%d",&year);
if(year%4==0){
if(year%100!=0){
leap = 1;
}else{
leap = 0;
}
}else{
if(year%400==0){
leap = 1;
}else{
leap = 0;
}
}
if(leap){//if(leap!=0)等价
printf("%d is a leap year",year);
}else{
printf("%d is not a leap year",year);
}
return 0;
}
代码2如下:
#include <stdio.h>
int main()
{
int year,leap;
printf("enter year:");
scanf("%d",&year);
if(year%4!=0)
leap = 0;
else if (year%100!=0)//能被4整除,但是不能被100整除
leap = 1;
else if(year%400!=0)
leap = 0;
else //能被400整除
leap = 1;
if(leap){
printf("%d is a leap year",year);
}else{
printf("%d is not a leap year",year);
}
return 0;
}
代码3:用逻辑表达式包含所有的闰年条件
#include <stdio.h>
int main()
{
int year,leap;
printf("enter year:");
scanf("%d",&year);
if( (year%4==0 && year%100!=0) || year%400==0){
leap = 1;
}else{
leap = 0;
}
if(leap){
printf("%d is a leap year",year);
}else{
printf("%d is not a leap year",year);
}
return 0;
}
更多推荐
所有评论(0)