第2章 数据类型、运算符和表达式

66
第2第 第第第第 第第第第第 第第 第第第第第第 第第第第第第 第第第第第 第第第第第 第第第第 第第第第 第第第第第第第 第第第第第第第 第第第第第第第 第第第第第第第 第第第第第第 第第第第第第

Upload: adolfo

Post on 22-Jan-2016

169 views

Category:

Documents


0 download

DESCRIPTION

第2章 数据类型、运算符和表达式. 运算符和表达式 数据类型的转换 构造数据类型. 基本数据类型 常量和变量 输入输出. 基本数据类型. 整型 字符型 浮点型. 布尔型 空型. C++ 提供的基本数据类型. 修饰符. C++ 还允许在不同的数据类型前面增加修饰符来更改基本类型的含义。 signed,unsigned,long 和 short。 其中 int 前面可以单独使用 siged,unsigned,long 和 short, 并且 signed 和 unsigned 还可以与 long 和 short 组合在一起放在 int 前面 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第2章  数据类型、运算符和表达式

第 2 章 数据类型、运算符和表达式

第 2 章 数据类型、运算符和表达式

基本数据类型基本数据类型常量和变量常量和变量输入输出输入输出

运算符和表达式运算符和表达式数据类型的转换数据类型的转换构造数据类型构造数据类型

Page 2: 第2章  数据类型、运算符和表达式

基本数据类型基本数据类型基本数据类型基本数据类型

•整型•字符型•浮点型

•布尔型•空型

Page 3: 第2章  数据类型、运算符和表达式

C++ 提供的基本数据类型C++ 提供的基本数据类型

Page 4: 第2章  数据类型、运算符和表达式

修饰符修饰符•C++ 还允许在不同的数据类型前面增加修饰符

来更改基本类型的含义。– signed , unsigned , long 和 short 。– 其中 int 前面可以单独使用

siged , unsigned , long 和 short ,并且signed 和 unsigned 还可以与 long 和 short组合在一起放在 int 前面

– char 前面可以单独使用 signed 和 unsigned ;– double 前面可以单独使用 long 。

Page 5: 第2章  数据类型、运算符和表达式

C++ 的数据类型C++ 的数据类型

Page 6: 第2章  数据类型、运算符和表达式

整型整型•C++ 中定义了 9 种类型的整型,其中包括普

通的整型 (int) 、长整型 (long int) 和短整型 (short int) 。这 3 种数据类型的前面还可以加上 signed 和 unsigned 修饰符来表示有符号整型和无符号整型。

Page 7: 第2章  数据类型、运算符和表达式

符号整数和无符号整数符号整数和无符号整数#include <iostream>using namespace std;void main(){

short int i;unsigned short int j;i=-1;j=i;cout<<"i="<<i<<";j="<<j;

}

Page 8: 第2章  数据类型、运算符和表达式

字符型字符型• 在计算机中保存字符采用的是 8 位的 ASCII

码。• 要把字符用单引号扩起来• 'x' 、 '0‘• 如果所需的整数表示范围很小 ( 在– 128 到 1

27 之间,或者在 0 到 255 之间 ) ,可考虑使用字符型数据

Page 9: 第2章  数据类型、运算符和表达式

字符型数据和整型数据的互换使用字符型数据和整型数据的互换使用#include <iostream>using namespace std;void main(){

char c;short int i;c='A';i=c;cout<<"c="<<c<<";i="<<i;

}

Page 10: 第2章  数据类型、运算符和表达式

浮点型浮点型• 浮点型数据有 3 种: float , double 和 long

double 。– 选用的数据类型应该能够表示所需要的数字,不能超出数

据类型的表示范围,还要考虑不同的数据类型可以表示数据的精度是否符合程序要求。

– 一种数据类型占用的内存空间越大,能够表示的数据范围就越大,但是使用这样的数字进行计算的速度也越慢,因此在选择数据类型的时候也不要没有任何依据地使用long double 类型表示数据以求保险 ( 一般的数字用double 类型就足够了 ) 或者贪图不必要的精度而损失了程序的运行速度。

Page 11: 第2章  数据类型、运算符和表达式

浮点数的舍入误差浮点数的舍入误差#include <iostream>using namespace std;void main(){

float a,b;a=555555.555e5;b=a+40;cout<<"a="<<a<<";b="<<b;

}

Page 12: 第2章  数据类型、运算符和表达式

布尔型布尔型• true 和 false• 如果在布尔表达式中使用了数字,那么 C++

会把 0 作为 false ,非 0 的数字作为true 。

• 如果在一个非布尔表达式中使用 bool 类型的数据,那么会把 true 转换为 1 ,把 false转换为 0 。

