计算机所处理的数据以一定形式存放在内存中,数据
的存储方式以及能够进行的合法运算都与数据类型直
接相关。 C++的特点之一就是提供了丰富的数据类型,
以便处理各种不同的数据。 数据类型 总是与运算封装
在一起,本质上是面向对象的。 本章将简要介绍 C++
中的数据类型及相关运算,以及常量、变量、表达式、
语句等,最后介绍简单的输入输出方法。
第二章 C++基础知识
第二章 C++基础知识
2,1 C++的词法单位
2,5 运算符、表达式和语句
2,6 简单的输入输出
2,4 数组与字符数组
2,3 常量和变量
2,2 C++ 中的数据类型
ok
2.1 C++的词法单位
2,1,1 C++的字符集
2,1,2 关键字
2,1,3 标识符 ( ID,identifier)
ok
2.1.1 C++的字符集
ASCII码 字符集是计算机中的常用字符集。
它包括英文字母及阿拉伯数字等 128个字符,
存储一个 ASCII码 占用一个字节 单元。
由于汉字处理的需要,又出现了 汉字国
标码 等对应于不同语言的字符集。国标码
的存储占用两个字节单元。
ok
C++的字符集
26个
小写字母 abcdefghijklmnopqrstuvwxyz
26个
大写字母
ABCDEFGHIJKLMNOPQRST
UVWXYZ
10个
阿拉伯数

0 1 2 3 4 5 6 7 8 9
其他符号 + - * / =,,_, ;? \ " ' ~ | ! # % & () [] {} ^ < > 空格
C++语言使用下列基本字符来构成词法单位:
2.1.1
结束
2.1.2 关 键 字
关键字( keyword) 又称保留字。是
由系统定义的具有特定含义的英文单词。
关键字不能另作它用 。
C++区分大小写,关键字全部由 小写
字母 组成。标准 C++定义了 74个关键字,
具体的 C++编译器还会做一些增删。常用
关键字及分类见表 2.1。
ok
关 键 字
数据类型说
明符与修饰

