.10. 第二讲C+编程基础 ·C+分隔符:逗号、冒号、分号、空格、()、{} ·C+注释:有两种注释方式,分别是 (1)单行注释:/1 (2)块(多行)注释:**/ 2.2.2C+数据类型 C+的数据类型可分为基本数据类型(fundamental types,有时也称原生数据类型)和复合(com pound types,也称派生或扩展)数据类型. ·基本数据类型:整型,实型,字符型(char)和布尔型(bool) ()整型:int,short,long,1ong1ong unsigned int,unsigned short,unsigned long,unsigned long long (2)实型:f1oat,doub1e,1 ong double 表2.2.C+基本数据类型 数据类型|关键字 所占字节 表示范用 short 2 =215915-1 int 214 -215215-1/-231~231-1 long 418 -231231-1/-263263-1 整型 long long 8 -263263-1 unsigned short 2 0216-1 unsigned int 214 0216-1/0~232-1 unsigned long 418 0~232-110264-1 unsigned long long 8 0~264-1 float 4(6位有效数字10-38~1035 实型 double 8(15位有效数字|10-308~10308 long double 16(18位有效数字10-932~10932 布尔型|boo1 1 true,false 字符型 char 1 白注记:事实上,C+标准没有规定每种数据类型的具体字节数和表示范围,只规定大小顺序, 即长度满足下面的关系式 char <short <int <long <long long 具体长度由处理器和编译器决定, ·复合(派生、扩展)数据类型:数组,指针,引用,枚举,结构,联合,类,等等 http://math.ecnu.edu.cn/-jypan
· 10 · 第二讲 C++ 编程基础 • C++ 分隔符: 逗号、冒号、分号、空格、( )、{ } • C++ 注释: 有两种注释方式, 分别是 (1) 单行注释: // (2) 块(多行)注释: /* */ 2.2.2 C++ 数据类型 C++ 的数据类型可分为基本数据类型(fundamental types, 有时也称原生数据类型)和复合(compound types,也称派生或扩展)数据类型. • 基本数据类型: 整型, 实型, 字符型(char)和布尔型(bool) (1) 整型: int, short, long, long long, unsigned int, unsigned short, unsigned long, unsigned long long (2) 实型: float, double, long double 表 2.2. C++ 基本数据类型 数据类型 关键字 所占字节 表示范围 short 2 −2 15 ∼ 2 15 − 1 int 2 / 4 −2 15 ∼ 2 15 − 1 / −2 31 ∼ 2 31 − 1 long 4 / 8 −2 31 ∼ 2 31 − 1 / −2 63 ∼ 2 63 − 1 整型 long long 8 −2 63 ∼ 2 63 − 1 unsigned short 2 0 ∼ 2 16 − 1 unsigned int 2 / 4 0 ∼ 2 16 − 1 / 0 ∼ 2 32 − 1 unsigned long 4 / 8 0 ∼ 2 32 − 1 / 0 ∼ 2 64 − 1 unsigned long long 8 0 ∼ 2 64 − 1 float 4 (6 位有效数字) 10−38 ∼ 1038 实型 double 8 (15 位有效数字) 10−308 ∼ 10308 long double 16 (18 位有效数字) 10−4932 ∼ 104932 布尔型 bool 1 true, false 字符型 char 1 b 注记:事实上, C++ 标准没有规定每种数据类型的具体字节数和表示范围, 只规定大小顺序, 即长度满足下面的关系式 char <= short <= int <= long <= long long 具体长度由处理器和编译器决定. • 复合(派生、扩展)数据类型: 数组, 指针, 引用, 枚举, 结构, 联合, 类, 等等 http://math.ecnu.edu.cn/~jypan 仅供课堂教学使用,请勿外传
2.2C+基础知识 .11 -int -short 整型 long unsigned int unsigned shor unsigned long 其本 -float 数据类型 实型 double -long double 字符型 C++ 数据类型 布尔型 -bool 枚举 引用、指针 复合 数据类型 数组、字符串 结构、联合、类 void、longlong、wchar_t.charl6.char32.t、函数 ·数据类型的转换 ()自动转换/隐式转换 ·相同类型的数据进行运算时,其结果仍然是同一数据类型,如3/2的结果是1: 不同类型的数据进行运算时,需要先转换成同一数据类型,然后再进行相应的运算 转换按数据长度增加的方向进行,以尽可能地保证精度不会降低: 所有的浮点运算都是以双精度进行的: 赋值号两边的数据类型不同时,需先将右边表达式的值转换为左边数据的类型,然后再赋值: char型数据和short型数据进行运算时,需转换成1nt型; 字符变量直接参与算术运算时,先转化位相应的ASCI码,然后进行运算。 char-->short-->int-->unsigned-->long -->unsigned long-->double <--float http://math.ecnu.edu.cn/-jypan
2.2 C++ 基础知识 · 11 · C++ 数据类型 基本 数据类型 复合 数据类型 整型 实型 字符型 布尔型 int short long unsigned int unsigned short unsigned long float double long double char bool 枚举 数组、字符串 结构、联合、类 引用、指针 void、long long、wchar_t、char16_t、char32_t、函数 • 数据类型的转换 (1) 自动转换/隐式转换: 相同类型的数据进行运算时, 其结果仍然是同一数据类型, 如 3/2 的结果是 1; 不同类型的数据进行运算时, 需要先转换成同一数据类型, 然后再进行相应的运算; 转换按数据长度增加的方向进行, 以尽可能地保证精度不会降低; 所有的浮点运算都是以双精度进行的; 赋值号两边的数据类型不同时, 需先将右边表达式的值转换为左边数据的类型, 然后再赋值; char 型数据和 short 型数据进行运算时, 需转换成 int 型; 字符变量直接参与算术运算时, 先转化位相应的 ASCII 码, 然后进行运算. char ‐‐> short ‐‐> int ‐‐> unsigned ‐‐> long ‐‐> unsigned long ‐‐> double <‐‐ float http://math.ecnu.edu.cn/~jypan 仅供课堂教学使用,请勿外传
.12 第二讲C+编程基础 (2)强制转换/显式转换 类型标识符(表达式)1川C+风格,将表达式的值转化为指定的教据类型 (类型标识符)表达式1/C语言风格,作用同上 例2.1(类型转换)已知有下面的代码 1nta=2,b=5; x,y,zi 1=2.8 y double(b)/a;/y=2.5 z=double(b/a);//z =2.0 ()由于a和b都是整型,因此表达式b/a的值也是整型,即b/a=2.将其赋值给doub1e型 变量×,因此x=2.6. (2)在计算doub1e(b)/a时,先将b的值转化为doub1e型(注意,不是将b转化为doub1e 型,变量b的类型是不会改变的,然后与a相除.由于是一个doub1e型的数据与一个 int型的数据讲行运算.所以系统会自动将int型的数据转化为double型的数据.然 后再做运算.所以最后的结果是2.5. (3)在计算doub1e(b/a)时,是先计算b/a,然后将结果转化为double型,所以最后的结 果是z=doub1e(2)=2.0 (④)需要注意的是,变量a,b的类型在整个计算过程中是始终不变的,即一直是1t型. 白注记:类型转换是临时性的,类型转换不会改变变量本身的数据类型! (5)类型转换规则: ·浮点型转整型:直接丢掉小数部分 ,字符型转整型:取字符的ASCI码: 整型转字符型:ASCI码对应的字符 例2.2已知有下面的代码 i=3.6;cout <"i="<<i<endlj //1=3 a=90;’cout "a=c<aendl;∥a=2 2.2.3变量与常量 ()变量:存储数据,值可以改变 ·变量名:命名规则与标识符相同 ·变量必须先声明,后使用;先赋值,后使用 ·变量声明: 类型标识符变量名列表; http://math.ecnu.edu.cn/-jypan
· 12 · 第二讲 C++ 编程基础 (2) 强制转换/显式转换 ✞ ☎ 类型标识符(表达式) // C++风格, 将表达式的值转化为指定的数据类型 (类型标识符)表达式 // C 语言风格, 作用同上 ✝ ✆ 例 2.1 (类型转换) 已知有下面的代码 1 int a=2, b=5; 2 double x, y, z; 3 x = b/a; // x = 2.0 4 y = double(b)/a; // y = 2.5 5 z = double(b/a); // z = 2.0 (1) 由于 a 和 b 都是整型, 因此表达式 b/a 的值也是整型, 即 b/a=2. 将其赋值给 double 型 变量 x, 因此 x=2.0. (2) 在计算 double(b)/a 时, 先将 b 的值转化为 double 型 (注意, 不是将 b 转化为 double 型, 变量 b 的类型是不会改变的!), 然后与 a 相除. 由于是一个 double 型的数据与一个 int 型的数据进行运算, 所以系统会自动将 int 型的数据转化为 double 型的数据, 然 后再做运算. 所以最后的结果是 2.5. (3) 在计算 double(b/a) 时, 是先计算 b/a, 然后将结果转化为 double 型, 所以最后的结 果是 z=double(2)=2.0 (4) 需要注意的是, 变量 a, b 的类型在整个计算过程中是始终不变的, 即一直是 int 型. b 注记:类型转换是临时性的, 类型转换不会改变变量本身的数据类型! (5) 类型转换规则: 浮点型转整型: 直接丢掉小数部分; 字符型转整型: 取字符的 ASCII 码; 整型转字符型: ASCII 码对应的字符. 例 2.2 已知有下面的代码 1 int i; 2 char a; 3 i=3.6; cout << "i=" << i << endl; // i=3 4 i=‐3.6; cout << "i=" << i << endl; // i=‐3 5 i='m'; cout << "i=" << i << endl; // i=109 6 a=90; cout << "a=" << a << endl; // a=Z 2.2.3 变量与常量 (1) 变量: 存储数据, 值可以改变 • 变量名: 命名规则与标识符相同 • 变量必须先声明, 后使用; 先赋值, 后使用. • 变量声明: ✞ ☎ 类型标识符 变量名列表; ✝ ✆ http://math.ecnu.edu.cn/~jypan 仅供课堂教学使用,请勿外传
2.2C+基础知识 13 。可以同时声明多个变量,用逗号隔开 变量声明时可以初始化:两种方式(赋值运算符和小括号),例如 it1,j,k=0;/同时声明3个整型变量,但只对支量k进行初始化 2 doub1eX(3.1415);//等价于doub1ex=3.1415; 3 char c; (2)常量(常数):在程序运行中值不能改变的量 ·整型常量:整数,后面加1或L表示长整型,后面加u或U表示无符号整型,后面加11或LL表 示1ong1one: ·实型常量:缺省为双精度实数,后面加f或F表示单精度,加1或L表示1 ong doub1e ·字符型常量:用单引号括起来的单个字符和转义字符: ·字符串常量:用双引号括起来的字符序列; 。布尔常量:true和false. 例:下面都是常量 123,-456,123L,456U ()符号常量:用标识符表示常量 ·声明方式: const类型标识符变量名=值; 例:声明符号常量 con5tf1oatP1-3.1415926; ·符号常量在声明时必须初始化 ·符号常量的值在程序中不能被修改(即符号变量不能被重新赋值) 2.2.4 typedef与枚举 ()typedef:为一个已有的数据类型另外命名(取别名),可以取一个别名,也可以取多个别名. typedef已有类型名新类型名表; 例:为一个已有的数据类型另外命名 volume;/为double取两个别名area和volume /为int取别名natural natural i,j;/等价于inti,j: http://math.ecnu.edu.cn/-jypan
2.2 C++ 基础知识 · 13 · 可以同时声明多个变量, 用逗号隔开 变量声明时可以初始化: 两种方式(赋值运算符和小括号), 例如 1 int i, j, k=0; // 同时声明 3 个整型变量, 但只对变量 k 进行初始化 2 double x(3.1415); // 等价于 double x=3.1415; 3 char c; (2) 常量 (常数): 在程序运行中值不能改变的量 • 整型常量: 整数, 后面加 l 或 L 表示长整型, 后面加 u 或 U 表示无符号整型, 后面加 ll 或 LL 表 示 long long; • 实型常量: 缺省为双精度实数, 后面加 f 或 F 表示单精度, 加 l 或 L 表示 long double • 字符型常量: 用单引号括起来的单个字符和转义字符; • 字符串常量: 用双引号括起来的字符序列; • 布尔常量: true 和 false. 例: 下面都是常量 1 123, ‐456, 123L, 456U; 2 1.2, 1.2F, 1.2L, 1.2e8, 1.2e8F, 1.2e‐8L 3 'M', 'A', 'T', 'H', '?', '$' 4 "MATH@ECNU" (3) 符号常量: 用标识符表示常量 • 声明方式: ✞ ☎ const 类型标识符 变量名 = 值; ✝ ✆ 例: 声明符号常量 1 const float PI=3.1415926; • 符号常量在声明时必须初始化; • 符号常量的值在程序中不能被修改(即符号变量不能被重新赋值) 2.2.4 typedef 与枚举 (1) typedef: 为一个已有的数据类型另外命名(取别名), 可以取一个别名, 也可以取多个别名. ✞ ☎ typedef 已有类型名 新类型名表; ✝ ✆ 例: 为一个已有的数据类型另外命名 1 typedef double area, volume; // 为 double 取两个别名 area 和 volume 2 typedef int natural; // 为 int 取别名 natural 3 natural i, j; // 等价于 int i, j; http://math.ecnu.edu.cn/~jypan 仅供课堂教学使用,请勿外传
.14 第二讲C+编程基础 area s: (2)枚举:定义新的数据类型 enum枚举类型名{变量可取值列表,即救举元素}; 。“枚举元素”按符号常量处理: 。枚举元素的缺省值,按顺序依次为:0,1,2,: ·也可以在声明时指定“枚举元素”的值,如: ·枚举值可以进行关系运算; ·整数值不能直接赋给枚举变量,需进行强制类型转换 2.2.5运算与表达式 ·运算符 (1)算术运算符:+、-、*、/、%、+(自增)、(自减) (2)赋值运算符:=、+=、 -=、*=、/=、=、&=、=、 =、>=、< (3)逗号运算符:,(把若干表达式组合成一个表达式) (④关系运算符:用于比较运算,>、<、、=、<、 (⑤)逻辑运算符:用于逻辑运算,&、川、! (6条件运算符:?:,是一个三目运算符,用于条件求值 (7)求字节数运算符:sizeof(变量/数据/类型标识符) (⑧)位操作运算符:按二进制位进行运算,&、|、~、^(异或)、<(左移)、>(佑移) (9)指针运算符:*(取内容)、&(取地址) ·运算符优先级(可参见课程主页) ·C+语句 (1)空语句(只有分号) (2)声明语句: (③)表达式语句(赋值表达式): (④复合语句(将多个语句用(}括起来组成的一个语句); (⑤)选择语句,循环语句,跳转语句,等等。 ·表达式与表达式语句 ()表达式:由运算符连接常量、变量、函数等所组成的式子 (2)表达式语句:表达式后加分号 ()表达式中的运算符包含赋值运算符:赋值表达式的值是赋值号左边变量的值: (④)表达式可以包含在其它表达式中,但语句不行! ·赋值语句 (1)标准赋值语句 变量=表达式; http://nath.ecnu.edu.cn/-jypan
· 14 · 第二讲 C++ 编程基础 4 area s; // 等价于 double s; 5 volume v; // 等价于 double v; (2) 枚举: 定义新的数据类型 ✞ ☎ enum 枚举类型名 {变量可取值列表, 即枚举元素}; ✝ ✆ •“枚举元素”按符号常量处理; • 枚举元素的缺省值, 按顺序依次为: 0, 1, 2, ...; • 也可以在声明时指定“枚举元素”的值, 如: • 枚举值可以进行关系运算; • 整数值不能直接赋给枚举变量, 需进行强制类型转换. 2.2.5 运算与表达式 • 运算符 (1) 算术运算符: +、‐、*、/、%、++ (自增)、‐‐ (自减) (2) 赋值运算符: =、+=、‐=、*=、/=、%= 、&=、|=、^=、>>=、<<= (3) 逗号运算符: , (把若干表达式组合成一个表达式) (4) 关系运算符: 用于比较运算, >、<、==、>=、<=、!= (5) 逻辑运算符: 用于逻辑运算, &&、||、! (6) 条件运算符: ? : , 是一个三目运算符, 用于条件求值 (7) 求字节数运算符: sizeof (变量/数据/类型标识符) (8) 位操作运算符: 按二进制位进行运算, &、|、~、^ (异或)、<< (左移)、>> (右移) (9) 指针运算符: * (取内容)、& (取地址) • 运算符优先级(可参见课程主页) • C++ 语句 (1) 空语句(只有分号) (2) 声明语句; (3) 表达式语句(赋值表达式); (4) 复合语句(将多个语句用 { } 括起来组成的一个语句); (5) 选择语句, 循环语句, 跳转语句, 等等. • 表达式与表达式语句 (1) 表达式: 由运算符连接常量、变量、函数等所组成的式子; (2) 表达式语句: 表达式后加分号; (3) 表达式中的运算符包含赋值运算符; 赋值表达式的值是赋值号左边变量的值; (4) 表达式可以包含在其它表达式中, 但语句不行! • 赋值语句 (1) 标准赋值语句 ✞ ☎ 变量=表达式; ✝ ✆ http://math.ecnu.edu.cn/~jypan 仅供课堂教学使用,请勿外传