




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖北工业大学计算机学院,1,第2章数据类型与表达式,2,本章目录,2.1 C语言的数据类型 2.2 变量与变量的存储 2.3 表达式与表达式语句,2.1 C语言的数据类型2.1.1 数据与数据类型,3,数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作,2.1.2基本数据类型,基本数据类型有字符型、整型、浮点型,4,2.2 变量与变量的存储,变量指在程序运行的过程中其值可以变化的量。在存储器中分配指定数据类型的内存单元。 变量的值在程序运行过程中可以改变。 变量名表示各运行时刻内存单元的地址,数据类型表示该内存单元的长度和存储方法,5,2.2.1 变量,先定义,
2、后使用 变量的定义格式为:存储类型 类型名 变量名1,变量名2,6,决定分配字节数 和数的表示范围,合法标识符,自动方式auto 静态方式static 寄存器方式 register,2.2.2 整型变量及其存储方式,整型变量的定义 int iA,iB,iC; /* iA,iB,iC 被定义为有符号整型变量 */ short sD; /* sD定义为有符号短整型变量 */ unsigned short usE; /* usE定义为无符号短整型变量 */ unsigned int uF; /* uF定义为无符号整型变量 */ long lK ; /* lK定义为有符号长整型变量 */ unsign
3、ed long ulM; /* ulM定义为无符号长整型变量 */,7,整型变量的初始化 在变量定义的同时给变量赋值称为变量初始化。 例如: int iX = 5 ; int iY = A,8,整型数据的存储方法,9,无符号整型数据的存储,10,有符号型整型数据的存储,11,存储-1的补码,12,有符号整型数据的存储,整型变量的使用,要使用一个整型变量,必须先声明后使用。变量声明后还没有赋值,要给它赋一个初值,赋初值的方法有多种,可以在声明的同时赋初值, 例如:int iK = 8; 可以先声明后再赋值:例如, int iA, iB ; iA = 6 ; iB = iA + 5;,13,14,
4、短整型数据二进制存储 十六进制表示的图解表示,例2.2 定义短整型变量sA,sB,变量sA的值为32767,变量sB=sA+1 ; 输出变量sB。 #include main( ) short int sA, sB; sA = 32767; sB = sA + 1; printf(%d,sB); ,15,输出的结果为:-32768,2.2.3 浮点型变量及其存储方式,浮点型变量是用来存放浮点型数据的内存单元。浮点型变量包括单精度型变量、双精度型变量和长双精确度型变量三类。编译时,浮点型变量按照IEEE-754标准规定浮点数的存储格式,存储为十六进制数,16,浮点型变量的定义 浮点型变量的定义格
5、式为: 存储类型 float 变量名1=初值,变量名2=初值,; 存储类型 double 变量名1=初值,变量名2=初值,; 存储类型 long double 变量名1=初值,变量名2=初值,;,17,浮点变量的初始化,在定义浮点变量时可以对变量的值进行初始化,用浮点型常量为浮点型变量赋初值。 float fA = -314.159, fB = 1.23456e+4 ; double dC = 48L, dD = 9.2836 e+12 ; long double ldX = -1.8635 E+10, ldY = 3.333333E+20 ;,18,浮点型数据的存储方法,将十进制的浮点数写成
6、存储格式的步骤如下: 将十进制数写成规格化的二进制数,分别确定符号位s的符号,阶码e8的值和尾数M23,用浮点型移阶码公式E=e8+127(或双精度型移阶码公式E=e8+1023)计算移阶码E,隐含前导码表示的整数位1,将尾数依次填写到尾数M23中,19,浮点型数据的存储格式,20,浮点数存储格式,例2.3 已知单精度浮点数2.75和双精度浮点数18.875L,试写出存储的十六进制数。 解:按照单精度浮点数的存储格式,先将单精度浮点数转换成规格化二进制数 2.75 = (10.11)2 =(1.011*21)2 其中,符号位s为0,阶码e8为1,前导码1隐含,尾数M23=011 0000 00
7、00 0000 0000 0000,移阶码为:E= e8+127=1+127=128 或 E=(1+7F)16= (80)16 =(10000000)2 所以,单精度的存储码sf为: sf = (0100 0000 0011 0000 0000 0000 0000 0000)2 = (40 30 00 00)16 双精度浮点数18.875L转换成规格化二进制数为: 18.875 =(10010.111)2 =(1.0010111*24 )2 其中,符号位s为0,阶码e11为4,前导码1隐含,尾数M52=0010 1110 0000 0000 0000 0000 0000 0000 0000 0
8、000 0000 0000 0000,移阶码为:E= e11+1023=4+1023=1027 或 E=(4+3FF)16= (403)16 =(100 0000 0011)2 所以,双精度的存储码sd为: sd = (0100 0000 0011 0010 1110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 )2 = (40 32 E0 00 00 00 00 00)16= (40 32 E0 00 00 00 00 00)16,21,例2.4 已知双精度浮点数的存储码为3FFA 0000 0000 0000H,试求双精度浮
9、点数的值。 解:将双精度浮点数的存储码3FFA 0000 0000 0000H 写成二进制数: sd=(0011 1111 1111 1010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 )2 根据双精度浮点数的存储格式可知: 符号位s为0表示正号,移阶码E = 011 1111 1111B = 3FFH, 阶码e11 = E 3FFH = 3FFH 3FFH = 0H,表示指数部分为20, 隐含前导码为1,尾数为101,表示含小数的十进数部分为1.101;所以,该双精度浮点数的值为:1.625,22,2.2.4 字符
10、变量,字符变量的定义 定义有符号和无符号型字符变量的形式如下: char chA, chB : /* chA, chB 被定义为有符号字符变量 */ unsigned char uchX,uchY; /* uchX, uchY 被定义为无符号字符变量 */,23,字符变量的初始化,在字符变量定义的语句中,如果在定义的同时并给字符变量赋值,称为字符变量的初始化。可以用字符型常量或整型常量为字符变量赋初值, 例如: char chA = A, chB = b; char chK = 68; int iD = b; 字符变量的初始化包括定义字符变量,并为字符变量赋初值,24,字符数据的存储,char
11、 chX ; char chY = D, chZ = 98 ;,25,十六进制表示,二进制表示,2.3 表达式与表达式语句,表达式是用运算符、小括号按一定的规则将运算量连接起来,能得到运算结果的式子,可将表达式简单地理解为计算的公式。表达式的语法定义如下: (1) 常量、变量、数组、函数是表达式,如常量86是表达式。 (2) 若E为表达式,为单目运算符,则E或E是表达式,如i+是表达式。 (3) 若E1、E2为表达式,为双目运算符,则E1E2是表达式,如a*8是表达式。 (4) 若E1、E2、E3为表达式,?:为三目运算符,则E1?E2:E3是表达式。 (5) 若E为表达式,则( E )是表达
12、式。,26,2.3.1 算术运算与赋值运算,27,算术运算符,算术表达式,算术表达式是用算术运算符、小括号按一定的规则将运算量连接起来式子 根据算术运算符的优先级、结合性决定运算次序和运算步骤。,28,数据转换规则,C程序设计语言的转换规则为: charshortintunsignedlong double floatdouble,29,赋值运算符,赋值运算符“=” 赋值表达式的语法格式为:变量 = 表达式 赋值运算符“=”的作用是将右边表达式的值经计算后赋给左边的变量 赋值运算符(包括复合赋值运算符)的优先级只比逗号运算符高,一个表达式里可以有多个赋值号“=”,其结合方向为自右向左,每个赋值
13、表达式的左边是一个变量。 例如: iA = iB = iC = 4; 等同于iC = 4;、iB = iC;、iA = iB;,30,在赋值运算符右边表达式中,可以包含赋值运算符左边的变量 例如:iY = iY+iK,其含义为:将变量iY的原值加上iK后所得到的值赋给iY “变量=表达式”整体作为一个表达式,其值为变量的值. 4+(iY = 5),表达式(iY=5)的值为5 赋值运算符右边表达式的类型与左边变量的类型应该一致。当不一致时,按规则转换,31,复合赋值运算符,复合赋值运算符是在赋值运算符“=”的左边加上其他运算符,复合赋值运算符实质上是变量运算后赋值给自身的一种简化写法 例: 等价
14、于 ,32,33,例2.6 已知iY为int型变量,值为6;执行“iY+=iY*=iY/=iY-=4;”语句后,求iY的值。 解:先计算iY-=4,即iY=iY-4,iY的值为2;再计算iY/=2,即iY=iY/2,iY的值为1;再计算iY*=1,即iY=iY*1,iY的值为1;再计算iY+=1,即iY=iY+1,iY的值为2。 展开成一般的表达式为: iY = iY + (iY = iY * ( iY = iY / ( iY = iY - 4),34,变量的自增自减运算,作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值
15、,再执行i+1或i-1),例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b;,/*k=4,j=4 */,/*k=3,j=4 */,/*4 */,/*3 */,/*c=20,a=4 */,/*c=15,a=4 */,2.3.2 关系运算与逻辑运算,关系运算 关系运算指比较两个操作数的运算,运算的结果是逻辑值“真(1)”或“假(0)”。,36,例2.8 已知整型变量iA=5,iB=4,iC=3,分别求表达式“iAiBiC”、“iA!= iBiC
16、”和“iA= =iBiB,表达式的值为1,再计算1 iC,表达式为假值为0,即表达式“iAiBiC”值为0。 iA!= iBiC /* 先算iBiC,值为1,计算iA!=1表达式为真,值为1。 */ iA= =iBiC/* 先iBiC,值为0,iA = = 0表达式为假,故值为0。 */,37,逻辑运算,逻辑运算指按逻辑关系连接各种类型表达式的运算,逻辑运算的结果是逻辑值1(真)或0(假)。 C语言中,任何一个常量、变量、函数、表达式的值为非0时,不论其数据类型如何,其逻辑值为真,记作1,任何一个常量、变量、函数、表达式的值为0时,其逻辑值为假,记为0。逻辑值输出的结果用1表示真,0表示假。,
17、38,例2.9 求表达式2.5+4 ”后,求iX与iY的值。 解:计算表达式iX += 2的值,iX的值为3, 计算表达式iX+,iX的值为4,iY的值是表达式iX+4的值,值为8。iX的值不变,仍为4。,45,强制类型转换运算符,需要强制转换数据类型,用强制类型转换运算符把表达式转换成所需类型。C语言使用的强制类型转换的一般格式为: (类型名)(表达式) 例2.15:已知整型变量iA,iX,float型变量fY,分析下面强制类型转换运算符的功能。 (double)iA (将iA转换成double类型) (int)(iX+fY) (将iX+fY的值转换成整型) (float)(5%3) (将5
18、%3的值转换成float型),46,47,例2.16 #include main( ) int iK; double dX = 3.6; iK = (int) dX; printf(”dX=%f, iK=%d”, dX, iK); 运行结果: dX 3.600000,iK = 3 dX的类型仍为double 类型,值为3.600000。,条件运算,条件运算符是三目运算符“? : ”,有3个操作数,即3个表达式,表达式1是条件表达式,判断条件是否成立,表达式2和表达式3是求值表达式,条件为真执行表达式2,条件为假执行表达式3。 条件运算表达式的格式为: 表达式1?表达式2 :表达式3,48,例2
19、.17 已知整型变量iA = 2,iB = 3,试求表达式“iA iB ? +iA : iB-”的值。 解:执行表达式iA iB的结果为假,值为0,执行“:”后表达式iB - - ,后置自减运算,整个表达式的值为3,iB的值为2。,49,例2.18 已知整型变量iX = 1, iA = 2,iB = 3,试求表达式“iX = iA+ 5 ? iA : iB = iA ? 1 : iA”的值。 解:条件运算符优先级优于赋值运算符要先计算,条件运算符的结合原则为自右至左,右边的条件表达式比左边的先计算,用括号表示优先次序为: iX = (iA+ 5 ? iA : (iB = iA ? 1 : iA ) ) 先计算表达式(iB = iA ? 1 : iA )的值,条件表达式的值为0,执行表达式a,值为2;表达式(iB = iA ? 1 : iA )的值为2。 再计算表达式 (iA+ 5 ? iA :2 ),条件表达式iA+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业内部员工培训需求与实施策略
- CVD金刚石薄膜与涂层技术进展及其关键应用领域探索
- 合肥学校资产管理办法
- 机票费用审核管理办法
- 国企补充医疗管理办法
- 公务接待集中管理办法
- 医药机构定点管理办法
- 农机大院农机管理办法
- 近现代文学批评主体与客体:期刊书评的媒介作用
- “新质生产力”引领下的“档案文化产业”发展新模式、新趋势与新路径探索
- -卫生资格-副高-内科护理-副高-章节练习-护理学总论-医院感染护理(案例分析题)(共6题)
- 中国古代文化常识(上)
- 礼品礼金登记表
- 【新】2019-2020成都市石室中学北湖校区初升高自主招生数学【4套】模拟试卷【含解析】
- 《文明礼貌我最棒》班会课件
- 意外受伤赔偿协议书的格式
- PE管闭水试验表
- 山东省教师职称改革实施方案
- 《河南省企业安全风险辨识管控与隐患排查治理双重预防体系建设导则(试用)》
- 生产过程检验记录表
- 规划放线报告材料样本
评论
0/150
提交评论