bool char wchar_t class const double
enum float int long short signed struct
union unsigned void volatile
存储类型说
明符 auto extern inline register static
访问说明符 friend private protected public
其它说明符 asm explicit namespace operator templatethis typedef typename using virtual
语句与标号
break case catch continue default do
else for goto if return switch throw try
while
运算符及逻
辑值 delete false new sizeof true
表 2-1 C++常用关键字及分类
ok
2.1.3 标识符
标识符( Identifier,ID ) 是程序员定义的
“单词”,用来给变量、常量、数据类型、函
数等命名。
合法标识符 由 字母或下划线 开始,由 字母、
数字、下划线 组成,其有效 长度为 1- 31个字
符,长度超过 31个字符者只识别 前 31个字符,
VC++标识符长度为 1- 247个字符 。
建议使用有一定含义的英文单词或拼音序
列作标识符,以提高 可读性 。ok
标识符
例, 判断下面哪些是合法的用户标识符:
MyFile
Salary 94
amount
void
94Salary
Salary94
$amount
f3.5
Num_of_Student
2.1.3
结束
2.2 C++中的数据类型
图 2-1 C++的 数据结构
C++的数
据类型
基本数据
类型
非基本数
据类型
数组 type [ ]
指针 type *
结构 struct
联合 union
枚举 enum
类 class
整 型 int
字符型 char
逻辑型 bool
无值型 void
实 型 float
双精度型 double实 型
ok
C++为强类型语言,所有数据的使用严格遵从
,先说明后使用, 的原则,以便编译器进行编译。
整型 用来存放整数,整数(有符号的整数)
在内存中存放的是它的补码,无符号数没有符
号位,存放的就是原码。整数占用的字节数与
机型有关,32位机上占用 4个字节。
字符型 用来保存字符,存储的是该字符的 ASCII码,
占用一个字节。如大写字母 A的 ASCII码为 65,在对应的
一个字节中存放的就是 65。字符型数据从本质上说也是
整数,可以是任何一个 8位二进制整数。
由于汉语系字符很多,用 ASCII字符集处理远远不够,
因此又创立了双字节字符集( DBCS,double-byte
character set),每个字符用两个字节来编码。为便于
软件的国际化,国际上一些知名公司联合制定了新的宽
字节字符标准 —— Unicode。该标准中所有字符都是双字
节的,不同的语言和字符集分别占用其中一段代码。这
种用统一编码处理西文、中文及其它语言符号,就是
unicode码。 C++同时也支持宽字符类型( wchar_t),或
称双字节字符型 。
实型 和 双精度型 都用来存放实数,两者表示的实数
精度不同。实数在内存中以规范化的浮点数存放,数的
精度取决于尾数的位数,32位机上实型为 23位(因规范
化数的数码最高位恒为 1,不必存储,实际为 24位),双
精度为 52位。
逻辑型 也称 布尔型,其取值为 true(逻辑真)和
false(逻辑假),存储字节数在不同编译系统中可能
有所不同,VC++6.0中为 1个字节。布尔型在运算中可以
和整型相互转化,false对应为 0,true对应为 1或非 0。
无值型 主要用来说明函数的返回值类型,将在函数
一章中具体介绍。
基本数据类型还可以加上一些修饰词,包括:
signed(有符号),unsigned(无符号),long
(长),short(短)。参见下表:
2,2
结束
类 型 名 称 占用字节数 取 值 范 围
bool 布尔型 true,false
(signed) char 有符号字符型 1 -128 ? 127
unsiged char 无符号字符型 1 0 ? 255
(signed) short (int) 有符号短整型 2 -32768 ?32767
unsigned short (int) 无符号短整型 2 0 ? 65535
(signed) int
(signed) 有符号整型 4 -2
31 ?( 231-1)
unsigned (int) 无符号整型 4 0 ?( 232-1)
(signed) long (int) 有符号长整型 4 -231 ?( 231-1)
unsigned long (int) 无符号长整型 4 0 ?( 232-1)
float 实型 4 -1038 ? 1038
double 双精度型 8 -10308 ?10308
long double 长双精度型 8 -10308 ?10308
void 无值型 0 无值
VC++中 所有基本数据类型
2.3 常量和变量
2.3.1 变 量
2.3.2 字符常量
2.3.3 常变量及常量说明符 const
?在程序中,常量和变量是用来表示数据的;
?常量又分为字符常量、常变量;
ok
2.3.1 变 量
1 变量说明 2 变量赋初值
?变量,在程序中是指可以改变值的量;
?变量必须用标识符进行标识,称为 变量名 ;
?变量有 类型 之分,如整形变量、字符变量等;
?任何变量都必须 先说明后使用 ;一是便于编译
程序为变量分配空间,二是便于编译时进行语
法检查;
?变量使用的第一步,是给变量赋 初始值 ;ok
1 变量说明
在 C++中, 变量说明的一般格式为:
,存储类型, 数据类型 变量名 1《,变量名 2,
?,变量名 n,;
下面是变量说明的几个例子:
int i,j,k; //说明三个整型变量 i,j,k
float x,y,z; //说明三个实型变量 x,y,z
char c1,c2; //说明两个字符型变量 c1,c2
double dx; //说明一个双精度型变量 dx
变量
说明
结束
2 变量赋初值
给变量赋初值称为初始化, 有两种方法:
( 1) 变量说明时直接赋初值 。
例如,int a=3,b=4,c=5;
float x=3.0;
( 2) 用赋值语句赋初值 。
例如,float x,e;
x=3.5;
e=2.71828;
2.3.1
结束
2.3.2 字符常量
1,整型常量
4,字符串常量
3,字符型常量
2,实型常量
?字符常量,指程序中直接给出的量;
?常量的值在程序执行过程中保持不变;根
据取值和表示方法的不同,可分为以下几种:
ok
1,整型常量
十进制表示法
八进制表示法
十六进制表示法
其他表示法
?即 整数,可以有多种表示方法;
ok
整数的十进制表示方法
十进制表示与我们熟悉的书写方式相同 。