Page 13: 第2章  数据类型、运算符和表达式

bool 和 int 类型数据的转换bool 和 int 类型数据的转换#include <iostream>using namespace std;void main(){

bool b1,b2;int i,j;b1=true;i=20;j=b1;b2=i;cout<<"j="<<j<<";b2="<<b2;

}

Page 14: 第2章  数据类型、运算符和表达式

空型空型• 空型是一种十分特别的数据类型,它表示没有

任何值,因此并没有一个实际存在的数字可以定义成 void 类型。

• 空型通常用在定义函数的时候表示一个函数没有返回值。

Page 15: 第2章  数据类型、运算符和表达式

常量和变量常量和变量

•常量•变量

Page 16: 第2章  数据类型、运算符和表达式

常量常量• 常量是一个具有实际值的量,并且其值在程序

中不可以改变。

Page 17: 第2章  数据类型、运算符和表达式

整型常量整型常量• 整型常量用于表示整数。

– 可以使用十进制、十六进制、八进制的整数。• 十进制的数字 :10 、 25 。• 十六进制整数需要在整数的前面加上一个 0x:0x123• 八进制数需要在整数的前面加上一个 O:O123

• 如果在程序中遇到了一个整数常量,通常认为这个整数的数据类型是 int 。– 如果要表示的数字超出了 int 类型数据的表示范围,但是在

unsigned int 数据类型的表示范围之内,就在这个数据类型中在数据的后面增加一个 u 后缀: 3213213213u 。

– 如果希望定义 long int 类型的常量,在这个数据后加 l 后缀。

Page 18: 第2章  数据类型、运算符和表达式

浮点型常量浮点型常量• 如果在程序中遇到的一个数字带有小数部分,

那么 C++ 编译器就认为这个数字是一个浮点型常量– –12.3 , 1.0 , 0.123E2

• 浮点型数据具有舍入误差

Page 19: 第2章  数据类型、运算符和表达式

字符型常量字符型常量• 如果要定义字符型常量,只要用单引号将这个

字符括起来就可以了。– 'x' 、 '2' 、 '#'

Page 20: 第2章  数据类型、运算符和表达式

字符串常量字符串常量• 把字符串用双引号括起来

– "Hello world!“

• 一个字符串中的各个字符会占用内存中连续的字节,使用‘ \0’ 字符表示字符串的结束。– 'a' 与 "a" 完全不同

Page 21: 第2章  数据类型、运算符和表达式

符号常量符号常量• 对于一些经常使用并且有特定意义的常量允许

采用符号的方式代替,在程序中所有使用这个常量的地方都可以使用这个符号常量进行替代– 使用 C++ 提供的预编译指令 #define– #define PI 3.14

Page 22: 第2章  数据类型、运算符和表达式

变量变量• 变量就是可以在程序中保存数据的量。由于这

个量的值是可以改变的,因此被称为变量

Page 23: 第2章  数据类型、运算符和表达式

变量的命名变量的命名• 组成变量名的字符必须是大写字母、小写字母、

数字或者下划线,并且只能以字母或者下划线开头。

• 变量名不能使用 C++ 语言保留的关键字

Page 24: 第2章  数据类型、运算符和表达式

变量的声明变量的声明• 数据类型 变量名列表 ;

– int Count;– double Price,Total;

• 所有的变量在声明时都要求指明它的数据类型。

Page 25: 第2章  数据类型、运算符和表达式

变量的初始化变量的初始化• 变量的初始化是指在变量被正式使用之前给变

量一个初值。– (1) 在定义变量时给变量赋一个初值。– (2) 在使用变量之前给变量赋一个初值。– (3) 动态初始化。

•int Count=2;•double Price,Total;•Price=28.7;•Total=Price * Count;

Page 26: 第2章  数据类型、运算符和表达式

常数型变量常数型变量• 使用 const 关键字创建常数型变量,这样就

可以把一个变量作为常数来使用•const 数据类型 变量名 =表达式 ;

– const float PI=3.14;

Page 27: 第2章  数据类型、运算符和表达式

输 入 输 出输 入 输 出

•cout•cin

Page 28: 第2章  数据类型、运算符和表达式

流流• C++ 中定义的输入输出都是采用流的方式进行的。

– 在输入操作中,输入数据以字节的形式从输入设备 (例如键盘、磁盘、网络等 ) 经过输入流流入计算机的内存;

– 在输出操作中,输出数据又以字节的形式从内存经过输出流流出到输出设备 (例如显示器、打印机、磁盘、网络等 ) 。

• 在 C++ 中,可以使用它提供的标准输入对象 cin 和标准输出对象 cout 实现输入输出操作。– cin 表示的是 C++ 的输入流– cout 表示的是 C++ 的输出流– cerr流用于实现标准的出错输出– clog流实现 cerr流的缓冲输出。

