编程要素教学讲义

1. 编程要素简介

1.1 什么是编程要素

编程要素:构成一个计算机程序的基本组成部分,包括数据、操作和控制三个方面。掌握编程要素是编写正确、高效程序的基础。

任何程序都离不开三大要素:

  • 数据要素:程序处理的对象(变量、常量、数据类型)
  • 操作要素:对数据进行的运算(运算符、表达式)
  • 控制要素:决定程序执行流程(顺序、分支、循环)

图示:程序的三要素关系

        ┌─────────────────────────┐
        │         程序            │
        └───────────┬─────────────┘
                    │
        ┌───────────┼───────────┐
        ▼           ▼           ▼
   ┌─────────┐ ┌─────────┐ ┌─────────┐
   │数据要素 │ │操作要素 │ │控制要素 │
   │变量/常量│ │运算符   │ │顺序    │
   │数据类型│ │表达式   │ │分支    │
   └─────────┘ └─────────┘ └─────────┘

2. 数据要素

2.1 变量

变量:在程序运行过程中其值可以改变的量。每个变量有一个名字(标识符)和对应的内存空间,用于存储数据。

变量三要素:

  1. 变量名:唯一标识,遵循命名规则
  2. 数据类型:决定变量能存储什么类型的数据
  3. 值:变量当前存储的内容

变量命名规则:

  • 只能由字母、数字、下划线组成
  • 不能以数字开头
  • 不能使用C++关键字(如 int、if、return 等)
  • 区分大小写(sum 和 Sum 不同)

图示:变量在内存中的存储

内存地址      变量名      存储的值
 0x1000  ──▶   a     ──▶   10
 0x1004  ──▶   b     ──▶   25
 0x1008  ──▶   c     ──▶    5

代码模型:变量的声明、定义与初始化

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 声明并定义变量
    int age;           // 声明一个整型变量 age
    age = 18;          // 赋值(初始化)
    
    // 定义时直接初始化
    int score = 95;    // 声明并初始化为95
    
    // 同时定义多个变量
    int x = 1, y = 2, z = 3;
    
    return 0;
}

2.2 常量

常量:在程序运行过程中其值不能改变的量。C++中有字面常量和用 const 关键字定义的符号常量。

常量类型:

  • 字面常量:直接写出的值,如 100、3.14、'A'、"hello"
  • 符号常量:用 const 修饰的变量,其值不可修改

代码模型:常量的使用

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 字面常量
    int a = 100;           // 100 是整型字面常量
    double pi = 3.14159;   // 3.14159 是浮点型字面常量
    char ch = 'A';         // 'A' 是字符常量
    string str = "C++";    // "C++" 是字符串常量
    
    // 符号常量(推荐使用)
    const int MAX_N = 1000;
    const double G = 9.8;
    // MAX_N = 500;  // 错误!常量不能重新赋值
    
    return 0;
}

最佳实践:程序中多次使用的固定值应定义为 const 常量,提高代码可读性和可维护性。

2.3 基本数据类型

数据类型:规定了变量占用内存的大小、存储值的范围和可进行的操作。

C++ 中常用的基本数据类型:

数据类型 关键字 占用字节 取值范围(大致)
整型 int 4 -2.1×10⁹ ~ 2.1×10⁹
长整型 long long 8 -9.2×10¹⁸ ~ 9.2×10¹⁸
无符号整型 unsigned int 4 0 ~ 4.2×10⁹
单精度浮点 float ±3.4×10³⁸,7位有效数字
双精度浮点 double 8 ±1.7×10³⁰⁸,15位有效数字
字符型 char 1 -128 ~ 127 或 0~255(ASCII)
布尔型 bool true(1)或 false(0)

图示:不同数据类型的内存占用

int (4字节)    ┌──┬──┬──┬──┐
               └──┴──┴──┴──┘

long long (8)  ┌──┬──┬──┬──┬──┬──┬──┬──┐
               └──┴──┴──┴──┴──┴──┴──┴──┘