15 -24 123
ok
整数的八进制表示
八进制表示 以 0开始, 由数字 0?7组成, 用来
表示一个八进制数 。
如,012 //八进制数 12,即十进制数 10
-0655 //八进制数 -655,即十进制数 -429
ok
整数的十六进制表示
十六进制 以 0X( 大小写均可 ) 开始, 由数字
0?9和字母 A?F( 大小写均可 ) 组成, 用来表示一
个十六进制数 。
以下是一些 常整数 的例子:
0x32A //十六进制数 32A,即十进制数 810
-0x2fe0 //十六进制数 -2fe0,
//即十进制数 -12256
ok
整数的其他表示方法
整型常量还可以表示 长整数 和 无符号整数 。
长整型常数以 L 或 l 结尾, 无符号常整数以 U
或 u 结尾, 以 U L 或 L U( 大小写均可 ) 结尾
则可表示无符号长整型常数 。
例如:
-84L //十进制长整数 -84
026U //八进制表示的无符号整数 26
0X32LU //十六进制表示的无符号长整型数 32。
整数
结束
2,实型常量
(1)一般形式 与平时书写形式相同, 由数字
0 ? 9和小数点组成 。 例如:
0.23 -125.76 0.0,46 -35.
(2) 指数形式(也称为科学表示法) 表示为 尾
数乘以 10的次方形式,由 尾数, E或 e和 阶数 组
成 。指数形式要求在 E或 e前面的 尾数部分必须
有数字,后面的 指数部分必须为整数 。
例, 判断下列表示是否合法
123E12
-.34e-2 E4
1.43E3.5
?包含小数点和 10的幂的数为实型常量,有两
种表示方法,C++把实数默认为 double类型
实数
结束
3,字符型常量
字符常量是用单引号引起来的单个字符 。 在
内存中保存的是字符的 ASCII码值 。 在所有字
符中, 有些是可显示字符, 通常就用单引号引
起来表示,′a′ //字符 a
′@′ //字符 @
′4′ //字符 4
′ ′ //空格字符
有些是特殊情况字符, 如不可显示的字符等,
c++使用 转义序列 表示方法, 如 ( 祥见表 2-3,
此处略 ),
′\n′ //换行
′\\′ // 字符 \
字符常
结束
4,字符串常量
字符串常量与字符型常量的区别
字符串常量 ″a″
占两个字节, 存放 ′a′和 ′\0′,值为 0x6100
字符型常量 ′a′
占一个字节, 存放 ′a′,值为 0x61 a\0 a
2.3.2
结束
?用双引号引起来的若干个字符称为字符串常量 。
例如,″I am a Chinese.″,″123″,″a″,″ ″
2.3.3 常变量及常量说明符 const
?用常量说明符 const给字面常量起个名字(标识符),
这个标识符就称为 标识符常量 ;
?因为标识符常量的说明和引用形式很像变量,所以也
称 常变量 ;例如:
const float PI=3.14159;
const int Number_of_Student=100;
?常变量必须也只能在说明时进行初始化;
?常变量初始化之后,不允许再被赋值;
?常变量必须先说明后使用;
?常变量存储在数据区,并且可以按地址访问,编译
时系统对常变量进行类型检查。
?C++建议使用常变量,而不要使用文字常量。
2.3.3
结束
符号常量例子
#include <iostream.h>
Int main()
{ const float Pi = 3.1415926,fR = 2.0;
float fArea;
fArea = Pi * fR * fR;
cout <<,面积为:” << fArea << endl;
}
如果在程序中有这样的语句,合法吗?
fR = 4.0;
2.3.4 宏定义符号常量
#define 宏名 字符序列
上面的例子用宏定义就是以下的程序
#define PI 3.1415926
#define R 2.0
#include <iostream.h>
Int main()
{ float fArea;
fArea = PI * R * R;
cout <<,面积为:” << fArea << endl;
}
2.4 运算符、表达式和语句
2,4,1运算符、优先级和结合性
2,4,2 表达式
2,4,3 算术类型转换和赋值类型转换
2,4,4 强制类型转换运算符
2,4,5 求值次序与副作用
2,4,6 语句
本节的重点 是介绍 与基本数据类型封装在一
起的运算(操作) 。
ok
2.4.1 运算符、优先级和结合性
ok
在 C++中对常量或变量进行运算或处理的符号称为 运算符,
参与运算的对象称为 操作数 。
运算符总是与操作数封装在一起。相同的运算符对不同类
型的操作数执行的运算是有差异的,即运算符要重载。
优先级和结合性决定了运算中的优先关系 。
运算符的优先级 指不同运算符在运算中的优先关系,可
以用序号表示,序号越小,优先级越高。比如:
加号(+)和减号(-)的优先级是 6;乘号( * )和
除号( / )的优先级是 5; * 和 / 的优先级高于+和-。
运算符的结合性 决定 同优先级的运算符对操作数的运算次序。
2.4.1 运算符、优先级和结合性
( 1) a*b+c; //先做乘法运算,再做加法
( 2) a+b-c ; //根据从左到右顺序,先取 a,b相
加;再取 c,最后相减,演示如下:
设 a=10,b=20,c=15;
10
20
15
10
20
+ 30
15
- 15
1 算术运算符
2 关系运算符和逻辑运算符
3 位运算符
4 赋值运算符
5 自增、自减运算
6 sizeof( )运算符
2.4.1 运算符、优先级和结合性
1.算术运算符
优先级 运算符 名 称
3 + 正,单目
- 负,单目
5 * 乘,双目
/ 除,双目
% 求余,双目
6 + 加,双目
- 减,双目
ok
运算符重载:
当两个操作数均为整数时,可进行 整乘 (*)和 整除
(/),结果为整数,除法运算后舍去小数取整。例
如:
5/4 //结果为 1,整数
当两个操作数均为整数,可进行 求余 运算( %),
也称求模运算,结果为两个整数相除后的余数。如
果两个整数中有负数,则先用两数绝对值求余,最
后结果的 符号与被除数相同 。例如
6%3 //结果为 0
6%7 //结果为 6
7%6 //结果为 1
-7%6 //结果为 -1
7%-6 //结果为 1
-7%-6 //结果为 -1
C++中算术运算应注意数据溢出问题,即运算
结果超出对应数据类型的表示范围。 编译程序只会
对除法运算时除数为 0这种情况提示出错,而特别
容易溢出的整数的加、减和乘法运算产生溢出的情
况,系统不作为错误处理,程序将继续执行并产生
错误的计算结果。因此,程序设计者必须在程序中
解决检查并处理整数溢出问题。
只要有一个操作数是实数,两个操作数均转
换为 double型,结果就是实数,同样是乘除操作
是完全不一样的:
5/4.0 //结果为 1.25,实数
2.关系运算符和逻辑运算符
ok
关系运算符都是二元运算符,包括,?(大于),??
(不小于),?(小于),??(不小于),= =(等于)和!
=(不等于)。关系运算符完成两个操作数大小的比较,结
果为逻辑值 true(真 )或 false(假) 。每种 可比较大小 的数
据类型,都重载了关系运算符。不同类型,自动转换为同
一类型后,采用对应关系运算符进行比较。
在 C++中这两个逻辑值与整数之间有一个对应关系,真
对应 1,假对应 0;反过来,0对应假,非 0整数对应真。 所
以关系运算结果可以作为整数参与算术运算、关系运算、
逻辑运算及其他运算。
2.关系运算符和逻辑运算符
设有定义 float a=3.2;int b=5;则,
3>a>b //结果是?
根据右结合
原则其运算
过程如下:
a
5b
3.2
3
> F,
即 0
> F即 0






