C语言教学课件之第3章数据类型表达式.ppt

上传人:本田雅阁 文档编号:3479447 上传时间:2019-09-01 格式:PPT 页数:61 大小:1.19MB
返回 下载 相关 举报
C语言教学课件之第3章数据类型表达式.ppt_第1页
第1页 / 共61页
C语言教学课件之第3章数据类型表达式.ppt_第2页
第2页 / 共61页
C语言教学课件之第3章数据类型表达式.ppt_第3页
第3页 / 共61页
C语言教学课件之第3章数据类型表达式.ppt_第4页
第4页 / 共61页
C语言教学课件之第3章数据类型表达式.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《C语言教学课件之第3章数据类型表达式.ppt》由会员分享,可在线阅读,更多相关《C语言教学课件之第3章数据类型表达式.ppt(61页珍藏版)》请在三一文库上搜索。

1、第1张,没有规矩,不成方圆。,第2张,3.1 C的数据类型 3.2 常量与变量 3.3 整型数据 3.4 实型数据,第3章 数据类型、运算符与表达式,第3张,3.5 字符型数据 3.6 变量赋初值 3.7 各类数值型数据间的混合运算 3.8 算术运算符和算术表达式 3.9 赋值运算符和赋值表达式 3.10 逗号运算符和逗号表达式,第4张,本章大纲,数据类型、运算符与表达式(7学时) 教学内容: C的数据类型:基本数据类型;自定义的数据类型 常量和变量:符号常量与一般常量;变量的定义和赋值 各类型数据的混合运算 运算符与表达式:算术运算符;关系运算符与逻辑运算符;表达式的执行顺序,第5张,基本要

2、求: 了解C语言的数据类型; 了解常量的概念、常量的分类; 了解整型、实型和字符型数据的存储形式; 掌握变量的概念、变量的分类及变量的初始化方法; 掌握各类数值型数据间的混合运算规则; 掌握常见的各种运算符及表达式; 理解运算符的优先级与结合性。 重点:基本数据类型;变量定义和赋值;运算符与表达式 难点:自定义的数据类型;运算符优先级。,第6张,数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。,基本类型:整型,字符型,浮点型(单精度型,双精度型),枚举类型; 构造类型:数组类型,结构体类型,共用体类型,指针类型,空类型。,数据类型决定: 1.数据占内存字节数 2.数据取

3、值范围 3.可对数据进行的操作,3.1 C的数据类型,第7张,数据结构是指同一数据元素类中各数据元素之间存在的关系。数据结构分别为逻辑结构、存储结构(物理结构)和数据的运算。数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。,数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。,常用数据结构 :数组、线性表、链表、队列、栈、树、图等的定义、存储和操作,数据结构,补充了解,第8张,(1)不同的计算机

4、语言所允许定义和使用的数据结构是不同的。 (2)处理同一类问题,如果数据结构不同,算法也会不同。,第9张,3.2 常量与变量,常量: 在程序运行过程中,其值不能被改变的量称为常量。,3.2.1 常量和符号常量,字面常量或直接常量,符号常量:以用一个标识符代表一个常量,例如 : 12,0,-3为整型常量; 4.6、-1.23为实型常量; a,d为字符常量。,#define PRICE 30,第10张,例3.1符号常量的使用。,#define PRICE 30 main ( ) int num, total; num=10; total=num * PRICE; printf(“total=%d“

5、,total); ,total=300,1.习惯上,符号常量名用大写 2.程序中不能再次对符号常量赋值。,#define PRICE 30 main ( ) PRICE=40; ,第11张,这么麻烦给常量起了名字,有什么好处吗?,(1)含义清楚。定义符号常量名时应考虑“见名知意”。 (2) 在需要改变一个常量时能做到“一改全改”。,#define PRICE 30 一看就知道PRICE表示价格,但千万不要在定义圆周率的时候也这样写,虽然不错,但达不到“见名知意”的目的了。 #define PRICE 3.1415926,第12张,3.2.2 变量,变量是指在程序运行期间,其值可以改变的量。 1

6、.用来存放数据 2.对应内存中的一个特定的存储单元 3.有名字,以便被引用,1.怎么对应到特定的存储单元呢? 由编译系统完成。 (参阅编译原理),2.变量的名字要怎么起呢?,第13张,?,变量怎么对应到特定的存储单元呢?,存储单元地址,3,变量值,变量名,存储单元地址一般用十六进制数表示 ,与变量名一一对应,类似于身份证号,唯一但难记,类似于身份证号。,存储单元,每个存储单元都由一个唯一的存储单元地址和存储在单元里面的内容组成,为了便于引用存储单元而起的名字。 类似于人名,2004H,存储单元的内容,a,第14张,标识符(identifier):用来标识变量名、符号常量名、函数名、数组名、类型

