C语言第2章C语言的基本数据类型与表达式.ppt_第1页
C语言第2章C语言的基本数据类型与表达式.ppt_第2页
C语言第2章C语言的基本数据类型与表达式.ppt_第3页
C语言第2章C语言的基本数据类型与表达式.ppt_第4页
C语言第2章C语言的基本数据类型与表达式.ppt_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 2 章 C语言的基本数据类型与表达式,2.1 C语言的基本数据类型 2.2 常量与变量 2.3 运算符与表达式 2.4 数据类型转换,教学目的和基本要求:,要求学生清楚数据类型与变量、常量的关系,掌握各种常量的性质和定义,掌握表达式中各种运算符的功能和特点,明白产生副作用的原因,了解数据类型的相互转换规则。,教学重点:,数据类型、常量定义,运算符与表达式。,存取数据必须先确定数据的编码方式、存储格式和所占的存储长度, C语言中把这三者结合起来,给出几种固定的形式,这些形式就是最基本的数据类型。,2.1 C语言的基本数据类型,为什么要设置数据类型?,在计算机中使用一定长度的存储单元(通常是字

2、节的倍数)来存储数据。,存储的编码方式有:原码、反码、补码、ASCII码 存储的存储格式有:定点型、浮点型,其中,用于存储数据的存储单元的长度决定了数据取值范围的大小。,例如:,【例2.1】计算圆的面积,半径为 5 cm。 程序如下:,main( ) float r, area ; r=5 ; area=3.14*r*r; printf (%fn , area) ; ,运算结果是输出圆的面积:78.500000,程序中用到的数据:r、area、5、3.14 对数据进行的运算:* 、=,例jc2_1,分析:,计算机操作处理时,要完成以下工作: 在内存中给半径 r 和运算结果 area 开辟存储空

3、间,存放它们的值。应该留多大的地方来存放它们的值? 数据 5 和 3.14 与 r 、area 不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理? 对整数 5 和小数3.14 ,计算机存放时是否有区别?,涉及数据类型 的基本知识,字符型(char) 整型(int,short, long,unsigned,long long) 单精度型(float) 实型 双精度型(double) 长双精度(long long_comple) 枚举类型(enum) 数组类型( ) 构造类型 结构体类型(struct) 共用体类型(union) 指针类型(*) 空类型(void

4、),一、数据类型概述,本章讨论 基本类型数据,变量:指以标识符为名字,其值可以改变的量。,在学习各种数据类型之前,我们先简单了解一下常量和变量的概念。后面的章节中将会详细介绍。,常量:指在程序运行中,其数值不能被改变的量。,变量 代表计算机内存中的某一存储空间,变量的类型决定了该存储空间的长度和其中存放数据的编码方式及存储格式。 变量的类型也决定了该存储空间中存放数据的数据形式和取值范围。,* 八进制的数码范围为07; 018 * 十六进制的数码除了数字09外, 还使用英文字母a f (或A F)表示1015。 如:0 x1e * 整型数据均以二进制补码形式存储,注意!,二、整型(采用定点整数

5、的存储格式,只能表示纯整数),1、整型常量:,(1) 十进制形式:与数学上的整数表示相同; 例如: 12, -100, 0 (2) 八进制形式:在数码前加数字0; 例如: 012=1*81+2*80=10(十进制) (3) 十六进制形式:在数码前加0X(数字0和字母X)。 例如: 0 x12=1*161+2*160=18(十进制),问题: 为什么要采用补码? 如何表示?,计算机中正、负数的表示,例如:109 (1101101)2 要区别:109 和 109 方法是:将符号也数码化 即:正的符号 用 0 表示 负的符号 用 1 表示, 计算机中的数表示方法是: 符号位二进制数值(以 8bit 为

6、例) 109 110 1101 0110 1101 109 110 1101 1110 1101,问题:计算机计算复杂化,例如计算: (-19)+(+22) 1001 0011 + 0001 0110,解决的方法是: 使用反码或补码的表示方法(按前述表示的编码称为原码),即能将减法一律转换为加法。,需要判断符号是否相同: 如果相同,结果符号不变,并进行绝对值相加 如果不同,结果取绝对值大的数的符号,并进行绝对值相减,原码、反码和补码,正数:原码、反码、补码相同 符号位为0,数值为对应的二进制数。 109,01101101原 = 01101101反 = 01101101补 负数: 原码符号位为1

7、,数值为绝对值的二进制数。 10911101101原 反码符号位为1,数值为绝对值的二进制数各位变反。 10910010010反 补码符号位为1,数值为绝对值的二进制数各位变反加1。10910010011补,2、整型变量的分类:,根据数据所占的存储长度的不同分为:int、short、long、long long; 同样存储长度的数据又分unsigned、signed; 故可组合出八种类型(参考课本P46)。,3、整型变量的值域:,由机器中数据的存储长度决定,思考:int a=20000,b=20000,c; c=a+b; c的值为多少? 如果c定义为long型是否能解决问题?,注意:C标准没有

