初识 C++
C++源程序框架

#include<iostream>
#include<cstdio> // 必须的两行,使用I/O头文件
using namespace std; // 使用std命名空间
int main() { // 主程序 花括号括起来的是为函数体
cout << "Hello, C++" << endl; // C++方式输出
printf("%s\n", "Hello, C++"); // C方式输出
return 0; // 返回值
}执行流程
将上述代码保存为xxx.cpp文件后:
编译(F9)-->运行(F10)
或者是编译运行(F11)

代码分析
- 头文件
- 命名空间
- 主函数
- 函数体
- 函数返回值
- 语句
常量和变量
常量
程序运行过程中,其值保持不变(即不能被改变)的量。主要分成四类:
整型常量
- 二进制:0001、1010
- 八进制:数字 0开头,如
012或写成12(8),每位取值范围[0, 7]。 - 十进制
- 十六进制:以0x或0X开头,如
0x1a或写成1a(16),每位取值范围[0, f]。
实型常量
- 小数:如
31.4、1.23 - 科学计数法:如
1e2、3.14e-1
- 小数:如
字符常量
单引号表示单个字符,如
'k'、'5'、' '、'%'等。注意:双引号引起来的是字符串。符号常量
const 符号常量 = 常量字串
如:
cppconst double PI = 3.1415926; // 符号常量一般使用大写表示
变量
在程序运行过程中其值可以改变。变量在内存中占据一定的存储单元。
变量的三个属性:变量名、变量值、存储单元
变量名是一种标识符,函数名、数组名、文件名等都是标识符,标识符的命名规则如下:
- 由字母、数字、下划线构成
- 不能以数字开头
- 不能与系统关键字冲突
一点建议:变量命名要见名知意
练习:下列变量名不合法,为什么?
M.D.John, $123, #23, 3G64, ling ling, C++, zhang-ling, U.S.A变量的使用
- 先定义后使用
- 先赋值后使用
变量的定义
格式:数据类型 变量名表,例如:
cppint a; // 整型变量a double b, c; // 双精度浮点型变量b, c char e; // 字符型变量e int x = 10 // C++允许在变量定义的同时进行赋值 x = 11 x = 12 // 变量值允许被覆盖,即同一个变量被多次赋值,变量值为最后一次赋值的值。此时x的值为12。由变量定义的格式可知,变量是有类型的,C++在编译时会根据不同的数据类型,自动为变量分配存储单元。
数据类型
C++中的数据类型整体被分成:基本类型、构造类型、指针类型以及引用类型。在语言基础部分我们先学习四大基本类型。
| 类型 | 关键字 |
|---|---|
| 整型 | int |
| 浮点型 | 单精度(float),双精度(double) |
| 字符型 | char |
| 布尔型 | bool |
这些基本类型可以使用一个或多个类型修饰符进行修饰
- signed
- unsigned
- short
- long
| 类型 | 位 | 范围 |
|---|---|---|
| char | 1 byte | -128 到 127 或者 0 到 255 |
| unsigned char | 1 byte | 0 到 255 |
| [signed] short [int] | 2 byte | -32768 到 32767 |
| unsigned short [int] | 2 byte | 0 到 65535 |
| [signed] [long] int | 4 byte | -2147483648 到 2147483647 |
| unsigned int | 4 byte | 0 到 4294967295 |
| [signed] long long [int] | 8 byte | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| unsigned long long [int] | 8 byte | 0 到 18,446,744,073,709,551,615 |
| float | 4 byte | 单精度型占 4byte(32 位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
| double | 8 byte | 双精度型占 8 byte(64 位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
| long double | 16 byte | 长双精度型 16 byte(128 位)内存空间,可提供 18-19 位有效数字。 |
整型
位与字节
计算机中的数据是以二进制(0和1)来存储的,每一个二进制位被称作一位或是 1bit。8bit 又被称作 1byte(字节),byte 可简写为B,即是:
字节是计算机数据存储的最基本单位,常见如下换算:
问题:1byte 的取值范围是多大呢?
从我们熟悉的十进制看 8 位十进制的取值范围是
[000000000, 999999999,那如果是 8 位二进制呢?它的取值范围是?[00000000, 11111111]。问题是
11111111是多大呢?考虑十进制的 5432,它可以写成:
这种方法我们称之为按位权展开求值,这也是任意进制转换为十进制的方法。
十进制转换为任意进制呢?请同学们课下探索。
同样的道理
11111111按位权 2 展开()之后得到十进制下的 255( ),故 1byte 的取值范围是 [0, 255]。
由上面的推导可知:
| 字节数 | 取值范围 |
|---|---|
| 1 | |
| 2 | |
| 4 | |
| 8 |
问题:计算机中的负数是如何表示的?
计算机中是没有
+,-的,计算机在二进制的最高位使用 0 表示正数,使用 1 表示负数。在有符号表示中由于最高位被占用所以 8 位二进制的取值变成了计算机中的数据表示方式,请同学们课后探索
C++中的整型
| 类型 | 位 | 范围 |
|---|---|---|
| [signed] short [int] | 2 byte | -32768 到 32767 |
| unsigned short [int] | 2 byte | 0 到 65535 |
| [signed] [long] int | 4 byte | -2147483648 到 2147483647 |
| unsigned int | 4 byte | 0 到 4294967295 |
| [signed] long long [int] | 8 byte | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| unsigned long long [int] | 8 byte | 0 到 18,446,744,073,709,551,615 |
浮点型
浮点型分成单精度浮点型(float)和双精度浮点型(double),它其实就是数学中的小数,只是区分了不同的精度。注意:浮点型也可以存储整数。
float a = 3.14;
double b = 9.99;
float c = 7;| 类型 | 位 | 范围 | 有效位 |
|---|---|---|---|
| float | 4 byte | -3.4e-38 ~ 3.4e38 | 6 ~ 7 |
| double | 8 byte | -1.7e-308 ~ 1.7e308 | 15 ~ 16 |
字符型
char c = 'm' // 将字符m赋值给字符变量c计算机是使用字符编码来表示字符的,C++支持 ASCII(美国信息交换标准代码)。 一个 ASCII 字符占 8bit 也就是 1byte,故它能表示至多 256 个字符,0~127 为基本字符,128~255 为扩展字符,有些字符是非打印字符,作控制用,输出时也不显示,如\a。
字符的两种表示方式
- 普通表示法:单引号是字符,双引号是字符串
- 转义字符:单引号引注,以反斜杠开头,如
\a,\t,\n
布尔型
布尔型只有 true(逻辑真)和 false(逻辑假)两个值,占一个字节,在 C++中所有非 0 值都是 true,只有 0 表示 false,一般我们使用 1 来表示 true。
类型转换
隐式转换
如果类型不匹配时,C++默认会进行类型之间的转换,转换的规则:短类型转长类型
显式转换
将某一个数据类型强制转换为另外一个类型,形式:(类型名) (表达式)
如:
(int) 4.5; // 4
(double) 4; // 4.00000了解输入输出语句
cout 和 cin
cout 基本语句格式:cout << 表达式1 << 表达式2 << ... << 表达式n;
cin 基本语句格式:cin >> 变量1 >> 变量2 >> ... >> 变量n;
示例:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int x;
float y;
cout << "Please input an int number:" << endl;
cin >> x;
cout << "The int number is x = " << x << endl;
cout<< "Please input a float number:" << endl;
cin >> y;
cout << "The float number is y = " << y <<endl;
return 0;
}运行结果: 
换行符:endl 和\n
endl:全称为std::endl,其中的l为line的意思。\n:转义字符,表示换行。
运算符和表达式
表达式 = 运算符 + 数据
C++中的运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
算术运算符
int a = 10, b = 10;| 运算符 | 描述 | 实例 |
|---|---|---|
| + | 把两个操作数相加 | A + B 将得到 30 |
| - | 从第一个操作数中减去第二个操作数 | A - B 将得到 0 |
| * | 把两个操作数相乘 | A * B 将得到 100 |
| / | 分子除以分母 | B / A 将得到 1 |
| % | 取模运算符,整除后的余数 | B % A 将得到 0 |
| ++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
| -- | 自减运算符,整数值减少 1 | A-- 将得到 9 |
注意
a / b:如果 a,b 均为整型则是整除,结果向 0 靠近,有一个是浮点型,则这是实除,结果为浮点型。
自增和自减运算符
前缀形式:++x --x,先给 x 加或减 1,再使用 x 的值
后缀形式:x++ x--,先使用 x 的值,再给 x 加或减 1
关系运算符
后面讲
逻辑运算符
后面讲
位运算符
后面讲
赋值运算符
其余的后面讲
赋值运算符:=,或是复合赋值运算符如:+= -= *= /= <<= >>= &= != 等等
杂项运算符
其余的后面讲
逗号运算符
逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
cppa = (3, 4, 5); // a = 5 a = (3 + 4, 4 + 5, 9 + 7); // a = 16sizeof 运算符
求出变量占多少字节
cppint a; cout << sizeof(a) << endl; // 4
运算符之间的优先级
结合性:即运算符和哪个表达式结合在一起
优先级:

注意:优先级值越大,表示优先级越高。
提示: 如果优先级和结合性掌握不牢靠,可多使用()。
补充:常用库函数<cmath>
| 函数 | 功能 | 实例 | 值 |
|---|---|---|---|
| abs(x) | 返回整型的绝对值 | abs(-5) | 5 |
| fabs(x) | 返回浮点型的绝对值 | abs(-5.5) | 5.5 |
| exp(x) | 返回 | exp(1) | 2.718 |
| floor(x) | 返回不大于 x 的最大整数 | floor(-3.14) | -4 |
| ceil(x) | 返回不小于 x 的最小整数 | ceil(-3.14) | -3 |
| log(x) | 返回 | log(1) | 0 |
| pow(x, y) | 返回 | pow(2, 3) | 8 |
| rand(x) | 返回 0 ~ RAND_MAX 之间的随机整数 | ||
| sqrt(x) | 返回 x 的平方根 | sqrt(4) | 2 |
