C语言第二讲笔记

C语言第二讲笔记(小白友好版)

欢迎继续学习C语言!这一讲我们将深入了解程序中的基本组成单元——表达式和语句,以及如何让程序根据不同情况做出判断(选择语句)。别担心,我们会用最通俗的方式讲解,并结合实际例子,让你轻松掌握。


一、学习建议:掌握方法比死记硬背更重要

  • 会用为准:不需要把每个语法规则都背得滚瓜烂熟,重点是能写代码、能看懂代码。
  • 善用工具:遇到问题多查资料、多问AI(比如我:blush:),借助调试工具找BUG。
  • 动手实践:光看不练假把式,每学一个新概念,马上敲代码试试。

二、Typora使用小技巧(写笔记必备)

如果你用Typora记笔记,记住:

  • 一个 # 表示一级标题,两个 ## 是二级标题,以此类推。
  • 可以用 -* 创建无序列表,1. 创建有序列表。
  • 代码块用三个反引号 包围,并注明语言(如 `c`)。

三、表达式与语句:程序的“单词”和“句子”

1. 什么是表达式?

表达式是由变量、常量和运算符组成的式子,每个表达式都会有一个计算结果(称为表达式的值)。

例如:

  • 3 + 5 → 值为 8
  • a = 10 → 值为 10(赋值表达式的结果就是赋的值)
  • x > y → 值为 1(真)或 0(假)

2. 什么是语句?

语句是C程序中的完整执行单元,以分号 ; 结尾。程序就是由一条条语句组成的。

例如:

  • int a; // 声明语句
  • a = 10; // 赋值语句
  • printf("Hello"); // 函数调用语句
  • ; // 空语句,什么都不做

3. 表达式和语句的关系

  • 表达式后面加上分号,就变成了语句。例如:3 + 5; 是一条语句,但这条语句没有实际作用(计算结果被丢弃)。
  • 反过来,语句中往往包含表达式。例如 a = b + c; 中,b + c 是一个表达式。
对比项 表达式 语句
定义 运算符连接操作数形成的式子 以分号结尾的完整指令
特征 有值(计算结果) 没有值,但会执行动作
例子 2 * 3x > y x = 2 * 3;if(x>y);

一句话总结:表达式是“词”,语句是“句”。


四、选择语句:让程序会“思考”

1. if 语句的基本形式

if 语句根据条件决定是否执行某段代码。

if (条件) {
    // 条件为真时执行的代码
}

条件可以是任何表达式,0 表示假,非 0 表示真(负数、正数都是真,只有 0 是假)。

例如:

int score = 85;
if (score >= 60) {
    printf("及格了!");
}

2. if-else 语句

二选一:条件为真执行一块代码,否则执行另一块。

if (条件) {
    // 真时执行
} else {
    // 假时执行
}

例子:

if (score >= 60) {
    printf("及格");
} else {
    printf("不及格");
}

3. 级联 if-else if(多选一)

当有多个条件需要依次判断时,可以用 else if

if (条件1) {
    // 条件1为真
} else if (条件2) {
    // 条件1为假且条件2为真
} else if (条件3) {
    // 条件1、2为假且条件3为真
} else {
    // 所有条件都为假
}

注意事项

  • 程序会从上往下依次检查条件,一旦遇到真条件,就执行对应的代码块,然后跳出整个 if 链(后面的条件不再检查)。
  • else 是可选的,放在最后处理“其他情况”。

例子(成绩等级):

if (score >= 90) {
    printf("优秀");
} else if (score >= 75) {
    printf("良好");
} else if (score >= 60) {
    printf("及格");
} else {
    printf("不及格");
}

4. 条件运算符(三元运算符)

一种简写形式,适用于简单的二选一赋值:

变量 = 条件 ? 表达式1 : 表达式2;

如果条件为真,整个表达式的值为表达式1,否则为表达式2。

例如:

int max = (a > b) ? a : b;   // 把 a 和 b 中较大的值赋给 max

5. switch 语句:多分支利器

当条件是一个变量或表达式,且需要根据它的不同值执行不同操作时,switch 比级联 if 更清晰。

基本结构:

switch (表达式) {
    case 常量1:
        // 当表达式的值 == 常量1 时执行
        break;
    case 常量2:
        // 当表达式的值 == 常量2 时执行
        break;
    ...
    default:
        // 如果所有 case 都不匹配,执行这里(可选)
}

重要规则

  • case 后面必须是整型常量(如整数、字符),不能是变量。
  • 每个 case 最后一般要加 break;,否则会“穿透”到下一个 case(即继续执行后面的代码,直到遇到 break 或 switch 结束)。
  • default 可以放在任何位置,习惯放最后。

示例:根据分数输出等级(假设分数为整数 0~10)

switch (score) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("不合格");
        break;
    case 6:
        printf("合格");
        break;
    case 7:
    case 8:
    case 9:
        printf("优秀");
        break;
    case 10:
        printf("满分");
        break;
    default:
        printf("输入错误");
}
分数范围 输出
0~5 不合格
6 合格
7~9 优秀
10 满分
其他 输入错误

6. 条件判断中的真假

  • :整数 0
  • :任何非 0 的值(包括负数、小数、字符等)

所以下面这种写法是合法的:

int a = 5;
if (a) {      // 等价于 if (a != 0)
    printf("a 不为 0");
}

五、补充:布尔类型 _Bool

C语言有一种专门表示真假的类型:_Bool(或包含头文件 <stdbool.h> 后可用 bool)。

  • 变量取值只能是 0 或 1。
  • 如果给 _Bool 变量赋一个非 0 值,它会自动变成 1。
#include <stdbool.h>

bool flag = true;   // true 是 1,false 是 0
_Bool a = 5;        // a 实际被存为 1

六、小结一下

  • 表达式是计算值的式子,语句是程序执行的动作。
  • 选择语句让程序能根据不同情况执行不同代码。
    • ifif-elseelse if 适用于范围判断。
    • switch 适用于离散的多个相等值判断。
    • 条件运算符 ?: 适合简单二选一赋值。
  • 条件判断中,0 为假,非 0 为真
  • 可以用 _Bool 类型专门存储真/假值。

多练习、多写代码,这些概念很快就会成为你的肌肉记忆!如果还有疑问,随时可以问AI或查资料,加油!