8、具体规定各种数据类型 占用存储单元的长度,在不同的编译系统 中规定不尽相同,如在VC6.0中short为2B, int和long都为四个字节,注意,三、实型,1、常量: (1) 十进制小数形式:由数字和小数点组成; 例如: 3.4, 4., .3。 (2) 指数形式:“十进制小数”+“ e(或E)”+“十进制数整数”。 例如: 12.5e-6 表示12.510-6 。, 小数点不能单独出现; 0. .0 . e或E的两边必须有数,且其后面必须为整数; 如: 6E0.2 e5 ,实型数据的类型 单精度实型数据 float,分配4 Byte 双精度实型数据double,分配 8 Byte 实型数据

9、的存储,单精度实型,指数部分 31 30 (8位) 23 63 62 (11位) 52,小数部分 22 0 51 0,小数的符号位,隐藏“1”,2、实型变量的分类及值域:,实型数据的类型及规定,C标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。 一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。(参照课本P51说明),有效数字的意义?,字符形式 功能 n 换行 t 横向跳格 b 退格 r 回车 反斜杠字符 单引号字符 ddd 8进制数表示的ASCII码对应的字符 xhh 16进制数表示的ASCII码对应的字符,四、字符类

10、型,1、常量: (1) 用单引号括起来的一个字符;如:A、 1、?等。 (2) 用单引号括起来的由反斜杠()引导的转义字符。,4、字符串常量: 是用一对双引号括起来的字符序列。 注意:每个字符串的后面都有一个0结束符。 如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。,注意, a与“a”的区别。,例如:字符A的ASCII码为: 65D(十进制)=41H(十六进制)=101Q(八进制) 字符A可以表示为A、x41、101。,2、字符型变量的分类: char 和 unsigned char;,3、值域(字符型可参与数学运算,也可看成一种一字节的整型变量) 每个字符

11、型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。,一、常量、符号常量及常变量 常量是指在程序运行中,其数值不能被改变的量。 常量又可分为直接常量和符号常量。,2.2 常量与变量,120 、 -100、 0; 0120、 072; 0 xFFFF、 0 x1e、0X28AF,0XED4 ; 120L, 200L ; 长整型常量 3.14、 -3.1、 5.12E-6 ; a 、#、n、101 ; 099、12f、 0 xg 、48EA ; 019.5 、1e-08; 实型常量只能用十进制形式表示 2.1E10.2、E-6、6.4E+4.8、E9 ; chan

12、gsha 、+?ab ; 、p 、ab ;,1、直接常量:是在程序中直接引用的数据。,请判断这些常量正确与否:,定义形式: #define 标识符 常量数据 例如: #define PI 3.14159 在程序预处理时,凡是出现标识符PI的地方都将用 数据3.14159来替换。 如: 2*2.3*PI 就等价于 2*2.3*3.14159。, 变量是指以标识符为名字,其值可以改变的量。 变量代表计算机内存中的某一存储空间,该存储空间 中存放的数据就是变量的值。 在同一程序块中,变量不能被重复定义。 使用变量时必须“先定义,后使用”。,2、符号常量 是用标识符来表示一个数据;在程序不能给它赋值。

13、,二、 变量,3、常变量(C99中使用) const int a=3;,注意符号常量和常变量的区别(课本P42),注意,int a=5, b=3; int a=b=c=3; int a,b,c; a=b=c=3; ,例如:int a,b,c ; float x,y; char c1,c2; 或 int c1,c2; 定义变量就是在内存中划出一块相应类型的存储空间存放该变量的值。,main( ) int x,y,z,w; /*定义x,y,z,w为整型变量*/ unsigned int k; /*定义k为无符号整型变量*/ x=10;y=-20;k=30; z=x+k;w=y+k; printf(

14、“x+k=%d,y+k=%dn”,z,w); ,例2-2:,程序运行结果为: x+k=40,y+k=10,变量根据作用域的不同可分为局部变量和全局变量,根据存储方式的不同可分为静态存储变量和动态存储变量,这些我们将在第六章中详细介绍。,2.3 运算符和表达式,主要内容: 算术运算符和算术表达式 赋值运算符和赋值表达式 关系运算符和关系表达式 逻辑运算符和逻辑表达式 位运算符和位运算表达式 条件运算符和条件表达式 逗号运算符和逗号表达式 其他运算符及其运算,运算符的有关概念,作用: 对运算对象完成规定的操作运算 类型: 按运算对象分: 单目、双目、三目 按功能分: 算术、赋值、关系、逻辑 条件、