名 称 语 义
2 ! 逻辑非,
单目
操作数的值为真, 则结
果为假 ;
12 && 逻辑与,
双目
当两个操作数全为真时,
结果为真, 否则为假 ;
13 || 逻辑或,
双目
两个操作数中有一个为
真, 则结果为真 ;
逻辑运算符
逻辑运算符用来进行逻辑运算。其操作数和运
算结果均为 逻辑量 。运算结果同样可以作为一个 整
数 参与其他运算。
由于 逻辑值 和 整数 之间的 对应关系,也允许
整型 和 字符型 操作数进行 逻辑运算,
21&&0 //逻辑与,21与 0,结果为假,0
21||0 //逻辑或,21或 0,结果为真,1
!21 //逻辑非,21的非,结果为假,0
逻辑运算符
3,位运算符
( 1)按位取反运算符,~”
( 2)左移运算符,<<”
( 3)右移运算符,>>”
( 4)按位与运算符,&”
( 5)按位或运算符,|”
( 6)按位异或运算符,^”
ok
c++语言提供字位运算,它对操作数的各个位进行操作。
( 1)按位取反运算符, ~”
将操作数的每个二进制位取反,即 1变为 0,0变为 1。例如,
整数 a的值为 10011011,则 ~a的值为 01100100。
( 2)左移运算符, <<”
运算一般格式为,a<<n
其中 a为整数,n为一个正整数常数。语义为将 a的二进制
数依次向左移动 n个二进制位,并在低位补 0。左移 n位相
当于 乘以 2的 n次方,但移位运算的速度比乘法快。
( 3)右移运算符, >>”
与左移运算符类同,将左操作数向右移动右操作数指定的
二进制位数,忽略移位后的小数部分,并在高位补 0。一
个整数右移 n位相当于 除以 2的 n次方,但比除法快。
在 VC++6.0中有符号数右移时高位补符号位,严格对应除
法。
以上三种单目运算不影响数据本身的值,而是只产生一
个中间量,这个中间量被引用后即不再存在。
( 4)按位与运算符, &”
将两个操作数的对应位逐一进行按位逻辑与运算。运算规则
为:对应位均为 1时,该位运算结果为 1;否则为 0。例如:
a 01001101
b 00001111
a & b 00001101
该运算可用来将整数的某些位置 0,而保留所需要的位,上例
保留了低四位。
( 5)按位或运算符, |”
将两个操作数的对应位逐一进行按位逻辑或运算。运算规则
为:只要有一个数对应位为 1,该位运算结果即为 1;两个数
对应位均为 0,该位结果为 0。例如:
a 01001101
b 00001111
a | b 01001111
该运算符可用来将整数的某些位置 1。上例高四位不变,低四
位全 1。
( 6)按位异或运算符, ^”
将两个操作数的对应位逐一进行按位异或运算。运算规则为:
当对应位的值不同时,该位运算结果为 1,否则为 0。例如:
a 01001101
b 00001111
a ^ b 01000010
该运算符可用来将一个整数的某些位取反,或将整型变量的
值置 0(将整型变量与自身按位异或)。上例低四位取反,
高四位不变。
需要说明的一点是,以上例子中的整数都只取了低 8位一个
字节。
4.赋值运算符
ok
将数据存放到相应存储单元中称为 赋值,如果
该单元中已有值,赋值操作以新值取代旧值;从
某个存储单元中取出数据使用,称为 引用,引用
不影响单元中的值,即一个量可以多次引用。 常
量 只能引用,不能赋值。
赋值通过赋值运算符, =”来完成,其意义是
将赋值号右边的值送到左边变量所对应的单元中。
赋值号不是等号,它具有方向性 。
C++将变量名代表的单元称为, 左值,,而将变
量的值称为, 右值, 。 左值必须是内存中一个
可以访问且可以合法修改的对象,因此只能是变
量名,而不能是常量或表达式 。
例如下面的赋值运算是错误的:
3.1415926=pi; //左值不能是常数
x+y=z; //左值不能是表达式
const int N=30;
N=40; //左值不能是常变量
4.赋值运算符
5.自增自减运算
运算分前置和后置两种,前置是先增减后引用,即先
对变量自加或自减,用新的值参与其他运算; 后置则
是先引用后增减,即用变量原来的值参与其他运算,
然后再对变量进行自加或自减,例如:
int i=5,j=5,m,n;
m=i++; //后置;相当于 m=i; i=i+1;
//结果,i的值为 6,m的值为 5;
n=++j; //前置;相当于 j=j+1;n=j;
//结果,j的值为 6,n的值为 6;
意义:使变量当前值加 1或减 1,再赋给该变量。
要求:操作数只能是 变量,不能是常量或表达式;
ok
6,sizeof( ) 运算符
用于计算一个操作数类型或一个变量的字
节数 。 一般格式为,sizeof (数据类型 )
或 sizeof(变量名 )
例如,sizeof(int) 值为 4
sizeof( float) 值为 4
double x;
sizeof( x) 值为 8
2.5.1
结束
2.5.2 表达式
1 算术表达式
2 关系表达式
3 逻辑表达式和逻辑表达式求值的优化
4 赋值表达式与复合赋值表达式
5 逗号表达式
ok
1.算术表达式
由算术运算符连接的表达式称为算术表达式,
例如,a+b*3 ;
使用时注意:
1、表达式中每个变量都有确定的值时才能进
行表达式求值;
2、考虑到算术运算溢出和精度问题,应避免:
( 1)两个很接近的数直接相减;
( 2)除数是一个很小的数;
( 3)整数的连续乘运算。ok
2.关系表达式
例如:
a>b>c /*等同于 (a>b)>c,先求 a>b 的值,
再将结果 0或 1与 c比较大小 */
a+b>c+d /*等同于 (a+b)>(c+d),
结果为 0或 1*/
y=a>b /*计算 a>b的值 0或 1
赋给 y,y的值为 0或 1*/
由关系运算符连接的表达式。值为 true或 false。
ok
3.逻辑表达式和逻辑表达式求值的优化
由逻辑运算符连接的表达式称为逻辑表达式 。 逻辑表达式的
值为 true或 false。 这个值可对应整数 1或 0参与其他运算 。
ok
已知, int a=10,b=20,c=30;float x=1.8,y=2.4;
a<b&&x>y||a<b-!c
按 优先级 与 结合性,其 求值顺序 等同于:
(a<b)&&(x>y)||(a<(b-(!c)))
t1=1 t2=0 t4=0-
&&
t3=0
t5=b<
t6=1||
得整个表达式的值为:
① ②
③ ⑥