char (1)       ┌──┐
               └──┘

double (8)     ┌──┬──┬──┬──┬──┬──┬──┬──┐
               └──┴──┴──┴──┴──┴──┴──┴──┘

代码模型:数据类型的使用

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a = 100;                 // 整型
    long long b = 10000000000LL; // 长整型,后缀LL
    float c = 3.14f;             // 单精度浮点,后缀f
    double d = 3.1415926535;     // 双精度浮点
    char e = 'M';                // 字符型,用单引号
    bool f = true;               // 布尔型,true或false
    
    // 查看变量占用字节数
    cout << sizeof(a) << endl;   // 输出 4
    cout << sizeof(b) << endl;   // 输出 8
    cout << sizeof(c) << endl;   // 输出 4
    cout << sizeof(d) << endl;   // 输出 8
    cout << sizeof(e) << endl;   // 输出 1
    cout << sizeof(f) << endl;   // 输出 1
    
    return 0;
}

3. 输入与输出

输入/输出(I/O):程序与外部环境交换数据的方式。C++ 中使用 cin 进行标准输入,cout 进行标准输出。

图示:输入输出流程

  键盘 ──→ cin ──→ 变量(内存)──→ cout ──→ 屏幕

代码模型:基本输入输出

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 输出
    cout << "Hello" << endl;      // endl 换行
    cout << 100 << " " << 200;    // 输出多个内容
    
    // 输入
    int x, y;
    cin >> x >> y;                // 从键盘读取两个整数
    
    // 格式化输出
    double pi = 3.1415926;
    cout << fixed << setprecision(2) << pi << endl;  // 输出 3.14
    
    return 0;
}

4. 运算符与表达式

运算符:对数据进行运算的符号。表达式:由运算符和操作数组成的式子,每个表达式都有一个计算结果。

4.1 算术运算符

运算符 含义 示例 结果
+ 加法 5 + 3 8
- 减法 5 - 3 2
* 乘法 5 * 3 15
/ 除法 5 / 2 2(整数)
% 取模 5 % 2 1

注意:整数除法会截断小数部分。要得到浮点结果,需将其中一个操作数转为浮点型:5.0 / 2 或 1.0 * 5 / 2。

4.2 关系运算符

用于比较两个值,结果为布尔值(true / false)。

运算符 含义 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b

4.3 逻辑运算符

用于组合多个条件。

运算符 含义 示例
&& 与 a > 0 && a < 10
|| 或 a < 0 || a > 100
! 非 !(a == b) 等价于 a != b

4.4 赋值运算符与自增自减

运算符 示例 等价于
= a = 5 赋值
+= a += 3 a = a + 3
-= a -= 2 a = a - 2
*= a *= 4 a = a * 4
/= a /= 2 a = a / 2
%= a %= 3 a = a % 3
++ a++ a = a + 1(后置)
-- --a a = a - 1(前置)

代码模型:运算符的使用

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a = 10, b = 3;
    
    // 算术运算
    cout << a + b << endl;   // 13
    cout << a - b << endl;   // 7
    cout << a * b << endl;   // 30
    cout << a / b << endl;   // 3(整数除法)
    cout << a % b << endl;   // 1
    
    // 浮点除法
    cout << 1.0 * a / b << endl;  // 3.33333
    
    // 关系运算
    cout << (a > b) << endl;      // 1 (true)
    cout << (a == b) << endl;     // 0 (false)
    
    // 逻辑运算
    bool flag = (a > 5 && b < 5); // true && true = true
    cout << flag << endl;         // 1
    
    // 复合赋值
    a += 5;   // a = a + 5 → 15
    b *= 2;   // b = b * 2 → 6
    
    // 自增自减
    int x = 5;
    int y = x++;   // y = 5, x = 6(后置:先使用,后自增)
    int z = ++x;   // x = 7, z = 7(前置:先自增,后使用)
    
    return 0;
}

4.5 运算符优先级

当表达式中包含多个运算符时,优先级决定了计算顺序。优先级高的先计算。