7、名、文件名的有效字符序列称为标识符。,标识符的命名规则: (1)只能由字母、数字和下划线三种字符组成, (2)且第一个字符必须为字母或下划线。 必须同时满足以上两个条件。,不合法的标识符名: dohn,¥123,3d64,ab,合法的标识符名: while, _total,student_name,lotus_1_2_3,Class,class ,BASIC,C语言区分大小写! Class和CLASS,Class,cLass 都不同!,第15张,(1)符合标识符的2个命名规则; (2)不能和关键字(32个)重名。 必须同时满足以上两个条件。,变量的名字要怎么起呢?,合法的变量名:num,day

8、,x1,不合法的变量名:3num,day,while,“先定义,后使用”,我是君子,先说了才会用啊!,强制类型定义,第16张,3.3 整型数据,3.3.1 整型常量的表示方法,整型常量即整常数。 (1) 十进制整数。 (2) 八进制整数。 (3) 十六进制整数。,如123表示十进制数123,以0开头的数是八进制数。如0123表示八进制数123, -011表示八进制数-11,以0x开头的数是十六进制数。如0x123,代表十六进制数123 -0x12等于十进制数-18,还记得进制间如何转换吗?忘了的赶快找找啊!,单片机程序设计中经常用到,第17张,1.整型数据在内存中的存放形式,数据在内存中是以二

9、进制形式存放的。,每一个整型数据(包含变量和常量)在内存中占2个或4个字节。,(a)存放的示意图 (b)实际存放图,10=(1010)2,例子:,3.3.2 整型变量,第18张,在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。,补码(complement),一个正数的补码和其原码的形式相同。,负数补码的求法: (1)写出该数的绝对值的二进制形式; (2)按位取反; (3)再加1。,原码又是什么呢?,掌握,第19张,原码是一种计算机中对数字的二进

10、制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为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,了解,第20张,2. 整型变量的分类,(1) 基本整型(int) (2) 短整型(short int) (3) 长整型(long in

11、t),修饰符: (1)有符号(signed) (2)无符号(unsigned),有符号基本整型 signed int 无符号基本整型 unsigned int,有符号短整型 signed short int 无符号短整型 unsigned short int,有符号长整型 signed long int 无符号长整型 unsigned long int, 里的关键字可以省略!,第21张,如果内存中有个数据是这样存储的,那么它是多少?,如果是无符号数,它是65535,如果是有符号数,它是-1,例子,第22张,3. 整型变量的定义,int a,b; unsigned short c,d; long

12、 e,f;,C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”,对变量的定义,一般是放在一个函数的开头部分的声明部分(也可以放在函数中某一分程序内,但作用域只限它所在的分程序)。,第23张,例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); ,第24张,0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 (a=12) 0 0 0 0 0

13、 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),第25张,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

14、 0 0 0 0 0 0 0 0 0 1 1 1 0 (d的绝对值14),求b=24的补码,a+u=22,b+u=-14,第26张,4. 整型数据的溢出,在Turbo c中一个int型变量的最大允许值为32767,如果再加1,会出现什么情况?,main() int a,b; a=32767; b=a+1; printf(“%d,%d“,a,b); ,32767,-32768,32767+1不等于32768吗?,第27张,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

15、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呢?想一想啦!,第28张,3.3.3 整型常量的类型,(1) 一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。 (2) 一个整数,如果其值超过了上述范围,而在-2147483648+2147483647范围内,则认为它是长整型,可以将它赋值给一个long int型变量。 (3)一个整常量后面加一个字母u,

16、认为是unsigned int型,如12345u,在内存中按unsigned int规定的方式存放。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。 (5) 在一个整常量后面加一个字母l或l,则认为是long int型常量。例如123l、432l、0l等。,第29张,3.4 浮点型数据,3.4.1 浮点型常量的表示方法,浮点数(floating-point number)即实数(real number)。,十进制小数形式。它由数字和小数点组成,指数形式,123e3,123E3,.123,123., 123.0, 0.0,e3 2.1e3.5, e,注意:字

17、母e(或E)之前必须有数字,且e后面的指数必须为整数,第30张,“规范化的指数形式”: 即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。一个实数在用指数形式输出时,是按规范化的指数形式输出的。,知道了! 123.456可以表示为123.456e0, 12.3456e1、 1.23456e2、 0.123456e3、 0.0123456e4、 0.00123456e5,无数种?,原来1.23456e2是规范化的指数形式。,第31张,3.4.2 浮点型变量,图3.7 实数 3.14159 在内存中的存放形式示意,1.浮点型数据在内存中的存放形式,一个浮点型数据在内