1
3.逻辑表达式和逻辑表达式求值的优化
在求逻辑表达式值的过程中,一旦表达式的
值能够确定,就不再逐步进行下面的运算。
称为, 求值优化, 。
已知, int a=10,b=20,c=30;
求,a<b || c++ //结果以及 a,b,c的值
t1=1

整个表达式的值为 1
可见, 表达式 c++ 已不需要计算
所以, c不变仍为 30
编程人员在使用逻辑运算时应当加以小心,优化计算固然
提高了运算效率,但可能产生副作用。 所谓副作用,就是
出乎设计人员的意料,得到预想不到的结果。
4.赋值表达式与复合赋值表达式
赋值表达式的格式为:
变量 = 表达式 例如,x=5+6;a=b=c=d+1;
在 C++中,所有的双目算术运算符和位运算符均可与
赋值运算符组合成一个单一运算符,称为 复合运赋值
算符 。包括以下 10个:
+ = – = * = / = % = <<= >>= &= | = ^ =
复合赋值运算符的要求与格式与赋值运算符完全相同,
表示为:
变量 复合赋值运算符 表达式
它等同于
变量 = 变量 运算符 表达式
例如,x+=5 等同于,x=x+5
ok
5,逗号表达式
C++中, 逗号既是分隔符, 又是运算符,
用逗号连接起来的表达式称为逗号表达式 。
一般格式为:
表达式 1,表达式 2,…, 表达式 n
逗号表达式中的每一个表达式都会被运算,
整个逗号表达式的值为最后一个表达式的值 。
例如,a=(x=3,x+=6,5+6); //a=11 x=9
2.5.2
结束
2.5.3算术类型转换和赋值类型转换
1 不同类型数据的混合运算
2 赋 值 类 型 转 换ok
运算过程中,当某个二元运算符两边的操作数类型不同但
属于类型相容时,系统先将精度低的操作数变换到与另一
操作数精度相同,而后再进行运算。
所谓类型相容,指的就是类型不同但系统可以
自动进行转换。
当赋值号的左值和右值类型不一致但属于类型相容时,
由系统自动进行类型转换。
1.不同类型数据的混合运算
char
short
int
long
unsigned char
unsigned short
unsigned int
unsigned long
float
double
long double
数据类型转换方向
ok
具体规则如下:
( 1) 字符 可以作为 整数 参与数值运算,整数值为其 ASCII码 。
( 2)操作数为字符或短整型时,系统自动变换成 整型 。
( 3)操作数为实型时,系统自动变换成 双精度型 。
( 4)其余情况,当两操作数类型不同时,将精度低(或表示
范围小)的操作数的数据类型变换到与另一操作数类型相同再
进行运算
例如有变量,
char c1,c2; int i1,i2; float x1,x2;
则表达式
x2=c1*i1+c1*x1+c1*c2
的求值过程为:将 c1转换成整型,完成 c1*i1,结果表示为
t1;将 c1和 x1均转换成双精度型,完成 c1*x1,结果表示为
t2;将 c1和 c2均转换成整型,完成 c1*c2,结果表示为 t3;
然后 t1转换成双精度型,完成 t1+t2,结果表示为 t4;将 t3
转换成双精度型,完成 t4+t3,最后结果转为单精度型赋给
x2。
2.赋值类型转换
2.5.3
结束
系统自动进行类型转换规则:
1、实型数赋给整形变量:取整;注意溢出;
2、整型数赋给实型变量:先转换为实型数;
3、字符型数赋给整形变量,ASCII码为依据;
分为两种情况:符号位是 0或 1时不同;
若符号位为 1,则低位字节不变,高位字节全部置 1再
赋值。
4、绝对值较大的数赋给表达范围较小的数据
类型时,注意溢出;
2.4.4 强制类型转换运算符
ok
其格式为:
(<type>) <表达式 > //形式一
或 <type> (<表达式 >) //形式二
作用,将表达式强制转换为 <type>类型,
但表达式的值及其类型不变。
任意数据类型
赋值运算中,当左值与右值类型不一致时,
系统将按照 左值 的类型,自动 进行强制转换 。
例如, 设有以下定义 double x=2.3,y; int i=2,j;
(1) j 2.3 x2.3… …22
(1) j=x; (2) y=i; 由 系统 按
左值 j, y
类型 自动
完成强制
转换功能
(2) y 2 i
2…

