C++程序设计第二章
C++简单程序设计
C++的基本数据类型
- 整数类型
- 实数类型
- 字符类型
- 布尔类型
C++的基本运算
- 算术运算
- 逻辑运算
程序要能输入数据,输出数据
C++的输入输出可以调用预定义的功能模块实现
程序的执行流程不总是顺序的因此程序要能够
- 对执行流程进行选择(选择/开关语句)
- 反复用同一算法依次处理大批量数据(循环语句)
基本数据类型能表示的有限
程序员要能够自定义类型
枚举类型
- 通过列出所有可取值来定义一种新类型
C++特点和程序实例
- 从C语言发展而来,最初称为
带类的C
- 1983年正式取名为C++;
- 1998年11月被国际标准化组织(ISO)批准为国际标准;
- 2003年10月15日发布第2版C++标准ISO/IEC 14882:2003;
- 2011年8月12日ISO公布了第三版C++标准C++11,包含核心语言的新机能、扩展C++标准程序库。
- 2014年8月18日ISO公布了C++14,其正式名称为"International Standard ISO/IEC 14882:2014(E) Programming Language C++"。
- C++14作为C++11的一个小扩展,主要提供漏洞修复和小的改进。
C++的特点
- 兼容C,支持面向过程的程序设计
- 支持面向对象的方法
- 支持泛型程序设计方法
命名空间
- 避免命名冲突
- std是C++标准库的命名空间名
- using namespace std 表示打开std命名空间
输出Hello
#include <iostream>
using namespace std;
int main() {
cout << "Hello!" << endl;
cout << "Welcome to C++!" << endl;
return 0;
}
C++字符集和词法记号
词法记号
- 关键字
C++预定义的单词 - 标志符
程序员声明的单词,它命名程序正文中的一些实体 - 文字
在程序中直接使用符号表示的数据 - 分隔符
(){};:,用于分隔各个词法记号或程序正文 - 运算符(操作符)
用于实现各种运算的符号 - 空白符
空格, 制表符,垂直制表符,换行符,回车符和注释的总称
标识符的构成规则
- 以大写字母,小写字母或下划线开始
- 可以由大写字母,小写字母,下划线或数字组成
- 大写字母和小写字母代表不同的标识符
- 不能是C++关键字或操作符
基本数据类型,常量,变量
程序中的数据
- 常量
在源程序中直接写明的数据
其值在整个程序运行期间不可改变 - 变量
在程序运行过程中可以改变
整数类型
- 基本的INT型
- 按照符号分
- 有符号
- 无符号
- 按照数据范围分
- 短整数 short
- 长整数 long
- 长长整数 longlong
字符类型
- 字符容纳单个字符的编码
- 实质上存储的也是整数
浮点数类型
- 单精度 float
- 双精度 double
- 扩展精度 long double
字符串类型
- 有字符串常量
- 基本类型中没有字符串变量
- 采用字符数组存储字符串
- 标准C++库中的String类
布尔类型
- 只有两个值,真 true 假 false
常量
- 在程序运行中不可改变的量
- 直接使用符号(文字)表示的值
- 例如:12,3.5,'A’都是常量
整数常量
- 十进制
- 八进制
- 十六进制
后缀
- L = long
- LL = longlong
- U = 无符号
浮点数常量
- 以文字形式出现的实数
- 默认double ,如果后缀F可以指定成float
C风格字符串
- 一对双引号的字符
- 在内存中按串中字符的排列次序顺序存放,每个字符占一个字节
- 在末尾添加’\0’作为结尾标记
变量
在程序运行过程中可改变的量
变量定义
- 类型 变量名
在定义变量的同时可以初始化
C++多种初始化
- int a = 0;
- int a(0)
- int a = {0}
- int a{0}
列表初始化
- 使用大括号的初始化方式
- 不允许信息的丢失
符号常量
常量定义语句的形式:
- const 数据类型说明符 常量名 = 值
- 数据类型说明符 const 常量名 = 值
符号常量定义一定需要初始化,在程序中不能改变值
程序举例
读入并显示整数
#include <iostream>
using namespace std;
int main() {
int radius;
cout << "Please enter the radius\n";
cin >> radius;
cout << "The radius is:" << radius << "\n";
cout << "PI is:" << 3.14 << "\n";
cout << "Please enter a different radius\n";
cin >> radius;
cout << "Now the radius is changed to:" << radius <<"\n";
return 0;
}
运算与表达式
算术运算与赋值运算
基本算术运算
- ±*/(整数相除,结果为整数)
- %取余运算(结果为整数)
优先级与结合性
- 先乘除,后加减,同级自左至右
自增自减操作
赋值操作
通过赋值运算符=赋值给变量
复合赋值运算符有10种
- +=, -=, *=, /=, <<=, >>=, &=, ^=, |=
符号运算,关系运算,逻辑运算和条件运算
逗号运算和逗号表达式
- 格式
表达式1,表达式2 - 求解顺序及结果
先求解表达式1,在求解表达式2
用表达式2的结果作为结果 - 例子
a = 3 * 5, a * 4 最终结果为60
赋值运算符优先级比逗号低
关系运算
- 优先级
高的:< <= >= >
低的:== != - 关系表达式是一种最简单的逻辑表达式
- 结果是布尔类型,true or false
逻辑运算符
- 优先级从高到低:! && ||
- 结果是布尔类型
- && 的运算规则
- 两侧表达式都为真,结果为真
- 有一侧表达式为假,结果为假
- || 的运算规则
- 两侧表达式都为假,结果为假
- 有一侧表达式为真,结果为真
&& 的短路
特性
- 先求解表达式1,
- 若表达式1的值为false,则最终结果为false,不再求解表达式2
- 若表达式1的值为true,则求解表达式2,以表达式2的结果作为最终结果
|| 的短路
特性
- 先求解表达式1
- 若表达式1的值为true,则最终结果为true,不在求解表达式2
- 若表达式1的值为false,则求解表达式2,以表达式2的结果作为最终结果
条件运算符
- 一般形式
- 表达式1 ? 表达式2 : 表达式3
- 表达式1必须是bool类型
- 执行顺序
- 先求解表达式1
- 若表达式1的值为true,则求解表达式2,表达式2的结果作为最终结果
- 若表达式1的值为false,则求解表达式3,表达式3的结果作为最终结果
- 条件运算符优先级高于赋值运算符,低于逻辑运算符
sizeof运算,位运算
sizeof运算符
- 语法形式
sizeof(类型名) 或 sizeof 表达式 - 结果值
类型名 所指定的类型,或 表达式 的结果类型所占的字节数
按位与
- 运算规则
将两个运算量的每一个位进行逻辑与操作 - 例子
计算 3 & 5
0000 0011
0000 0101
结果0000 0001 - 用途,将某一位置0,取出某一位
按位或
- 运算规则
将两个运算量的每一个位进行逻辑或操作 - 用途,将某一位置1
按位异或
- 运算规则
两个操作数进行异或
若对应位相同,结果为0
若对应位不同,结果为1 - 计算 071 ^ 052
0011 1001
0010 1010
结果 0001 0011 - 用途,特定位翻转
按位取反
- 运算规则
0 变 1, 1 变 0
移位操作
- 左移后,低位补0,高位舍弃
- 右移后,低位舍弃,高位无符号数补0,有符号为补符号位
运算优先级,类型转换
一些运算符要求数据类型一致
隐含转换的基本原则是低类型转换到高类型
浮点数换成整数,小数部分直接丢弃
整数换成浮点数,小数为0,可能丢失精度
显示转换
- 类型说明符(表达式)
- (类型说明符)表达式
- 类型转换操作符 <类型说明符> (表达式) C++的转换方式
- 类型转换操作符:const_cast,dynamic_cast ,reinterpret_cast,static_cast