思维导图

一.分支结构
1.if语句
1.1 语法结构
1.2 语法形式
if (表达式)
{
语句1;
语句2;
...
}
- 表达式:表达式为真,则语句执行,反之,表达式不执行;在C语言中,非0为真,0为假
- { }:if语句原则上只能执行一个语句,但有了{ }则可以执行多语句
代码演示
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age>=18)
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
return 0;
}
1.3 else
语法形式:
if(表达式)
{
语句1;
语句2;
...
}
else
{
语句1;
语句2;
...
}
- else :同样默认只能控制一条语句
- { } :控制多条语句
代码演示
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age>=18)
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else
{
printf("未成年\n");
printf("不可以早恋\n");
}
return 0;
}
1.4 嵌套 if
在if else语句中,else可以与另一个 if 语句连用,构成多重判断
代码演示:输入任意一个整数值,计算除3的余数
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 3 == 0)
{
printf("余数是0\n");
}
else if (num % 3 ==1)
{
printf("余数是1\n");
}
else
printf("余数是2\n");
return 0;
}
1.5 悬空 else
注:else 总是跟最近的 if 匹配

在这我么很容易误会成会打印 haha,真实结果是什么也不打印

该代码如果加上{ },则会一眼就看出代码的结果

2.switch语句
switch语句是一种特殊的if else 结构,用于判断有多个结果的情况
2.1 语法形式
switch(expression)
{
case vlaue1:
语句1
break;
case value2:
break;
...
default:
语句
}
- expression:必须是整型表达式
- value:必须是整型常量的值
- default:执行的是表达式的相反结果
- break:在一个case语句执行完,加上break,表示switch语句执行结束,case语句是否加break,需自行判断
- 注:case与value之间必须加上一个空格;value后面“:”不能省略
2.2 与else if相比较
switch能把多重的else if 改成更医用、可读性更好的形式
代码演示:输入任意一个整数值,计算除3的余数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
switch (num % 3)
{
case 0:
printf("余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
default:
printf("输入错误\n");
}
return 0;
}
二.操作符的分类
1.关系操作符
1.1 关系操作符的种类
< 小于 > 大于
<= 小于等于 >= 大于等于
== 相等 != 不相等
1.2 关系表达式
C语言用于比较的表达式
(1)关系表达式通常返回 1 或 0 ,来表示真与假。例如:12>10返回1,10>12返回0
(2)关系表达式常用语 if 或 while 结构
(3)== 相等操作符 与 = 赋值操作符是不相等的,==是起判断作用的,而=是用来赋值的。为了区分开这两个操作符产生的报错,通常把数字写在前面,变量希望在后面
if( x = 3 )//表示对 x 赋予一个 3 的值,这个判断式总是成立,if 的表达总为真
if( 3 = x )// 这时编译器就会报错
if( 3== x )//表示 x = 3
(4)多个关系操作符不宜连用,关系操作符是从左到右计算,每计算一个表达式就会返回 1 或 0
1 < 2 < 3
//执行的是 1 < 2 成立,返回 1,在判断 1 < 3 成立,所以并没有判断 2与3的大小关系
//正确写法
i < j && j < k
2.条件操作符
条件操作符也叫三目操作符,执行三个操作数
2.1 语法形式
exp1 ? exp2 : exp3
真 ✅️ ❌️
假 ❌️ ✅️
- exp1:指判断表达式结果的真假
- exp2:如exp1结果为真,exp2计算,计算的的结果是整个表达式的结果
- ecp3:如exp1结果为假,exp3计算,计算的的结果是整个表达式的结果
2.2 应用场景
找出两个数中较大值
代码演示:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
int m = (a > b ? a : b);
printf("%d", m);
return 0;
}
3.逻辑操作符 &&、||、!
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式
3.1 &&(逻辑与运算)
(1)&&是并且的意思,两侧的表达式都为真,则为真,否则为假
(2)是双目操作符,执行两个操作数
| a | b | a&&b |
|---|---|---|
| 非0 | 非0 | 1 |
| 非0 | 0 | 0 |
| 0 | 非0 | 0 |
| 0 | 0 | 0 |
代码演示:求一年中春季的月份
#include <stdio.h>
int main()
{
int month = 0;
scanf("%d", &month);
if (month >= 3 && month <= 5)
{
printf("春季\n");
}
return 0;
}
3.2 ||(逻辑或运算)
(1)||是或者的意思,两侧至少有一个表达式为真,则为真,否则为假
(2)也是双目操作符,执行两个操作数
| a | b | a或b |
|---|---|---|
| 非0 | 非0 | 1 |
| 非0 | 0 | 1 |
| 0 | 非0 | 1 |
| 0 | 0 | 0 |
代码演示:判断一个月份是冬季的月份
#include <stdio.h>
int main()
{
int month = 0;
scanf("%d", &month);
if (month ==12 || month==1||month==2)
{
printf("冬季\n");
}
return 0;
3.3 !(逻辑取反运算符)
(1)是相反的意思,改变单个表达式的真假
(2)是单目操作符,执行一个操作数
| a | !a |
|---|---|
| 非0 | 0 |
| 0 | 1 |
代码演示:如果变量为假,就做一些事
#include <stdio.h>
int main()
{
int flag = 0;
if (!flag)
{
printf("do something\n");
}
return 0;
}
4.短路
4.1 基本概念
通常情况下,逻辑操作符的执行的顺序是从左到右,即先对左侧表达式求值,在对右侧表达式求值,但如果左侧表达式满足逻辑操作符的条件,就不再对右侧表达式求值。
4.2 短路求值
(1)&&短路求值:左边操作数的结果为0,右边操作数就不再执行
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;//后置++:先使用,后+1,即a = 0,后边表达式不执行,表达式结束,a + 1
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//a = 1,b = 2,c = 3,d = 4
return 0;
}
(2)||短路求值:左边操作数的结果不为0,右边操作数就不再执行
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;//a = 0不执行,继续执行b,b = 3不为0,后边表达式不执行
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//a = 1,b = 3,c = 3,d = 4
return 0;
}

6959

被折叠的 条评论
为什么被折叠?



