第 2章 数据类型、运算符与表达式
,C语言程序设计,
课程讲义
2006年 4月
上一章节课程回顾
算法的概念
简单算法举例
算法的特性
怎样表示一个算法
结构化程序设计方法
第 2章 数据类型、运算符与表达式
? 2.1 C语言的数据类型
? 2.2 常量和变量
? 2.3 整型数据
? 2.4 实型数据
? 2.5 字符型数据
? 2.6 变量赋初值
? 2.7 各类数值数据之间的混合运算
? 2.8 算术运算符和算术表达式
? 2.9 赋值运算符和赋值表达式
? 2.10 逗号运算符和逗号表达式
2.1 C语言的数据类型
? C语言提供的数据结构,是以数据类型形式出现的。具体
分类如下,
? 1.基本类型
? 分为整型、实型(又称浮点型)、字符型和枚举型四种。
? 2.构造类型
? 分为数组类型、结构类型和共用类型三种。
? 3.指针类型 在第 10章中介绍。
? 4.空类型
? C语言中的数据,有常量和变量之分,它们分别属于上述
这些类型。
? 本章将介绍基本类型中的整型、实型和字符型三种数据。
2.2 常量与变量
? 3.2.1 常量
1.常量的概念
在程序运行过程中,其值不能被改变的量称为常量。
常量可以从字面形式即可判断 -字面常量或直接常量。
? 2.常量的分类
( 1)整型常量(如 12,0,-3为整型常量)
? ( 2)实型常量( 4.6,-1.23为实型常量)
? ( 3)字符常量( ’ a’、’ d’字符常量)
? ( 4)符号常量。
? 3,符号常量:用一个标识符来代表常量,即给某个常量取
个有意义的名字,这种常量称为符号常量。如,
? #define PI 3.1416
? 使用符号常量的好处,
? ( 1)含义清楚、见名知意。( 2)修改方便、一改全改。
? L1:符号常量应用
2.2.2 变量
1.变量的概念
在程序运行过程中, 其值可以被改变的量称为变量 。
2.变量的两个要素
#define PI 3.14
main()
{
float area;
area=10*10*PI;
printf("area=%f\n",area);
}
结果,area=314.000000
2.2 常量与变量
( 1) 变量名 。 每个变量都必须有一个名字 ──变量名, 变量命
名遵循标识符命名规则 。
( 2) 变量值 。 在程序运行过程中, 变量值存储在内存中 。 在
程序中, 通过变量名来引用变量的值 。
C语言中变量:, 先定义, 后使用, 。 也就是说, C要求对所有
用到的变量做强制定义 。
3,标识符命名规则
( 1) 有效字符,只能由字母, 数字和下划线组成, 且以字母
或下划线开头 。
( 2) 有效长度,随系统而异, 但至少前8个字符有效 。 如果
超长, 则超长部分被舍弃 。
例如, 由于 student_name和 student_number的前8个字符
相同, 有的系统认为这两个变量, 是一回事而不加区别 。
在 TC V2.0中, 变量名 ( 标识符 ) 的有效长度为1~32个字
符, 缺省值为32 。
2.2 常量与变量
( 3) C语言的关键字不能用作变量名 。
注意,C语言对英文字母的大小写敏感, 即同一字母的
大小写, 被认为是两个不同的字符 。
习惯上, 变量名和函数名中的英文字母用小写, 以增加
可读性 。
思考题:在 C语言中, 变量名 total与变量名 TOTAL、
ToTaL,tOtAl等是同一个变量吗?
标识符命名的良好习惯 ──见名知意,
所谓, 见名知意, 是指, 通过变量名就知道变量值的含
义 。 通常应选择能表示数据含义的英文单词 ( 或缩写 ) 作变
量名, 或汉语拼音字头作变量名 。
例如, name/xm( 姓名 ), sex/xb( 性别 ), age/nl
( 年龄 ), salary/gz( 工资 ) 。
2.2 常量与变量
2.3 整型数据
? 2.3.1 整型常量
? 1,三种表示形式
? 整型常量即整常数,在C语言中可用三种形式表示,
? ( 1)十进制(数码取值,0~ 9)。例如 10,36。
? ( 2)八进制(以数字0开头,数码取值,0~7)例如 012。
? ( 3)十六进制(以数字0 +小 /大写字母 x开头,数码取值:
A~F或 a~f)。例如 0x36,0X5A。
? 课堂练习:判断以下常量是否合法?
? 9A,0X6G,029,等等
? 类型匹配规则为:一个整型常量,可以赋给能容纳下其值的
整型变量。
? 例如,其值在 -215 --(215 -1)的整型常量,可以赋
给 int型变量和 long int型变量;其值在 -231 --(231 -1)
的整型常量,就只能赋给 long int型变量。
2.3.2 整型变量
1.整型数据在内存中的存放形式(二进制)
2.分类
根据占用内存字节数的不同,整型变量又分为4类,
( 1)基本整型(类型关键字为 int)。
( 2)短整型(类型关键字为 short [int])。
( 3)长整型(类型关键字为 long [int])。
( 4)无符号整型。无符号型又分为无符号基本整型
( unsigned [int])、无符号短整型( unsigned short)
和无符号长整型( unsigned long)三种,只能用来存储
无符号整数。
占用内存字节数与值域
上述各类型整型变量占用的内存字节数,随系统而异。
在 16位操作系统中,一般用2字节表示一个 int型变量,且
long型(4字节) >int型(2字节) ≥short型(2字节)。
2.3 整型数据
显然,不同类型的整型变量,其值域不同。占用内存字节数
为 n的(有符号)整型变量,其值域为,-2n*8-1~( 2n*8-1-1);
无符号整型变量的值域为,0~( 2n*8-1)。
例如,PC机中的一个 int型变量,其值域为 -22*8-1~
( 22*8-1-1),即 -32768~32767;一个 unsigned型变量的值
域为,0~( 22*8-1),即 0~65535。 (看书上 p43表 )
3.整型变量的定义
变量说明的一般形式为,
类型说明符 变量名标识符,变量名标识符,...; 例如,
int a,b,c; (a,b,c为整型变量 )
long x,y; (x,y为长整型变量 )
unsigned int p,q; (p,q为无符号整型变量 )
不同种类的整型数据可以进行算术运算( P44) L2.c
4.整型数据的溢出( P44) L3.c
2.3 整型数据
2.4 实型数据
? 3.4.1 实型常量的表示方法
? 1,十进制小数形式。 由数字 0~ 9和小数点组成(必须有
小数点)。 例如,.123,123.,123.0,0.0
? 2,指数形式。 格式,aEn。( a:十进制数 n:阶码(只
能为整数,可以带符号)) 例如,123e3,123E3都是实
数的合法表示。
? 1)字母 e或 E之前必须有数字,e后面的指数必须为整数。
? 例如,e3,2.1e3.5,.e3,e都不是合法的指数形式。
? 2)规范化的指数形式。在字母 e或 E之前的小数部分,小
数点左边应当有且只 能有一位非 0数字。用指数形式输出
时,是按规范化的指数形式输出的。
? 例如,2.3478e2,3.0999E5,6.46832e12都属于规范化
的指数形式。
? 3)实型常量都是双精度,如果要指定它为单精度,可
以加后缀 f(实型数据类型参看实型变量部分说明)。
2.4.2 实型变量
1,实型数据在内存中的存放形式,一个实型数据一般在
内存中占 4个字节 ( 32位 ) 。
2,实型变量的分类
? 实型变量分为:单精度 (float),双精度 (double) 。
? 单精度:其类型说明符为 float 单精度说明符
? 双精度,double 双精度说明符。在 Turbo C中单精度
型占 4个字节( 32位)内存空间,其数值范围为 3.4E-
38~ 3.4E+38,只能提供七位有效数字。双精度型占 8
个字节( 64位)内存空间,其数值范围为 1.7E-308~
1.7E+308,可提供 16位有效数字。
2.4 实型数据
实型变量说明的格式和书写规则与整型相同。
类型说明符 变量名标识符,变量名标识符,..,
例如,float x,y; (x,y为单精度实型量 )
double a,b,c; (a,b,c为双精度实型量 )
说明
(1).实型常数不分单、双精度,都按双精度 double
型处理。
(2).实型常量可以赋值给一个 float,double,long
double型变量。根据变量的类型截取实型常量中相
应的有效数字。书中 P47,P48
(3).实型数据的舍入误差 L4.c
2.4 实型数据
2.5 字符型数据
? 2.5.1 字符常量
? 1.字符常量的定义
用一对单引号括起来的单个字符,称为字符常量。例如,A’、
‘1’、‘+’等。字符常量的特点,
? 字符常量只能用单引号括起来,不能用双引号或其它括号
? 字符常量只能是单个字符,不能是字符串。
? 字符可以是字符集中任意字符。但数字作为字符型参与数值运算时
数字的值就不是它的 ASCII值。如‘ 5’和 5 是不同的。‘ 5’是字符常
量,参与运算用‘ 5’的 ASCII值 53。 L5.c
2.转义字符
? C语言还允许使用一种特殊形式的字符常量,就是以反
斜杠,\,开头的转义字符。
看书上表 p48
? 注意:如果反斜杠或单引号本身作为字符常量,必须使
用转义字符:‘ \\’、‘ \’‘。分析书上例题( p49) L6.c
2.5.2 字符变量
字符变量的类型关键字为 char,一般占用 1字节
内存单元。
1.变量值的存储
字符变量用来存储字符常量。将一个字符常量
存储到一个字符变量中,实际上是将该字符的
ASCII码值(无符号整数)存储到内存单元中。
例如,
char ch1,ch2; /*定义两个字符变量,ch1,
ch2*/
ch1=?a?; ch2=?b?; /*给字符变量赋值 */
2.5 字符型数据
2.特性
字符数据在内存中存储的是字符的 ASCII码 ── 一个无
符号整数,其形式与整数的存储形式一样,所以C语言允
许字符型数据与整型数据之间通用。
( 1)一个字符型数据,既可以字符形式输出,也可以
整数形式输出。
[L7.c] 字符变量的字符形式输出和整数形式输出。
/*程序功能:用字符形式和整数形式输出字符变量 */
main()
{ char ch1,ch2;
ch1='a'; ch2='b';
printf(“ch1=%c,ch2=%c\n”,ch1,ch2);
printf(“ch1=%d,ch2=%d\n”,ch1,ch2);
}
程序运行结果,
ch1=a,ch2=b
ch1=97,ch2=98
2.5 字符型数据
( 2)允许对字符数据进行算术运算,此时就
是对它们的 ASCII码值进行算术运算 。
[L8.c] 字符数据的算术运算。
/*程序功能:字符数据的算术运算 */
main()
{ char ch1,ch2;
ch1=?a?; ch2=?B?;
/*字母的大小写转换 */
printf(“ch1=%c,ch2=%c\n”,ch1-32,ch2+32);
printf(“ch1=%d,ch2=%d\n”,ch1-32,ch2+32);
}
2.5 字符型数据
2.5.4 字符串常量
1.字符串常量的概念和字符串长度
字符串常量是用一对双引号括起来的若干字符序列。
例如,,How do you do.”、,Good morning.”等,
都是字符串常量,其长度分别为 14和 13(空格也是一个
字符)。
如果反斜杠和双引号作为字符串中的有效字符,则
必须使用转义字符。
例如:( 1) C:\msdos\v6.22 → "C,\\msdos\\v6.22"
( 2) I say:"Goodbye!" → "I say,\"Goodbye!\ " "
2.5 字符型数据
2.字符串的存储
C语言规定:在存储字符串常量时,由系统
在字符串的末尾自动加一个‘ \0?作为字符串的结
束标志。
注意:在源程序中书写字符串常量时,不必
加结束字符‘ \0?,否则画蛇添足。
如果有一个字符串为,CHINA”,则它在内
存中的实际存储如下所示,
C H I N A \0
最后一个字符 '\0'是系统自动加上的,它占用6字节
而非5字节内存空间。
2.5 字符型数据
综上所述, 字符常量 'A'与字符串常量 "A"是两回
事,
( 1) 定界符不同:字符常量使用单引号, 而字
符串常量使用双引号;
( 2) 字符常量只能是单个字符, 字符串常量则
可以含一个或多个字符 。
( 3) 可以把一个字符常量赋予一个字符变量,
但不能把一个字符串常量赋予一个字符变量 。
( 4) 字符常量占一个字节的内存空间 。 字符串
常量占的内存字节数等于字符串中字符数加 1。 增加
的一个字节存放字符 ‘ \0?(ASCII值为 0),这是字符串
的结束标志 。
2.5 字符型数据
2.6 变量赋初值
? 1.定义时赋初值
? int a,b,c=3;
? char c=‘a‘;
? 2.用赋值语句
? float a,b,c;
? a=1; b=2; c=3;
2.7各类数值型数据间的混合运算
? 一, 在C语言中,整型、实型和字符型数据间可以混合
运算(因为字符数据与整型数据可以通用)。
? 如果一个运算符两侧的操作数的数据类型不同,则系统
按“先转换、后运算”的原则,转换的方法有两种:自
动转换(隐式转换);强制转换。
? 1、自动转换(隐式转换)
? 自动转换发生在不同类型数据进行混合运算时,由编译
系统自动完成。转换规则:(参看下页图示)
? ( 1) 类型不同,先转换为同一类型,然后进行运算。
? ( 2)图中纵向的箭头表示当运算对象为不同类型时转
换的方向。可以看到箭头由低级别数据类型指向高级别
数据类型,即数据总是由低级别向高级别转换。即按数
据长度增加的方向进行,保证精度不降低。
( 3)图中 横向向左的箭头表示必定的转换(不必考虑其它
运算对象) 。如字符数据参与运算必定转化为整数,float
型数据在运算时一律先转换为双精度型,以提高运算精度
(即使是两个 float型数据相加,也先都转换为 double型,
然后再相加)。
( 4)赋值运算,如果赋值号,=”两边的数据类型不同,赋
值号右边的类型转换为左边的类型。这种转换是截断型的
转换,不会四舍五入。 L9.c
2.7各类数值型数据间的混合运算
? 2,强制转换
? 强制转换是通过类型转换运算符来实现 。
? 一般形式,( 类型说明符 ) 表达式
? 功能:把表达式的结果强制转换为类型说明符所表示的
类型 。
? 例如,
? (int)a 将 a的结果强制转换为整型量 。
? (int)(x+y) 将 x+y的结果强制转换为整型量 。
? (float)a+b 将 a的内容强制转换为浮点数,再与 b相加
? 说明,
? ( 1) 类型说明和表达式都需要加括号 ( 单个变量可以
不加括号 )
? ( 2) 无论隐式转换, 强制转换都是临时转换, 不改变
数据本身的类型和值 。
2.7各类数值型数据间的混合运算
? L10.c:强制类型转换
? main()
? {
? float f=5.75;
? printf("(int)f=%d\n",(int)f); /* 将 f的结果强制转换为
整型, 输出 */
? printf("f=%f\n",f); /* 输出 f的值 */
? }
? 结果,
? (int)f=5
? f=5.750000
2.7各类数值型数据间的混合运算
? 2.8.1 C运算符简介
? 运算符:狭义的运算符是表示各种运算的符号 。
? C语言运算符丰富, 范围很宽, 把除了控制语句和
输入 /输出以外的几乎所有的基本操作都作为运算符
处理, 所以 C语言运算符可以看作是操作符 。 C语言
丰富的运算符构成 C语言丰富的表达式 ( 是运算符
就可以构成表达式 ) 。 运算符丰富, 表达式丰富,
灵活 。
? 在 C语言中除了提供一般高级语言的算术, 关系,
逻辑运算符外, 还提供赋值运算符, 位操作运算符,
自增自减运算符等等 。 甚至数组下标, 函数调用都
作为运算符 。
2.8 算术运算符和算术表达式
++, --
? C的运算符有以下几类,
本章节主要介绍算术运算符(包括自增自减运
算符)、赋值运算符、逗号运算符,其它运算
符在以后相关章节中结合有关内容陆续进行介
绍。
2.8.2 算术运算符和算术表达式
? 1,基本的算术运算符
? +( 加法运算符 。 如 3+5)
? -( 减法运算符或负值运算符 。 如 5-2,-3)
? *( 乘法运算符 。 如 3*5)
? /( 除法运算符 。 如 5/3,5.0/3)
? %( 模运算符或求余运算符, %要求两侧均为整型数据 。
如 7%4的值为 3) 。
? 除了负值运算符 -单目运算符外, 其它都是双目运算符 。
? 说明,( 1) 两个整数相除的结果为整数, 如 5/3的结果
为 1,舍去小数部分 。 但是如果除数或被除数中有一个为
负值, 则舍入的方向是不固定的, 多数机器采用, 向 0取
整, 的方法 ( 实际上就是舍去小数部分, 注意:不是四
舍五入 ) 。 L11.c
2.8 算术运算符和算术表达式
3.8 算术运算符和算术表达式
? ( 2) 如果参加 +,-,*,/运算的两个数有一个为实
数, 则结果为 double型, 因为所有实数都按
double型进行计算 。
? ( 3) 求余运算符 %,要求两个操作数均为整型,
结果为两数相除所得的余数 。 求余也称为求模 。
一般情况, 余数的符号与被除数符号相同 。
? 例如,-8%5=-3; 8%-5=3 L12.c
2.8 算术运算符和算术表达式
? I、算术表达式
? 算术表达式:用算术运算符和括号将运算对象(也称操
作数)连接起来的、符合 C语法规则的式子,称为算术表
达式。运算对象可以是常量、变量、函数等 。
? 例如, 下面是一个合法的 C算术表达式 。
? a*b/c-1.5+?a?
? 注意,
? C语言算术表达式的书写形式与数学表达式的书写形式
有一定的区别,
? ( 1) C语言算术表达式的乘号 ( *) 不能省略 。 例如:
数学式 b2-4ac,相应的 C表达式应该写成,b*b-4*a*c。
? ( 2) C语言表达式中只能出现字符集允许的字符 。 例如,
数学 πr2相应的 C表达式应该写成,PI*r*r。 ( 其中 PI是
已经定义的符号常量 )
2.算术表达式和运算符的优先级与结合性
? ( 3) C语言算术表达式只使用圆括号改变运算的优
先顺序 ( 不要指望用 {},[]) 。 可以使用多层圆括号,
此时左右括号必须配对, 运算时从内层括号开始, 由
内向外依次计算表达式的值 。
? II,算术运算符的优先级与结合性 (P.375附录 )
? C语言规定了进行表达式求值过程中, 各运算符的
,优先级, 和, 结合性, 。
? ( 1) C语言规定了运算符的, 优先级, 和, 结合
性, 。 在表达式求值时, 先按运算符的, 优先级别,
高低次序执行 。
? 如表达式,a-b*c等价于 a-(b*c),,*” 运算符优先级
高于, -”运算符 。
2.8 算术运算符和算术表达式
? ( 2) 如果在一个运算对象两侧的运算符的优先级别
相同, 则按规定的, 结合方向, 处理 。
? 例如,a-b+c,到底是 (a-b)+c还是 a-(b+c)? ( b先与 a
参与运算还是先于 c参与运算?)
? 附录可知,+/-运算优先级别相同, 结合性为, 自左向
右,, 即就是说 b先与左边的 a结合 。 所以 a-b+c等价
于 (a-b)+c。
? 左结合性 ( 自左向右结合方向 ),运算对象先与左面
的运算符结合 。
? 右结合性 ( 自右向左结合方向 ),运算对象先与右面
的运算符结合 。
? (3)在书写多个运算符的表达式时, 应当注意各个运
算符的优先级, 确保表达式中的运算符能以正确的顺
序参与运算 。 对于复杂表达式为了清晰起见可以加圆括号, ( ), 强制规定计算顺序 。
2.8 算术运算符和算术表达式
? 3,强制类型转换运算符(略)
? 4.自增、自减运算符,
? I.作用
自增运算使单个变量的值增1,自减运算使单个变
量的值减1。
? II.用法与运算规则
自增、自减运算符都有两种用法,
( 1)前置运算 ──运算符放在变量之前:++变量、
--变量
先使变量的值增(或减)1,然后再以变化后的值
参与其它运算,即先增减、后运算。
( 2)后置运算 ──运算符放在变量之后:变量++、
变量--
变量先参与其它运算,然后再使变量的值增(或减)
1,即先运算、后增减。
2.8 算术运算符和算术表达式
? III.说明
? ( 1)自增、自减运算,常用于循环语句中,使循
环控制变量加(或减)1,以及指针变量中,使指
针指向下(或上)一个地址。
? ( 2)自增、自减运算符,不能用于常量和表达式。
? 例如,5++,--(a+b)等都是非法的。
? ( 3)在表达式中,连续使同一变量进行自增或自
减运算时,很容易出错,所以最好避免这种用法。
? 5.有关表达式使用中的问题说明( P58-59)
2.8 算术运算符和算术表达式
1,赋值运算符, 赋值表达式
? 赋值运算符:赋值符号, =”就是赋值运算符 。
? 赋值表达式:由赋值运算符组成的表达式称
为赋值表达式 。 一般形式,
? 〈 变量 〉〈 赋值符 〉〈 表达式 〉
? 赋值表达式的求解过程:将赋值运算符右侧
的表达式的值赋给左侧的变量,同时整个赋
值表达式的值就是刚才所赋的值。赋值的含
义:将赋值运算符右边的表达式的值存放到
左边变量名标识的存储单元中。
2.9 赋值运算符和赋值表达式
? 例如,x=10+y; 执行赋值运算 ( 操作 ), 将 10+y
的值赋给变量 x,同时整个表达式的值就是刚才所
赋的值 。
? 说明,
? ( 1) 赋值运算符左边必须是变量, 右边可以是
常量, 变量, 函数调用或常量, 变量, 函数调用
组成的表达式 。
? 例如,x=10 y=x+10 y=func()都是合法的赋值
表达式 。
? ( 2) 赋值符号, =”不同于数学的等号, 它没有
相等的含义 。 (, ==”相等 ) 例如,C语言中
x=x+1是合法的 ( 数学上不合法 ), 它的含义是
取出变量 x的值加 1,再存放到变量 x中 。
2.9 赋值运算符和赋值表达式
? ( 3) 赋值运算时, 当赋值运算符两边数据类型不
同时, 将由系统自动进行类型转换 。
? 转换原则是:先将赋值号右边表达式类型转换为左
边变量的类型, 然后赋值 。
? ( 4) C语言的赋值符号, =”除了表示一个赋值操
作外, 还是一个运算符, 也就是说赋值运算符完成
赋值操作后, 整个赋值表达式还会产生一个所赋的
值, 这个值还可以利用 。
2.赋值表达式的求解过程是,
?l 先计算赋值运算符右侧的, 表达式, 的值
?l 将赋值运算符右侧, 表达式, 的值赋值给左侧的
变量 。
?l 整个赋值表达式的值就是被赋值变量的值 。
2.9 赋值运算符和赋值表达式
? 例如:分析 x=y=z=3+5这个表达式 。 根据优先
级:原式 ?x=y=z=(3+5);根据结合性 (从右向
左 ),?x=(y=(z=(3+5)))?x=(y=(z=3+5))
? z=3+5:先计算 3+5,得值 8赋值给变量 z,z的
值为 8,(z=3+5)整个赋值表达式值为 8;
? y=(z=3+5):将上面 (z=3+5)整个赋值表达式值 8
赋值给变量 y,y的值为 8,( y=(z=3+5)) 整个赋
值表达式值为 8;
? x=(y=(z=3+5)):将上面 ( y=(z=3+5)) 整个赋
值表达式值 8赋值给变量,z的值为 8,整个表达式
x=(y=(z=3+5))的值为 8。
? 最后, x,y,z都等于 8
2.9 赋值运算符和赋值表达式
运算步骤,
序号 表达式 变量及值 表达式的值
1 z=3+5 z( 8) 8
2 y=(z=3+5) y( 8) 8
3 x=(y=(z=3+5)) x( 8) 8
3、复合赋值运算符
?在赋值符,=”之前加上某些运算符,可以构成复合
赋值运算符,复合赋值运算符可以构成赋值表达式。
C语言中许多双目运算符可以与赋值运算符一起构成
复合运算符,即,
?+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=
将赋值表达式作为表达式的一种,使赋值操作不仅
可以出现在赋值语句中,而且可以以表达式的形式
出现在其它语句中。
2.9 赋值运算符和赋值表达式
? 复合赋值表达式一般形式,
? <变量 ><双目运算符 >=<表达式 > 等价于,
? <变量 >=<变量 ><双目运算符 ><表达式 >
? 例如,
? n+=1 等价于 n=n+1
? x*=y+1 等价于 x=x*(y+1) 注意:赋值运算符, 复
合赋值运算符的优先级比算术运算符低 。
4,赋值运算符, 赋值表达式举例
? ( 1) a=5
? ( 2) a=b=5
? ( 3) a=(b=4)+(c=3)
? ( 4) 假如 a=12,分析,a+=a-=a*a
2.9 赋值运算符和赋值表达式
? 假如 a=12,分析,a+=a-=a*a
? a+=a-=a*a?a+=a-=(a*a)?a+=(a-=(a*a))?
a+=(a=a-(a*a))?a+=(a=a-a*a)?
a=a+(a=a-a*a)
2.9 赋值运算符和赋值表达式
C语言提供一种用逗号运算符,,, 连
接起来的式子, 称为逗号表达式 。 逗
号运算符又称顺序求值运算符 。
1.一般形式
表达式1,表达式2,……,表达式 n
2.10 逗号运算符和逗号表达式
? 例如,3+5,6+8
2.求解过程
自左至右, 依次计算各表达式的值,, 表达式 n”
的值即为整个逗号表达式的值 。
例如, 逗号表达式, a = 3 * 5,a * 4”的值 =60:
先求解 a = 3 * 5,得 a=15;再求 a * 4 = 60,
所以逗号表达式的值 =60。
又例如, 逗号表达式, (a = 3 * 5,a * 4),a + 5”
的值 =20:先求解 a = 3 * 5,得 a=15;再求 a *
4=60;最后求解 a + 5=20,所以逗号表达式
的值 =20。
2.10 逗号运算符和逗号表达式
2.基本类型的分类及特点
类型说明符 字节 数值范围
字符型 char 1 C字符集
基本整型 int 2 -32768~ 32767
短整型 short int 2 -32768~ 32767
长整型 long int 4 -231~ 231-1
无符号型 unsigned 2 0~ 65535
无符号长整型 unsigned long 4 0~ 232-1
单精度实型 float 4 10-38~ 10+38
双精度实型 double 8 10-308~ 10+308
本章小结
1.C的数据类型
基本类型,构造类型,指针类型,空类型
3.常量前缀、后缀
前缀:八进制整常数加 0 十六进制整常数加 0X或
0x
后缀?长整型加?L或 l
4.常量类型
整数,长整数,无符号数,浮点数,字符,字符
串,
符号常数,转义字符。
5.数据类型转换
·自动转换
在不同类型数据的混合运算中,由系统自动实现
转换,由少字节类型向多字节类型转换。 不同类型的
量相互赋值时也由系统自动进行转换,把赋值号右
边的类型转换为左边的类型。
·强制转换
由强制转换运算符完成转换。
课堂同步,做做与练练
1,C语言中的数据的基本类型包括()
A、整型、实型、字符型和逻辑型
B、整型、实型、字符型和结构体
C、整型、实型、字符型和枚举型
D、整型、实型、字符型和指针型
2、在 C语言中,不合法的 int型常量是( )
A,32767 B,0678 C、
0XABC D,32768L
课堂同步,课后练习与作业
3、在 C语言中,运算对象必须是整
型数的运算符是( )
A,% B,\
C,%和 \ D,**
4、简述 ‘ a?和, a”的区别。