C++语言程序设计——02 变量与数据类型

一、数据类型

(一)数据类型

类型特点
int整数类型(整型)
long long长整型
short短整型
float单精度浮点型
double双精度浮点型
char单字符/小整数类型
string字符串类型
bool布尔值类型
void无类型

一般来说,可以直接使用字符串类型string不用加头文件< string >,因为有的编译器< iostream >中通常包含,不过有的旧版本编译器不一定包含,可能报错无法编译成功:

#include <string>

总结一下,上面的数据类型中,int就是整数,float和double就是小数,而string是字符串(中文、英文、符号等),同时要注意float和double的区别。

类型特点精度占用空间
float单精度浮点型6~7位小数4 字节(byte)
double双精度浮点型15-16位小数8 字节(byte)

计算机内浮点数的默认类型为double类型。

另外,整数类型中的int和long long的区分用的也比较多:

类型最大位数占用空间
int104 字节(byte)
long long198 字节(byte)

(二)精度函数

1、有效数字和保留X位小数
数学当中学过“保留X位小数”以及“保留X位有效数字”,其中,有效数字的含义如下:

从左往右第一个非零数字数起,直到该数值末尾,即是有效数字。
例如,0.01234的有效数字是4,999900999的有效数字是9。

2、精度函数的用法
如果需要在c++中对一个数字进行精度运算,需要提前导入头文件如下:

#include<iomanip>

之后,分为两种情况,同时需要用到setprecision()这个函数:

名称写法
保留X位有效数字setprecision(X)
保留X位小数(四舍五入)fixed<<setprecision(X)

例如,如下代码:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    double a;
    cin >> a;
    cout << fixed << setprecision(5) << a;  // 配合fixed使用,保留5位小数
    return 0;
}

运行结果如下,输入5.55555555,保留五位小数点,四舍五入,所以应该是5.55556:
在这里插入图片描述
3、精度函数的用法
这里举一个精度方面的错误用法例子,我们知道float和double的精度不同,如下:

类型特点精度占用空间
float单精度浮点型6~7位小数4 字节(byte)
double双精度浮点型15-16位小数8 字节(byte)

例如,还是保留10位有效数字,但是我们把变量a的数据类型从double改到 float:

float a;

如下代码:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    float a;
    cin >> a;
    cout << fixed <<setprecision(10) << a;  // 保留10位有效数字
    return 0;
}

然后,我们输入1.22222,此时结果是1.2222199440,这样的原因在于float 类型是单精度浮点数,只能存储约 7-8 位有效数字,是超过了 float 类型的实际精度,并且很多十进制小数无法被二进制精确表示,只能存储近似值。
在这里插入图片描述
所以,我们在选择合适的数据类型,要考虑相关内容是否合适。

另外要注意,例如我们保留10位有效数字,不过输入的数字只有两位,这种情况则会按照输入的直接输出。

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    double a;
    cin >> a;
    cout << setprecision(10) << a;  // 保留10位有效数字
    return 0;
}

例如,我们输入1.2,但是由于setprecision(10) 要求显示最多 10 位有效数字,但由于原始数字只有 2 位有效数字,程序会按最简洁的方式直接输出 1.2。
在这里插入图片描述

二、变量

(一)命名规则

变量可以比作一个盒子,可以装数据,数据可以改变。同时变量也有名字,即变量名。但是,变量的命名有一个严格的规则,如下:

① 变量名称不能是c++中的关键字、标准库函数,例如,if、else、true、false等。
② 变量名称可以由英文字母、数字及下划线(_)组成,但不能以数字开头。
③ 严格遵循大小写。

其实不仅仅是变量,以后学到的函数等方面也是遵循该规则。

(二)定义变量

1、定义一个变量:
根据刚刚学到的变量数据类型,我们知道,在定义变量时候要首先定义变量的类型,然后再写上变量的名字,定义变量的具体方法如下:

数据类型 变量名字;               //不要忘记英文冒号了!!

2、定义多个变量:
也可以一次定义多个变量,通过英文逗号隔开就好,要注意这样定义的变量是属于同一个数据类型的,如下格式:

数据类型 变量名字1,变量名字2,……;               //不要忘记英文冒号了!!

