




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第二章 数据类型、运算符与表达式,主要内容 1 基本数据类型 整型、实型、字符型 2 常用运算符及表达式 算术、赋值、其他,2,数据类型,1 基本数据类型,3,1.0 常量与变量,常量 在程序运行过程中,其值不能被改变的量称为常量。 常量有不同的类型 整型常量:15、-8、0等 实型常量:3.7、-8.2等 字符型常量:a、A、+、5等 字符串常量:“Hello“、“a“、“123“等,4,符号常量 用一个标识符代表一个常量。 语法 #define 符号常量名 字符序列 如:#define PI 3.1415926 main() float r,area; scanf(“%f“, 说明 习惯上,符号常量名用大写,以便与变量名相区分。 可读性好,含义清楚。 修改方便。在需要改变一个常量时能做到“一改全改”。,5,变量 其值可以改变的量称为变量。 变量说明语法: 类型名 变量名; 变量也有不同的类型 一个变量应该有一个名字,即变量名,用来标识在内存中所分配的存储单元。 如: int a; 向变量名赋值,即是向该存储单元中存入数据,该数据就是变量的值。 如: a=10; 习惯上,变量名用小写。 变量“先定义、后使用”,10,6,变量“先定义、后使用” 目的: 保证程序中变量名的正确使用。 int student; studemt=10; /* Error */ 为变量分配适当的内存单元。 int a; float b; 根据所定义的变量的类型,检查对该变量所进行的操作是否合法。 int a,b; float c; a%b /* OK */ a%c /* Error */,7,1.1 整型,整型常量 十进制整数。 如:123、-456、0 八进制整数。以0开头的数是八进制数(使用的数码为:07) 如:0123=(123)8=(83)10 在8进制数中不使用8和9这两个数码,如018、094均为非法。 十六进制数。以0x开头的数是十六进制数(使用的数码为:09、af或AF)。 如:0x123=(123)16=(291) 10 对于0x1a、0xabcd、0x0FFF等都是合法的16进制数; 而0h0fff、0xfg等都是非法的 。,8,整型变量 整型分类、所占字节数及数据范围,9,整型数据在内存中的存储方式,整型数据在内存中是以二进制形式存放的。 若定义了一个整型变量i: int i=10; 图 (a)是数据存放的示意图, 图 (b)是数据在内存中实际存放的情况;,i,10,(a),i,(b),10,实际上,整型数值是以补码表示的。 正数的补码 与其原码相同 负数的补码 将该数的绝对值的二进制形式按位取反再加1 例如求-10的补码:,10的原码,取反,再加1得 -10的补码,11,例2.1 整数9的机器表示 作为int, 00000000 00001001 作为short int, 00000000 00001001 作为long int, 00000000 00000000 00000000 00001001 以上第一位为符号位, 表示正整数。 以下第一位为正常的数据位, 非符号位。 作为unsigned int, 00000000 00001001 作为unsigned short int, 00000000 00001001 作为unsigned long int, 00000000 00000000 00000000 00001001,12,整型常量的类型 在程序中书写一个整型常量时,它占几个字节? C是这样处理的: 如果其值在-3276832767范围内,认为它是int类型(占2个字节),否则认为它是long类型(占4个字节)。 当需要把一个仅占两个字节的整型常量让它占4个字节时,可以在该数据的后面加上字母L(大小写均可)。 如: long a=10L; 而: long b=10;,13,1.2 实型,实型常量 实数在C中也称浮点数。 实数有两种表示形式 。 十进制数形式,也称小数形式。如: 0.58、 .58、 58.0、 85. 指数形式,也称科学记数法。如: 12.3e3、123E2、1.23e+4、0.12E+5 都代表1.23104。 但要注意字母e(或E)之前必须有数字, 且e后面指数必须为整数, 如:e3、2.1e3.5、.e3、e 等都不是合法的实数。,14,实型变量 实型分类、所占字节和取值范围 对于实型常量不区分float型和double型。一个实型常量可以赋给一个float型或double型变量。根据变量的类型截取实型常量中相应有效数字。 实型变量的说明及精度,15,例2.2 实型数据的舍入误差,main() float a,b; a=123456.789e5; b=a+20; printf(“%f,%f“,a,b); ,结果: 12345678848.000000,12345678848.000000,16,误差原因分析,b的理论值应是12345678920, 一个实型变量只能保证的有效数字是7位, 后面的数字是无意义的,并不准确表示该数, 从结果看出,把20加在后几位上,是无意义的, 应当避免将一个很大的数与一个很小的数直接相加减,否则就会“丢失”小的数。 与此类似,用程序计算1.0/3*3的结果并不等于1。,17,1.3 字符型,字符常量 普通字符常量 用单引号括起来的一个字符,如a、H、&、9、+等。 转义字符 以反斜线“”开头的特定字符。常见的转义字符,18,例2.3 转义字符应用 main() printf(“abctderxn“); printf(“ftbbg“); 运行结果: xbcde fg,a,b,d,c,e,x,f,g,19,字符变量 字符类型分类、所占字节和取值范围 字符型数据与整型数据的关系 将一个字符常量赋给一个字符变量,并不是把该字符本身放在内存单元中去,而是将该字符的ASCII码放到存储单元中,因此字符型数据也可以象整型数据那样使用。 如: char ch; ch=A; printf(“%c,%dn“,ch,ch);,65,20,例2.4 字符型数据与整型数据的关系 #include “stdio.h“ main() char ch; int i; ch=A; i=65; printf(“%c,%cn“,ch,i); /* i的值理解成字符输出,65对应的字符为A */ printf(“%d,%dn“,ch,i); /* 将ch中存储的值(即A的ASCII码)直接输出 */ ch=65; i=A; /* 字符型数据与整型数据通用 */ printf(“%c,%cn“,ch,i); printf(“%d,%dn“,ch,i); i=321; ch=i; printf(“i=(%d,%c)n“,i,ch); ,i,ch,321,65,21,字符串常量 用双引号括起来。“Hello“、“a“、“123“等。 不要把字符常量与字符串常量相混淆。如有: char ch1,ch2,ch3; ch1=a; /* ok */ ch2=“a“; /* error */ ch3=“CHINA“; /* error */ 字符串的长度:双引号括起来的字符个数。如: “CHINA“的长度为5; “abctxyz“的长度为7(其中t表示一个字符); “是空字符串,长度为0。,22,字符串的存储 除了要存储双引号里面的字符之外,C规定还要多存储一个字符0,作为“字符串的结束标志”。 如字符串“CHINA”的存储情况为: 长度为5,而实际需要6 个字节。 思考 请说明“5“, 5,5的区别,它们各占几个字节的存储空间,在内存中是如何存储的。,23,变量的初始值,在使用变量时,如果它出现在表达式中,事先必须得有一个初始值;否则其值将是一个不确定的值。 变量的初始值可以通过赋值语句、读语句和变量初始化来获得。如: int x,y,z; x=5; scanf(“%d“,24,变量的初始值也可能用变量初始化来获得,即在说明变量的同时给变量赋值。 变量说明的完整语法 类型名 变量名=初始值; 如: int a=3; float f=4.5; char c1=a,c2; 如果对几个变量赋以同一个初值,不能写成: int a=b=c=1; /* b、c没有定义*/ 应写成: int a=1,b=1,c=1;,25,2.1 算术运算符及其表达式,由算术运算符与运算量构成的表达式称算术表达式。 基本算术运算符 +(加)、-(减)、*(乘)、/(除)、%(取余) 注意,两个整数相除的结果仍为整数。 “%“是取余(取模)运算,只适合于整型数据。 以被除数的符号作为余数的符号。,2 常用运算符及表达式,26,自增(+)、自减(-)运算符 只能用在变量的前面和后面。 如:m=3; m1=m+; m2=+m;,3,3,4,5,5,27,2.2 赋值运算符及其表达式,赋值运算符和赋值表达式 赋值运算符即“=”,由它构成的表达式称赋值表达式。 其语法格式为:变量名=表达式 其作用是将“=”右边表达式的值赋给左边的变量。如: a=1; a=a+5; 既然是表达式,表达式就有一个值。如: 2+5是算术表达式,值为7; a=3是赋值表达式,C规定这个值就是送给左侧变量的值,即表达式a=3的值为3。,28,复合赋值运算符及其表达式 赋值运算符可以与所有的双目运算符合在一起,构成一种新的运算符(如“+=”、“-=”、“*=”等),称复合的赋值运算符。如: a+=3 p*=5 h/=2+1 a=a+3 p=p*5 h=h/(2+1) a+=3可以理解为:把3加到a里面去; p*=5可以理解为:把p扩大5倍。,29,2.3 其它运算符,逗号运算符 由逗号运算符(即“,”字符)与运算量构成的表达式称逗号表达式。 其语法格式 表达式1,表达式2,表达式n 其求值过程 从左向右逐个计算每一个表达式,把最右侧表达式(即表达式n)的值作为整个表达式的值。如: 3+2,10-6 逗号运算符是所有运算符中优先级最低的。,4,30,强制类型转换运算符 语法格式:(类型名)表达式 如:(double)a (int)(x+y) (int)x+y 在强制类型转换时,得到一个所需类型的中间值,原来变量的类型及该变量所存储的值并未发生变化。 求字节运算符 运算符sizeof是用来计算变量或数据类型所占的内存字节数。 语法格式:sizeof(类型名或变量名),31,数值型数据间的运算,一般情况下,相同类型的数据可直接进行运算,运算的结果就是这种类型。 如表达式: 5.0/2.0 /* 参加运算的两个数都是实型,结果为实型2.5 */ 5/2 /* 参加运算的两个数都是整型,结果为整型2 */ 在C语言中,不同类型的数据可以在同一表达式中进行混合运算,但运算前要进行必要的类型转换。 如: 10+a-1.5/3 是正确的表达式。,32,类型的自动转换(隐式转换) 不同类型的数据在进行运算时,按下图转换规则自动进行: 高 doublefloat long unsigned 低 intchar,short 横向向左的箭头表示即使类型相同也必定转换。 纵向的箭头表示当运算对象为不同类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度杭州汽车租赁合同与杭州长租公寓租赁管理协议
- 2025版国际贸易欺诈防范与信用评估合同
- 二零二五年度瓷砖行业品牌授权合同
- 二零二五大连情感修复与离婚协议执行合同
- 2025版数字媒体广告投放合作协议
- 二零二五年度农业产业化合作经营合同范本
- 二零二五年度城市绿化带搭棚改造与美化合同
- 2025版自驾游汽车租赁服务合作协议
- 二零二五年度公共停车场冬季清雪与安全管理服务合同
- 二零二五年度顶级中介房屋买卖担保协议
- 预见性护理在骨科的应用
- 2025年甘肃社会化工会工作者招聘考试(公共基础知识)综合试题及答案
- 高二班主任班级管理课件
- 侵蚀性葡萄胎护理查房
- 2025年行政执法证考试题库及参考答案
- 2025年校招:招商银行试题及答案(可下载)
- 2025年安防生产行业技能考试-安防工程企业技术人员能力验证考试历年参考题库含答案解析(5卷100道集合-单选题)
- 2025年康复治疗师资格考试试题及答案
- 国际营销中心管理办法
- 无痛人流知识课件
- 全国律师会费管理办法
评论
0/150
提交评论