第3章:处理不同类型的数据

今天,我们来探索计算机的“储物间”,看看它是如何聪明地存放和处理各种各样的数据的!

🔢

整数家族

认识不带小数的数字,看看它们的大小和限制。

Aa

字符与小数

揭开字母和带小数点数字的存储秘密。

🧮

计算工具

学习C++的加减乘除,发现整数除法的奇特之处。

环节一:变量基础和整数类型

“魔法盒子”不仅能装东西,还有不同的大小和规则!

📦 整数家族 (int, short, long)

电脑用不同大小的“盒子”来装整数。int 是最常用的标准尺寸。我们可以用 sizeof 来测量它们占用的“空间”。

点击按钮测量空间

🔒 上锁的常量 (const)

有些值我们不希望被改变,比如一周有7天。用 const 关键字给“盒子”上把锁,它的值就永远不能被修改了。

const int DAYS_IN_WEEK = 7;

🔄 容量限制与溢出

每个盒子都有容量上限。如果一个只能存正数的盒子 (unsigned) 里的数字加到最大再加1,会发生什么?就像汽车的里程表一样,它会“翻转”回起点!

模拟一个 unsigned char (0-255)

0

环节二:字符和浮点数

除了数字,计算机还能处理文字和带小数点的数。

🤔 字符的秘密 (char)

char 类型的“盒子”表面上装的是一个字符,比如 'A',但它的“内心”其实是一个数字(ASCII码)!cout 很聪明,看到 char 就知道要显示字符而不是数字。点击下方的卡片揭晓秘密!

'A'
65

点击卡片翻转

💧 小数世界 (double)

double 类型的“盒子”专门用来装带小数点的数。它比 float 更精确,就像一个更精密的量杯。在科学计算中,精度非常重要!

精度对比:10.0 / 3.0

float: 3.3333332538604736...

double: 3.3333333333333335...

可以看到,double 在小数点后能保持更长时间的准确性。

环节三:算术运算与类型转换

掌握C++的计算工具,特别是整数除法的“小脾气”。

🧮 整数除法大揭秘

当两个整数相除时,C++会毫不留情地“砍掉”小数部分!而取模(%)运算,就是专门捡起被丢掉的“余数”的工具。

÷

✨ 数据形状的改变

当不同类型数据一起运算时,小类型会自动“升级”为大类型。我们也可以用 `(类型)` 来强制“变身”,但这可能会丢失精度!

// 自动升级:int变成了double再计算
int a = 1;
double b = 2.5;
// 结果是 3.5 (double类型)
cout << a + b;

// 强制变身:double的小数部分被砍掉
double price = 3.99;
// 结果是 3 (int类型)
int dollars = (int)price;

环节四:总结与编程挑战

你已经学会了处理数据的核心技巧!现在来试试这些挑战任务吧。

练习 1:身高单位换算

任务:

编写一个程序,要求用户输入一个整数(身高,单位为英寸)。程序将身高转换为英尺和英寸(1 英尺 = 12 英寸)。使用 const 定义转换因子。

💡 提示:想想哪个运算可以得到“英尺”,哪个运算可以得到剩下的“英寸”?

点击查看参考答案
#include <iostream> using namespace std; int main() { const int IN_PER_FT = 12; int inches; cout << "请输入您的身高(英寸): "; cin >> inches; int feet = inches / IN_PER_FT; int remaining_inches = inches % IN_PER_FT; cout << "您的身高是: " << feet << " 英尺 " << remaining_inches << " 英寸。" << endl; return 0; }
练习 2:角度单位转换

任务:

编写一个程序,要求用户输入一个角度的度、分、秒。程序将该角度转换为纯粹的度(包含小数部分)。 (1 度 = 60 分, 1 分 = 60 秒)

💡 提示:最终结果是小数,应该用什么类型的变量来存储呢?

点击查看参考答案
#include <iostream> using namespace std; int main() { const int MIN_PER_DEG = 60; const int SEC_PER_MIN = 60; double degrees, minutes, seconds, total_degrees; cout << "请输入度数: "; cin >> degrees; cout << "请输入分数: "; cin >> minutes; cout << "请输入秒数: "; cin >> seconds; total_degrees = degrees + (minutes / MIN_PER_DEG) + (seconds / (MIN_PER_DEG * SEC_PER_MIN)); cout << degrees << " 度, " << minutes << " 分, " << seconds << " 秒, 合计是: "; cout << total_degrees << " 度。" << endl; return 0; }
练习 3:时间单位拆分

任务:

编写一个程序,要求用户输入总秒数(使用 long 变量)。程序将这些秒数转换为天、小时、分钟和剩余秒数。

💡 提示:这是一个连锁反应!先从总秒数里算出“天”和“剩下的秒”,再用“剩下的秒”去算“小时”和“更剩下的秒”...以此类推。

点击查看参考答案
#include <iostream> using namespace std; int main() { const int HOUR_PER_DAY = 24; const int MIN_PER_HOUR = 60; const int SEC_PER_MIN = 60; long total_seconds; cout << "请输入总秒数: "; cin >> total_seconds; long seconds_left = total_seconds; long days = seconds_left / (HOUR_PER_DAY * MIN_PER_HOUR * SEC_PER_MIN); seconds_left %= (HOUR_PER_DAY * MIN_PER_HOUR * SEC_PER_MIN); long hours = seconds_left / (MIN_PER_HOUR * SEC_PER_MIN); seconds_left %= (MIN_PER_HOUR * SEC_PER_MIN); long minutes = seconds_left / SEC_PER_MIN; long seconds = seconds_left % SEC_PER_MIN; cout << total_seconds << " 秒相当于: "; cout << days << " 天, " << hours << " 小时, " << minutes << " 分, " << seconds << " 秒。" << endl; return 0; }