1、C+的特点: 1.支持抽象数据类型 2.多态性,一个接口,多重算法,支持早期联编和滞后联编 3.继承性,保证了代码复用,支持分类的概念 一个 c+程序由一个或多个函数构成,并且在这些函数中只有一个主函数main,它是程序执行的入口。 C+程序严格区别字母的大小写。 第 2 章 基本数据类型、运算符与表达式 【内容提要】 数据类型 变量与常量 运算符与表达式 简单输入与输出 【重点与难点】 2.1 数据类型 在 C+程序里,每个名字都有一个与之相关联的类型,这个类型决定了可以对这个名字所指代的实体应用什么 操作,并决定这些操作将如何做出解释。 图中 Type 表示非控数据类型。 2.1.1 基本
2、数据类型 逻辑型:又称布尔型,用关键字 bool 表示。有两个值 true 或 false。 true 可以转换成整数 1, false 可以转换成整数 0。与此对应,整数也可以隐式的转换成 bool 值:非 0的整数转换成 true,0 转换成 false。 数据类型 基本数据类型 复合数据类型 字符型 char 结构类型 struct 枚举类型 enum 单精度型 float 数组类型 Type 双精度型 double 布尔型 bool 浮点型 指针类型 Type* 联合类型 union 类类型 class 空类型 void 整型 int 图 2.1 C+的数据类型 字符型 :用关键字 c
3、har 表示。取值包含具体实现所用的字符集里的一个字符。 字符型数据通常占用 1 个字节的存储空间。 整型:用关键字 int 表示。取值 是计算机所能表示的所有整数。 浮点型 :包括单精度型 (float)和双精度型 (double)。单精度型通常占用 4 个字节的存储空间,双精度型通常占用 8 个字节的空间。 空类型:用关键字 void 表示 。用于说明某个函数没有返回值。没有 void 类型的对象。 在基本的数据类型前可以添加修饰符,以改变基本类型的意义。 signed:有符号。 unsigned:无符号。 unsigned和 signed只用于修饰 char和 int,且 signed修
4、饰词可以省略。当用 unsigned修饰词时,后面的类型说明符可以省略。对于 有符号和无符号的整型数据,它们所占的存储空间的大小相同,但它们的表数范围却不相同(对字符型意义相同)。 short:短型。 只用于修饰 int,且用 short 修饰时, int 可以省略。 long:长型。 只用于修饰 int 和 double。当用 long 修饰 int 时, int 可以省略。 数据类型的描述确定了其内存所占空间的大小,也确定了其表示范围。用 sizeof(数据类型 )可以确定某数据类型的字节长度。请读者查看 在你所用的机器上,下面类型的最大值和最小值是什么: char、 short、 int
5、、 long、 float、 double、 long double 、 unsigned。 2.1.2 复合数据类型 数组: 由具有相同数据类型的元素组成的集合。 结构体: 由不同的数据类型构成的一种混合的数据结构,构成结构体的成员的数据类型一般不同,并且在内存中分别占据不同的存储单元。 共用体: 是类似于结构体的一种构造类型,与结构体不同的是构成共同体的数据成员共用同一段内存单元。 枚举: 将变量的值一一列举出来,每个枚举成员(枚举符)都与一个整数相对应。按默认方式,枚举符所赋的值从 0 开始递增。枚举的值也可以用整型的表达式赋值进行初始化。如果某个 枚举中所有枚举符的值均非负,该枚举的表
6、示范围是 0: 2K -1,其中 2K是能使所有枚举符位于此范围内的最小的 2 的幂;如果存在负的枚举符值,该枚举的取值范围就是 -2K: 2K -1。 指针类型 :指针类型变量用于存储另一变量的地址,而不能用来存放基本类型的数据。它在内存中占据一个存储单元。 类类型 :类是体现面向对象程序设计的最基本特征,也是体现 C+与 C 最大的不同之处。类是一个数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。 2.2 变量与常量 2.1.1 变量: 指在运行期间其值可以改变的量。 变量有三个特征:变量类型、变量名、变量值。 命名:遵循标识符命名规则。 标识符是对实
7、体定义的一种定义符,用来标识用户定义的 常量名、变量名、函数名、文件名、数组名、和数据类型名和程序名 等。 只能由字母、数字和下划线组成,且以字母或下划线开头。命名时注意以下几点: 1 C+的关键字不能用作用户自定义的实体名; 2 以下划线开头的名字是保留给实现或者运行环境,用于特殊目的,在应用程序里不要采用这样的名字; 3 大写与小写字母是区分的; 4 见名知义。 5 维持统一的命名风 格。 定义: 格式: =, typedef:为某种类型声明一个新名字,而不是定义一种新类型。 格式: typedef 2.1.2 常量:程序执行期间其值不变的量。主要有下列几类常量。 布尔常量 字符常量 用
8、单引号 括起的一个字符。在内存中,字符数据以 ASCII 码 存储,如字符 a的 ASCII码为 97。以转义字符 开始的字符常量后跟不同的字符表示不同的特殊字符。 字符串常量 由一对 双引号 括起来的零个或多个字符序列。 字符串可以写在 多行 上,不过在这种情况下必须用反斜线 表示下一行字符是这一行字符的延续。 字符串常量实际上是一个 字符数组 ,组成数组的字符除显示给出的外,还包括字符结尾处标识字符串结束的符号 0 ,所以字符串“ abc”实际上包含 4 个字符: a、 b、 c和 0。 注意字符常量与字符串常量在表示、存储、运算方面的区别。 整型常量 可以用十进制、八进制或十六进制表示。
9、 十进制常量 :一般占一个机器字长,是一个带正负号的常数(默认情况下为正数)。 八进制常量 : 由数字 0 开头 ,其后由若干 0-7 的数字组成,如 0378, 0123 等。 十六进制常量: 以 0x 或 0X 开头 ,其后由若干 0-9 的数字及 A-F(或小写 a-f)的字母组成,如 0x123, 0x3ab。 浮点型常量 只能以十进制形式表示。共有两种表示形式:小数表示法和指数表示法。 如: 11.3、 .2、 2.3e10、 -2.3E-1 等。 枚举常量 枚举声明形式 : enum ; 枚举符可以有两种形式: /= 符号常量 定义形式: const =, ; 表示可选项,以下都采
10、用这 种标记。 定义的符号常量必须初始化。一个符号常量可看作是一个只读变量,由 const 定义的常量的值不可以改变。 const 的最常见的用途是作为数组的界和作为分情况标号。 2.3 运算符与表达式 在程序中,表达式是计算求值的基本单位,它是由运算符和运算数组成的式子。运算符是表示进行某种运算的符号。运算数包含常量、变量和函数等。 C+语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可分为:单目运算、双目运算、三目运算。 C+运算符一览表 名称 运算符 举例 优先级 结合性 作用域区分符 : :x 1 左结合性 分量运算符 . - p.next,p-next 2 函数调用运
11、算符 () fac() 下标运算符 p10 后增量、后减量 前增量、前减量 + - + - p+ -p 2 3 右结合性 求字节运算符 sizeof sizeof(int) 3 正号、负号 + - -1,+3 指针运算符 * 和 delete p; 强制类型转 换运算符 ( type) (int)x 算术运算符 * / % + - 3%5(取模 ) 4 5 左结合性 左移、右移 83, 8 = = != 3b?x:y 14 右结合性 赋值运算符 = 及其扩展( += -= *= /= %= 等) a=2 a+=2 15 逗号运算符 , a=1,b=2,c=3 16 左结合性 表 2.1 C+运
12、算符一览表 2.4 简单输入与输出 在 C+中, I/O 使用了流的概念 -字符(或字节)流。每一个 I/O 设备传送和接收一系列的字节,称之为流。输入操作可以看成是字节从一个设备流入内存,而输出操作可以看成是字节从内存流出到一个设备。要使用 C+标准的 I/O 流库的功能,需要包括两个头文件:iostream.h 用于 提供基本的输入输出功能, iomanip.h 用于 提供格式化的功能。 2.4.1 I/O 的书写格式(基本数据类型的输入输出) 头文件 iostream.h 包含有 cin 和 cout 对象,对应于标准输入流和标准输出流。流读取运算符“ ”表示流的输入,可以从 cin 输
13、入流中读取字符;流插入运算符“ ij; /输入 i, j 的值 2.4.2 使用控制符(基本 数据类型输入输出的格式控制) C+中提供了大量的用于执行格式化输入输出的格式控制符,具体名称及作用请参看表 2.2。 控制符 描述 所在头文件 dec 置基数为 10 iostream.h hex 置基数为 16 oct 置基数为 8 setfill(c) 设填充字符为 c setprecision(n) 设显示小数精度为 n 位 setw(n) 设域宽为 n 个字符 setiosflags(ios:fixed) 固定的浮点显示 iomanip.h setiosflags(ios:scientific
14、) 指数表示 setiosflags(ios:left) 左对齐 setiosflags(ios:right) 右对齐 setiosflags(ios:skipws) 忽略前导空白 setiosflags(ios:uppercase) 16 进制数大写输出 setiosflags(ios:lowercase) 16 进制数小写输出 setiosflags(ios:showpoin) 显示小数点 setiosflags(ios:showpos) 显示符号(正负 号) setiosflags(ios:showbase) 指定在数值前输出进制( 0 表示八进制, 0x 或0X 表示十六进制) 表 2
15、.2 I/O 流的常用控制符 【典型例题】 例题 1:对以下各种数据类型比较所占用存储空间的大小: (1) char、 int、 short int、 long int、 double、 long double. (2) signed int、 unsigned int. 解答: (1) 本题主要考查的知识点是各种类型所占用的存储空间的大小以及相应的 表数范围。在32 位计算机中, char 占 1 个字节, short int 占 2 个字节, int 占 4 个字节, long int 占4 个字节, double占 8 个字节。 sizeof 运算符用于求解某种数据类型的大小。 shor
16、t 和 long在修饰整型时可以省略 int。答案为: (2)对于一种确定的数据类型有符号数与无符号数所占的存储空间相同,表数范围不同。修饰符 signed 和 unsigned 只能用于修饰字符型和整型。答案为: 例题 2:下列哪一项能用作用户自定义的标识符: (a)const (b)2var (c)my name (d)var2 解答: 本题主要考查标识符命名规则。 C+关键字不能用于用户自定义标识符, (a)中 const 是关键字;第一个字符必须是字母或下划线, (b)中 2var 是以数字开头;不能含有空格, (c)中 my name 含有空格。答案为: d。 例题 3:指出下列程序
17、中的错误: _。 int main() const int x; x=100; return 0; 解答: 本题主要考查对符号常量的理解 。 const 定义的符号常量必须初始化 ,由 const 定义的常量的值不可以改变。所以本题有两处错误:第一、没有对符号常量 x 进行初始化;第二、给符号常量赋值是错误的。 例题 4:给下列表达式加上全部的括号 (假设所用变量均已定义 ): (1) a+b-c-%b (2) ab?b:cd?a:cb?b:(cd?a:(cb?(ac?a:c):(bc?b:c)。 ( 2) 主要考查对逻辑表达式的理解和书写。答案为: 1 void main() int a=2
18、,b=4,i=0,x; x=ab coutb 为假,所以表达式 ab double b=23.123456789; cout #include void main() const double pi=3.1415926; cout Void main() int a,b; coutab; a=_a+b_; b=_a-b_; a=_(a-b)/2; cout void main() int num,var1,var2,var3; coutnum; if(num999|num #include void main() int array10; enum monthJan,Feb,Mar,Apr,M
19、ay,Jun,Jul,Aug,Sep,Oct,Nov,Dec; char *p; cout“The size of char is:“sizeof(char)endl “The size of int is:“sizeof(int)endl “The size of short int is:“sizeof(short int)endl “The size of long int is:“sizeof(long int)endl “The size of float is:“sizeof(float)endl “The size of double is:“sizeof(double)endl “The size of long double is:“sizeof(long double)endl “The size of signed int is:“sizeof(int)endl “The size of unsigned int is:“sizeof(unsigned)endl “The size of array is:“sizeof(array)endl “The size of month is:“sizeof(month)endl “The size of p is:“sizeof(p)endl;