1. 程序基本概念
🌈学习目标
- 理解程序的基本组成部分
- 学会命名常量和变量
- 了解头文件和名字空间的作用
- 掌握编写程序的基本步骤
1.1 基本概念解释
标识符:就像我们的名字,用来给变量、常量起名
int myAge = 10; // myAge就是标识符
string myName = "小明"; // myName也是标识符
关键字:C++语言预留的特殊单词,就像"爸爸"、"妈妈"这样的称呼
int if = 5; // 错误!if是关键字,不能当变量名
常量:不会改变的值,就像我们的生日
const double PI = 3.14; // PI是常量,永远都是3.14
变量:可以改变的值,就像存钱罐里的钱
int pocketMoney = 20; // 今天有20元零花钱
pocketMoney = 25; // 明天变成25元
字符串:一串文字,就像一句话
string greeting = "你好,世界!";
表达式:能计算出结果的式子
int result = 5 + 3 * 2; // 5+3×2就是一个表达式
1.2 常量与变量
命名规则儿歌:
字母数字下划线,开头不能是数字
关键字不能使用,大小写要区分清
见名知意最重要,编程习惯要养好
定义格式:
// 变量定义
数据类型 变量名 = 初始值;
int age = 10;
double height = 1.45;
// 常量定义
const 数据类型 常量名 = 值;
const int MAX_SCORE = 100;
1.3 头文件与名字空间
头文件:就像工具箱
#include <iostream> // 输入输出工具箱
#include <cmath> // 数学工具箱
名字空间:就像名字牌
using namespace std; // 使用标准名字空间
// 这样就不用每次都写std::cout,直接写cout就行
1.4 编程步骤类比
写作文 → 写代码 检查错别字 → 编译 朗读作文 → 解释执行 修改作文 → 调试
#include <iostream>
using namespace std;
int main() {
cout << "我的第一个程序!" << endl;
return 0;
}
🧩小试牛刀
选择题: 1. 下面哪个是合法的变量名? A. 2score B. my-score C. my_score D. int
-
常量的特点是: A. 会变化 B. 不会变化 C. 有时变化 D. 颜色会变
-
#include <iostream>的作用是: A. 画画 B. 输入输出 C. 玩游戏 D. 听音乐
编程填空题:
1. 定义一个整数变量age,值为10
______ age = 10;
- 定义一个常量PI,值为3.14
______ double PI = 3.14;
2. 基本数据类型
🌈学习目标
- 认识C++中的基本数据类型
- 了解每种类型的用途和大小
- 学会选择合适的数据类型
2.1 整数型(int, long long)
int:普通整数,像日常计数
int apples = 5; // 有5个苹果
int students = 30; // 30个学生
long long:超大整数,像银行账户余额
long long distance = 384400000; // 地球到月球的距离
2.2 实数型(float, double)
float:单精度小数,像体重测量
float weight = 45.5f; // 体重45.5公斤
double:双精度小数,更精确
double pi = 3.1415926; // 圆周率
2.3 字符型(char)
char:单个字符,像字母、数字、符号
char grade = 'A'; // 成绩等级
char symbol = '+'; // 加号
2.4 布尔型(bool)
bool:只有两个值,真或假
bool isSunny = true; // 今天是晴天
bool isRaining = false; // 没有下雨
📦数据类型储物盒对比
| 数据类型 | 储物盒大小 | 能装什么 | 例子 |
|---|---|---|---|
| int | 4个格子 | -21亿到21亿 | int age = 10; |
| long long | 8个格子 | 非常大 | long long big = 1234567890; |
| float | 4个格子 | 小数 | float price = 9.99f; |
| double | 8个格子 | 更精确小数 | double score = 98.5; |
| char | 1个格子 | 单个字符 | char letter = 'A'; |
| bool | 1个格子 | true/false | bool pass = true; |
🧩小试牛刀
选择题: 1. 存储学生年龄应该用: A. int B. double C. char D. bool
-
存储圆周率最好用: A. int B. float C. double D. char
-
布尔型有几个可能的值? A. 1个 B. 2个 C. 10个 D. 无数个
编程填空题:
1. 定义一个布尔变量isHappy
______ isHappy = true;
- 定义一个双精度变量temperature
______ temperature = 36.5;
3. 程序基本语句
🌈学习目标
- 掌握输入输出语句
- 理解赋值语句
- 学会使用分支和循环结构
3.1 输入输出语句
C++风格(更简单):
#include <iostream>
using namespace std;
int main() {
int age;
cout << "请输入你的年龄:"; // 输出
cin >> age; // 输入
cout << "你今年" << age << "岁" << endl;
return 0;
}
C风格(更复杂但更快):
#include <cstdio>
int main() {
int score;
printf("请输入分数:"); // 输出
scanf("%d", &score); // 输入
printf("你的分数是:%d\n", score);
return 0;
}
3.2 赋值语句
给盒子装东西的类比:
int money; // 找一个空盒子
money = 50; // 往盒子里放50元
money = money + 10; // 从盒子里取出钱,加10元,再放回去
3.3 分支结构
if语句(二选一):
int score = 85;
if (score >= 60) {
cout << "及格了!" << endl;
} else {
cout << "要加油了!" << endl;
}
switch语句(多选一):
int day = 3;
switch (day) {
case 1: cout << "星期一"; break;
case 2: cout << "星期二"; break;
case 3: cout << "星期三"; break;
default: cout << "其他天";
}
3.4 循环结构
for循环(固定次数):
// 打印1到5的数字
for (int i = 1; i <= 5; i++) {
cout << i << " ";
}
// 输出:1 2 3 4 5
while循环(条件满足):
int count = 1;
while (count <= 3) {
cout << "第" << count << "次循环" << endl;
count++;
}
do-while循环(至少一次):
int number;
do {
cout << "请输入正数:";
cin >> number;
} while (number <= 0);
🔄多层循环(俄罗斯套娃)
for (int i = 1; i <= 3; i++) { // 外层:大套娃
for (int j = 1; j <= 2; j++) { // 内层:小套娃
cout << "i=" << i << ", j=" << j << endl;
}
}
执行流程图:
开始循环 i=1
↓
开始循环 j=1 → 输出 i=1,j=1
↓
j=2 → 输出 i=1,j=2
↓
j循环结束
↓
i=2 → 重新开始j循环...
🧩小试牛刀
选择题: 1. 要重复10次操作,最好用: A. if B. for C. switch D. cout
-
至少执行一次的循环是: A. for B. while C. do-while D. if
-
cin >> age;的作用是: A. 输出年龄 B. 输入年龄 C. 计算年龄 D. 删除年龄
编程填空题:
1. 用for循环输出1到3
for (int i = 1; i <= 3; i++) { cout << i << " "; }
- 判断分数是否及格
if (score >= 60) { cout << "及格"; } else { cout << "不及格"; }
4. 基本运算
🌈学习目标
- 掌握各种运算符的使用
- 理解运算符的优先级
- 学会在程序中进行计算
4.1 算术运算
超市购物场景:
int apples = 5; // 买5个苹果
int price = 3; // 每个3元
int total = apples * price; // 总价 = 5 × 3
int change = 20 - total; // 找零 = 20 - 15
int half = apples / 2; // 分一半 = 5 ÷ 2
int remainder = 7 % 3; // 7除以3余1
4.2 关系运算
身高比较场景:
int myHeight = 150;
int friendHeight = 145;
bool isTaller = myHeight > friendHeight; // true
bool isShorter = myHeight < friendHeight; // false
bool isSame = myHeight == friendHeight; // false
bool isDifferent = myHeight != friendHeight; // true
4.3 逻辑运算
闯关条件类比:
bool hasKey = true; // 有钥匙
bool hasMap = false; // 没有地图
// 与(&&):两个条件都要满足
bool canOpenDoor = hasKey && hasMap; // false
// 或(||):至少满足一个条件
bool canExplore = hasKey || hasMap; // true
// 非(!):取反
bool isLocked = !hasKey; // false
4.4 自增自减运算
上台阶/下台阶类比:
int steps = 10;
steps++; // 上一步台阶,现在steps=11
steps--; // 下一步台阶,现在steps=10
int a = 5;
int b = a++; // b=5, 然后a变成6
int c = ++a; // a先变成7, 然后c=7
4.5 三目运算
如果...就...否则...句式:
int score = 85;
string result = (score >= 60) ? "及格" : "不及格";
// 相当于:如果score>=60就"及格",否则"不及格"
4.6 位运算
开关灯游戏类比:
int lights = 5; // 二进制:101(第1和第3盏灯亮)
lights = lights << 1; // 左移:变成1010(十进制10)
lights = lights >> 2; // 右移:变成0010(十进制2)
🧩小试牛刀
选择题:
1. 10 % 3 的结果是:
A. 1 B. 3 C. 0 D. 10
-
逻辑与运算符是: A. || B. && C. ! D. ==
-
int x = 5; x++;之后x的值是: A. 5 B. 6 C. 4 D. 0
编程填空题:
1. 判断年龄是否在10到20之间
if (age >= 10 ______ age <= 20)
- 用三目运算判断正负数
string type = (num > 0) ______ "正数" : "负数";
5. 数学库常用函数
🌈学习目标
- 学会使用常用的数学函数
- 理解函数参数和返回值
- 掌握数学计算技巧
5.1 基础数学函数
计算器操作类比:
#include <cmath> // 数学工具箱
#include <cstdlib> // 标准工具箱
int main() {
// 绝对值
int negative = -5;
int positive = abs(negative); // 5
// 四舍五入
double num1 = 3.4;
double round1 = round(num1); // 3.0
double num2 = 3.6;
double round2 = round(num2); // 4.0
// 取整
double num3 = 3.7;
double ceilNum = ceil(num3); // 4.0(向上取整)
double floorNum = floor(num3); // 3.0(向下取整)
// 平方根
double squareRoot = sqrt(16); // 4.0
// 幂运算
double power = pow(2, 3); // 8.0(2的3次方)
return 0;
}
5.2 进阶数学函数
// 三角函数(角度要转成弧度)
double angle = 30;
double radians = angle * 3.14159 / 180;
double sinValue = sin(radians); // 正弦
double cosValue = cos(radians); // 余弦
double tanValue = tan(radians); // 正切
// 对数和指数
double logValue = log(10); // 自然对数
double expValue = exp(1); // e的1次方
📋数学函数速查表
| 函数 | 作用 | 例子 | 结果 |
|---|---|---|---|
| abs(x) | 绝对值 | abs(-5) | 5 |
| round(x) | 四舍五入 | round(3.6) | 4.0 |
| ceil(x) | 向上取整 | ceil(3.2) | 4.0 |
| floor(x) | 向下取整 | floor(3.8) | 3.0 |
| sqrt(x) | 平方根 | sqrt(16) | 4.0 |
| pow(x,y) | x的y次方 | pow(2,3) | 8.0 |
⚠️注意事项
- 使用数学函数前要
#include <cmath> - 三角函数参数是弧度,不是角度
- 不能对负数开平方根
🧩小试牛刀
选择题:
1. abs(-8) 的结果是:
A. -8 B. 8 C. 0 D. 16
-
计算平方根的函数是: A. pow() B. sqrt() C. abs() D. round()
-
ceil(2.1)的结果是: A. 2.0 B. 2.1 C. 3.0 D. 2.5
编程填空题:
1. 计算9的平方根
double result = ______(9);
- 计算2的10次方
double power = ______(2, 10);
6. 结构化程序设计
🌈学习目标
- 理解三种基本程序结构
- 学会模块化设计方法
- 掌握流程图的绘制
6.1 三大基本结构
顺序结构:按部就班,一步接一步
// 就像做作业的步骤
cout << "1. 打开作业本" << endl;
cout << "2. 写名字" << endl;
cout << "3. 开始做题" << endl;
cout << "4. 检查答案" << endl;
分支结构:选择路径,像岔路口
// 就像选择吃什么
if (time == "早上") {
cout << "吃早餐" << endl;
} else if (time == "中午") {
cout << "吃午餐" << endl;
} else {
cout << "吃晚餐" << endl;
}
循环结构:重复操作,像跳绳计数
// 就像跳绳计数
for (int i = 1; i <= 10; i++) {
cout << "跳了第" << i << "下" << endl;
}
6.2 模块化程序设计
拆拼图类比:大问题拆成小问题
// 大问题:组织生日派对
void prepareFood(); // 准备食物
void decorateRoom(); // 装饰房间
void inviteFriends(); // 邀请朋友
int main() {
prepareFood();
decorateRoom();
inviteFriends();
cout << "派对开始!" << endl;
return 0;
}
6.3 流程图绘制
基本符号:
椭圆形:开始/结束
矩形:处理步骤
菱形:判断选择
箭头线:执行方向
平行四边形:输入输出
绘制规则: 1. 从上到下,从左到右 2. 箭头表示执行方向 3. 判断框有两个出口(是/否) 4. 只有一个开始,一个结束
示例流程图文字描述:
[开始]
↓
[输入成绩]
↓
<成绩>=60?>
↓是 否
[输出"及格"] [输出"不及格"]
↓
[结束]
🧩小试牛刀
选择题: 1. 程序的三种基本结构不包括: A. 顺序 B. 分支 C. 循环 D. 跳跃
-
流程图中的判断框是什么形状? A. 矩形 B. 菱形 C. 椭圆形 D. 平行四边形
-
模块化设计就像: A. 拆拼图 B. 吃蛋糕 C. 看电视 D. 跑步
编程填空题: 1. 程序的基本结构是顺序、______和循环
- 流程图开始和结束用______形
7. 数组
🌈学习目标
- 理解数组的概念和用途
- 学会使用一维和二维数组
- 掌握数组的遍历和操作
7.1 数组定义与下标
储物柜类比:
// 定义一个能放5个整数的数组(像5个连着的储物柜)
int scores[5];
// 给每个"柜子"放东西
scores[0] = 95; // 第1个柜子放95分
scores[1] = 87; // 第2个柜子放87分
scores[2] = 92; // 第3个柜子放92分
scores[3] = 78; // 第4个柜子放78分
scores[4] = 85; // 第5个柜子放85分
重要提醒:数组下标从0开始!
7.2 数组的读入与输出
遍历:逐个访问每个元素
#include <iostream>
using namespace std;
int main() {
int numbers[5];
// 输入数组
cout << "请输入5个数字:" << endl;
for (int i = 0; i < 5; i++) {
cin >> numbers[i];
}
// 输出数组
cout << "你输入的数字是:" << endl;
for (int i = 0; i < 5; i++) {
cout << numbers[i] << " ";
}
return 0;
}
7.3 一维数组综合应用
成绩统计场景:
int scores[10] = {95, 87, 92, 78, 85, 90, 88, 76, 94, 82};
int sum = 0, maxScore = scores[0], minScore = scores[0];
// 计算总分和找最高分最低分
for (int i = 0; i < 10; i++) {
sum += scores[i];
if (scores[i] > maxScore) maxScore = scores[i];
if (scores[i] < minScore) minScore = scores[i];
}
double average = sum / 10.0;
cout << "平均分:" << average << endl;
cout << "最高分:" << maxScore << endl;
cout << "最低分:" << minScore << endl;
7.4 二维数组与多维数组
表格类比:
// 3行4列的二维数组,像成绩表
int grade[3][4] = {
{85, 92, 78, 90}, // 第1个学生的4科成绩
{88, 76, 95, 82}, // 第2个学生
{79, 85, 88, 91} // 第3个学生
};
// 访问第2个学生的第3科成绩
cout << grade[1][2]; // 输出95
魔方类比(三维数组):
int rubiksCube[3][3][3]; // 3×3×3的魔方
🧩小试牛刀
选择题:
1. 数组 int arr[5] 的下标范围是:
A. 1-5 B. 0-4 C. 0-5 D. 1-4
-
arr[0]表示: A. 最后一个元素 B. 第一个元素 C. 数组大小 D. 第二个元素 -
二维数组像: A. 直线 B. 表格 C. 点 D. 圆圈
编程填空题:
1. 定义长度为10的整数数组
int numbers[______];
- 遍历数组的for循环
for (int i = 0; i < 10; ______)
8. 字符串的处理
🌈学习目标
- 理解字符数组和string类的区别
- 掌握字符串的基本操作
- 学会字符串的常用处理函数
8.1 字符数组与字符串
字母项链类比:
// 字符数组 - 像一串字母珠子
char name1[10] = "小明";
// 逐个字符赋值
char name2[10];
name2[0] = '小';
name2[1] = '明';
name2[2] = '\0'; // 字符串结束标志
8.2 字符数组操作
#include <cstring> // 字符串函数工具箱
int main() {
char str1[20] = "Hello";
char str2[20] = "World";
// 字符串长度
int len = strlen(str1); // 5
// 字符串复制
strcpy(str1, str2); // 现在str1也是"World"
// 字符串连接
strcat(str1, "!"); // 现在str1是"World!"
// 字符串比较
if (strcmp(str1, str2) == 0) {
cout << "两个字符串相等" << endl;
}
return 0;
}
8.3 string类
文字积木类比:更容易拼接和修改
#include <string> // string类工具箱
using namespace std;
int main() {
// 定义和赋值
string name = "小明";
string greeting = "你好";
// 字符串拼接
string message = greeting + "," + name + "!";
cout << message; // 输出:你好,小明!
// 字符串长度
int length = name.length(); // 2(中文字符算1个)
// 字符串比较
if (name == "小明") {
cout << "名字正确" << endl;
}
return 0;
}
8.4 string类综合应用
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "我喜欢学习C++编程";
// 查找子串
int pos = text.find("C++");
if (pos != string::npos) {
cout << "找到C++在位置:" << pos << endl;
}
// 截取子串
string part = text.substr(5, 6); // 从第5个开始截取6个字符
cout << part << endl; // 输出:C++编程
// 替换子串
text.replace(5, 3, "Python"); // 把C++替换成Python
cout << text << endl; // 输出:我喜欢学习Python编程
return 0;
}
🧩小试牛刀
选择题: 1. 字符串结束标志是: A. '\n' B. '\0' C. '0' D. 'end'
-
string类需要包含哪个头文件? A.
B. C. D. -
str1 + str2的作用是: A. 比较 B. 复制 C. 连接 D. 查找
编程填空题:
1. 使用string类定义字符串
______ name = "小红";
- 获取字符串长度
int len = text.______();
9. 函数与递归
🌈学习目标
- 理解函数的概念和作用
- 学会定义和调用函数
- 理解递归的原理
9.1 函数定义与调用
魔法盒子类比:输入→处理→输出
#include <iostream>
using namespace std;
// 定义函数:做一个加法魔法盒
int add(int a, int b) { // a和b是输入
int result = a + b; // 魔法处理
return result; // 输出结果
}
int main() {
// 使用魔法盒
int sum1 = add(3, 5); // 输出8
int sum2 = add(10, 20); // 输出30
cout << "3+5=" << sum1 << endl;
cout << "10+20=" << sum2 << endl;
return 0;
}
9.2 形参与实参
寄快递类比:
// 形参:像收货人信息
void sendMessage(string receiver, string message) {
cout << "给" << receiver << "发送:" << message << endl;
}
int main() {
// 实参:像实际填写的快递单
sendMessage("妈妈", "我放学了"); // 实际参数
sendMessage("爸爸", "晚上吃什么"); // 实际参数
return 0;
}
9.3 传值 vs 传引用
复印文件 vs 共享文件:
// 传值:复印一份(修改复印件不影响原件)
void changeValue(int x) {
x = 100; // 只修改复印件
}
// 传引用:共享原件(修改会影响原件)
void changeReference(int &x) {
x = 100; // 修改原件
}
int main() {
int num = 50;
changeValue(num);
cout << num << endl; // 输出50(原件没变)
changeReference(num);
cout << num << endl; // 输出100(原件变了)
return 0;
}
9.4 变量作用范围
班级物品 vs 学校物品:
int schoolComputer = 10; // 全局变量:全校共用
void classActivity() {
int classChalk = 5; // 局部变量:只有这个函数能用
cout << "班级有" << classChalk << "支粉笔" << endl;
cout << "学校有" << schoolComputer << "台电脑" << endl;
}
void anotherClass() {
// cout << classChalk << endl; // 错误!不能访问其他班的粉笔
cout << schoolComputer << endl; // 可以!全校电脑都能用
}
9.5 递归函数
俄罗斯套娃和镜子反射类比:
// 计算n的阶乘:n! = n × (n-1) × ... × 1
int factorial(int n) {
if (n == 1) { // 基础情况:最小的套娃
return 1;
} else { // 递归情况:打开套娃
return n * factorial(n - 1);
}
}
int main() {
int result = factorial(5); // 5! = 5×4×3×2×1 = 120
cout << "5的阶乘是:" << result << endl;
return 0;
}
递归执行过程:
factorial(5)
= 5 × factorial(4)
= 5 × 4 × factorial(3)
= 5 × 4 × 3 × factorial(2)
= 5 × 4 × 3 × 2 × factorial(1)
= 5 × 4 × 3 × 2 × 1
= 120
🧩小试牛刀
选择题: 1. 函数返回值的类型在: A. 函数名前面 B. 参数列表 C. 函数体内 D. 不需要
-
递归函数必须有: A. 多个参数 B. 基础情况 C. 循环 D. 数组
-
局部变量只能在: A. 整个程序 B. 定义它的函数 C. main函数 D. 所有函数
编程填空题:
1. 定义计算平方的函数
int square(int x) { return x ______ x; }
- 递归计算1+2+...+n
int sum(int n) { if(n==1) return 1; else return n + ______(n-1); }
10. 结构体类型
🌈学习目标
- 理解结构体的概念
- 学会定义和使用结构体
- 掌握结构体数组的应用
10.1 结构体定义与成员访问
学生档案卡类比:
#include <iostream>
#include <string>
using namespace std;
// 定义学生结构体:像设计档案卡片模板
struct Student {
string name; // 姓名
int age; // 年龄
double score; // 成绩
string className; // 班级
};
int main() {
// 创建学生档案
Student stu1;
stu1.name = "小明";
stu1.age = 10;
stu1.score = 95.5;
stu1.className = "五年级一班";
// 访问学生信息
cout << "姓名:" << stu1.name << endl;
cout << "年龄:" << stu1.age << endl;
cout << "成绩:" << stu1.score << endl;
cout << "班级:" << stu1.className << endl;
return 0;
}
10.2 结构体数组的定义与应用
班级花名册类比:
// 继续使用上面的Student结构体
int main() {
// 创建班级花名册(结构体数组)
Student class1[3] = {
{"小明", 10, 95.5, "五1班"},
{"小红", 10, 88.0, "五1班"},
{"小刚", 11, 92.5, "五1班"}
};
// 计算班级平均分
double totalScore = 0;
for (int i = 0; i < 3; i++) {
cout << class1[i].name << ":" << class1[i].score << "分" << endl;
totalScore += class1[i].score;
}
double average = totalScore / 3;
cout << "班级平均分:" << average << endl;
return 0;
}
结构体的优势
- 组织相关数据:把学生信息打包在一起
- 代码更清晰:
stu.score比scores[0]更易懂 - 易于维护:修改学生信息时只需要改一个地方
🧩小试牛刀
选择题: 1. 结构体用于: A. 组织相关数据 B. 循环 C. 计算 D. 输入输出
-
访问结构体成员用: A. . B. -> C. , D. ;
-
结构体数组像: A. 单个卡片 B. 花名册 C. 数字 D. 字符
编程填空题:
1. 定义点的结构体
struct Point { int x; int ______; };
- 访问结构体成员
stu1.______ = "小明";
11. 指针类型(简化版)
🌈学习目标
- 理解指针的基本概念
- 了解地址和值的关系
- 知道指针的简单用法
11.1 指针基本概念
门牌号类比:
#include <iostream>
using namespace std;
int main() {
int number = 42; // 变量:像一栋房子
int *pointer; // 指针:像门牌号
pointer = &number; // &取地址:获得房子的门牌号
cout << "房子的值:" << number << endl; // 输出42
cout << "门牌号:" << pointer << endl; // 输出地址
cout << "通过门牌号找到的值:" << *pointer << endl; // *解引用:输出42
return 0;
}
11.2 指针与数组的关系
储物柜总钥匙类比:
int main() {
int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers; // 数组名就是第一个元素的地址
cout << "第一个元素:" << *ptr << endl; // 10
cout << "第二个元素:" << *(ptr + 1) << endl; // 20
cout << "第三个元素:" << *(ptr + 2) << endl; // 30
return 0;
}
11.3 字符指针与string类
int main() {
// 字符指针(C风格字符串)
const char *name1 = "小明";
// string类(C++风格字符串)
string name2 = "小红";
cout << name1 << endl; // 输出:小明
cout << name2 << endl; // 输出:小红
// string类更安全更方便!
return 0;
}
⚠️指针注意事项
- 指针必须初始化后才能使用
- 不要使用空指针或野指针
- 对于初学者,尽量使用string类而不是字符指针
🧩小试牛刀
选择题: 1. 指针存储的是: A. 数值 B. 地址 C. 字符 D. 函数
-
取地址运算符是: A. * B. & C. # D. @
-
对于字符串,推荐使用: A. 字符指针 B. string类 C. 数组 D. 数字
编程填空题:
1. 定义整数指针
int *ptr = ______number;
- 通过指针访问值
cout << ______ptr << endl;
12. 文件及基本读写
🌈学习目标
- 理解文件的基本概念
- 学会文件的打开、读写和关闭
- 掌握文件重定向的简单应用
12.1 文件基本概念
记事本 vs 压缩包类比:
#include <fstream> // 文件操作工具箱
using namespace std;
// 文本文件:像记事本,内容可读
// 二进制文件:像压缩包,计算机才能读懂
12.2 文件打开、关闭、读写操作
打开笔记本-写字-合上类比:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// 打开笔记本(创建输出文件流)
ofstream outFile("diary.txt");
// 检查是否成功打开
if (!outFile) {
cout << "打开文件失败!" << endl;
return 1;
}
// 写日记
outFile << "2024年3月20日" << endl;
outFile << "今天学习了C++文件操作。" << endl;
outFile << "感觉很有趣!" << endl;
// 合上笔记本(关闭文件)
outFile.close();
cout << "日记保存成功!" << endl;
// 读取日记
ifstream inFile("diary.txt");
string line;
cout << "读取日记内容:" << endl;
while (getline(inFile, line)) {
cout << line << endl;
}
inFile.close();
return 0;
}
12.3 文件重定向的简单应用
#include <iostream>
using namespace std;
int main() {
int a, b;
// 正常情况下从键盘输入
cin >> a >> b;
cout << "和是:" << a + b << endl;
return 0;
}
重定向用法(在命令行中):
// 从input.txt读取输入,输出到output.txt
program.exe < input.txt > output.txt
📋文件打开模式
| 模式 | 说明 | 例子 |
|---|---|---|
| ios::in | 读取文件 | ifstream file("a.txt"); |
| ios::out | 写入文件 | ofstream file("a.txt"); |
| ios::app | 追加内容 | ofstream file("a.txt", ios::app); |
🧩小试牛刀
选择题:
1. 文件操作需要包含:
A.
-
写入文件用: A. ifstream B. ofstream C. cin D. cout
-
关闭文件用: A. close() B. end() C. stop() D. finish()
编程填空题:
1. 创建输出文件流
______ outFile("data.txt");
- 写入文件
outFile ______ "Hello";
13. STL模板应用(入门版)
🌈学习目标
- 了解STL的基本概念
- 学会使用sort函数排序
- 认识常用容器
13.1 algorithm库:sort函数
整理玩具类比:
#include <iostream>
#include <algorithm> // 算法工具箱
using namespace std;
int main() {
int numbers[5] = {5, 2, 8, 1, 9};
cout << "排序前:";
for (int i = 0; i < 5; i++) {
cout << numbers[i] << " ";
}
cout << endl;
// 排序:像把玩具从小到大排列
sort(numbers, numbers + 5);
cout << "排序后:";
for (int i = 0; i < 5; i++) {
cout << numbers[i] << " ";
}
cout << endl;
return 0;
}
13.2 常用容器简介
向量(vector):可伸缩的书包
#include <vector>
int main() {
// 创建一个整数向量(像可伸缩的书包)
vector<int> scores;
// 往书包里放东西
scores.push_back(95); // 在末尾添加
scores.push_back(87);
scores.push_back(92);
// 查看书包里有多少东西
cout << "有" << scores.size() << "个成绩" << endl;
// 访问书包里的东西
for (int i = 0; i < scores.size(); i++) {
cout << scores[i] << " ";
}
return 0;
}
栈(stack):羽毛球筒(后进先出)
#include <stack>
int main() {
stack<string> books;
// 往筒里放羽毛球(压栈)
books.push("数学书");
books.push("语文书");
books.push("英语书");
// 从筒里取羽毛球(弹栈)
while (!books.empty()) {
cout << "取出:" << books.top() << endl;
books.pop(); // 移除最上面的
}
return 0;
}
队列(queue):排队买东西(先进先出)
#include <queue>
int main() {
queue<string> line;
// 排队
line.push("小明");
line.push("小红");
line.push("小刚");
// 按排队顺序服务
while (!line.empty()) {
cout << "正在服务:" << line.front() << endl;
line.pop(); // 服务完离开队列
}
return 0;
}
🎯STL容器对比
| 容器 | 特点 | 像什么 | 用途 |
|---|---|---|---|
| vector | 动态数组 | 可伸缩书包 | 需要随机访问 |
| stack | 后进先出 | 羽毛球筒 | 撤销操作、递归 |
| queue | 先进先出 | 排队 | 消息处理、任务调度 |
🧩小试牛刀
选择题:
1. sort函数在哪个头文件?
A.
-
后进先出的容器是: A. vector B. queue C. stack D. array
-
push_back()用于: A. vector B. stack C. queue D. 所有容器
编程填空题:
1. 对数组排序
sort(arr, arr + ______);
- 向向量添加元素
scores.______(100);
🎉恭喜完成C++入门学习!
📚学习总结
通过这13个模块的学习,你已经掌握了: - ✅ C++程序的基本结构 - ✅ 各种数据类型和运算 - ✅ 程序流程控制 - ✅ 数组和字符串处理 - ✅ 函数和结构体 - ✅ 文件和STL基础
🚀继续前进的建议
- 多练习:编程就像学游泳,要多写代码
- 从小项目开始:制作计算器、猜数字游戏等
- 不要怕错误:调试是学习的重要部分
- 保持好奇心:尝试修改代码看看会发生什么
🌟编程小贴士
编程就像搭积木,一步一步来
错误是好朋友,帮我们学得更好
多动手实践,技能自然提高
快乐编程,创造无限可能!
祝你编程之旅愉快! 🎊