版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 数据类型与表达式,本章导读,本章包括知识点: C语言的基本数据类型 数据类型与变量、常量的关系 各种常量的性质和定义 表达式中各种运算符的功能和特点及副作用 数据类型的相互转换规则,2.1 数据类型概述,整型,基本整型int,基本数据类型,int 整数,在目前绝大多数机器上占4个字节。TC2中是2个字节 float 单精度浮点数,一般是4个字节长 double 双精度浮点数,一般是8个字节长 char 字符,一般是1个字节长 用来表示256个ASCII字符,或者0255的整数,数据类型修饰符,short short int,短整数,一般2个字节长。通常简写为short long lon
2、g int,长整数,一般是4个字节长。通常简写为long long double,长双精度(高精度)浮点数,一般是10个字节长。 signed 用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略 unsigned 用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0),2.2常量和变量,2.2.1 标识符和关键字 2.2.2 常量 2.2.3 变量,2.2.1 标识符和关键字,C语言的标识符的命名规则是: 1.由字母或下划线(_)开头,同时由字母、09的数字或下划线(_)组成。
3、 2.不能与关键词同名。 例如:school_id,_age,es10为合法的标识符。 school-id,man*,2year,class为不合法的标识符。,标识符是用来标识对象名字(包括变量、函数、数组、类型等)的有效字符序列。构造一个标识符的名字,需要按照一定的规则。,标识符不宜过短,过短的标识符会导致程序的可读性变差;但也不宜过长,否则将增加录入工作量和出错的可能性。,关键字(32个),关键字在C语言中,有其特殊的含义,不能用作一般的标识符使用,即一般的标识符(变量名、类名、方法名等)不能与其同名。,2.2.2 常量,常量是指直接用于程序中的、不能被程序修改的、固定不变的量。 C语言中
4、的常量值是用数值或字符串表示的。C语言常量包括整数、浮点数、字符、字符串四种类型。 有时为了使用方便,可用一个符号名来代表一个常量,这称为符号常量。 符号常量一般定义格式如下: #define 标识符 常量数据 例如: #define PI 3.14159 一旦某标识符定义成为一个常量后,以后在程序处理时,凡是碰到了该标识符,都将替换成对应的常量。,2.2.3 变量,变量是指C语言编程中合法的标识符,是用来存取某种类型值的存储单元,其中存储的值可以在程序执行的过程中被改变。,必须先定义后使用,定义变量的一般形式为:变量类型说明符 变量列表=初值,变量类型说明符,确定了变量的取值范围以及对变量所
5、能进行的操作规范 变量列表,由一个或多个变量名组成。当要定义多个变量时,各变量之间用逗号分隔。 初值是可选项,变量可以在定义的同时赋初值,也可以先定义,在后续程序中赋初值。,C语言中的变量名除了符合标识符的条件之外,还必须满足下列约定: 变量名不能与关键字相同。 C语言对变量名区分大小写。 变量名应具有一定的含义,以增加程序的可读性。,例: char esc = a; int i = 1; int sum = 0; float eps = 1.0e-5;,2.3 整数类型,2.3.1 整型常量 2.3.2 整型变量,2.3.1 整型常量,整数常量是不带小数的数值,用来表示正负数。 例如0 x5
6、5、0 x55ff、1000000 都是C语言的整数常量。 整数常量的取值范围是有限的,它的大小取决于此类整型数的类型,与所使用的进制形式无关。,整数常量有三种形式:十进制、八进制、十六进制,(1)十进制整数是由不以0开头的09的数字组成的数据。 (2)八进制整数是由以0开头的07的数字组成的数据。 (3)十六进制整数是由以0 x或0X开头的09的数字及AF的字母组成的数据。 例如:0,63,83是十进制数, 00,077,0123是八进制数, 0 x0,0X0,0X53,0 x53,0X3f,0 x3f是 十六进制数。,2.3.2 整型变量,整型变量类型有short、int、long、uns
7、igned四种说明符。,整数类型的取值范围,2.4 实数类型,2.4.1 实型常量 实数类型的数据即实型数据,在C语言中实型数据又称为浮点数。 浮点数是带有小数的十进制数,可用十进制数形式或指数形式表示。,浮点数表示形式,(1)十进制数形式:十进制整数+小数点+十进制小数。 (2)指数形式:十进制整数+小数点+十进制小数+E(或e)+正负号+指数。 例如: 3.14159,0.567,9777.12是十进制数形式, 1.234e5,4.90867e-2是指数形式。,C语言的浮点数常量在机器中有单精度和双精度之分。单精度以32位形式存放,双精度则以64位形式存放。,2.4.2 实型变量,(1)f
8、loat类型 float类型是一个位数为32位的单精度浮点数。它具有运行速度较快,占用空间较少的特点。 (2)double类型 double类型是一个位数为64位的双精度浮点数。 双精度数在某些具有优化和高速运算能力的现代处理机上运算比单精度数快。双精度类型double比单精度类型 float具有更高的精度和更大表示范围,常常使用。,2.5 字符类型,2.5.1 字符型常量 (1) 用单引号括起来的一个字符; 如:A、 1、?等。 (2) 用单引号括起来的由反斜杠()引导的转义字符。 如:n、 t、 x41、101等。,表24 转义字符表,2.5.2 字符型变量,字符型变量的类型说明符为cha
9、r,它在机器中占8位,其范围为0255。 注意:字符型变量只能存放一个字符,不能存放多个字符,例如:char a=am; 这样定义赋值是错误的。,字符串常量,用一对双引号括起来的字符序列。 注意:每个字符串的后面都有一个0结束符。 如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。, a与“a”的区别。,注意,2.6 不同数据类型之间的转换,不同类型的数据之间的运算称为混合运算。 在混合运算中,将会碰到类型转换的情况。 类型转换可分为自动类型转换、强制类型转换两种。, 自动类型转换,转换从低级到高级。 各类型从低级到高级的顺序为:charintlongfloat
10、double。,例如: char ch=A; int i=28; float x=2.36; double y=6.258e+6; 若表达式为 i+ch+x*y,转换过程:先将ch 转换成int型,计算i+ch,由于ch=A,而A的ASC码值为65,故计算结果为93,类型为int型。再将x转换成double型,计算x*y,结果为double类型。最后将i+ch的值93转换成double型,表达式的值最后为double类型。, 强制类型转换,高级数据要转换成低级数据,需用使用强制类型转换。 这种使用可能会导致溢出或精度的下降,最好不要使用。 强制类型转换的格式为: (type) 变量; 其中:t
11、ype 为要转换成的变量类型。,例如: (int)(a+b) (强制将a+b的值转换成整型),例2.1数据类型转换的例子,#include void main() float x; int i; x=3.5; i=(int)x; printf(x=%f,x); printf( i=%d,i); ,运行结果为: x=3.500000 i=3,2.7 运算符与表达式,2.7.1 算术运算符与算术表达式 2.7.2 赋值运算符与赋值表达式 2.7.3 关系运算符与关系表达式 2.7.4 逻辑运算符与逻辑表达式 2.7.5 条件运算符与条件表达式 2.7.6 逗号运算符与逗号表达式 2.7.7 运算符
12、的优先级和结合法则,2.7.1 算术运算符与算术表达式,算术运算符用于算术运算,其操作数为数字类型或字符类型。,表25 算术运算符,例:合法的C语言算术表达式。 a*b/c-1.5+a+fabs(-5) fabs(-5)是求-5 的绝对值的库函数。,“+”、“-”,前缀方式是先将操作数加(或减)1,再将操作数的值作为算术表达式的值;后缀方式是先将操作数的值作为算术表达式的值,再将其加(或减)1。,例如:a的值为5, +a为前缀方式,首先将a的值加1,再得到表达式的值为6; a+为后缀方式,首先得到表达式的值为5,再将a的值加1。 自增运算符和自减运算符运算对象只能是变量,不能是常量或表达式。形
13、式3+或+(i+j)都是非法的表达式。,2.7.2 赋值运算符与赋值表达式,赋值运算符“=”就是把右边操作数的值赋给左边操作数 。 赋值运算符左边操作数必须是一个变量,右边操作数可以是常量、变量、表达式 。 例如:表达式b=a+3,在赋值运算符两边的操作数的数据类型如果一致,就直接将右边的数据赋给左边;如果不一致,就需要进行数据类型自动或强制转换,将右边的数据类型转换成左边的数据类型后,再将右边的数据赋给左边变量。,复合运算符,练习:设a=12, 计算表达式a+=a-=a*12和a+=a-=a*=12的值,2.7.3 关系运算符与关系表达式,关系运算符用来对两个操作数进行比较。 关系表达式就是
14、用关系运算符将两个表达式连接起来的式子,其运算结果为布尔逻辑值 。 如果关系表达式成立结果为真(true),否则为假(false)。由于C语言没有逻辑型数据,就用1代表“真”,0代表“假”。,关系运算符,关系运算符的优先级,(1)“”和“=”为同一级, “= =”和“!=”为同一级。前者优先级高于后者。 (2)关系运算符优先级低于算术运算符,高于赋值运算符和逗号运算符。,例2.2关系表达式的运用,#include void main() char ch=w; int a=2, b=3, c=1, d, x=10; printf(“%d”, ab=c); printf(“%d”, d=ab);
15、printf(“%d”, cha+1); printf(“%d”, d=a+bc); printf(“%d”, b-1=a!=c); printf(“%dn”, 3=x=5); ,运行结果为 0 0 1 1 0 1,程序输出了6个表达式的值,其中有两个是赋值表达式,请读者根据运算符的优先级作出判断。,注意,关系表达式3=x=5 等价于关系表达式 (3=x) =5 当 x=10时,3=x的值是1,再计算1=5,得到1。其实,无论x去何值,关系表达式3=x的值不是1就是0,都小于5,即3=x=5的值恒为1。 由此看出关系表达式3=x=5无法正确表示代数式3=x=5。,2.7.4 逻辑运算符与逻辑表
16、达式,逻辑运算符用来对关系表达式进行运算。逻辑表达式就是用逻辑运算符将关系表达式连接起来的式子,其运算结果为布尔逻辑值。,表28 逻辑运算符,表29 与、或、非运算规则,优先次序,(1)! printf (“%d”, a ,运行结果为 0 1 0 1,求解规则,求解C语言逻辑表达式时,按从左到右的顺序计算运算符两侧的操作数,一旦得到表达式的结果,就停止计算。 求解逻辑表达式 exp1 & exp2时,先计算exp1, 若其值为0,则exp1 & exp2值一定为0。此时,没有必要计算exp2的值。例2.3中,计算表达式! a &b时,先算! a,由于a的值是2,!a就是0,该逻辑表达式的值一定
17、是0,不必再计算b。,求解逻辑表达式 exp1 | exp2时,先计算exp1, 若其值为非0,则exp1 | exp2值一定为1。此时,没有必要计算exp2的值。例2.3中,计算表达式a | 3+10 & 2时,先算 a,由于a的值是2,该逻辑表达式的值一定是1,不必再计算3+10 & 2。 通常,关系运算符和逻辑运算符在一起使用,用于流程控制语句的判断条件。,2.7.5 条件运算符与条件表达式,条件运算符是一个三目运算符 。 一般形式为: 表达式1 ? 表达式2 :表达式3 其中表达式1是一个关系表达式或逻辑表达式。,执行过程:先求解表达式1的值,若表达式1的值为真,则求解表达式2的值,且
18、作为整个条件表达式的结果;若表达式1的值为假,则求解表达式3的值,且作为整个条件表达式的结果。,赋值表达式 max=(ab)?a:b 执行结果就是将条件表达式的值赋给max,也就是将a和b二者中大者赋给max。,条件运算符的优先级较低,只比赋值运算符高。它的结合方向是自右向左。例如: ( ab ) ? a: b+1 等价于 a b ? a: (b+1)。 a b ? a: c d ? c : d 等价于 a b ? a : (c d ?c :d )。,2.7.6 逗号运算符与逗号表达式,逗号表达式的一般形式为 表达式1,表达式2 逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。 例如:x=(y= 6, y*3) 首先将6赋给y,然后执行y*3的运算,将整个结果赋给x。,一个逗号表达式又可以与另一个逗号表达式组成一个新的逗号表达式, 例如: (a=3*5,a+4),a+5 先计算出a的值为3*5,等于15,再进行a*4的运算为60,再进行a+5的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 术后回访关怀制度执行标准
- 2026年普通高等学校招生全国统一考试康德调研(五)语文+答案
- 焊接车间工艺卡片更新流程
- 施工临时线路组织协调方案
- 社区健康档案管理服务规范
- 危废暂存区分类处置管理办法
- Java微服务网关接口定义规范
- 模板支撑校核验算技术规范
- 工会自查报告(2篇)
- DeepSeek快速入门:核心功能与基础提示词公式详解
- 红色革命歌曲经典赏析与应用
- 2024糖尿病视网膜病变临床诊疗指南
- 常见病小儿推拿培训
- 2025江苏连云港市海州区国有企业招聘25人笔试历年常考点试题专练附带答案详解试卷2套
- 物业秩序队员培训大纲
- 政务颁奖礼仪培训
- 人工智能+零售零售行业就业岗位变革与未来展望
- 行文格式规范培训
- GB/T 45616.2-2025自动化系统与集成面向制造的数字孪生框架第2部分:参考架构
- 螺旋改直升气柜施工方案
- 党课考试题库及答案
评论
0/150
提交评论