第 2章 数据类型与表达式
2.1 基本数据类型
2.2 常量与变量
2.3 运算符与表达式
2.4 位运算符
2.5 C++ 的构造类型
2.1 基本数据类型
2.1.1 整型数据除以上三种整型数据外,还有三种对应的无符号( unsigned)整型数据,用于保存正整数,取值范围也相应变化。编程时可根据用到数据的大小决定采用哪种数据类型存放数据。
第 2章 数据类型与表达式类型 长度(字节) 取值范围短整型
( short [ int ] )
2 -32768 ~ 32767
( -215 ~ 215 -1)
基本整型
( int )
4 -2147483648 ~ 2147483647
( -231 ~ 231 -1)
长整型
( long [ int ] )
4 -2147483648 ~ 2147483647
( -231 ~ 231 -1)
2.1 基本数据类型
2.1.2 实型数据类型 长度(字节) 数值范围 有效数字单精度实数
( float )
4 3.4× 10-38
~ 3.4× 1038
7位双精度实数
( double )
8 1.7× 10-308
~1.7× 10308
15位长双精度实数
( long double )
8 1.7× 10-308
~1.7× 10308
15位第 2章 数据类型与表达式
2.1 基本数据类型
2.1.3 字符型数据字符型数据( char)占 1个字节。字符型数据也可以分为有符号字符型数据和无符号字符型数据,有符号字符型数据的取值范围为 -128~ 127(指字符的 ASCII码),无符号字符型数据的取值范围为 0~ 255。
2.1.4 bool型数据
bool型数据( bool)占 1个字节。取值只有 true(真)和 false
(假)。
sizeof运算符,用于获得指定数据类型或指定变量占用内存的字节数。 sizeof(数据类型或变量名)
第 2章 数据类型与表达式例 2.1 检测基本数据类型所占的字节数
#include <iostream.h>
void main()
{
cout << "int," << sizeof(int) << endl;
cout << "short," << sizeof(short) << endl;
cout << "long," << sizeof(long) << endl;
cout << "float," << sizeof(float) << endl;
cout << "double," << sizeof(double) << endl;
cout << "long double," << sizeof(long double) << endl;
cout << "char," << sizeof(char) << endl;
cout << "bool," << sizeof(bool) << endl;
}
返 回第 2章 数据类型与表达式
2.2 常量与变量
2.2.1 常量常量,在程序运行中,其值不能被改变的量称为常量。常量又分为直接常量和符号常量两种。
1,直接常量,直接使用数值或文字表示的值
( 1) 整型常量
如,10,-20,0
还可以八进制或十六进制表示:如 034,0x23
不带后缀的整型常量为 int 型,带后缀 L 或 l 可表示长整型常量,带后缀 U 或 u 表示无符号整型常量
( 2)实 型常量
如,2.18,-5.6,2.3E+2,-3.12E-2
不带后缀的实型常量为 double 型,带后缀 F 或 f 可表示单精度实型常量第 2章 数据类型与表达式
2.2 常量与变量
2.2.1 常量(续一)
( 3) 字符型常量
以单引号括起来的单个字符:如‘ a?,?3?、‘ *’
转义字符,键盘不便于直接输入的字符,如回车符、制表符等,通常以,\,开头表 2.3 转义字符第 2章 数据类型与表达式
\" 双引号 \' 单引号 \\ 字符
‘ \?
\a 响铃
\b 退格 \n 换行 \r 回车 \t 水平制表
\v 垂直制表
\000 3位八进制数所代表的字符,如?\101? 代表?A?
\xhh 2位 16进制所代表的字符,
如?\x41? 代表?A?
例 2.4 用转义字符输出字符
#include <iostream.h>
void main()
{
cout << '\101' << '\n';
cout << '\x41' << '\n';
cout << '\t' << 't' << '\n';
cout << '\"' << '\n';
cout << '\'' << '\n';
cout << '\\' << '\n';
}
第 2章 数据类型与表达式程序执行结果为:
A
A
t
"
'
\
2.2 常量与变量
2.2.1 常量(续二)
( 4) bool型常量
bool常量只有两个,true(真 ),false(假 )
在内存中占有一个字节的存储空间
( 5) 字符串常量
由一对双引号括起来的若干字符,如,abc”
字符串常量的末尾自动加入结束标志?\0?,因此字符串在内存中占有的字节数为 字符个数 +1
若字符串中包含特殊字符,如?\?、回车、制表符等,也应以他们对应的转义字符形式表示第 2章 数据类型与表达式
2.2 常量与变量
2.2.1 常量(续三)
2,符号常量,直接使用符号表示的常量值,包括宏定义和
const定义的符号常量。
( 1) 宏定义
语法形式,#define 宏名 字符串
如,#define PI 3.14
程序编译前会自动用字符串取代程序中出现的宏名
( 2) const定义
语法形式,const 类型说明符 常量名 =常量值;
如,const float pi = 3.14 ;
宏定义在预编译时,只进行简单的替换,不做语法检查
宏定义没有数据类型,而 const定义的符号常量是有数据类型的。
第 2章 数据类型与表达式
2.2 常量与变量
2.2.2 变量
1,变量,程序运行中值可以被改变的量。变量必须先定义再使用。
( 1) 变量定义的一般形式
语法形式:数据类型 变量名 1,变量名 2,…,变量名 n;
如,int a,b,c;
( 2)变量的初始化
含义:定义变量的同时为其赋初值
两种形式:用赋值号 (“=”) 或用括号如,float a = 3.14 ; 或 float a(3.14);
第 2章 数据类型与表达式
2.2 常量与变量
2.2.2 变量(续)
2,标识符,程序中的变量名、数组名和函数名统称为标识符。
标识符的定义应遵循以下规则:
( 1) 有效字符
标识符只能由数字、字母或下划线组成,以字母或下划线开头。
如,a,_str,c1都是有效的,而 1a,a?b,x+y都是无效的。
( 2)区分大小写
C++中的大写字母和小写字母表示不同的标识符。
如,Pi 和 pi 是两个不同的标识符。
( 3) C++的关键字不能用作标识符第 2章 数据类型与表达式返 回
2.3 运算符与表达式
2.3.1 算术运算符与算术表达式
1,五种基本算术运算符,+,-,*,/,%(求余 )
注意:对于除号 (“/”),若两个整数相除,结果仍为整数求余运算符 %,要求两个操作数必须为整型数据
2,自增自减运算符,++,--(仅用于整型或字符型变量)
运算符前臵:先将变量值增 1(或减 1),再使用变量的值
运算符后臵:先使用该变量的值,再将变量值增 1(或减 1)
第 2章 数据类型与表达式例 1:
int i=10,j;
j = i++;
例 2:
int i=10,j;
j = ++i;
执行后:
j =10,i = 11
执行后:
j =11,i = 11
2.3 运算符与表达式
2.3.1 算术运算符与算术表达式(续一)
3,运算符的优先级与结合性:
优先级:运算符参与运算的先后顺序
结合性:当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合。反之,
称为右结合性。
在进行 C++程序设计时,并不需要记住所有运算符的优先级和结合性,可以适当使用括号来显示指定运算的先后顺序,而且使用括号可以增加程序的可读性。
第 2章 数据类型与表达式
2.3 运算符与表达式
2.3.1 算术运算符与算术表达式(续二)
4,数据类型转换:
( 1) 数据类型的自动转换
运算符两侧数据类型不同时会发生自动类型转换,转换规则为 低类型转化为高类型
类型高低顺序:
double,float,unsigned long,long,unsigned,int,short,char
高 低
( 2) 强制类型转换
将表达式的结果强制转换为类型说明符所指定的类型
语法形式:类型说明符(表达式)
或 (类型说明符)(表达式)
第 2章 数据类型与表达式例 2.7 强制类型转换的应用
#include <iostream.h>
void main()
{
float s1,s2,a,h;
a=4.0;
h=5.0;
s1 = 1/2*a*h;
s2 = float (1)/2*a*h;
cout << s1 << endl;
cout << s2 << endl;
}
第 2章 数据类型与表达式程序执行结果为:
0
10
整数相除,结果仍为整数。
舍去小数后,此处结果为 0
将 1强制类型转换为实数,
再和 2相除,结果为实数 0.5
2.3 运算符与表达式
2.3.2 赋值运算符与赋值表达式
1,赋值运算,=
赋值表达式的一般形式,变量 = 表达式
若表达式值的类型与变量类型不一致,会自动将表达式类型转换为变量类型后再赋值
2,复合赋值运算,+=,-=,*=,/=,%=,<<=,>>=,&=、
|=,^=
含义:
例,a += 10 等价于 a = a+10
a *= 10 等价于 a = a*10
a %= 10 等价于 a = a % 10
第 2章 数据类型与表达式
2.3 运算符与表达式
2.3.3 关系运算符与关系表达式
6个关系运算符,<,<=,>,>=,==,!=
优先级高 优先级低
关系运算符优先级低于算术运算符、高于赋值运算符
注意区分?等于?运算符? ==” 与?赋值?运算符? =”
关系表达式的结果类型为 bool,值只能为 true 或 false
如,int a = 4,b = 10;
a < b,a<=b,a>b,a>=b,a==b,a!=b
的结果分别为,true,true,false,false,false,true
第 2章 数据类型与表达式
2.3 运算符与表达式
2.3.4 逻辑运算符与逻辑表达式
3个逻辑运算符,||,&&,!
优先级,低 高
逻辑表达式:用逻辑运算符连接进行逻辑运算的式子,
逻辑表达式的结果类型为 bool,值只能为 true 或 false
如,(a>=60) && (a<=100)
// a的值在 60到 100之间,结果为 true,条件成立
(a>90) || (b>85)
// a大于 90,或者 b大于 85,结果为 true,条件成立
! (a= =100)
// a不等于 100时,条件成立第 2章 数据类型与表达式
2.3 运算符与表达式
2.3.4 逻辑运算符与逻辑表达式(续)
逻辑运算符的运算规则逻辑与 &&:当且仅当两个运算量的值 都为?真?时,运算结果 为?真?,否则为?假?。
逻辑或 ||,当且仅当两个运算量的值 都为?假?时,运算结果 为?假?,否则为?真?。
逻辑非 !,当运算量的值为?真?时,运算结果 为?假? ;
当运算量的值为?假?时,运算结果 为?真? 。
第 2章 数据类型与表达式
2.3 运算符与表达式
2.3.5 条件运算符
条件运算符,?:
条件表达式:表达式 1? 表达式 2,表达式 3
运算规则:如果?表达式 1”的值为真(非 0),则整个表达式的值等于表达式 2的值,否则,整个表达式的值等于表达式 3的值。
如,a>b? a,b
// 如 a>b,结果为 a,否则为 b,可求两数中较大者
a<b? a,b
// 如 a<b,结果为 a,否则为 b,可求两数中较小者第 2章 数据类型与表达式
2.3 运算符与表达式
2.3.6 sizeof运算符
sizeof运算符用于计算指定数据类型或指定变量占用内存的字节数
用法,sizeof(数据类型)
或 sizeof(表达式)
如,sizeof ( int )
// 结果为 4
sizeof ( 3.3 +20 )
// 结果为 8
第 2章 数据类型与表达式返 回
2.4 位运算符
2.4.1 位运算符
C++使用位运算符可以对数据按二进制位进行操作。
1,按位与( &),将两个操作数对应的每一位分别进行逻辑与
如,9&7
9,00001001
7,00000111
9&7,00000001
9&7结果为 1
2,按位或( |),将两个操作数对应的每一位分别进行逻辑或
3,按位异或( ^),将两个操作数对应的每一位分别进行异或第 2章 数据类型与表达式
2.4 位运算符
2.4.1 位运算符(续)
4,按位取反( ~),单目运算符,对二进制的每一位取反
5,左移位( <<),使运算符左侧的操作数的各位左移指定位数,低位补 0,高位溢出部分舍弃。如 7<<2结果为 28。
6,右移位( >>),使运算符左侧操作数的各位右移指定位数,
溢出的低位舍弃,对无符号数和有符号中的正数,高位补 0,对于有符号数中的负数,有些系统补 0(称为逻辑右移),有些系统补
1(称为算术右移)。如 7>>2的结果是 1。
第 2章 数据类型与表达式
0 0 0 0 0 1 1 17
0 0 0 1 1 1 0 07<<2
2.4 位运算符
2.4.2 位运算符应用举例例 2.10 输入变量 a,b的值,并将变量 a的低 4位臵为 0,将变量 b的低 4位臵为 1。
#include <iostream.h>
void main()
{
int a,b;
cin >> a;
cin >> b;
a = a & (~0xf);
b = b | 0xf;
cout << a << endl;
cout << b << endl;
}
第 2章 数据类型与表达式
0xf为十六进制数,它的后四位为 1,其他位均为 0。取反后后四位为 0,其他位均为 1。
若输入 25和 23,程序执行结果为:
16
31
返 回
2.5 C++的构造类型
2.5.1 结构
1,结构,将不同数据类型但相互关联的一组数据组成一个有机整体,如一个学生可包含学号、性别、年龄、成绩等不同类型的数据,这些数据是相互关联的一个整体。
2,结构类型定义的形式,
struct 结构名 如,struct student
{ {
数据类型 1 成员名 1; int no;
数据类型 2 成员名 2; char sex;
…… int age;
数据类型 n 成员名 n; float score;
}; };
第 2章 数据类型与表达式
2.5 C++的构造类型
2.5.1 结构(续)
3,结构变量的定义,结构名 结构变量名;
如 student s1,s2;
也可以在定义结构类型的同时定义结构变量,如:
struct student
{ ……
……
} s1,s2;
4,结构变量的引用,结构变量名,成员名
5,结构变量所占字节,总是最大成员所占字节的倍数,可由
sizeof 运算符求出。
第 2章 数据类型与表达式例 2.11 结构变量的定义和使用
#include <iostream.h>
struct student
{
int no;
char sex;
int age;
float score;
};
第 2章 数据类型与表达式程序执行结果为:
9901001
m
20
90
16
16
void main()
{
student s1;
s1.no = 9901001;
s1.sex = 'm';
s1.age = 20;
s1.score = 90;
cout << s1.no << endl;
cout << s1.sex << endl;
cout << s1.age << endl;
cout << s1.score << endl;
cout << sizeof(student) << endl;
cout << sizeof(s1) << endl;
}
2.5 C++的构造类型
2.5.2 联合
1,联合,与结构类似,但其所有成员共同占有同一内存空间。
2,联合类型定义的形式,
union 联合名 如,union data
{ {
数据类型 1 成员名 1; int i;
数据类型 2 成员名 2; char ch;
…… float f;
数据类型 n 成员名 n; };
};
第 2章 数据类型与表达式
2.5 C++的构造类型
2.5.2 联合(续)
3,联合变量的定义,联合名 联合变量名;
如 data d1,d2;
4,联合变量的引用,联合变量名,成员名
5,结构变量所占字节,最大成员所占字节数,可由 sizeof 运算符求出。如联合类型 data所占字节数为 4。
第 2章 数据类型与表达式例 2.12 联合变量的定义和使用
#include <iostream.h>
union data
{
int i;
char ch;
float f;
};
第 2章 数据类型与表达式程序执行结果为:
100,d,1.4013e-043
65,A,9.10844e-044
1113456640,,55.5
4
4
void main()
{
data d;
d.i = 100;
cout << d.i << "," << d.ch << "," << d.f << endl;
d.ch = 'A';
cout << d.i << "," << d.ch << "," << d.f << endl;
d.f = 55.5;
cout << d.i << "," << d.ch << "," << d.f << endl;
cout << sizeof(data) << endl;
cout << sizeof(d) << endl;
}
注意:每次对一个成员赋值后,其他成员值也发生变化,是由于他们共同占有同一内存空间
2.5 C++的构造类型
2.5.3 枚举
1,枚举,用标识符表示的整型常量的集合。
2,枚举类型定义的形式,
enum 枚举类型名 { 枚举元素 1,枚举元素 2,…,枚举元素 n };
如,enum weekdays {Sun,Mon,Tue,Wed,Thu,Fri,Sat};
3,枚举元素的值,
若不指定初始值,将自动从 0开始为每个元素赋值。
如 weekdays 的各元素值分别为,0,1,2,3,4,5,6
也可直接指定元素值,如:
enum weekdays {Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat};
则以上 weekdays 各元素的值分别为,7,1,2,3,4,5,6
第 2章 数据类型与表达式
2.5 C++的构造类型
2.5.3 枚举(续)
4,枚举变量的定义,枚举类型名 枚举变量名;
例 2.13 枚举类型的应用
#include <iostream.h>
enum weekdays { Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat };
void main()
{ weekdays someday;
someday = Mon;
cout << someday << endl;
someday = Thu;
cout << someday << endl;
cout << Mon<< Tue<< Wed<< Thu<< Fri<< Sat<< Sun<< endl;
}
第 2章 数据类型与表达式程序执行结果为:
1
4
1234567
返 回谢 谢!