Page 29: 第2章  数据类型、运算符和表达式

coutcout

• 使用 << 操作符来实现输出 , <<的作用是实现向流中插入。– int i=10;– cout<<"i="<<i;

Page 30: 第2章  数据类型、运算符和表达式

在输出中使用转义字符在输出中使用转义字符#include <iostream>using namespace std;void main(){

cout<<"abcde\tfg\bhij\rk\n";cout<<"I say:\"hello!\ "\n";cout<<"\\n 的意思是回车换行 \n";

}

Page 31: 第2章  数据类型、运算符和表达式

用 \t和 setw() 实现输出用 \t和 setw() 实现输出#include <iostream>#include <iomanip>using namespace std;void main(){

cout<<"abc\tdef"<<endl;cout<<"ghi\tjkl"<<endl;cout<<setw(6)<<"abc"<<setw(6)<<"def"<<endl ;cout<<setw(6)<<"ghi"<<setw(6)<<"jkl"<<endl;

}

Page 32: 第2章  数据类型、运算符和表达式

cincin

• 输入是从输入流中提取数据的过程。默认的输入设备是键盘。

• 使用 >> 操作符。– int a;– double b;– cin>>a>>b;

Page 33: 第2章  数据类型、运算符和表达式

输入一个矩形的长和宽,输出矩形的面积

输入一个矩形的长和宽,输出矩形的面积

#include <iostream>using namespace std;void main(){

double Length;double Width;cout<<"The Length=";cin>>Length;cout<<"The Width=";cin>>Width;cout<<"Area="<<Length*Width<<endl;

}

Page 34: 第2章  数据类型、运算符和表达式

运算符和表达式运算符和表达式•算术运算符和算术表达式•关系运算符与关系表达式•逻辑运算符和逻辑表达式•位运算符和位运算表达式•赋值运算符和赋值表达式

•逗号运算符•sizeof 运算符

Page 35: 第2章  数据类型、运算符和表达式

算术运算符算术运算符

Page 36: 第2章  数据类型、运算符和表达式

使用自增和自减运算符使用自增和自减运算符

Page 37: 第2章  数据类型、运算符和表达式

算术表达式算术表达式• 算术表达式是由算术运算符将运算对象连接起

来的式子• 算术运算符的优先级

Page 38: 第2章  数据类型、运算符和表达式

关系运算符与关系表达式关系运算符与关系表达式• 关系运算符是双目运算符,可以作用在除

viod 类型之外的任意类型的两个操作数上。• 由关系运算符将运算对象连接起来的式子就是

关系表达式。• 关系表达式的计算结果要么是 true ,要么是

false 。

Page 39: 第2章  数据类型、运算符和表达式

使用关系运算符使用关系运算符

Page 40: 第2章  数据类型、运算符和表达式

关系运算符的优先级关系运算符的优先级

Page 41: 第2章  数据类型、运算符和表达式

逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式• 逻辑运算符作用在除 void类型之外的所有数

据上,得到的结果是 bool类型的 true或者false。• 用逻辑运算符连接运算对象就可以得到逻辑表

达式。

Page 42: 第2章  数据类型、运算符和表达式

实现异或运算实现异或运算

Page 43: 第2章  数据类型、运算符和表达式

逻辑运算符和关系运算符的优先级逻辑运算符和关系运算符的优先级

Page 44: 第2章  数据类型、运算符和表达式

位运算符和位运算表达式位运算符和位运算表达式• 位运算就是指能够直接对字节或者字的位进行

运算的运算符。按位运算只能对整数类型和字符类型的数据进行操作,不能用在其他类型的数据上。

• 由位运算符将运算对象连接起来的式子就是位运算表达式。

Page 45: 第2章  数据类型、运算符和表达式

按位与、或、异或和取反运算符按位与、或、异或和取反运算符•按位与运算的特点是只有参与运算的两个位都

是 1 结果位才是 1 ,否则结果位是 0;•按位或运算的特点是只有参与运算的两个位都

是 0 结果位才是 0 ,否则结果位是 1;•按位异或运算的特点是只有参与运算的两个位

不同结果位才是 1 ,否则结果位是 0;•按位取反运算符只有一个操作数,对 1取反

结果是 0 ,对 0取反结果是 1 。

Page 46: 第2章  数据类型、运算符和表达式

使用按位与、或和取反运算符使用按位与、或和取反运算符

Page 47: 第2章  数据类型、运算符和表达式

使用异或运算实现加密和解密使用异或运算实现加密和解密

Page 48: 第2章  数据类型、运算符和表达式

