变量名
C++必须遵循的集中简明命名规则
- 在名称中只能使用字母符号、数字和下划线(_)
- 名称的第一个字符不能是数字
- 区分大写字符和小写字符
- 不能将C++关键字作为名称
- 以两个下划线打头或以下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
- C++对于名称的长度没有限制,名称中所有字符都有意义,但有些平台有长度限制。
倒数第二点不懂,以后再说。。。
变量的数据类型
C++在创建一个变量时需要指定变量的数据类型。指定数据类型能够让编译器对变量进行储存单元的长度以及储存形式进行安排
基本的变量类型有:
- 整型
- 浮点型
- char型
- 布尔型
整型
顾名思义,整型可以储存整数。整型细分为short、int、long以及long long,它们都能够存储整数类型,其唯一区别就是在内存中的长度不同。
以int类型为例:
int variable;
这样就创建了一个整型变量,在内存中会有一块长度为四个字节的内存帮助存储这个命名为variable的变量。一个字节一般为8位,因此int类型总共有32位,第一位作为符号位表示正负,剩下31位用二进制表示数值,因此int类型的数值范围为- 2 31 2^{31} 231到+ 2 31 − 1 2^{31}-1 231−1。剩下的几种整数类型都可以相应计算出对应的数值范围。
类型 | 占用字节 | 范围 |
---|---|---|
short | 2 | -32768~32767 |
int | 4 | − 2 31 -2^{31} −231~ 2 31 − 1 2^{31}-1 231−1 |
long | 4 | − 2 31 -2^{31} −231~ 2 31 − 1 2^{31}-1 231−1 |
long long | 8 | − 2 63 -2^{63} −263~ 2 63 − 1 2^{63}-1 263−1 |
整型还支持将第一位不作为符号位,也用来作为数据位,这样变量就编程无符号类型,只需要在整型名称前加上unsigned,例如:
unsigned int variable;
这样可以增大数据的范围,但是由于缺少符号位,因此就不能用来表示负数。
整型字面值
整型字面值是显示地书写的常量,C++支持三种不同的基数方式来书写整数,其使用前一位(或两位)来标识数字常量的基数。如果第一位是19,则基数是10(十进制),例如42就是以10为基数的,它表示十进制下的42;如果第一位是0,第二位为17,则基数是8(八进制),例如042,它相当于十进制下的34;如果前两位为0x或0X,则基数是16(十六进制),例如0x42,它相当于十进制下的66。
char类型:字符和小整数
计算机存储数值是非常容易的,但是如果要存储字符则是另外一回事。编程语言通过对字符的数值编码解决这个问题,在美国常用的符号集是ASCII符号集,字符集中的字符用数值编码表示。char类型占用的字节数为1。
int main()
{
char ch = A, ch1 = 65;;
cout << ch << ' ' << ch1;
return 0;
}
执行上述代码,输出结果都为A,因为cout会自动识别出char类型的值,并将数值编码转化为相应的符号。同理cin也具有这样的转化功能。
int main()
{
char ch, ch1;
cin >> ch >> ch1;
cout << ch << '\n' << ch1;
return 0;
}
在键盘中输入A和65,输出的结果同样为A。但要注意的是,cin和cout提供了这中数值到符号的转换,但是在ch和ch1变量中存储的值都是65,而不是A。
由于char类型在内存中实际上存储的是数值,因此当然可以用字符来显示整数,只需要将char类型的变量赋值给整型或者在输出时进行强制类型转换即可。
int main()
{
char ch = 'A';
int i = ch;
cout << ch << '\n' << i << '\n' << (int)ch;
return 0;
}
输出结果如下:
A
65
65
浮点型
浮点型能够表示带小数部分的数字。C++有两种更表示浮点型的方式。
- 标准小数点表示法:
12.34
939001.32
0.00023
8.0 - E表示法:
2.52E+8 //表示2.52乘以10的8次方
8.33E-8 //表示8.33除以10的8次方
E表示法中的E可以用大写也可以用小写,E表示法非常适合于非常大的数或者非常小的数。
C++有三种浮点类型:float、double以及long double,与整型相同,它们之间仅仅时表示的有效数位的不同而已。C++要求float至少32位、double至少48位、long double至少和double一样多。
布尔型
布尔型可以用来表示逻辑真和逻辑假,因此在内存中仅需一个字节即可存储,布尔类型可以通过true和false来进行赋值,也可以通过整数来进行赋值,C++将非零值解释位true,零解释为false。
例如:
int main()
{
bool a = true;
bool b = false;
bool c = 12;
bool d = -12;
bool e = 0;
cout << a << '\n'
<< b << '\n'
<< c << '\n'
<< d << '\n'
<< e << '\n';
return 0;
}
其输出结果为:
1
0
1
1
0
const限定符
有时候在程序中需要有一个常量,这个常量一旦被定义便不能被更改,因此就需要const限定符。例如一年中的月份months=12。如果使用以下定义:
int months = 12;
在后面的程序中可能会被不小心重新赋值,因此需要const来进行限定,让其变成一个不能被更改的常量:
const int months = 12;
C++中的auto声明
自C++11开始,新增了一个工具可以使得编译器自动推断变量类型,采用auto关键字可以进行实现:
auto a = 0.0 //a是一个double类型
double b = 0 //b被强制转换为double类型,此时b=0.0
auto c = 0 //c是一个int类型
编程练习
- 编写一个程序,要求用户以度、分、秒的方式输入一个纬度,然后以度为单位显示该纬度。1度为60分,1分为60秒,请以符号常量的方式表示这些值,对于每个输入值,应使用一个独立的变量存储它。下面是该程序运行时的情况:
Enter a latitude in degrees, minutes, and second:
First, enter the degrees: 37
Next, enter the minutes of arc: 51
Finally, enter the seconds of arc: 19
37 degrees, 51 minutes, 19seconds = 37.8553 degress
#include <iostream>
using namespace std;
int main() {
int degrees = 37, minutes = 51, seconds = 19;
cout << "Enter a latitude in degrees, minutes, and second: " << endl;
cout << "First, enter the degrees:";
cin >> degrees;
cout << "Next, enter the minutes of arc:";
cin >> minutes;
cout << "Finally, enter the seconds of arc:";
cin >> seconds;
const double ans = degrees + minutes/60.0 + seconds/3600.0; //用符号常量来存储结果
cout<< (int)degrees << " degrees, " << (int)minutes << " minutes, "
<< (int)seconds << " seconds = " << ans << " degrees";
return 0;
}
- 编写一个程序,要求用户输入全球当前的人口和美国当前的人口(或其他国家人口)。将这些信息存储在long long变量中,并让程序显示美国(或其他国家)的人口占全球人口的百分比。该程序的输出应与下面类似:
Enter the world’s population: 6898758899
Enter the population of the US: 310783781
The population of the US is 4.50492% of the world population.
#include <iostream>
using namespace std;
int main() {
long long populationOfUs, populationOfWorld;
cout << "Enter the world's population:";
cin >> populationOfWorld;
cout << "Enter the population of the US:";
cin >> populationOfUs;
double ans = 100.0 * ((double)populationOfUs / populationOfWorld); //强制类型转换为浮点数,不然两个整数相乘会得到一个整型结果
cout << "The population of the US is " << ans << "% of the world population.";
return 0;
}