第三章 判断过程(一)
C语言中的判断过程
在我们现实生活中,我们总是做出判断
例如:如果外面下雨,我就坐车去学校。如果外面不下雨,我就骑自行车去学校
算术比较
c中比较两个值有6个关系运算符,如表:
| 运算符 | 比较 |
|---|---|
| < | 左操作数小于右操作数 |
| <= | 左操作数小于等于右操作数 |
| == | 左操作数等于右操作数 |
| != | 左操作数不等于右操作数 |
| > | 左操作数大于右操作数 |
| >= | 左操作数大于等于右操作数 |
基本的if语句
有了比较关系运算符后,就需要用一个语句来做判断最简单的语句就是if语句。例如比较自己的体重和他人的体重,代码如下:
#include <stdio.h>
int main(void)
{
int my_weight=170; //定义我的身高为170
int you_weight=175;//定义你的身高为175
if(you_weight>my_weight) //如果你的身高大于我的身高
printf("你比我高"); //printf就会执行 你比我高
if(you_weight<my_weight) //如果你的身高小于我的身高
printf("我比你高"); //printf就会执行我比你高
if(you_weight==my_weight) //如果你的身高小于我的身
printf("我们一样高"); //printf就会执行你和我意昂高
}
结果为:你比我高
这三个if语句,比较表达式位于if关键字后面的括号里,如果比较结果为true,就执行if后面的语句,如果表达式为false,就跳过if后面的语句
if语句的一般形式或语法如下:
if(expression) statement1; Next_statement;在第一行的末尾没有分号,是因为if关键字和其后的一行组合在一起如下:
if(expression) statement1; Next_statement;但为了简洁,一般把statement1放在新的一行
if 语句的执行过程如图
/1.jpg)
- 把一个数值转换为bool类型时,会得到一个布尔结果
- if语句的控制表达式要生成一个布尔结果
- 所以编译器要把if表达式的数值转换为bool类型。
- 有时在程序中会使用它测试计算式的非零结果
- 如下面的语句:
if(count) printf("count的值不为零");只有count非零,printf才会执行,如果count的值为零,表示if表达式为false,任何非零的count值都会使表达式的结果为true,如下代码:
#include <stdio.h>
int main(void)
{
int a;
printf("请输入一个数字");
scanf("%d",&a);
if(a)
printf("a的值不为零");
}
如果输入2
结果为:a的值不为零
如果输入0
结果为:
当a的值为零,表示if表达式为false,printf不会执行
扩展if语句:if-else
可以扩展if语句提供更多的灵活性例如:
如果今天的雨比昨天大
我就带上雨伞
否则
我就穿上皮夹克
然后去学校
这就是if-else提供的判断方式.if-else语句的语法如下:
if(experssion) statement1; else statement2; Next_statement;
- 如果expression的值是true,就执行statement1,之后执行Next_statement。
- 如果expression的值是false,就执行statement2,之后执行Next_statement。
- 执行过程如图:
在if语句中使用代码块
可以把几个语句放在一个{}中,在if表达式为true时,提供多个执行的语句例如:
如果天气晴朗 我就去公园,吃野餐,然后回家 否则 我就留在家中,看足球赛,喝啤酒if语句的语法如下:
if(expression) { statementA1; statementA2; } else { statementB1; statementB2; } Next_statement;
- 如果expression等于true,就执行if后面括号中所有的语句
- 如果expression等于false,就执行else后面括号中所有的语句
- 在两种情况下程序都执行 Next_statement
嵌套的if语句
if语句也可以包含if语句。例如
如果天气很好
我就到院子里去
如果天气很冷
我就坐在太阳下
否则
我就坐下树荫下
否则
我就呆在屋内
然后喝一些柠檬水
if语句的语法如下:
if(expression1)
{
statementA;
if(expression2)
statementB;
else
statementC;
}
else
statementD;
statementE;
第二个if语句只有在第一个if语句为true时才执行,其逻辑如图
逻辑与算符
逻辑与运算符&&
(逻辑与)运算符&&是一个二元运算符,因为它合并两个逻辑表达式,即两个值为true或false的表达式,例如:
if(age>12 && age<20)
printf("你正式成为青少年");
&& (逻辑与)
当逻辑与左边为false(假),则不再进行逻辑与右边的判断,结果为false(假)
当逻辑与左边为true(真)则进行右边判断,右边为false(假),结果为false(假)
当逻辑与左边为true(真)则进行右边判断,右边也为true(真),则结果为true(真)
逻辑或运算符||
(逻辑或)运算符||用于两个或多个条件为true的情行。如果运算符||的一个或两个操作数是true,其结果就是true.只有两个操作数都是false,结果才是false.下面是使用这个运算符的例子:
#include <stdio.h>
int main()
{
int a=6;
if(a>7 || a>9 || a==7 || a==5 || a==6)
printf("printf语句执行了");
}
结果为:printf语句执行了
||(逻辑或)
当逻辑或左边为false(假),继续逻辑或右边的判断,如果也为false(假),结果为false(假)
当逻辑或左边为false(假),继续逻辑或右边的判断,如果为true(真),结果为true(真)
当逻辑或左边为true(真),则不再进行逻辑或右边的判断,结果为true(真)
逻辑非运算符!
逻辑非运算符用 “!”表示,他是一元运算符;因为他只有一个操作数。逻辑非运算符转逻辑表达式的值,使用true和false,假设有两个变量a和b,其值分别是5和2,则表达式a>b是true,如果使用逻辑非运算符,表达式!(a>b)就是false,尽量避免使用这个运算符,它会使代码难以理解。
条件运算符
条件运算符根据一个逻辑表达式等于true和false。执行两个表达式中的一个。有时也称为三元运算符,因为他是需要3个操作数的运算符例如:
条件?表达式1:表达式2
x=y>7?25:50;
如果y>7,x就设置为25,否则x就设置为50,这是生成这一结果的一种快捷方式:
if(y>7)
x=25;
else
x=50;
如下代码
#include <stdio.h>
int main(void)
{
int a,b,max;
printf("请输入两个数字");
scanf("%d",&max);
max=a>b?a:b;//当a>b为true,max的值为a。当为false,max的值为b.
printf("max=%d",max);
return 0;
}
运算符的优先级
| 优先级 | 运算符 | 结合律 |
|---|---|---|
| 1 | 后缀运算符:[] () · -> ++ –(类型名称){列表} | 从左到右 |
| 2 | 一元运算符:++ – ! ~ + - * & sizeof_Alignof | 从右到左 |
| 3 | 类型转换运算符:(类型名称) | 从右到左 |
| 4 | 乘除法运算符:* / % | 从左到右 |
| 5 | 加减法运算符:+ - | 从左到右 |
| 6 | 移位运算符:<< >> | 从左到右 |
| 7 | 关系运算符:<<= >>= | 从左到右 |
| 8 | 相等运算符:== != | 从左到右 |
| 9 | 位运算符 AND:& | 从左到右 |
| 10 | 位运算符 XOR:^ | 从左到右 |
| 11 | 位运算符 OR: | 从左到右 |
| 12 | 逻辑运算符 AND:&& | 从左到右 |
| 13 | 逻辑运算符 OR: | 从左到右 |
| 14 | 条件运算符:?: | 从右到左 |
| 15 | 赋值运算符:= += -= * = /= %= &= ^= ❘= | 从右到左 |
| 16 | 逗号运算符:, | 从左到右 |
/20200317101914661.png)
/20200319045500597.png)