2.02.0
2.5.4 强制类型转换运算符
2.4.5 求值次序与副作用
ok
在符合优先级和结合性的前提下,C语言的标准对
表达式中各操作数的求值次序没有做统一规定。
编译器为提高代码质量,在不影响优先级和结合性
的前提下也要对操作数的访问次序作调整。在安排
顺序时,如果某个操作数经历了求值运算,那么这
个求值可能影响到其他操作数的值,这时就会产生
副作用 。
例如,设有 int a=2,b=5,c; 对表达式
c=a*b+(++a)+(b=10)
三个同级运算中,是先算 a*b,还是 ++a,还是 b=10,
其次再算哪个?显然求值次序不同将导致结果不同。
2.4.6 语句
1 表达式语句,表达式;
2 空语句,;
3 复合语句,{ //若干语句 }
4 流程控制语句,实现三种基本结构的语句;
2.5
结束
2.5 C++简单输入输出
cin用来在程序执行期间给变量输入数据,
一般格式为:
cin>>变量名 1,>>变量名 2>>…>>变量名 n,;
cout实现将数据输出到显示器的操作,
一般格式为:
cout<<表达式 1,<<表达式 2<<…<<表达式 n,;
同时必须在程序开头增加一行:
# include <iostream.h>
ok
字符的输入输出
cin 与 cinget( )的区别
( 1) cin
例如, char c1,c2,c3;
cin>>c1; //A
cin>>c2>>c3;
程序执行到 A行时, 等待用户输入数据 。
若输入,A b c <CR>
则 cin分别将字符 A,b,c赋给变量 c1,c2、
c3。
cin自动跳过输入的 空白 字符 ( 包括空格, 制表,
backspace和回车等 ) 。
ok
字符的输入输出
( 2) cinget()
例如,char c1,c2,c3,c4;
cin.get (c1); //B
cin.get (c2);
cin.get (c3);
程序执行到 B行时, 若输入,A b<CR>
则执行结果是:字符 ′A′、空格、字符 ′b′分别
赋给变量 c1,c2,c3;输入行中仍保留回车符。
cin.get()把从键盘上输入的所有字符,包括
空白 字符,都作为输入字符赋给字符变量
ok
字符的输入输出
关于字符的输出,请看下例,假定字符 c1,c2、
c3的值分别为字符 ′a′,′b′和 ′c′,执行以下语
句序列:
cout<<c1<<′\t′<<c2<<′\n′;
cout<<c3<<endl;
cout<<′O′<<′k′<<endl;
屏幕上将输出:
a b
c
Ok
输出时字符之间是无间隔的,如果想让字符间有
间隔,必须输出间隔符
2,字符串常量的输出
请看下例:
char c1,c2,c3;
cout<<”Input c1,c2,c3:”<<endl;
cin>>c1>>c2>>c3; //C
cout<<”c1 is, <<c1<<′\t′
<<”c2 is, <<c2<<′\t′
<<”c3 is, <<c3<<endl;
程序执行后首先输出,Input c1,c2,c3:
然后暂停在 C行等待数据输入,若此时输入:
a b c <CR>
程序继续执行并输出结果:
c1 is a c2 is b c3 is c
可以看出,双引号中的的字符串常量照原样输出 。
ok
3,十进制数据的输入输出
请看下例:
int i,j; float x,y;
cout<<”Input i,j,x,y:”<<endl;
cin>>i>>j; //D
cin>>x>>y;
cout<<”i=”<<i<<′\t′<<”j=”<<j<<endl;
cout<<”x+y=”<<x+y<<endl;
若输入,10 20 4.5 8.6 <CR>
则程序输出:
i=10 j=20
x+y=13.1
输出时各数据间是无间隔的,因此应当有意输出一些
间隔符
ok
如果要求按八进制或十六进制输入输出, 在 cin或 cout
中必须指明相应的数据形式, oct为八进制, hex为十六
进制, dec为十进制 。 例如:
int i,j,k,l;
cout<<”Input i(oct),j(hex),k(hex),
l(dec):”<<endl;
cin>> oct>> i; //输入为八进制数
cin>> hex>> j; //输入为十六进制数
cin>> k; //输入仍为十六进制数
cin>> dec>> l; //输入为十进制数
cout<<” hex:”<<” i=”<< hex<< i<< endl;
cout<<” dec:”<<” j=”<< dec<< j<<′\t′;
cout<<” k=”<< k<< endl;
cout<<” oct:”<<” l=”<< oct<< l;
cout<< dec << endl; //恢复十进制输出状态
ok
4,输入输出的格式控制
( 1)各种进制数据的输入输出
执行时输出:
Input i(oct),j(hex),k(hex),l(dec):
此时从键盘输入:
032 0x3f 0xa0 17 <CR>
则输出结果为:
hex:i=1a
dec:j=63 k=160
oct:l=21
由于已经在 cin中指明数制,因此从键盘输入时,八进制
和十六进制数可以省略其开头的 0和 0x标志。
在 cin或 cout中指明数制后,该数制将一直有效,直到重
新指明用其他数制。
特别注意,输入数据的 格式、个数和类型 必须与 cin中的
变量一一对应,否则不仅使输入数据错误,而且影响后
面其他数据的正确输入。
4,输入输出的格式控制
为了使数据间隔开, 还可以用 C++提供的函数 setw() 指定
输出数据项的宽度 。 例如:
int i=2,j=3;
float x=2.6,y=1.8;
cout<<setw(6)<<i<<setw(10)<<j<<endl;
cout<<setw(10)<<i*j<<endl;
cout<<setw(8)<<x<<setw(8)<<y<<endl;
输出结果为:
2 3
6
2.6 1.8
使用 setw() 必须在程序的开始处增加:
#include <iomanip.h>
ok
( 2)设置数据间隔