Meet success like a gentleman and disaster like a man.
接着上篇文章继续介绍 C++ 基础,本文主要介绍 标准数据类型、数据类型转换、数据输入与输出
标准数据类型即 C++
中的基本数据类型,系统定义的简单数据类型,也称为算术类型,存储空间 bit
)依机器而定, C++
只规定了最小存储空间,一共分为 4
种数据类型
整型
整型数据从字面即可理解,为整数数据。整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号( -
或者 +
)。如果用八进制符号,数字前必须加上 0
(零),用十六进制符号数字前必须加上 0x
。在 C++
语言中,整型类型标识符为 int
,根据整型变量的取值范围又可将整型变量定义为以下 8
种整型类型
短整型
short [int],占2字节(16位),-2^15 ~ 2^15-1
无符号短整型
unsigned short [int],占2字节(16位),0 ~ 2^16-1
整型
[long] int,占4字节(32位),-2^31 ~ 2^31-1
无符号整型
unsigned [int],占2字节(16位),0 ~ 2^16-1
长整型
long [int],占4字节(32位),-2^31 ~ 2^31-1
无符号长整型
unsigned long [int],占4字节(32位),0 ~ 2^32-1
超长整型
long long [int],占8字节(64位),-2^63 ~ 2^63-1
无符号超长整型
unsigned long long,占8字节(64位),0 ~ 2^64-1
注:
通常将8位的块作为一个字节,32位或4个字节作为一个字(word)
实型
实型又称实数或浮点数,可分为 3
种类型:单精度浮点数、双精度浮点数 和 长双精度浮点数。一般的表示方法有 小数形式 和 指数形式
单精度实型
float,占4字节(32位),有效位6~7位,-3.4E-38 ~ 3.4E+38
双精度实型
double,占8字节(64位),有效位15~16位,-1.7E+308 ~ 1.7E+308
长双精度实型
long double,占16字节(128位),有效位18~19位,-3.4E+4932 ~ 1.1E+4932
字符型
字符型即单个字符,用单引号括起来表示,如 'a'(数字也可以,如 '1'),字符型使用标识符 char
来表示
注:
字符只能是一个而且区分大小('A' 与 'a' 是不同的),只能用单引号括起来,不能用双引号(用双引号括起来的是字符串,字符串可以单个,也可多个)
字符在运算的时候采用 ASCII 编码(字符其实可以看成是单字节整型,取值范围 0~255)
转义字符
转义字符是一种特殊的字符常量,以反斜线 \
开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称转义字符,转义字符有三种用法:表示控制字符、表示特殊字符、表示所有字符
常用的转义字符
'\n' 换行 '\t' 水平制表 '\b' 退格 '\r' 回车(不换行) '\0' 空字符 '\'' 单引号 '\'' 双引号 '\\' 一个反斜杠字符 '\ddd' 1~3位八进制数所代表的字符 '\xhh' 1~2位十六进制数所代表的字符
布尔型
布尔型也称为逻辑型,用标识符 bool
来表示,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,可以当作整数用(true一般为1,false为0),把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false
注:
C++中的布尔变量存储的就是 0 和 非0,0 为 false,非0 为 true,在输出的时候,只会输出 0 和 1,如果要输出 true 或 false 只能自己判断布尔变量的真假,真则输出 true,假则输出 false,需要写判断语句,最简单的方法就是利用自带的 boolalpha 来输出 true 或 false
cout < boolalpha="">< 布尔变量=""><>
C++
中不同的数据类型的对象进行运算时候,或者需要将结果转换成期望的数据类型时,这时就要根据数据类型的转换规则进行转换
混合运算时的类型转换规则
整型、实型、字符型 数据间可以进行混合运算,这种情况下,需要将 不一致
的数据类型转换成 一致
的数据类型,然后进行运算。为了保证运算精度,系统在运算时的转换规则是将 存储长度较短
的运算对象转换成 存储长度较长
的类型,然后再进行处理,这种转换是系统 自动
进行的,默认如下
// 以下表示当运算对象为不同类型数据时,需转换为同一数据类型然后进行运算 int -> unsigned int -> long int -> double // 以下两种在运算时,必定会先转换为 int / double 然后与其他数据进行运算 char、short int -> intfloat -> double
赋值时的类型转换规则
当进行赋值运算时,如果两侧的数据类型不同,需进行类型转换,这种转换是系统 自动
进行的,规则如下
float、double 型赋值给 int 型
直接截断小数(不四舍五入,直接舍去)
int、char 型赋值给 float、double 型
补足有效位(后面添 0)
char 型(单字节)赋值给 int 型(4字节)
数值赋给 int 型的低 8 位(存入的是字符的 ASCII 码),其他位补 0
long int 型赋值给 int 型
long int 型截断低字节给 int 型
int 型赋值给 long int 型
赋给 long int 型的低 16 位,如果 int 型的最高位是 0,则 long int 的高 16 位全为 0;如果 int 型的最高位为 1,则 long int 型的高 16 位全为 1(称为 符号扩展)
unsigned int 型赋值给 int 型
直接传送数值
非 unsigned int 型赋值给位数相同的 unsigned int 型
直接传送数值
强制类型转换
强制类型转换只是 临时
转换,强制转换运算符组成的运算表达式的一般形式为:
类型名(表达式) a + int( b/3 );
注:
不管被转换的是表达式或者单个变量都需要用括号括起来
C++
中没有提供专门的输入输出语句,所有的输入输出都是调用标准库函数中的输入输出函数来实现的,在使用时,在开头添加如下语句
#include #include using namespace std;
字符输入 -- getchar
getchar
函数是一个无参函数,接收从键盘输入的 单个
字符数据,通常把输入的字符赋予一个字符变量,构成赋值语句
char a; a = getchar();
注:
getchar
函数只能接受单个字符,输入的数字也按字符处理,如果输入多余一个字符时,只接受第一个字符
getchar
函数会等待用户输入,直到按回车键才结束,这个特性可用于暂停程序的运行,直接按回车结束
如果在程序中有连续两个以上的 getchar
函数,应该一次性输入所需要的字符,最后按回车键,否则会把回车作为一个字符传给后面的 getchar
函数
字符输出 -- putchar
putchar
函数是字符输出函数,向标准输出设备输出 单个
字符数据
putchar(a);
标准输入 -- scanf
scanf
函数用于格式化输入任意数据列表
scanf(格式空字符, 地址列表); // 地址列表中给出个变量的地址,可以为变量的地址,也可以为字符串的首地址 // 格式控制符由 % 和格式符组成,作用是将要输入的字符按指定的格式输入,如 %d, %c 等 // d、i:用于输入十进制整数 // u:用于无符号十进制形式输入十进制整数
// o:用于输入八进制整数 // x:用于输入十六进制整数 // c:用于输入单个字符 // s:用于输入字符串(非空格开始,空格结束,字符串变量以 '\0' 结尾) // f:用于输入实数(小数或指数均可)
// e:与 f 相同 // l:用于长整型数(%ld、%lo、%lx)或 double 型实数(%lf、%le) // h:用于短整型数(%hd、%ho、%hx) // *:表示对应输入量不赋给一个变量 scanf('%d*d%d', &a, &b); // 输入 1 2 3,输出 a=1,b=3 // 域宽:指定输入所占列宽(一个整数) scanf('%4d%4d', &a, &b); // 输入 1234567,输出 a=1234, b=567
如果 scanf
中有非格式符加入作为分隔符,则在输入的时候也应添加指定分隔符
// 注意 %d 之间的 逗号(作为了指定的分隔符) scanf('%d, %d', &a, &b); // 输入 5,6,输出 a=5,b=6
注:
上面说过了地址列表中可以是变量的地址,也可以是字符串的首地址,&
就是取址符,如果输入的是字符数组变量的话,此处变量名就代表了首地址,不需要取址符
char a[20]; scanf('%s', a);
标准输出 -- printf
printf
函数用于格式化输出任意数据列表
print(格式控制符, 输出列表); // 格式控制符由输入格式说明和普通字符组成,必须用双引号包裹起来 // 格式说明由 % 和格式字符组成,比如 %d,%c 等,普通字符即在输出时原样输出的字符,一般在显示时起提示作用 // 输出列表则是需要输出的数据,各参数间用逗号分开,格式说明和输出项需一一对应 // d、i:以带符号的十进制形式输出整数,正数的(+)号省略不输出 // u:以无符号十进制形式输出整数 // x、X:以十六进制无符号形式输出整数(不输出前导符 0x) // o:以八进制无符号形式输出整数(不输出前导符 0) // c:输出一个字符 // s:输出字符串 // f:以小数形式输出单、双精度,隐含输出 6 位小数 // e、E:以指数形式输出单、双精度,隐含输出 6 位小数 // g、G:自动选用 %f、%e、%E 格式中输出宽度最小的一种使用 // %d:输出数字长度为变量数值的实际长度 // %md:输出 m 位(不足补空位,大于 m 位时按实际长度输出) // %-md:输出 m 位,左对齐输出 // %ld:表示输出长整型数据 // %mld:指定长整型输出宽度 m 位,左边补空格,否则按实际位数输出 // %0md,%0mld:数字 0 表示位数不足 m 时补 0 // %f:按实际格式输出,整数部分按实际位数输出,小数部分输出 6 位 // %m.nf:总位数 m(含小数点),其中 n 位小数 // %-m.nf:总位数 m(含小数点),其中 n 位小数,左对齐 // %s:按实际宽度输出一个字符串 // %ms:输出 m 位(不足补空位,大于 m 位时按实际长度输出) // %-ms:左对齐,不足右补空格 // %m.ns:总位数 m,其中字符数最多 n 个,左补空格 // %-m.ns:同上,右补空格
流输入 -- cin
cin
和 流读取运算符 >>
一起使用,接收输入的数据,多个 >>
连续使用可以对多个变量输入数据,从外部输入的数据的个数、类型必须和变量一致,从键盘读取数据时,各数据之间要有分隔符,分隔符可以是一个或多个空格、回车等
cin >> a >> b; // 键盘输入 2 3
流输出 -- cout
cout
和 流插入运算符 一起使用,向标准输出设备输出数据,多个
连续使用可以输出多个数据
cout < a=""><>
注:
输出字符串常量时,需用双引号将字符串常量包裹起来,以区别变量名
cout < 'aa';="" ="" cout=""><>
cout
不会在输出内容的末尾加 换行符,所以在需要换行的地方,必须插入换行符 \n
或者 endl
cout < 'aa\n';="" ="" cout="">< aa=""><>
数据输入输出方式比较
Dev C++
在使用 cin
、cout
时必须调用 iostream
库,使用其他输入输出时,必须调用 cstdio
库,在时效上和格式化方面,scanf
、printf
都优于 cin
和 cout
,但是就简便而言,后者更优
结合上一篇文章一共学习了 常量
、变量
、运算符
、数据类型
、类型转换
、输入输出
,运用这些知识可以尝试做一些习题。下面推荐一个在线OJ,其中 1.1、1.2、1.3 共 40 题可以练习
http://noi.openjudge.cn/
注:
运算中常用的库函数(习题中可能出现)
绝对值函数
abs(x):求一个数 x 的绝对值
自然数指数函数
exp(x):求实数 x 的自然指数 e^x
向下取整
floor(x):求不大于实数 x 的最大整数
向上取整
ceil(x):求不小于实数 x 的最小整数
自然对数函数
log(x):求实数 x 的自然数对数
指数函数
pow(x, y):计算 x^y,结果为双精度实数
随机函数
rand():产生 0 到 RAND-MAX 之间的随机整数
平方根函数
sqrt(x):求实数 x 的平方根
联系客服