C语言教学课件之第3章数据类型表达式.ppt
嘉应学院杨久红嘉应学院杨久红20102010年末年末没有规矩,不成方圆。没有规矩,不成方圆。13.1 C的数据类型的数据类型3.2 常量与变量常量与变量3.3 整型数据整型数据3.4 实型数据实型数据第3章 数据类型、运算符与表达式第第2张张嘉应学院杨久红嘉应学院杨久红20102010年末年末3.5 字符型数据字符型数据3.6 变量赋初值变量赋初值3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算3.8 算术运算符和算术表达式算术运算符和算术表达式3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式3嘉应学院杨久红嘉应学院杨久红20102010年末年末本章大纲数据类型、运算符与表达式(数据类型、运算符与表达式(7 7学时)学时)教学内容:教学内容:1.C的数据类型:基本数据类型;自定义的数据类型2.常量和变量:符号常量与一般常量;变量的定义和赋值3.各类型数据的混合运算4.运算符与表达式:算术运算符;关系运算符与逻辑运算符;表达式的执行顺序4嘉应学院杨久红嘉应学院杨久红20102010年末年末基本要求:基本要求:1.了解C语言的数据类型;2.了解常量的概念、常量的分类;3.了解整型、实型和字符型数据的存储形式;4.掌握变量的概念、变量的分类及变量的初始化方法;5.掌握各类数值型数据间的混合运算规则;6.掌握常见的各种运算符及表达式;7.理解运算符的优先级与结合性。重点:重点:基本数据类型;变量定义和赋值;运算符与表达式难点:难点:自定义的数据类型;运算符优先级。5嘉应学院杨久红嘉应学院杨久红20102010年末年末 数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。基本类型:整型,字符型,浮点型(单精度型,双精度型),枚举类型;构造类型:数组类型,结构体类型,共用体类型,指针类型,空类型。数据类型决定:数据类型决定:1.1.数据占内存字数据占内存字节数节数2.2.数据取值范围数据取值范围3.3.可对数据进行可对数据进行的操作的操作3.1 C的数据类型6嘉应学院杨久红嘉应学院杨久红20102010年末年末 数据结构是指同一数据元素类中各数据元素之间存在的关系。数据结构分别为逻辑结构、存储结构(物理结构)和数据的运算。数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。常用数据结构常用数据结构 :数组、线性数组、线性表、链表、队表、链表、队列、栈、树、列、栈、树、图等的定义、图等的定义、存储和操作存储和操作数据结构补充了解补充了解7嘉应学院杨久红嘉应学院杨久红20102010年末年末(1)(1)不同的计算机语不同的计算机语言所允许定义和使用言所允许定义和使用的数据结构是不同的。的数据结构是不同的。(2)(2)处理同一类问题,处理同一类问题,如果数据结构不同,如果数据结构不同,算法也会不同算法也会不同。8嘉应学院杨久红嘉应学院杨久红20102010年末年末3.2 常量与变量常量:常量:在程序运行过程中,其值不能被改变的量称为常量。3.2.1 常量和符号常量字面常量或直接常量符号常量:以用一个标识符代表一个常量例如例如 :1212,0 0,-3-3为整为整型常量型常量;4.64.6、-1.23-1.23为实为实型常量型常量;aa,dd为为字符常量。字符常量。#define PRICE 30#define PRICE 309嘉应学院杨久红嘉应学院杨久红20102010年末年末例3.1符号常量的使用。#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);total=3001.习惯上,符号常量名用大写2.程序中不能再次对符号常量赋值。#define PRICE 30main()PRICE=40;10嘉应学院杨久红嘉应学院杨久红20102010年末年末这么麻烦给常量起了名字,有什么好处吗?(1 1)含义清楚。定义符号常量名时应考虑)含义清楚。定义符号常量名时应考虑“见名知意见名知意”。(2 2)在需要改变一个常量时能做到在需要改变一个常量时能做到“一改全改一改全改”。#define PRICE 30#define PRICE 30一看就知道PRICE表示价格,但千万不要在定义圆周率的时候也这样写,虽然不错,但达不到“见名知意”的目的了。#define PRICE 3.1415926#define PRICE 3.141592611嘉应学院杨久红嘉应学院杨久红20102010年末年末3.2.2 变量变量是指在程序运行期间,其值可以改变的量。1.用来存放数据2.对应内存中的一个特定的存储单元3.有名字,以便被引用1.怎么对应到特定的存储单元呢?由编译系统完成。(参阅编译原理)2.变量的名字要怎么起呢?12嘉应学院杨久红嘉应学院杨久红20102010年末年末?变量怎么对应到特定的存储单元呢?存储单元地址3变量值变量名存储单元地址一般用十存储单元地址一般用十六进制数表示六进制数表示 ,与变,与变量名一一对应,类似于量名一一对应,类似于身份证号,唯一但难记,身份证号,唯一但难记,类似于身份证号。类似于身份证号。存储单元每个存储单元都由一个每个存储单元都由一个唯一的存储单元地址和唯一的存储单元地址和存储在单元里面的内容存储在单元里面的内容组成组成为了便于引用为了便于引用存储单元而起存储单元而起的名字。的名字。类似于人名类似于人名2004H存储单元的内容a a13嘉应学院杨久红嘉应学院杨久红20102010年末年末标识符(identifier):用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。标识符的命名规则:标识符的命名规则:(1)(1)只能由字母、数字和只能由字母、数字和下划线三种字符组成,下划线三种字符组成,(2)(2)且且第一个字符必须为第一个字符必须为字母或下划线。字母或下划线。必须同时满足以上两个必须同时满足以上两个条件条件。不合法的标识符名:不合法的标识符名:d dohnohn,¥,¥123123,3d643d64,abab 合法的标识符名:合法的标识符名:whilewhile,_total _total,student_namestudent_name,lotus_1_2_3lotus_1_2_3,ClassClass,class class,BASICBASIC C C语言区分大小写!语言区分大小写!ClassClass和和CLASSCLASS,Class,cLassClass,cLass都不同!都不同!14嘉应学院杨久红嘉应学院杨久红20102010年末年末(1)符合标识符的2个命名规则;(2)不能和关键字(32个)重名。必须同时满足以上两个条件。变量的名字要怎么起呢?合法的变量名:num,day,x1不合法的变量名:3num,day,while“先定义,先定义,后使用后使用”我是君子,我是君子,先说了才会先说了才会用啊!用啊!强制类型定义强制类型定义15嘉应学院杨久红嘉应学院杨久红20102010年末年末3.3 整型数据3.3.1 整型常量的表示方法整型常量即整常数。(1)十进制整数。(2)八进制整数。(3)十六进制整数。如如123123表表示十进示十进制数制数123123以以0 0开头开头的数是八进的数是八进制数。如制数。如0 0123123表示八表示八进制数进制数123123,-0 01111表表示八进制数示八进制数-11-11以以0 x0 x开头开头的数是十的数是十六进制数。如六进制数。如0 x0 x123123,代表十六进制数,代表十六进制数123-123-0 x0 x1212等于十进等于十进制数制数-18-18还记得进制间如何转换吗?忘了的赶快找找啊!单片机单片机程序设程序设计中经计中经常用到常用到16嘉应学院杨久红嘉应学院杨久红20102010年末年末1.整型数据在内存中的存放形式数据在内存中是以数据在内存中是以二进制二进制形式存放的。形式存放的。每一个整型数据每一个整型数据(包含变量和常量)(包含变量和常量)在内存中占在内存中占2 2个或个或4 4个个字节。字节。(a)存放的示意图 (b)实际存放图10=(1010)2例子:3.3.2 整型变量17嘉应学院杨久红嘉应学院杨久红20102010年末年末 在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。补码补码(complement)一个正数一个正数的补码和的补码和其原码的其原码的形式相同。形式相同。负数补码的求法:负数补码的求法:(1 1)写出该数的绝对值的二进)写出该数的绝对值的二进制形式;制形式;(2 2)按位取反;)按位取反;(3 3)再加)再加1 1。原码又是原码又是什么呢?什么呢?掌握18嘉应学院杨久红嘉应学院杨久红20102010年末年末原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小。补充内容:原码补充内容:原码(true form)小数原码的定义 X=X(0X1)=1X(1X0)例如:X=+0.1011,X原=0.1011 X=0.1011,X原=1.1011 整数原码的定义 X原=X(0X 2n)=2nX(-2nX0)例如:+1011原=00001011-1011原=10001011 了解19嘉应学院杨久红嘉应学院杨久红20102010年末年末2.整型变量的分类 (1)基本整型(int)(2)短整型(short int)(3)长整型(long int)修饰符:(1)有符号(signed)(2)无符号(unsigned)有符号基本整型有符号基本整型 signed int signed int 无符号基本整型无符号基本整型 unsigned intunsigned int有符号短整型有符号短整型 signed short intsigned short int无符号短整型无符号短整型 unsigned short intunsigned short int有符号长整型有符号长整型 signed long intsigned long int无符号长整型无符号长整型 unsigned long intunsigned long int 里的关键字可以省略!20嘉应学院杨久红嘉应学院杨久红20102010年末年末如果内存中有个数据是这如果内存中有个数据是这样存储的,那么它是多少样存储的,那么它是多少?如果是无符如果是无符号数,它是号数,它是6553565535如果是有符如果是有符号数,它是号数,它是-1-1例子例子21嘉应学院杨久红嘉应学院杨久红20102010年末年末3.整型变量的定义 int a,b;unsigned short c,d;long e,f;C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”对变量的定义,一般是放在一个函数的开头部分的声明部分(也可以放在函数中某一分程序内,但作用域只限它所在的分程序)。22嘉应学院杨久红嘉应学院杨久红20102010年末年末例3.2整型变量的定义与使用。main()int a,b,c,d;/*指定a、b、c、d为整型变量*/unsigned u;/*指定u为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);23嘉应学院杨久红嘉应学院杨久红20102010年末年末 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 (a=12)0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 (u=10)0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 (c=22)24嘉应学院杨久红嘉应学院杨久红20102010年末年末 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 (b=24的补码)0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 (u=10)1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 (d的补码)1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 (d的绝对值14)求b=24的补码a+u=a+u=2222,b+u=b+u=-14-1425嘉应学院杨久红嘉应学院杨久红20102010年末年末4.整型数据的溢出在Turbo c中一个int型变量的最大允许值为32767,如果再加1,会出现什么情况?main()int a,b;a=32767;b=a+1;printf(%d,%d,a,b);32767,-3276832767+132767+1不不等于等于3276832768吗吗?26嘉应学院杨久红嘉应学院杨久红20102010年末年末 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (a=32767)1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (负数)?1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (b的绝对值,即32768)真值为-32768 既然是这样,那要怎么改才能得到预期的结果32768呢?想一想啦!27嘉应学院杨久红嘉应学院杨久红20102010年末年末3.3.3 整型常量的类型(1)一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。(2)一个整数,如果其值超过了上述范围,而在-2147483648+2147483647范围内,则认为它是长整型,可以将它赋值给一个long int型变量。(3)一个整常量后面加一个字母u,认为是unsigned int型,如12345u,在内存中按unsigned int规定的方式存放。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。(5)在一个整常量后面加一个字母l或l,则认为是long int型常量。例如123l、432l、0l等。28嘉应学院杨久红嘉应学院杨久红20102010年末年末3.4 浮点型数据3.4.1 浮点型常量的表示方法浮点数(floating-point number)即实数(real number)。十进制小数形式。它由数字和小数点组成指数形式123e3,123E3.123.123,123.123.,123.0123.0,0.00.0e3e3,e e注意:字母注意:字母e e(或或E)E)之前必须之前必须有数字,且有数字,且e e后后面的指数必须面的指数必须为整数为整数29嘉应学院杨久红嘉应学院杨久红20102010年末年末“规范化的指数形式”:即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。一个实数在用指数形式输出时,是按规范化的指数形式输出的。知道了!知道了!123.456123.456可以表示为可以表示为123.456e0123.456e0,12.3456e112.3456e1、1.23456e21.23456e2、0.123456e30.123456e3、0.0123456e40.0123456e4、0.00123456e50.00123456e5 无数种?无数种?原来原来1.23456e21.23456e2是规是规范化的指数形式。范化的指数形式。30嘉应学院杨久红嘉应学院杨久红20102010年末年末 浮点型变量图3.7 实数 3.14159 在内存中的存放形式示意1.浮点型数据在内存中的存放形式一个浮点型数据在内存中占4个或8个字节(32位或64位)按照指数形式存储的纯小数部分采用规范化的指数形式了解了解小数位数越多,小数位数越多,精度越高精度越高指数位数越多,表指数位数越多,表示的数的范围越大。示的数的范围越大。31嘉应学院杨久红嘉应学院杨久红20102010年末年末2.浮点型变量的分类C浮点型变量分为三类:单精度(float)双精度(double)长双精度型(long double)占占4 4个字节个字节(3232位)位)占占8 8个字节个字节(6464位)位)占占1616个字节个字节(128128位)位)float x,y;double z;long double t;32嘉应学院杨久红嘉应学院杨久红20102010年末年末3.浮点型数据的舍入误差main()float a,b;a=123456,789e5;b=a+20;printf(%f,b);应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。浮点型用有限的存储单元存储,所以提供的有效数字也就有限,故会产生舍入误差。1234567812345678848.000000848.00000033嘉应学院杨久红嘉应学院杨久红20102010年末年末3.4.3 浮点型常量的类型f=2.45678*4523.65 双精度双精度双精度双精度单精度单精度*取前取前7 7位位提高精度提高精度运算速度降低运算速度降低难道不能就按难道不能就按单精度计算吗单精度计算吗?f=2.45678 f*4523.65F34嘉应学院杨久红嘉应学院杨久红20102010年末年末3.5 字符型数据3.5.1 字符常量1.用单引号(即撇号)括起来的一个字符。如如aa,xx,DD,?,$。2.以一个“”开头的字符序列。是“控制字符”,在屏幕上是不能显示的如如n,t,b,r,,ddd,xhh和和AA相同相同吗?吗?不同!不同!35嘉应学院杨久红嘉应学院杨久红20102010年末年末例3.5转义字符的使用。ain()printf(ab ct derftgn);printf(htibbj k);fab c gdeh jikf gdef gdeh j kh j k打印打印机机屏幕屏幕白纸黑字白纸黑字空说无凭空说无凭36嘉应学院杨久红嘉应学院杨久红20102010年末年末3.5.2 字符变量1.1.字符型变量字符型变量用来用来存放字符存放字符常量常量2.2.只能只能放一个放一个字符字符3.3.一个字符变一个字符变量在内存中占量在内存中占一个字节一个字节字符变量的定义:charc1,c2;字符变量的赋值:c1=a;c2=b;字符变量的定义和赋值:char c1=a,c2=b;37嘉应学院杨久红嘉应学院杨久红20102010年末年末3.5.3 字符数据在内存中的存储形式及其使用方法存存储储输输出出将该字符的相应的ASCII代码放到存储单元中1.以字符形式输出2.以以整数形式输出示意图示意图实际存实际存储情况储情况38嘉应学院杨久红嘉应学院杨久红20102010年末年末main()main()char c1char c1,c2;c2;c1=97;c1=97;c2=98;c2=98;printf(%c%cn printf(%c%cn,c1c1,c2);/*c2);/*以字符形式输出以字符形式输出*/*/printf(%d%dn printf(%d%dn,c1c1,c2);/*c2);/*转换为整数形式输出转换为整数形式输出*/*/例3.6 向字符变量赋以整数。%c%c表示以表示以字符形式字符形式输出。输出。%d%d表示以带表示以带符号的十进符号的十进制整数形式制整数形式输出。输出。a ba b97 9897 98通用通用39嘉应学院杨久红嘉应学院杨久红20102010年末年末例3.7 大小写字母的转换。main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%c,c1,c2);A B掌握掌握40嘉应学院杨久红嘉应学院杨久红20102010年末年末3.5.4 字符串常量a0字符串常量是一对双引号括起来的字符序列。如如:“CHINA”,”a”,“how do you do.”,”123.45”“a“a”=?“a”“a”是字符串常是字符串常量量aaaa是字符是字符常量常量a41嘉应学院杨久红嘉应学院杨久红20102010年末年末char c;char c;c=a;c=a;c=ac=a;c=“CHINAc=“CHINA 考考你考考你下面下面3 3个赋值语句中哪些是个赋值语句中哪些是对的?为什么?对的?为什么?1.在C语言中没有专门的字符串变量2.必须使用字符数组,数组中每一个元素存放一个字符。42嘉应学院杨久红嘉应学院杨久红20102010年末年末3.6 变量赋初值1.允许在定义变量的同时使变量初始化2.部分赋初值3.同种类型的可以合并定义int a=3;float f=3.56;char c=a;int a,b,c=5;int a=3,b=3,c=3;int a=b=c=3;?43嘉应学院杨久红嘉应学院杨久红20102010年末年末3.7 各类数值型数据间的混合运算图图3.103.10转换规则转换规则纵向的箭头表示数据转换的方向横向向左的箭头表示必定的转换44嘉应学院杨久红嘉应学院杨久红20102010年末年末10 +a +i *f -d /e假设假设i i是是intint变量,值为变量,值为3 3,f f是是floatfloat变量,值为变量,值为2.02.0,d d是是doubledouble变量,值为变量,值为4.04.0,e e为为longlong型,值为型,值为8 8*优先级高于优先级高于+算算10+a10+a:把:把aa转换成转换成intint为为9797,再加,再加1010,等于,等于107107107 +i *f -d /e算算i*f:i*f:把把i i和和f f都转换成都转换成doubledouble,然后相乘得,然后相乘得6.06.0优先级相同优先级相同 107 +6.0 -d /e+和和-优先级相同优先级相同算算107+6.0:107+6.0:把把107107转换成转换成doubledouble,和为,和为113.0113.0/优先级高于优先级高于-算算d/e:d/e:把把e e转换成转换成doubledouble,商为,商为0.50.5113.0 -d /e113.0 -0.5把把113.0 113.0 转换成转换成doubledouble,差为,差为112.5112.545嘉应学院杨久红嘉应学院杨久红20102010年末年末3.8 算术运算符和算术表达式1 1算术运算符算术运算符 (+-*/%)(+-*/%)2 2关系运算符关系运算符 (=!=)=!=)3 3逻辑运算符逻辑运算符 (!&|)&|)4 4位运算符位运算符 (&|)(&|)5 5赋值运算符赋值运算符 (=(=及其扩展赋值运算符及其扩展赋值运算符)6 6条件运算符条件运算符 (?(?:)7 7逗号运算符逗号运算符 (,)8 8指针运算符指针运算符 (*(*和和&)&)9 9求字节数运算符求字节数运算符 (s i z e o f)(s i z e o f)1010强制类型转换运算符强制类型转换运算符 (类型类型)1111分量运算符分量运算符 (-)-)1212下标运算符下标运算符 ()1313其他其他 (如函数调用运算符如函数调用运算符()()46嘉应学院杨久红嘉应学院杨久红20102010年末年末3.8.2 算术运算符和算术表达式1.基本的算术运算符+:加法运算符 或正值运算符-:减法运算符 或负值运算符*:乘法运算符/:除法运算符%:模运算符 或求余运算符如如3+5、+3如如5-2、-3如如3*5如如5/3=1,-5/35/3的结果可能是的结果可能是-1-1,也可能是,也可能是-2-2大部分是大部分是“向零取向零取整整”如如7%4的值为的值为3%两侧两侧均应为均应为整型数整型数据据*不不能写能写成成47嘉应学院杨久红嘉应学院杨久红20102010年末年末常量变量函数2.算术表达式和运算符的优先级与结合性+-*/运算符运算符运算对象运算对象用算术运算符和括号将运算对象(也称操作数)连接起来的、符合c语法规则的式子.例如:a*b/c-1.5+aa*b/c-1.5+a优先级:优先级:1.1.先按运算符的优先先按运算符的优先级别高低次序执行级别高低次序执行2.2.如果在一个运算对如果在一个运算对象两侧的运算符的优象两侧的运算符的优先级别相同,则按规先级别相同,则按规定的定的“结合方向结合方向”处处理。理。结合性:结合性:1.1.左结合性左结合性:即运算对即运算对象先与左面的运算符象先与左面的运算符结合结合2.2.右结合性右结合性:有些运算有些运算符的结合方向为符的结合方向为“自自右至左右至左”.”.算术表达式算术表达式48嘉应学院杨久红嘉应学院杨久红20102010年末年末两种类型转换强制类型转换自动类型转换若x为float型,则“x%3”不合法,必须用:“(int)x%3”如3+6.53.强制类型转换运算符49嘉应学院杨久红嘉应学院杨久红20102010年末年末一般形式:(类型名)(表达式)(int)(x+y)先将x与y相加,然后将他们的和转换成整型表达式应该用括号括起来(int)x+y只将x转换成整型,然后与y相加原来原来是这是这样!样!50嘉应学院杨久红嘉应学院杨久红20102010年末年末例3.8强制类型转换。main()main()float xfloat x;int i int i;x=3.6 x=3.6;i=(int)x i=(int)x;printf(x=%f,i=%d“,x,i);printf(x=%f,i=%d“,x,i);x=x=3.6000003.600000,i=i=3 3在强制类型转换在强制类型转换时,得到一个所时,得到一个所需类型的中间变需类型的中间变量,原来变量的量,原来变量的类型未发生变化类型未发生变化51嘉应学院杨久红嘉应学院杨久红20102010年末年末4.自增、自减运算符+i+i先使先使i i的值加的值加1 1,然后再使用,然后再使用i ii+i+先使用先使用i i,然后,然后再使再使i i的值加的值加1 1自增(减)运算符常用于:1.循环语句中,使循环变量自动加1或减1。2.指针变量,使指针指向下一个地址。自增运算符自增运算符+-i-i先使先使i i的值减的值减1 1,然后再使用,然后再使用i ii-i-先使用先使用i i,然后,然后再使再使i i的值减的值减1 1自减运算符自减运算符-52嘉应学院杨久红嘉应学院杨久红20102010年末年末i=3;printf(%d,+i);i=3;printf(%d,i+);i=3;j=+i;printf(%d,j);i=3;j=i+;printf(“%d”,j);4 43 33 34 4(1)(1)自增运算符自增运算符(+)(+)和自减运算符和自减运算符(-(-),只能用于变量,只能用于变量,而不能用于常量而不能用于常量或表达式,或表达式,(2)(2)+和和-的优先级:的优先级:第第2 2级。级。(3)(3)+和和-的结合方的结合方向是向是“自右至左自右至左”。5+(a+b)+不合法不合法53嘉应学院杨久红嘉应学院杨久红20102010年末年末3.9 赋值运算符和赋值表达式 1.赋值运算符赋值运算符就是“=”作用是执行一次赋值操作如如a=3a=3+c优先级:第14级结合性:右结合性54嘉应学院杨久红嘉应学院杨久红20102010年末年末整整 型型字字 符符 型型无符号无符号有符号有符号字符字符的的8 8位放位放到整到整型变型变量的量的低低8 8位位符符号号扩扩展展高高8 8位位补补零零将将低低8 8位位放到放到字符字符变量变量中,中,(截(截断)断)舍弃实数的小数部分舍弃实数的小数部分数值不变,以浮点数数值不变,以浮点数形式存储到变量中形式存储到变量中单精度单精度双精度双精度数值数值不变不变有效有效值位值位数扩数扩展到展到1616位位截取截取前前7 7位位有效有效数字数字2.类型转换的赋值规则类型转换的赋值规则实质:实质:按存储单元中按存储单元中的存储形式直接传送。的存储形式直接传送。55嘉应学院杨久红嘉应学院杨久红20102010年末年末int i;i=3.56;printf(i=%d,i);i=3i=3main()unsigned a;int b=-1;a=b;printf(%u,a);6553565535例3.9有符号数据传送给无符号变量。例 把浮点型传送给整型变量。56嘉应学院杨久红嘉应学院杨久红20102010年末年末3.复合的赋值运算符C语言规定可以使用10种复合赋值运算符。即:+=,-=,*=,/=,%=,=,&=,=,|=例如:例如:a+=3 等价于等价于 a=a+3x*=y+3 等价于等价于 x=x*(y+3)x%=3 等价于等价于 x=x%3 x%=y+3 x%=(y+3)x=x%(y+3)(不要错写成x=x%y+3)57嘉应学院杨久红嘉应学院杨久红20102010年末年末4.赋值表达式赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。一般形式为:求解的过程是:将赋值运算符右侧的“表达式”的值赋给左侧的变量。a=(b=10)/(c=2)a=(b=10)/(c=2)printf(“%d”printf(“%d”,a=b);a=b);a=b=c=5a=5+(c=6)a=(b=4)+(c=6)如果如果a a的初值是的初值是1212,a+=a-=a*aa+=a-=a*a运算后运算后a a的值是多的值是多少?少?58嘉应学院杨久红嘉应学院杨久红20102010年末年末1.逗号运算符,又称为“顺序求值运算符”2.逗号运算符是所有运算符中级别最低的3.用来将两个表达式连接起来逗号表达式的一般形式:表达式1,表达式2逗号表达式的扩展形式:表达式1,表达式2,表达式3表达式n求解的过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。x=(a=3,6*3)x=a=3,6*ax值是多少?表达式值是多少?表达式值是多少?值是多少?如:3+5,6+8(a=3*5,a*4),a+5a=3*5,a*4),a+5运算后运算后a a的值是多少?的值是多少?表达式的值是多少?表达式的值是多少?3.10 逗号运算符和逗号表达式59嘉应学院杨久红嘉应学院杨久红20102010年末年末注意:并不是任何地方出现的逗号都是作为逗号运算符。例如:printf(%d,%d,%d,a,b,c);printf(%d,%d,%d,(a,b,c),b,c);逗号运算符逗号运算符60嘉应学院杨久红嘉应学院杨久红20102010年末年末一分耕耘,一分收获!一分耕耘,一分收获!61