Download presentation
Presentation is loading. Please wait.
Published byYuliani Harjanti Atmadjaja Modified 5年之前
1
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计
2
“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 C++的词法记号和标识符 等于号和双等于号 基本数据类型 sizeof运算符
变量和常量 运算符和表达式 C语言的输入输出 C++的输入输出 等于号和双等于号 sizeof运算符 输出的格式控制 使用string类型处理字符串 磁盘文件是什么 C++语言程序设计
3
基本知识 a C++语言程序设计
4
2.4 运算符和表达式 表达式 操作数与运算符(操作符)序列 表达式的值:运算结果 例如: C++语言程序设计
//简单表达式,值为3.2 //常量表达式,值为5 a //简单表达式,值为变量a的值 x=(a+b)* c //较为复杂的表达式 y=x=a+b //表达式是可以嵌套的 C++语言程序设计
5
2.4 运算符和表达式 语句 语句块(复合语句) C++语言程序设计 由表达式和结尾的“;”组成一个C++语句 例如:
y=x=a+b ; 语句块(复合语句) 由{ } 括起来的语句序列 例如:实现将变量x和y交换的语句块 { int temp = x; x = y; y = temp; } C++语言程序设计
6
2.4 运算符和表达式 运算符 C++提供了丰富的运算符 运算符的含义:取决于操作数的类型 运算符的优先级和结合性 C++语言程序设计
优先级:决定了运算顺序,例如:1+2*3 结合性:优先级相同的运算按照结合性来确定运算顺序,例如:1+2+3 使用圆括号可以改变运算顺序,例如:(1+2)*3 C++语言程序设计
7
2.4 运算符和表达式 C++语言程序设计
8
2.4 运算符和表达式 运算符分类——根据操作数个数 运算符分类——根据运算性质 一元操作符:仅需要一个操作数的运算符,例如:+
二元操作符:需要两个操作数的运算符,例如:+ 三元操作符:需要三个操作数的运算符,只有条件运算符:?: 运算符分类——根据运算性质 赋值运算符、算术运算符、复合赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、逗号运算符…… C++语言程序设计
9
2.4 运算符和表达式 赋值运算符 赋值运算符优先级、结合性 “=”是赋值运算符 例如:f=3.15、x=y 表达式的值:左边操作数的值
“=”具有较低级别的优先级 “=”的结合性为:右结合 注意: 赋值运算符“=”不等同于数学意义上的等于号“=” 例如: float x, y; int a,b; const float PI=3.14; x = 3.5; //正确 y = x; //正确 a=b=100; //正确 PI=x; //错误 3.5 = x; //错误 y+2 = x-10; //错误 C++语言程序设计
10
2.4 运算符和表达式 算术运算符 “/”除法运算符 “%”取余运算符 C++语言程序设计
一元:+(正号)、-(负号)、++(自增)、--(自减) 二元:+(加)、-(减)、*(乘)、/(除)%(取余) “/”除法运算符 根据操作数的类型,决定运算规则 例如: 5/2,表达式的值为:2 5.0/2.0,表达式的值为:2.5 “%”取余运算符 只能对整数类型进行操作 余数的符号由被除数决定 C++语言程序设计
11
2.4 运算符和表达式 例:“/”和“%”运算符的使用 C++语言程序设计 运行结果: a=-4 b=3 a/b= -1
(float)a/b= a%b= -1 b%a= 3 // “/”和“%”运算符的使用 #include <iostream> using namespace std; void main() { int a= -4, b= 3; cout<<"a="<<a<<" b="<<b<<endl; cout<<"a/b=" <<a/b<<endl; cout<<"(float)a/b="<< (float) a/b<<endl; cout<<"a%b=" <<a%b<<endl; cout<<"b%a=" <<b%a<<endl; } C++语言程序设计
12
2.4 运算符和表达式 ++(自增)--(自减)运算符 操作数加1(减1)的简短实现方式,例如:i=i+1(i=i-1) 分为:
前置自增(自减) 操作数加1(减1),表达式的值为操作数修改后的值 后置自增(自减) 操作数加1(减1),表达式的值为操作数修改前的值 C++语言程序设计
13
2.4 运算符和表达式 例:“++”前、后置自增运算符对比 C++语言程序设计 运行结果: // “++”前、后置自增运算符对比
#include <iostream> using namespace std; void main() { int i=0, j=0, a, b; ++i ; j++ ; cout<<"i="<<i <<" , j="<<j<<endl; a=++i ; b=j++ ; cout<<"a="<<a<<" , b="<<b<<endl; } 运行结果: i=1 , j=1 i=2 , j=2 a=2, b=1 C++语言程序设计
14
2.4 运算符和表达式 复合赋值运算符 算术运算优先级 将算术运算符和赋值运算符结合 包括:+=、-=、*=、/=、%=
语法格式:a op b,相当于:a = a op b op: +,-,*,/、% 算术运算优先级 例如:x *= y+8 相当于:x =( x * (y+8)) 高 +(正号)、-(负号)、++、-- *、/、% +(加)、-(减) +=、-=、*=、/=、%= 低 C++语言程序设计
15
2.4 运算符和表达式 算术运算的溢出问题 算术运算时,如果运算结果超出了其类型能够表示的的数值范围,就会产生溢出
溢出时,运算结果是错误的,但编译器不会发现溢出错误 溢出的解决:选择表示数值范围更大的数据类型 例如: short int i=20000, j=30000, k; cout<<(k=i+j)<<endl; 运行结果: 例如: int i=20000, j=30000, k; cout<<(k=i+j)<<endl; 运行结果:50000 修改为 溢出了! C++语言程序设计
16
2.4 运算符和表达式 关系运算符 包括: 关系表达式的值:bool值 C++语言程序设计
>(大于)、>=(大于等于)、<(小于)、<=(小于等于) ==(等于)、!=(不等于) 关系表达式的值:bool值 true: 运算符指定的关系成立 false: 运算符指定的关系不成立 例如: int a=1,b=2; cout<<(a ==b)<<endl; //false,显示为:0 cout<<(a !=b)<<endl; //true,显示为:1 cout<<(a >=b)<<endl; //false,显示为:0 C++语言程序设计
17
2.4 运算符和表达式 逻辑运算符 包括:!(逻辑非)、&&(逻辑与)、||(逻辑或) 操作数:bool型 表达式的值:bool值
!:操作数的值为true,则为:false;操作数的值为false,则为:true &&:两个操作数的值都为true,则为:true;否则为:false ||:两个操作数的值都为false,则为:false;否则为:true 例如要表示条件: a>b>c 逻辑表达式为:(a>b) && (b>c) C++语言程序设计
18
2.4 运算符和表达式 关系、逻辑运算的优先级 C++语言程序设计 ! <、<=、>、>= ==、!= && ||
高 ! <、<=、>、>= ==、!= && || 低 例如: int a=1, b=2, x=3, y=4; bool d; d= a<b && x>y ; //计算过程 cout<< d<<endl; //显示为:0 C++语言程序设计
19
2.4 运算符和表达式 位运算符 按位求反运算“~” 对整型数按二进制位进行位操作
包括:~(位求反)、&(位与)、|(为或)、^(位异或)、 <<(左移)、>>(右移) 操作数:整数 按位求反运算“~” 将操作数的每一个二进制位按位取反 例如: unsigned char a=0x97; a = ~a ; 1 1 C++语言程序设计
20
2.4 运算符和表达式 按位与运算“&” 两个操作数对应的位进行与运算:如果对应的位都为1,则该位 操作结果为:1,否则为:0
例如: unsigned char a=0x97; unsigned char b=0x78; unsigned char r=a & b; 1 1 1 C++语言程序设计
21
2.4 运算符和表达式 按位或运算“|” 两个操作数对应的位进行或运算:如果对应的位都为0,则该位 操作结果为:0,否则为:1
例如: unsigned char a=0x97; unsigned char b=0x70; unsigned char r=a & b; 1 1 1 C++语言程序设计
22
2.4 运算符和表达式 按位异或运算“^” 两个操作数对应的位进行异或运算:如果对应的位只有一个为1,则操作结果为:1,否则为:0
例如: unsigned char a=0x97; unsigned char b=0x70; unsigned char r=a & b; 1 1 1 C++语言程序设计
23
2.4 运算符和表达式 左移运算“<<” 将左操作数向左移动若干位(由右操作数指定), 最低位移入:0,移出的最高位丢弃
例如: unsigned char a=7; a<<1; a<<2; 1 1 1 C++语言程序设计
24
2.4 运算符和表达式 右移运算“>>” 将左操作数向右移动若干位(由右操作数指定), C++语言程序设计
左操作数为无符号数:最高位移入“0”,移出的最低位丢弃 左操作数为有符号数: 最高位移入“符号位”,移出的位丢弃 例如: unsigned char a=8; a<<1; a<<2; 1 1 1 例如: char a= -8; a<<1; a<<2; 1 1 1 C++语言程序设计
25
2.4 运算符和表达式 复合赋值运算符 位运算优先级 将位运算符和赋值运算符结合
包括:&=、|=、^=、<<=、>>= 语法格式:a op b, 相当于:a = a op b op: &,|,^,<<、>> 位运算优先级 ~ <<、>> & ^ | &=、^=、|=、<<=、>>= 高 低 C++语言程序设计
26
2.4 运算符和表达式 条件运算符“?:” C++中唯一的三元操作符 语法格式:表达式1 ? 表达式2 : 表达式3
语法格式:表达式1 ? 表达式2 : 表达式3 计算表达式1的值,如果结果为true,则计算并返回表达式2的值, 否则,计算并返回表达式3的值 例如: int x=3, y=5; cout<<(x>y? x: y)<<endl; 运行结果:5 C++语言程序设计
27
2.4 运算符和表达式 逗号运算符“,” 语法格式:表达式1, 表达式2, ……表达式n
顺序计算表达式1,表达式2,……,表达式n的值,并将 表达式n的值作为逗号表达式的值 例如: int a, b, c, d; d=(a=1, b=2, c=a+b, a+b+c); cout<<d<<endl; 运行结果:6 C++语言程序设计
28
2.4 运算符和表达式 数据类型转换 当表达式中出现多种数据类型的混合运算时,往往需要进行类型转换 表达式中的类型转换分为:
隐式类型转换 强制类型转换 当表达式中需要进行数据类型转换时,编译器按照相关转换规则自动执行的类型转换 在表达式中使用强制类型转换操作符实现的类型转换 C++语言程序设计
29
2.4 运算符和表达式 隐式类型转换 算术运算的转换基本原则 赋值运算的转换基本原则 C++语言程序设计
将精度较低、范围较小的类型转换成精度较高、范围较大的类型 同一种精度的无符号数和有符号数,有符号数转换成无符号数 例如: 5.0 / 2 赋值运算的转换基本原则 如果两个操作数的类型不一致,则将右操作数 的类型转换成左操作数的类型 例如: int i; i=3.15; cout<<i<<endl; //运行结果:3 C++语言程序设计
30
2.4 运算符和表达式 隐式类型转换 逻辑运算的转换基本原则 bool类型转换为整数的基本原则 C++语言程序设计
逻辑运算符要求操作数为bool类型,如果操作数为其他类型,则转换成bool类型 0 转换成 false,非0 转换成 true 例如: 3 && 0 bool类型转换为整数的基本原则 true 转换成 1, 将 false 转换成 0 C++语言程序设计
31
2.4 运算符和表达式 C语言的强制类型转换运算符“( )” 语法格式:类型名 (表达式) 或者 (类型名) 表达式 C++语言程序设计
语法格式:类型名 (表达式) 或者 (类型名) 表达式 例如: int i=97; double f=3.15; cout<< char (i)<<“ “<< (int) f<<endl; 运行结果: a 3 C++语言程序设计
32
C++的强制类型转换运算符 static_cast<类型名>
2.4 运算符和表达式 C++的强制类型转换运算符 static_cast<类型名> 语法格式: static_cast<类型名> (表达式) 对于不允许进行的类型转换, 当使用 static_cast运算符时,编译时会报错; 当使用C语言的强制类型转换运算符时,编译不会报错,但运行时会出错 例如: int i=97; double f=3.15; cout<< static_cast<char> (i)<<“ “ << static_cast<int> (f)<<endl; 运行结果: a 3 C++语言程序设计
Similar presentations