18、存中占4个或8个字节(32位或64位),按照指数形式存储的,纯小数部分,采用规范化的指数形式,了解,小数位数越多,精度越高,指数位数越多,表示的数的范围越大。,第32张,2.浮点型变量的分类,C浮点型变量分为三类: 单精度(float) 双精度(double) 长双精度型(long double),占4个字节(32位),占8个字节(64位),占16个字节(128位),float x,y;,double z;,long double t;,第33张,3.浮点型数据的舍入误差,main() float a,b; a = 123456,789e5; b = a + 20 ; printf(“%f“,

19、b); ,应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。,浮点型用有限的存储单元存储,所以提供的有效数字也就有限,故会产生舍入误差。,12345678848.000000,第34张,3.4.3 浮点型常量的类型,f = 2.45678 * 4523.65,双精度,双精度,单精度,*,取前7位,提高精度 运算速度降低,难道不能就按单精度计算吗?,f = 2.45678 f* 4523.65F,第35张,3.5 字符型数据,3.5.1 字符常量,1.用单引号(即撇号)括起来的一个字符。,如a,x,D,?,$ 。,2.以一个“”开头的字符序列。是 “控制字符”,在屏幕上

20、是不能显示的,如n,t,b,r,, , , ddd, xhh,和A相同吗?,不同!,第36张,例3.5转义字符的使用。,ain() printf(“ ab ct derftgn“); printf(“htibbj k“); ,fab c gde h jik,f gde h j k,打印机,屏幕,白纸黑字,空说无凭,第37张,3.5.2 字符变量,1.字符型变量用来存放字符常量 2.只能放一个字符 3.一个字符变量在内存中占一个字节,字符变量的定义: char c1,c2;,字符变量的赋值: c1=a;c2=b;,字符变量的定义和赋值: char c1=a,c2=b;,第38张,3.5.3 字符

21、数据在内存中的存储形式及其使用方法,存储,输出,将该字符的相应的ASCII代码放到存储单元中,1.以字符形式输出 2.以以整数形式输出,示意图,实际存储情况,第39张,main() char c1,c2; c1=97; c2=98; printf(“%c %cn“,c1,c2);/*以字符形式输出*/ printf(“%d %dn“,c1,c2);/*转换为整数形式输出*/ ,例3.6 向字符变量赋以整数。,%c表示以字符形式输出。,%d表示以带符号的十进制整数形式输出。,a b 97 98,通用,第40张,例3.7 大小写字母的转换。,main() char c1,c2; c1=a; c2=

22、b; c1=c1-32; c2=c2-32; printf(“%c %c“,c1,c2); ,A B,掌握,第41张,3.5.4 字符串常量,字符串常量是一对双引号括起来的字符序列。,如: “CHINA”, ”a”,“how do you do.”,”123.45”,“a”,=,?,“a”是字符串常量,a,a是字符常量,第42张,char c;,c=a;,c=“a“;,c=“CHINA“,考考你,下面3个赋值语句中哪些是对的?为什么?,1.在C语言中没有专门的字符串变量 2.必须使用字符数组,数组中每一个元素存放一个字符。,第43张,3.6 变量赋初值,1.允许在定义变量的同时使变量初始化,2

23、.部分赋初值,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;,?,第44张,3.7 各类数值型数据间的混合运算,图3.10,转换规则,纵向的箭头表示数据转换的方向,横向向左的箭头表示必定的转换,第45张,10 + a + i * f - d / e,假设i是int变量,值为3,f是float变量,值为2.0,d是double变量,值为4.0,e为long型,值为8,*优先级高于+,算10+a:把a转换成int为97,再加10,等于107,107 + i * f -

