Lesson 0003 · 变量、分支与函数

① 程序设计基础 — 第 2 课

上节课:cin / cout、int 变量、for / while 循环,已经能写完整的程序了。
这节课:往里加三样东西 —— 更多数据类型(存得下、存得准)、条件分支(让程序分叉)、自定义函数(把一段逻辑打包复用)。这三样凑齐,就从「能跑」变成「能写题」了。
三句话速览

1. C++ 常用数据类型

类型关键字存什么示例
整数int整数(约 ±21 亿)int age = 18;
长整数long long更大的整数long long n = 1e18;
浮点数double小数double pi = 3.14;
字符char单个字符char c = 'A';
布尔bool真/假bool ok = true;
字符串string一串字符string s = "hello";
注意:string 需要 #include <string>。整数除法 5 / 2 结果是 2(截断),要得到 2.5 需要 5.0 / 2。

试试看:类型练习

#include <iostream>
#include <string>
using namespace std;

int main() {
    int a = 10;
    double b = 3.5;
    char c = 'X';
    string s = "Hello";
    bool flag = true;

    cout << a + b << endl;   // 输出?
    cout << s + c << endl;   // 输出?
    cout << flag << endl;    // 输出?
    return 0;
}

(先自己想想再看答案)

答案:a + b 里 int 会被提升成 double,输出 13.5;s + c 把字符接到字符串末尾,输出 HelloX;bool 直接输出时打印 1(false 则是 0)。

2. 条件分支:if / else

程序需要做判断。基本结构:

if (条件) {
    // 条件为 true 时执行
} else if (另一个条件) {
    // 第二个条件为 true 时执行
} else {
    // 以上都不满足时执行
}

比较运算符

运算符含义运算符含义
==等于!=不等于
<小于>大于
<=小于等于>=大于等于
&&且||或
!非

示例:成绩评级

int score;
cin >> score;

if (score >= 90) {
    cout << "A" << endl;
} else if (score >= 80) {
    cout << "B" << endl;
} else if (score >= 70) {
    cout << "C" << endl;
} else if (score >= 60) {
    cout << "D" << endl;
} else {
    cout << "F" << endl;
}
关键细节:= 是赋值,== 是比较。写 if (x = 5) 不会报错但含义完全不同 —— 这是一个经典新手陷阱。

3. 自定义函数

函数让你把一段代码打包、起名、重复使用:

// 定义:返回值类型 函数名(参数列表) { 函数体 }
int max(int a, int b) {
    if (a > b) return a;
    else return b;
}

int main() {
    cout << max(3, 7) << endl;  // 调用,输出 7
    cout << max(10, 5) << endl; // 调用,输出 10
    return 0;
}

函数的四个要素

  1. 返回类型:函数输出的类型(int, double, void 表示无返回值)
  2. 函数名:自己起的名字,见名知意
  3. 参数:函数需要的外部输入
  4. 函数体:具体做什么

示例:判断素数

bool isPrime(int n) {
    if (n <= 1) return false;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

int main() {
    int x;
    cin >> x;
    if (isPrime(x))
        cout << x << " 是素数" << endl;
    else
        cout << x << " 不是素数" << endl;
    return 0;
}

4. 坑点清单

5. 小测

Q1. 以下代码输出什么?
int a = 5, b = 2; cout << a / b;
Q2. if (x = 0) 是什么意思?
Q3. 以下函数定义哪里错了?
int greet() { cout << "Hi"; }

6. 动手练习

题目:判断闰年

编写一个函数 bool isLeapYear(int year),判断某年是否为闰年。

闰年规则:① 能被 4 整除但不能被 100 整除,或者 ② 能被 400 整除。

然后在 main 中读入年份,调用函数输出结果。

示例:输入 2000 → 输出 闰年;输入 1900 → 输出 平年。

卡住时的自查顺序

  1. 先只写规则 ①:year % 4 == 0 且 year % 100 != 0,用 2004 和 1900 各测一次。
  2. 再把规则 ② 用「或者」接上:year % 400 == 0,用 2000 测一次。
  3. 检查函数的返回类型是 bool,每条路径都有 return。
  4. 最后看输出:只输出「闰年」或「平年」两个字,别多打空格和标点。

做完了?把代码贴在聊天里,我帮你检查。

本课小结

推荐阅读

下一课预告
0004 循环与数组 —— 循环早就会写了,下一课把它用到数组上:一次存一串数,用下标挨个处理。搭配好上一课的「在循环里判断」,很多题就有了骨架。
这一课的三件事都是后面所有课的地基:类型选错会溢出,= 写错会静默出错,函数忘了 return 会编译不过。哪一句还不明白 —— 比如「5 / 2 和 5.0 / 2 差别到底在哪」「void 函数能不能 return;」「i * i <= n 为什么比 i <= n 好」—— 直接问。

Lesson 0003 · 课程体系总览:curriculum-overview.html

上一课:sort 与 string · Mission · Notes

书 C++ Primer 第 2、5、6 章 · 在线 cppreference 基本类型