15、逗号、位、其他,运算符的优先级和结合性,优先级 指各种运算符号的运算优先顺序 例如:算术运算优先于关系运算 算术运算中先 * / 后 + -,结合性 指运算符号和运算对象的结合方向 分为:从左向右(左结合)和从右向左(右结合) 例如:算术运算符为左结合 a-b+4 赋值运算符为右结合 a= b = 5 ( C语言规定见教材 附录C),本章涉及的运算符,+ - * / % + - + - = += -= *= /= %= int b=6,c=3; 求解: a*b/c-1.5+a+fabs(-5)=?,float a=2.0; int b =6,c =3; a*b/c -1.5 +a +fabs(

16、-5),12.0/3,5,4.0 - 1.5,2.5 + 97(int),99.5 + 5,104.5(double),思考 int a=1,b=2; 表达式a/b+3的结果是多少? int a=10000,b=30000; 表达式a+b的结果是多少? 如何修改?,3、自增自减运算,+ -是单目运算符 有前缀和后缀两种形式 前缀形式: 先自增(自减)再引用; 后缀形式: 先引用再自增(自减); 功能: 前缀形式 + a 等价于 a = a + 1 - a 等价于 a = a 1 后缀形式 a + 等价于 a = a + 1 a - 等价于 a = a 1,表达式的值会不同,例如 当 a5 时

17、+a 表达式的值为 6,且 a6 a+ 表达式的值为5 ,且 a6 b=+a 等价于 a=a+1; b=a 表达式的值为6,且 a=6, b=6 b=a+ 等价于 b=a; a=a+1 表达式的值为5,且 a=6, b=5,说明:,+ 和 - 的运算对象只能是变量(或运算结果是变量的表达式), 不能是常量(或运算结果是数值的表达式)。 例如: 5+、(a+2)+ 不合法。 具有右结合性,结合方向为从右到左。 例如: a+ 等价于 -(a+) 如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符 例如: i + j 等价于 ( i+)+j -i+-j 等价于 -(i+)+(

18、-j),main( ) int a=5; printf(%d %dn,a,a+ ); ,说明(续):,对函数参数的求值顺序: Turbo C系统先计算最右边的参数值,再依次计算左面的参数值。,【例2.3】有多个函数参数且为同一变量自增的运算处理。,输出结果: 6 5,运行例2.3,说明(续):,【例2.4】有多个函数参数且为同一变量多次自增的运算处理。,main( ) int a=5; printf(%d%dn,a,(a+)+( a+); ,输出结果: 7 11,运行例2.4,特殊的:设i=3,j=4,k=i+j, k= i= j=,再看几个例子: 如:设i=3,k=(i+)+(i+)+(i+

19、) k= i=,9,6,如:设a=3,b=(a+)+(a+) b= a=,6,5,设a=3,b=(+a)+(a+) b= a=,8,5,设a=3,b=(a+)+(+a) b= a=,7,5,设a=3,b=(+a)+(+a) b= a=,10,5,7,4,4,main( ) int a=5,b,c,k; k=a+(b=a+)+(c=a+); printf(%d%d%d%dn,a,b,c,k); ,main( ) int a=5,b,c; printf(%d%d%d%dn,a,b,c,a+(b=a+)+(c=a+); ,思考!,1、6种关系运算符:= = != 2、关系表达式:用关系运算符将表达式

20、连接起来的式子 优先级: (= )( = != ) 结合性:自左至右; 表达式的值: 若为真,则结果为1; 若为假,则结果为0。,35 值为: 32 值为: 设x=-2; -3x-1 值为: 设x=1; 2x4 值为:,例如,二、关系运算符和关系表达式,求如下关系表达式的值:,0,0,0,1,算术运算符优先级高于关系运算符 3+(43)*4 值为: 3+43*4 值为,3,1,注意,不能用数学里习惯的关系运算符连用表示区间关系!,2、逻辑表达式:用逻辑运算符将表达式连接起来的式子 优先级: ! float b=3.5; !a ( ) !(a 0) ( ) (a 0) ( ),例如,0,1,1,

21、0,0,0,1,1,0,0,0,1,例如表达式运算如下:,混合优先级: ! 高 算术运算符 关系运算符 b = 1; c = a+ 执行后: a为 ,b为 ,c为 。,1,1,0,(2)a = 1; b = 1; c=0; d = -a b- (c = b+3 ); 执行后: a为 ,b为 ,c为 ,d为 。,0,0,0,1,例如: (1) n是小于m的偶数: (2)year是闰年: (能被4整除但不能被100整除,或能被400整除),逻辑表达式一般用于控制语句中的条件:,n m max=ab?a:b 求max的值,max的值为5,例如: a b y 表达式 y=a=4,b=5,a+b; y=(a=4,b=5,a+b); y=(a=4,b=5),a+b; y=a=(4,b=5),a+b;,4,5,4,9,4,5,9,9,4,5,9,5,5,5,5,10, 形式有两种: sizeof 变量名 sizeof (类型名) 结果为整型数。,int a; float x; printf(“%d,%d”,sizeof a,sizeof x); printf(“%d,%d”,sizeof(int),sizeof(float); 以上两个printf语句结果均为 。,例如,3、求字节运算符: sizeof 作用:求得变量或某种数据类型所需的字节数。,2,4,C语言允许整型、实型、字符型数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论