浮点型、字符型与布尔型
中等3学会存储小数、单个字符和“是/否”状态
在C++里,除了整数(int),我们还需要存储带小数点的数、单个字符,以及只有“是”或“否”两种结果的值。这就要用到三种新的数据类型:浮点型(float / double)、字符型(char)和布尔型(bool)。用好它们,程序才能处理更丰富的信息——比如计算考试平均分、记录字母等级、判断是否下雨。
1. 浮点型 —— 存储带小数点的数
浮点型用来表示小数,例如身高1.75米、香蕉单价3.5元、圆周率3.14159。常用的浮点型有两种:
float(单精度):占用4个字节,能精确到大约7位有效数字。double(双精度):占用8个字节,能精确到大约15位有效数字。大多数时候用double更稳妥,不容易丢失精度。
double height = 1.75; // 身高1.75米
float price = 3.5f; // 香蕉单价3.5元,f表示float类型
double pi = 3.14159265358979; // 圆周率,用double可以保留更多小数
生活中的例子:妈妈给你100元零花钱,你买了一个文具盒花了19.99元,剩下多少钱?计算时就需要用小数:
#include <iostream>
using namespace std;
int main() {
double money = 100.0; // 零花钱100元
double cost = 19.99; // 文具盒价格19.99元
double rest = money - cost; // 剩余钱数
cout << "剩余: " << rest << "元" << endl;
return 0;
}
注意:给 float 变量赋值时,数字后面加 f 可以避免编译器警告;double 不需要加。另外,浮点数在计算机里并不精确,比如 0.1 + 0.2 可能得到 0.30000000000000004,这在比较相等时要小心。
2. 字符型 —— 存储单个字符
char 用来存一个字符,比如字母 'A'、数字 '5'、符号 '@',甚至是看不见的换行 '\n'。字符必须用单引号括起来,不能写双引号。
char grade = 'A'; // 等级A
char digit = '5'; // 字符5(不是数字5)
char at = '@'; // @符号
char newline = '\n'; // 转义字符,表示换行
每个字符对应一个ASCII码,例如 'A' 的ASCII码是65,'a' 是97,'0' 是48。你可以把字符当成整数来运算:
char ch = 'A';
cout << (int)ch << endl; // 输出65,把字符转成整数
cout << ch + 1 << endl; // 输出66,相当于'A'+1 = 66,对应'B'
生活中的例子:考试后老师给出等级 'A'、'B'、'C'……一个字符就能表示。
常见错误:
- 用双引号
"A"会变成字符串(多个字符),类型不匹配。 - 忘记单引号直接写
A会被当作变量名。
3. 布尔型 —— 存储“是”或“否”
bool 只有两个值:true(真)和 false(假)。它用来存储判断结果,比如“是否及格”、“是否下雨”、“是否开机”。
bool isPass = true; // 考试及格了吗?对,及格了
bool isRainy = false; // 今天下雨了吗?没下
bool isLunch = true; // 现在是中午吗?是
输出布尔值时,true 显示为 1,false 显示为 0(C++内部用1和0存储)。也可以用 boolalpha 控制输出显示 true/false:
cout << isPass << endl; // 输出1
cout << boolalpha << isPass << endl; // 输出true
生活中的例子:判断是否可以去游乐场——如果“作业做完了”且“天气好”,则可以去。这两个条件就是布尔值。
4. 新手容易犯的常见错误
-
浮点数精度问题:不要直接用
==比较两个浮点数是否相等,因为计算可能产生微小误差。double a = 0.1 + 0.2; if (a == 0.3) { /* 可能为假!*/ }应该用差值小于一个很小的数来判断,比如
if (abs(a - 0.3) < 1e-9)。 -
字符用错引号:
- 正确:
char c = 'A'; - 错误:
char c = "A";(双引号表示字符串,不能赋给char)
- 正确:
-
布尔值误当成整数:
bool的值true是1,false是0,可以用来做数学运算,但容易混淆代码意图。bool isBig = true; int sum = isBig + 5; // sum变成6,虽然合法但不推荐这样写 -
忘记
f后缀导致警告:用float x = 3.14;时,3.14默认是double,编译可能警告“浮点常量被截断”,加f变成3.14f消除警告。
5. 完整示例:用三种类型记录一次购物
下面程序让用户输入商品名称(字符)、价格(小数)和是否打折(布尔),然后输出信息。
#include <iostream>
using namespace std;
int main() {
// 定义变量
char product; // 商品名称(只用首字母)
double price; // 商品价格
bool onSale; // 是否打折
// 输入数据
cout << "请输入商品首字母(如B代表篮球):";
cin >> product; // 输入一个字符(跳过空格)
cout << "请输入价格(元):";
cin >> price;
cout << "正在打折吗?(1表示是,0表示否):";
cin >> onSale; // 输入1或0
// 输出信息
cout << "\n商品:" << product << endl;
cout << "原价:" << price << "元" << endl;
cout << "打折状态:" << onSale << endl; // 输出0或1
if (onSale) {
cout << "恭喜!可以享受折扣!" << endl;
} else {
cout << "暂无折扣。" << endl;
}
return 0;
}
运行效果:
请输入商品首字母(如B代表篮球):S
请输入价格(元):29.9
正在打折吗?(1表示是,0表示否):1
商品:S
原价:29.9元
打折状态:1
恭喜!可以享受折扣!
6. 下一步学什么?
你现在已经掌握了四种基本数据类型:整数、浮点数、字符、布尔。接下来可以学习:
- 输入输出控制:如何保留两位小数输出(
cout << fixed << setprecision(2);) - 变量与常量的区别:用
const定义不会改变的值,比如const double PI = 3.14159; - 更多类型:
long long存更大整数,unsigned表示无符号数
把每种类型理解透彻,写程序时才能“手到擒来”。每种类型都有自己的“家”(内存空间),放错了数据会出大问题哦!
例题精讲
在C++中,关于浮点型float和double的下列说法正确的是?
在C++中,字符型变量可以存储多个字符,例如char c = "Hello"; 是正确的。
请补全以下代码,定义布尔型变量flag并初始化为true:\nbool flag = ___;在C++中,关于字符常量和字符串常量的描述,正确的是?
在C++中,布尔型变量可以接受整数赋值,例如bool b = 0; 会将b赋值为false。