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