3、定义变量的区间:
另外,这里要注意一下,定义变量应该在哪里定义?因为在主函数int main()里面定义和其他地方定义的意思是不一样的。

【一句话总结,例如,自己家的电脑和外面网吧的电脑】
在主函数外面定义的变量就是外面网吧的电脑,其他人都可以使用,是公共的,其他人(所有函数)都可以使用。
在这里插入图片描述
在主函数里面定义的变量就是自己家的电脑,是我的电脑,只有我(主函数里面的代码)才能使用,其他人用该电脑无法打游戏。
在这里插入图片描述

(三)变量赋值

一定要注意,先定义,再赋值!不过也可以将定义和赋值一起写,简化一下,赋值是通过在变量名字后面写一个等于号,然后后面写内容。赋值操作并不会改变变量的数据类型。

#include<iostream>
using namespace std;

int main()
{
    int a;
    a = 1;
    int A = 2;
    cout << a << endl;
    cout << A;
    return 0;
}

运行结果如下:
在这里插入图片描述
可以一次性定义多个同类型的变量,也可以一次性cout输出几个变量,如下:

#include<iostream>
using namespace std;

int main()
{
    int a=1,b=2,c=3,d=4;
    cout << a << b << c << d;
    return 0;
}

运行结果如下:
在这里插入图片描述
可以实现一个简单的两个整数相加计算器功能,如下:

#include<iostream>
using namespace std;

int main()
{
    int a=1,b=2,c;
    cout << "a+b的结果是:\n"<< a + b ;
    return 0;
}

运行结果如下:
在这里插入图片描述
也可以定义变量来输出字符串,不过记得要加头文件< cstring >,如下:

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    int a = 1;
    float b = 2.566666;
    string c = "今天是2025/3/30 !";
    cout << "a和b的值是:" << a << "\n" << b << endl;
    cout << c;
    return 0;
}

运行结果如下:
在这里插入图片描述

(四)查看数据类型

如果我们需要查看我们创建变量的数据类型,就需要先导入头文件< typeinfo >,然后通过typeid().name()来查看,typeid()括号里面写变量的名称。例如,下面代码,定义了七个数据类型,通过该方法查看并cout输出:

#include<iostream>
#include<cstring>
#include <typeinfo>
using namespace std;

int main()
{
    int a = 1;
    long long b = 6666666666;
    float c = 0.2;
    double d = 0.00000000003;
    char e = 'A';
    string f = "今天是2025年3月30日!";
    bool g = true;
    
    cout << "a的类型是:" << typeid(a).name() << "\n";
    cout << "b的类型是:" << typeid(b).name() << "\n";
    cout << "c的类型是:" << typeid(c).name() << "\n";
    cout << "d的类型是:" << typeid(d).name() << "\n";
    cout << "e的类型是:" << typeid(e).name() << "\n";
    cout << "f的类型是:" << typeid(f).name() << "\n";
    cout << "g的类型是:" << typeid(g).name() << "\n";
    return 0;
}

运行结果如下:
在这里插入图片描述
所以这里,我们可以总结一下通过typeid().name()所得到的数据类型:

类型特点名称
int整数类型(整型)i
bool布尔值类型b
char字符串类型c
long long长整型x
float单精度浮点型f
double双精度浮点型d
string字符串类型Ss

(五)数据类型的字节长度

数据类型是以字节(Byte)为单位来存储的。

名称表示
bit
字节Byte
固定字长8位、16位、32位、64位等
机器字长32位、64位等

常用的基本数据类型的长度如下表:

类型特点长度(Byte)
bool布尔值类型1B
char单字符/小整数类型1B
short短整数类型2B
int整数类型(整型)4B
float单精度浮点型4B
long long长整型8B
double双精度浮点型8B

(六)sizeof 运算符

sizeof 运算符用于计算某种类型在计算机内存中所占的字节数(字节长度),例如:

#include<iostream>
using namespace std;
int main()
{
    bool a;
    short b;
    int c;
    double d;
    cin >> a >> b >> c >> d;    
    cout << "a的值为:" << sizeof(a) << endl;
    cout << "b的值为:" << sizeof(b) << endl;
    cout << "c的值为:" << sizeof(c) << endl;
    cout << "d的值为:" << sizeof(d) << endl;
    return 0;
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风(●•σ )

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值