CC++ & Algorithm

浮点型、字符型与布尔型

中等3
语言版本:C++
概述:学会存储带小数点的数、单个字符以及“是/否”两种状态。

学会存储小数、单个字符和“是/否”状态

在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 显示为 1false 显示为 0(C++内部用1和0存储)。也可以用 boolalpha 控制输出显示 true/false:

cout << isPass << endl;                 // 输出1
cout << boolalpha << isPass << endl;    // 输出true

生活中的例子:判断是否可以去游乐场——如果“作业做完了”且“天气好”,则可以去。这两个条件就是布尔值。


4. 新手容易犯的常见错误

  1. 浮点数精度问题:不要直接用 == 比较两个浮点数是否相等,因为计算可能产生微小误差。

    double a = 0.1 + 0.2;
    if (a == 0.3) { /* 可能为假!*/ }
    

    应该用差值小于一个很小的数来判断,比如 if (abs(a - 0.3) < 1e-9)

  2. 字符用错引号

    • 正确:char c = 'A';
    • 错误:char c = "A"; (双引号表示字符串,不能赋给 char
  3. 布尔值误当成整数bool 的值 true 是1,false 是0,可以用来做数学运算,但容易混淆代码意图。

    bool isBig = true;
    int sum = isBig + 5;   // sum变成6,虽然合法但不推荐这样写
    
  4. 忘记 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 表示无符号数

把每种类型理解透彻,写程序时才能“手到擒来”。每种类型都有自己的“家”(内存空间),放错了数据会出大问题哦!

例题精讲

1单选题

在C++中,关于浮点型float和double的下列说法正确的是?

Afloat类型比double类型精度更高
B两个浮点数可以直接使用==进行精确比较
C浮点数运算可能存在舍入误差
D所有浮点数都能在计算机中精确表示
2判断题

在C++中,字符型变量可以存储多个字符,例如char c = "Hello"; 是正确的。

3填空题
请补全以下代码,定义布尔型变量flag并初始化为true:\nbool flag = ___;
4单选题

在C++中,关于字符常量和字符串常量的描述,正确的是?

A'A'是字符常量,"A"是字符串常量
B两者都是字符常量
C两者都是字符串常量
D'A'是字符串常量,"A"是字符常量
5判断题

在C++中,布尔型变量可以接受整数赋值,例如bool b = 0; 会将b赋值为false。