24、 d / e,算i*f:把i和f都转换成double,然后相乘得6.0,优先级相同,107 + 6.0 - d / e,+和-优先级相同,算107+6.0:把107转换成double,和为113.0,/优先级高于-,算d/e:把e转换成double,商为0.5,113.0 - d / e,113.0 - 0.5,把113.0 转换成double,差为112.5,第46张,3.8 算术运算符和算术表达式,1算术运算符 (+ - * / %) 2关系运算符 ( = = = = !=) 3逻辑运算符 (! & |) 4位运算符 ( & |) 5赋值运算符 (=及其扩展赋值运算符) 6条件运算符 (?

25、 :) 7逗号运算符 (,) 8指针运算符 (*和&) 9求字节数运算符 (s i z e o f) 10强制类型转换运算符 ( (类型) ) 11分量运算符 ( -) 12下标运算符 ( ) 13其他 (如函数调用运算符(),第47张,3.8.2 算术运算符和算术表达式,1. 基本的算术运算符,+:加法运算符 或正值运算符 -:减法运算符 或负值运算符 *:乘法运算符 /:除法运算符 %:模运算符 或求余运算符,如3+5、+3,如5-2、-3,如3*5,如5/3=1, 5/3的结果可能是-1,也可能是-2 大部分是“向零取整”,如7%4的值为3,%两侧均应为整型数据,*不能写成,第48张,常

26、量 变量 函数,2.算术表达式和运算符的优先级与结合性,+ - * /,运算符,运算对象,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合c语法规则的式子.例如:a*b/c-1.5+a,优先级: 1.先按运算符的优先级别高低次序执行 2.如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。,结合性: 1.左结合性:即运算对象先与左面的运算符结合 2.右结合性:有些运算符的结合方向为“自右至左”.,算术表达式,第49张,两种类型转换,强制类型转换,自动类型转换,若x为float型,则 “x%3”不合法,必须用:“(int)x%3”,如3+6.5,3.强制类型转换运

27、算符,第50张,一般形式: (类型名)(表达式),(int)(x+y) 先将x与y相加,然后将他们的和转换成整型,表达式应该用括号括起来,(int)x+y 只将x转换成整型,然后与y相加,原来是这样!,第51张,例3.8强制类型转换。,main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d“,x,i); ,x=3.600000, i=3,在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化,第52张,4.自增、自减运算符,+i 先使i的值加1,然后再使用i,i+ 先使用i,然后再使i的值加1,自增(减)运算符常用于:

28、 1.循环语句中,使循环变量自动加1或减1。 2.指针变量,使指针指向下一个地址。,自增运算符 +,-i 先使i的值减1,然后再使用i,i- 先使用i,然后再使i的值减1,自减运算符 -,第53张,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,3,3,4,自增运算符(+)和自减运算符(-),只能用于变量,而不能用于常量或表达式, +和-的优先级:第2级。 +和-的结合方向是“自右至左”。,5+,(a+b)+,不合法,第54张,3.9 赋

29、值运算符和赋值表达式,1.赋值运算符,赋值运算符就是“=”,作用是执行一次赋值操作,如a=3 a=3+c,优先级:第14级,结合性:右结合性,第55张,整 型,字 符 型,无符号,有符号,字符的8位放到整型变量的低8位,符号扩展,高8位补零,将低8位放到字符变量中,(截断),舍弃实数的小数部分,数值不变,以浮点数形式存储到变量中,单精度,双精度,数值不变有效值位数扩展到16位,截取前7位有效数字,2.类型转换的赋值规则,实质:按存储单元中的存储形式直接传送。,第56张,int i; i=3.56; printf(“ i= %d“,i);,i=3,main() unsigned a; int b

30、=-1; a=b; printf(“%u“,a); ,65535,例3.9有符号数据传送给无符号变量。,例 把浮点型传送给整型变量。,第57张,3. 复合的赋值运算符,C语言规定可以使用10种复合赋值运算符。即: +=,-=,*=,/=,%=,=,&=,=,|=,例如: a+=3 等价于 a=a+3 x*=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),第58张,4. 赋值表达式,赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子 。,一般形式为: ,求解的过程是:将赋

31、值运算符右侧的“表达式”的值赋给左侧的变量。,a=(b=10)/(c=2) printf(“%d”,a=b);,a=b=c=5 a=5+(c=6) a=(b=4)+(c=6),如果a的初值是12,a+=a-=a*a 运算后a的值是多少?,第59张,1.逗号运算符,又称为“顺序求值运算符” 2.逗号运算符是所有运算符中级别最低的 3.用来将两个表达式连接起来,逗号表达式的一般形式:表达式1,表达式2 逗号表达式的扩展形式: 表达式1,表达式2,表达式3表达式n,求解的过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。, x=(a=3,6*3) x=a=3,6*a x值是多少?表达式值是多少?,如: 3+5,6+8,(a=3*5,a*4),a+5 运算后a的值是多少?表达式的值是多少?,3.10 逗号运算符和逗号表达式,第60张,注意:并不是任何地方出现的逗号都是作为逗号运算符。 例如: printf(“%d,%d,%d“,a,b,c); printf(“%d,%d,%d“,(a,b,c),b,c);,逗号运算符,第61张,一分耕耘,一分收获!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1