优先级 运算符 结合性
1(高) () 从左到右
2 ++ -- !(单目) 从右到左
3 * / % 从左到右
4 + -
5 < <= > >=
6 == !=
7 &&
8 ||
9(低) = += -= 等赋值运算符 从右到左

技巧:不确定优先级时,使用括号 () 明确计算顺序,提高可读性。

5. 程序控制结构

C++ 程序按照三种基本结构组织代码:

5.1 顺序结构

程序按代码书写顺序逐条执行,没有跳转。

图示:

语句1 → 语句2 → 语句3 → ...

5.2 分支结构

根据条件选择执行不同的代码路径。详见《分支结构教学讲义》。

基本形式:if、if-else、else-if、switch

5.3 循环结构

重复执行一段代码多次。包括 for、while、do-while 循环。

分支结构和循环结构将在后续讲义中详细讲解。

6. 典型例题

例题1:交换两个变量的值

题目描述

输入两个整数 a 和 b,交换它们的值后输出。

输入:一行两个整数,用空格隔开。 输出:一行两个整数,交换后的结果。

思路解析

交换两个变量需要借助一个临时变量保存其中一个值。这是编程中最基础的操作之一。

代码实现

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    
    // 交换 a 和 b 的值
    int temp = a;   // 临时变量保存 a 的值
    a = b;          // 将 b 的值赋给 a
    b = temp;       // 将原 a 的值赋给 b
    
    cout << a << " " << b << endl;
    return 0;
}

扩展:C++ 标准库提供了 swap(a, b) 函数,可直接交换。

例题2:计算圆的面积和周长

题目描述

输入圆的半径 r(浮点数),计算圆的面积和周长。圆周率取 3.14159。

公式:面积 = π × r²,周长 = 2 × π × r。

输入:一个浮点数 r。 输出:两行,第一行为面积,第二行为周长,均保留两位小数。

思路解析

本题考察浮点数的运算和格式化输出。注意使用 double 类型提高精度,以及 setprecision 控制小数位数。

代码实现

#include <bits/stdc++.h>
using namespace std;

int main() {
    const double PI = 3.14159;   // 符号常量
    double r;
    cin >> r;
    
    double area = PI * r * r;
    double circumference = 2 * PI * r;
    
    // 保留两位小数输出
    cout << fixed << setprecision(2);
    cout << area << endl;
    cout << circumference << endl;
    
    return 0;
}

例题3:判断一个数的奇偶性

题目描述

输入一个整数 n,判断它是奇数还是偶数。

输入:一个整数 n(−109≤n≤109-10^9 \le n \le 10^9)。 输出:如果是偶数输出 "even",奇数输出 "odd"。

思路解析

使用取模运算符 %:若 n % 2 == 0 则为偶数,否则为奇数。注意负数取模在 C++ 中结果为负,但判断奇偶性仍可正常工作(如 -3 % 2 = -1,不为0)。更通用的写法是取绝对值后判断,或直接用 n % 2 == 0。

代码实现

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    if (n % 2 == 0) {
        cout << "even" << endl;
    } else {
        cout << "odd" << endl;
    }
    
    return 0;
}

7. 总结

编程要素是编写任何程序的基础。通过本讲学习,应掌握:

类别 核心知识点
数据要素 变量的声明与初始化、常量、基本数据类型(int, long long, double, char, bool)
操作要素 算术、关系、逻辑、赋值运算符,表达式的计算,运算符优先级
控制要素 顺序、分支、循环三种基本结构(分支和循环后续详细展开)
I/O cin / cout 的使用,格式化输出 fixed + setprecision

核心技巧:

  • 变量使用前必须先声明并初始化
  • 常量使用 const 定义,避免魔法数字
  • 整数除法注意截断,需要浮点结果时使用 1.0 * a / b
  • 掌握运算符优先级,不确定时加括号
  • 万能头文件 #include <bits/stdc++.h> 包含了所有常用库

8. 练习题目

参考资料