移位运算符移位运算符•右移位运算符 >>的作用是将一个数的所有位向右移动指定的位数

•左移位运算符 <<的作用是将一个数的所有位向左移动指定的位数

• 运算符的左边是需要移位的数据,而运算符的右边放置的是一个正整数,表示要移位的位数。

Page 49: 第2章  数据类型、运算符和表达式

使用移位运算使用移位运算

Page 50: 第2章  数据类型、运算符和表达式

赋值运算符和赋值表达式赋值运算符和赋值表达式•赋值运算符就是一个等号 (=) ,表示把“ =”右面的表达式的值赋值给左边的变量– 变量 =表达式

• 一个用赋值运算符连接运算对象的式子就是赋值表达式。

Page 51: 第2章  数据类型、运算符和表达式

复合赋值运算符复合赋值运算符• 只要在赋值运算符前面加上一个其他的二目运

算符,就形成了复合赋值运算符。– +=、– =、 *=、 /=、%=、 <<=、 >>=、 &=、^=、 |=

Page 52: 第2章  数据类型、运算符和表达式

逗号运算符逗号运算符• 使用逗号运算符可以将几个表达式连接起来,

这样构成的表达式就是逗号表达式,整个表达式的值就是最右边一个表达式的值。

•a=(b=12,c=34,d=56);–首先计算 b=12 ,然后计算 c=34 ,再计算

d=56 。逗号表达式 b=12,c=34,d=56 的结果就是最右边的表达式的值 56,因此 a 的值是 56。

Page 53: 第2章  数据类型、运算符和表达式

sizeof 运算符sizeof 运算符•sizeof 运算符可以计算出数据类型所占用空

间•sizeof 运算符有两种使用方式:

– sizeof( 数据类型 )– sizeof 变量名

Page 54: 第2章  数据类型、运算符和表达式

使用 sizeof 运算符使用 sizeof 运算符

Page 55: 第2章  数据类型、运算符和表达式

数据类型的转换数据类型的转换

•赋值运算中的数据类型转换•表达式中的数据类型转换

Page 56: 第2章  数据类型、运算符和表达式

赋值运算中的数据类型转换赋值运算中的数据类型转换• 如果把一种类型的数据赋值给另一种类型的变

量,那么在赋值的过程中就会发生数据类型的转换。

• 由于各种数据类型所占用的内存空间不同,因此当占用内存空间大的数据类型向占用内存空间小的数据类型转换的时候,会导致高位数据丢失的情况。

Page 57: 第2章  数据类型、运算符和表达式

数据类型转换导致的错误数据类型转换导致的错误

Page 58: 第2章  数据类型、运算符和表达式

表达式中的数据类型转换表达式中的数据类型转换• 在表达式中,如果各个运算对象的数据类型不

同,那么 C++ 会自动把它们转换成同样的数据类型再进行计算。

• 在进行类型转换的时候,都是从占用内存空间少的数据类型向占用内存空间多的数据类型进行转换。

•C++ 还允许使用强制类型转换来实现显式的类型转换– ( 数据类型 ) 表达式

Page 59: 第2章  数据类型、运算符和表达式

构造数据类型构造数据类型

•结构体•共用体•枚举•自定义数据类型

Page 60: 第2章  数据类型、运算符和表达式

结构体结构体• 将所有相关的数据项组合在一起,形成一种新

的数据结构,称为结构体 struct 结构体名 { 数据类型 成员名 ; ... };

• 使用“ .”运算符访问一个结构体变量的各个成员,这个运算符称为成员运算符。– 结构体变量名 . 成员名

Page 61: 第2章  数据类型、运算符和表达式

计算一个三角形的面积计算一个三角形的面积

(1,9)

(4,2)(1,2)

y

x

Page 62: 第2章  数据类型、运算符和表达式

共用体共用体• 将几个不同数据类型的变量保存到同一个内存空间

中,实际上是这些不同数据类型的变量占用从同一个地址开始的内存空间,各个变量相互覆盖。

• 这种使几个变量占用同样内存空间的结构称为共用体。

union 共用体名 { 数据类型 成员名 ; ... };

Page 63: 第2章  数据类型、运算符和表达式

使用共用体使用共用体

Page 64: 第2章  数据类型、运算符和表达式

枚举枚举• 所谓枚举类型,就是指在定义类型的时候一一列出这个类型的数据可能的取值。– enum

WeekDay{sun,mon,tue,wed,thu,fri,sat};

Page 65: 第2章  数据类型、运算符和表达式

使用枚举类型使用枚举类型

Page 66: 第2章  数据类型、运算符和表达式

自定义数据类型自定义数据类型• 使用 typedef 关键字将一个标识符定义为一

个数据类型标识符。– typedef 数据类型 标识符 ;