《小菜狗 C 语言入门 + 进阶笔记》目录:《小菜狗 C 语言入门 + 进阶笔记》(0)简介
文章目录
- 1、三大语句结构
- 1.1、白话文解释
- 1.2、顺序结构
- 2、判断语句
- 2.1、C 语言的判断语句
- 2.2、true 和 false
- 2.3、if 和 else
- 3、只使用 if 语句
- 4、if 包含多条语句
- 5、if else 语句
- 6、多个 if else 语句
- 7、嵌套 if 语句
- 7.1、if 和 else 的配对问题
1、三大语句结构
C 语言中有三大结构
,分别是顺序结构、选择结构和循环结构
。
1.1、白话文解释
顺序结构
就是让程序按照从头到尾的顺序依次执行每一条 C 语言代码,不重复执行任何代码,也不跳过任何代码。选择结构
也称分支结构,就是让程序“拐弯”,有选择性的执行代码;换句话说,可以跳过没用的代码,只执行有用的代码。循环结构
就是让程序“杀个回马枪”,不断地重复执行同一段代码。
在 C 语⾔中,我们可以使用 if 、 switch 实现分⽀结构
,使用 for 、 while 、 do while 实现循环结构
。
1.2、顺序结构
前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条……一直到最后一条语句,这称为顺序结构
。
顺序结构很好理解,无需多说,本章重点讲解选择结构,后面再讲循环结构。
顺序结构和选择分支结构示意图:
2、判断语句
2.1、C 语言的判断语句
语句 | 描述 |
---|---|
if 语句 | 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 |
if…else 语句 | 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 |
嵌套 if 语句 | 您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 |
switch 语句 | 一个 switch 语句允许测试一个变量等于多个值时的情况。 |
嵌套 switch 语句 | 您可以在一个 switch 语句内使用另一个 switch 语句。 |
2.2、true 和 false
在 C 语⾔中,0 为假,非 0 表⽰真。
即 C 语言把任何非零 和 非空的值假定为 true,把零或 null 假定为 false。
2.3、if 和 else
今天我们先来讲使用 if
和 else
关键字对条件进行判断,下一节使用 switch
关键字对条件进行判断。
if 和 else
是两个新的关键字
,if
意为如果
,else
意为否则
,用来对条件进行判断,并根据判断结果执行不同的语句。
3、只使用 if 语句
if 语句
的语法形式
如下:
if ( 判断表达式 )语句
或者规范写法
if ( 判断表达式 )
{语句
}
或者括号另起新行
if ( 判断表达式 ) {语句
}
只使用 if 语句
结构示意图:
表达式成立(为真【非 0】),则语句执行,表达式不成立(为假【0】),则语句不执行。
也就是表达式的结果如果是 0,则语句不执行,表达式的结果如果不是 0,则语句执行。
举例:
输入⼀个整数,判断是否为奇数
#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);if (num % 2 == 1)printf("%d 是奇数\n", num);return 0;
}
奇数判断示意图:
- 如果
5 % 2
为1 == 1
;
num % 2 == 1
条件成立,那就是为真(1),printf
打印信息,下一行 return
结束;
- 如果
4 % 2
为0 != 1
;
num % 2 == 1
条件不成立,那就是为假(0),不走printf
打印的代码,直接下一行 return
结束;
注意:
上面输入⼀个整数,判断是否为奇数
例子中的 if 语句
,规范写法是要加上代码块 { }
的。
如下:
if (num % 2 == 1) {printf("%d 是奇数\n", num);}
这是因为 if 语句只能控制⼀条语句
,就是 printf("%d 是奇数\n", num);
;
注意: 后面要讲的 else 语句,while 语句,for 语句都是这样!
那如果我们要 if 语句同时控制 2 条以上的语句
,怎么办呢?那就要使用 {} 将代码括起来。
如下 4、if 包含多条语句
:
4、if 包含多条语句
#include <stdio.h>
int main()
{int age = 0;scanf("%d", &age);if (age >= 18)printf("成年了\n");printf("可以交⼥朋友了\n");return 0;
}
举例输入输出 1:
//输入
18
//输出
成年了
可以交⼥朋友了
举例输入输出 2:
//输入
2
//输出
可以交⼥朋友了
上⾯的代码,你会发现输入的值不管是 >=18
还是 <18
,“可以交⼥朋友了” 都会打印在屏幕上! 2 岁怎么能交女朋友了呢?不行不行!
原因刚才说过了,因为 if 语句只能控制⼀条语句
!
修改代码如下:
#include <stdio.h>
int main()
{int age = 0;scanf("%d", &age);if (age >= 18){printf("成年了\n");printf("可以交⼥朋友了\n");}return 0;
}
if
后使用 {} 控制多条语句
,这个块也叫:程序块,或者复合语句
。
在之前文章 (2.14)作用域 -> 局部变量和全局变量 文章中提到过语句块
,就是由{ }
包围的一个或多个语句的集合。
如果语句块中只有一个语句,也可以省略
{ }
。
5、if else 语句
如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们使用 C 语⾔要清楚的判断是奇数还是偶
数怎么编写代码呢?这⾥就需要 if…else… 语句了。
C 语言中 if…else 语句的语法:
- 一个 if 语句 后可跟一个可选的 else 语句。
如果判断表达式为 true,则执行 if 块内的代码。如果判断表达式为 false,则执行 else 块内的代码。
语法形式如下:
if ( 判断表达式 )语句1
else语句2
或者规范写法
if ( 判断表达式 ) {语句1
} else {语句2
}
或者括号另起新行
if ( 判断表达式 )
{语句1
}
else
{语句2
}
if else 语句
结构示意图:
意思是:
如果判断条件成立,那么执行语句块 1,否则执行语句块 2 。
修改一下上一个章节 if 语句的例⼦:
输入⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);if(num % 2 == 1)printf("%d 是奇数\n", num);elseprintf("%d 是偶数\n", num);return 0;
}
- 如果
5 % 2
为1 == 1
;
num % 2 == 1
条件成立,那就是为真(1),printf
打印信息是奇数
,下一行 return
结束;
- 如果
4 % 2
为0 != 1
;
num % 2 == 1
条件不成立,那就是为假(0),printf
打印信息是偶数
,下一行 return
结束;
回看并修改 4、if 包含多条语句
中的代码
如下:
#include <stdio.h>
int main()
{int age = 0;scanf("%d", &age);if (age >= 18) //if 后使用{} 控制多条语句-这个块也叫:程序块,或者复合语句{printf("成年了\n");printf("可以交⼥朋友了\n");}else //else 后使用{}控制多条语句-这个块也叫:程序块,或者复合语句{printf("未成年\n");printf("不可以早恋哦\n");}return 0;
}
举例输入输出 1:
//输入
18
//输出
成年了
可以交⼥朋友了
举例输入输出 2:
//输入
2
//输出
未成年
不可以早恋哦
6、多个 if else 语句
if else 语句
也可以多个同时使用,构成多个分支
。一个 if 语句后可跟一个可选的 else if…else 语句,这可用于测试多种条件。
当使用 if…else if…else 语句时,以下几点需要注意:
- 一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。
- 一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
- 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。
C 语言中的 if…else if…else 语句的语法:
if (判断条件1) {语句块1
} else if (判断条件2) {语句块2
} else if (判断条件3) {语句块3
} else if (判断条件4) {语句块4
} else {语句块 n
}
意思是:
从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个 if else 语句之外继续执行其他代码。如果所有判断条件都不成立,则执行语句块 n
,然后继续执行后续代码。
也就是说
一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。
例如,使用多个 if else 语句判断输入的值:
#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 100;/* (1)检查布尔条件 */if( a == 10 ){/* (2)如果 if 条件为真,则输出下面的语句 */printf("a 的值是 10\n" );}else if( a == 20 ){/* (3)如果 else if 条件为真,则输出下面的语句 */printf("a 的值是 20\n" );}else{/* (4)如果上面条件都不为真,则输出下面的语句 */printf("没有匹配的值\n" );}printf("a 的准确值是 %d\n", a );return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
没有匹配的值
a 的准确值是 100
7、嵌套 if 语句
在 C 语言中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。有了嵌套 if 语句,就可以完成更多复杂逻辑的判断。
您可以嵌套 else if…else,方式与嵌套 if 语句相似。
嵌套 if 语句的语法:
if (判断条件1) {if (判断条件3) {语句块3} else if (判断条件4) {语句块4} else {语句块5
} else if (判断条件2) {语句块2
} else {语句块 n
}
⽐如:
要求输入⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出 “不是正数”。
#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);if (num > 0){if (num%2 == 0)printf("偶数\n");elseprintf("奇数\n");}else{printf("不是正数\n");}return 0;
}
上⾯的代码中橙⾊背景的代码也是嵌套在 if 语句中的,构成了嵌套的 if 语句。
7.1、if 和 else 的配对问题
if 语句嵌套时,要注意 if 和 else 的配对问题。
如果有多个 if 和 else ,可以记住这样⼀条规则【else 总是与它前面最近的 if 配对】
例如:
if (a!=b) // ①
if (a>b) printf("a>b\n"); // ②
else printf("a<b\n"); // ③
③ 和 ② 配对,而不是和 ① 配对。
再如:
#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}
程序运行的结果是啥?
很多初学者,上来以判断 a 是 0,不等于 1,那就执行 else ⼦句,打印 haha
但是当你去运行代码,结果是:啥都不输出。
为什么呢?
else 总是跟最接近的 if 匹配。
详细说明:
上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个 if 匹配的,当 if 语句不成立的时候,⾃然想到的就是执行 else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if 进行匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成立,嵌套 if 和 else 就没机会执行了,最终啥都不打印。
代码修改:
#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1){if (b == 2)printf("hehe\n");}else{printf("haha\n");}return 0;
}
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更⾼。
《小菜狗 C 语言入门 + 进阶笔记》目录:《小菜狗 C 语言入门 + 进阶笔记》(0)简介
每日一更!
公众号、CSDN等博客:小菜狗编程笔记
谢谢点赞关注哈!目前在飞书持续优化更新~
日更较慢有需要完整笔记请私我,C/C++/数据结构-算法/单片机51-STM32-GD32-ESP32/嵌入式/Linux操作系统/uboot/Linux内核-驱动-应用/硬件入门-PCB-layout/Python/后期小程序和机器学习!