




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章C语言的基本数据类型与表达式2.1常量和变量2.2C语言的基本数据类型2.3数据类型转换2.4运算符与表达式,C语言程序设计教程,2,C语言的数据类型,第2章C语言的基本数据类型与表达式,C语言提供的数据结构,是以数据类型形式出现的。具体分类如下:1.基本类型分为整型、实型(又称浮点型)、字符型和枚举型四种。2.构造类型分为数组类型、结构类型和共用类型三种。3.指针类型。在第9章中介绍。4.空类型C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。,3,本章将介绍基本类型中的整型、实型和字符型三种数据。,4,一、常量与符号常量常量是指在程序运行中,其数值不能被改变的量。常量又可分为直接常量和符号常量。,第2章C语言的基本数据类型与表达式,2.1常量与变量,常量的类型,可通过书写形式来判别。,5,120、-100、0;0120、072;0 xFFFF、0 x1e、0X28AF,0XED4;120L,200L;长整型常量3.14、-3.1、5.12E-6;099、12f、0 xg、48EA;019.5、1e-08;实型常量只能用十进制形式表示2.1E10.2、E-6、6.4E+4.8、E9;changsha、+?ab;,第2章C语言的基本数据类型与表达式,1、直接常量:是在程序中直接引用的数据。,请判断这些常量正确与否:,6,2、符号常量是用标识符来表示一个数据;在程序不能给它赋值。定义形式:#define标识符常量数据例如:#definePI3.14159在程序预处理时,凡是出现标识符PI的地方都将用数据3.14159来替换。如:2*2.3*PI就等价于2*2.3*3.14159。二、变量1.变量的概念在程序运行过程中,其值可以被改变的量称为变量。2.变量的两个要素,第2章C语言的基本数据类型与表达式,7,(1)变量名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。3.标识符命名规则(1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。(2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。在TCV2.0中,变量名(标识符)的有效长度为132个字符,缺省值为32。,8,(3)C语言的关键字不能用作变量名。注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗?标识符命名的良好习惯见名知意:所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。,9,4.变量的定义与初始化在语言中要求对所有用到的变量,必须先定义、后使用;且称在定义变量的同时进行赋初值的操作为变量初始化。,(2)变量初始化在说明变量的同时给变量一个初始值。,inta=5,b=3;inta=b=c=3;inta,b,c;a=b=c=3;,例如,10,main()intx,y,z,w;/*定义x,y,z,w为整型变量*/unsignedintk;/*定义k为无符号整型变量*/x=10;y=-20;k=30;z=x+k;w=y+k;printf(“x+k=%d,y+k=%dn”,z,w);,第2章C语言的基本数据类型与表达式,例2-1:,程序运行结果为:x+k=40,y+k=10,11,5、变量的作用域C语言程序是由函数组成的,且有且只能有一个main函数。变量定义可以出现在函数内,亦可出现在函数外或者是函数的参数中。,按照变量定义语句出现的位置,可以分为:,局部变量:在函数内定义;只在该函数中才能使用。全局变量:在函数外定义;从它被定义的位置起,在之后的所有函数中有效。形式参数:定义为函数的参数;只在该函数中才能使用。,第2章C语言的基本数据类型与表达式,12,变量的特点:变量是指以标识符为名字,其值可以改变的量。变量代表计算机内存中的某一存储空间,该存储空间中存放的数据就是变量的值。在同一程序块中,变量不能被重复定义。使用变量时必须“先定义,后使用”,13,1、整型常量表示方法:(1)十进制形式:与数学上的整数表示相同;例如:12,-100,0(2)八进制形式:在数码前加数字0;例如:012=1*81+2*80=10(十进制)(3)十六进制形式:在数码前加0X(数字0和字母X)。例如:0 x12=1*161+2*160=18(十进制)*八进制的数码范围为07;018*十六进制的数码除了数字09外,还使用英文字母af(或AF)表示1015。如:0 x1e,注意!,2.2C语言的基本数据类型一、整型数据,第2章C语言的基本数据类型与表达式,14,2、整型变量分类:根据数据所占的二进制位数分为:int、short、long;同样存储长度的数据又分unsigned、signed;故可组合出六种类型。3、整型变量值域:由机器中数据的存储长度决定。如TurboC中,有short(2字节)int(2字节)long(4字节)关键字所占位数取值范围short16-3276832767unsignedshort16065535int16-3276832767unsigned16065535long32-21474836482147483647unsignedlong3204294967295,第2章C语言的基本数据类型与表达式,15,4.数据在内存中的形式以二进制的形式存放,以补码表示。数据在内存中是以二进制的形式存放的,如定义inti=12;根据在C编译系统一个整型变量所占的字节数为2,变量i在内存中的实际存放情况如图2-1所示。图2-1整型变量i在内存中的存放示意图实际上,数值是以补码表示的。正数的补码:与原码相同负数的补码:负数取绝对值二进制按位取反再加1补码,16,3的原码按位取反加1得-3的补码由此可知,在整数的16位中,最左边的一位为符号位,为0,表示数值为正;为1,表示数值为负,例如:求-3在内存中的存放形式,17,5.整型数据的溢出:,不同的整型数据有不同的取值范围,在程序运行过程中,如果出现数值超出整型数据的允许值范围,就会出现“溢出”。例如:一个int型的变量的最大值为(215-1)=32767,如果再加1,则产生溢出,其结果为:-215=-32768,32767,-32768,18,1、实型常量表示方法:(1)十进制小数形式:由数字和小数点组成;例如:3.4,4.,.3。(2)指数形式:“十进制小数”+“e(或E)”+“十进制数整数”。例如:12.5e-6表示12.510-6。小数点不能单独出现;0.0.e或E的两边必须有数,且其后面必须为整数;如:6E0.2e52、实型变量分类:关键字字节数取值范围精度(位)float43.410-383.410387double81.710-3081.71030815,注意,第2章C语言的基本数据类型与表达式,二、实型数据,19,3实型数据的舍入误差,voidmain()floata=1234567.896;floatb=1234567.848;printf(“a=%fnb=%fn”,a,b);,voidmain()doublea=1234567.896;doubleb=1234567.848;printf(“a=%fnb=%fn”,a,b);,结果:a=1234567.875000b=1234567.875000,结果:a=1234567.896000b=1234567.848000,20,为什么会出现这种情况?是由于实型数据是用有限的存储单元进行存储的,因而能提供的有效数字有限,在有效数字以外的数字将被舍弃。对于float型变量,只能保证前7位数字是准确的,后面的数字是无意义的,而采用double型变量后,其精度大幅度提高,能保证前15位有效数字是准确的。另外,同样因为有效数字的位数问题,在程序中应避免用一个很大的数加上或减去一个很小的数,否则会丢失小的数。,21,1、字符常量:(1)用单引号括起来的一个字符;如:A、1、?等。(2)用单引号括起来的由反斜杠()引导的转义字符。转义是指在源程序中碰到这种字符组合时,反斜杠的意义已经发生转变,变成控制代码和具有某些特殊用途的单个字符。例如,n已不再代表英文小写字母n,而转义成了“换行符”。字符形式功能n换行t横向跳格b退格r回车反斜杠字符单引号字符ddd8进制数表示的ASCII码对应的字符xhh16进制数表示的ASCII码对应的字符,第2章C语言的基本数据类型与表达式,四、字符类型,22,例如:字符A的ASCII码为:65D(十进制)=41H(十六进制)=101Q(八进制)字符A可以表示为A、x41、101。2、分类:char和unsignedchar;3、值域:每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。4、变量值的存储字符数据在内存中的存储形式:以二进制的ASCII码形式存储。字符数据在内存中存储的是字符的ASCII码一个无符号整数,其形式与整数的存储形式一样,所以语言允许字符型数据与整型数据之间通用。,第2章C语言的基本数据类型与表达式,23,(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。案例2.1字符变量的字符形式输出和整数形式输出。/*程序功能:用字符形式和整数形式输出字符变量*/main()charch1,ch2;ch1=a;ch2=b;printf(“ch1=%c,ch2=%cn”,ch1,ch2);printf(“ch1=%d,ch2=%dn”,ch1,ch2);程序运行结果:ch1=a,ch2=bch1=97,ch2=98,24,(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。案例2.2字符数据的算术运算。/*程序功能:字符数据的算术运算*/main()charch1,ch2;ch1=a;ch2=B;/*字母的大小写转换*/printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32);/*用字符形式输出一个大于256的数值*/printf(ch1+200=%dn,ch1+200);printf(ch1+200=%cn,ch1+200);printf(ch1+256=%dn,ch1+256);printf(ch1+256=%cn,ch1+256);,程序运行结果:ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a,25,4、字符串:是用一对双引号括起来的字符序列。如:“SHANGHAI”,“AbcdeFGHijk”,“Howareyou”。字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“”(一对紧连的双引号)。例如“Howdoyoudo.”、“Goodmorning.”等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例如:(1)C:msdosv6.22C:msdosv6.22(2)Isay:Goodbye!Isay:Goodbye!“,注意,a与“a”的区别。,26,字符串的存储:C语言规定在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。注意:在源程序中书写字符串常量时,不必加结束字符0,否则画蛇添足。如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示:所以最后一个字符0是系统自动加上的,它占用字节而非字节内存空间。综上所述,字符常量A与字符串常量A是两回事:(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;(3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0,27,C语言允许整型、实型、字符型数据进行混合运算。有3种转换方式:自动转换、赋值转换和强制转换。一、类型自动转换如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。转换规则如图所示。注意:箭头方向只表示数据类型由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,最后转换成double型,第2章C语言的基本数据类型与表达式,2.3数据类型转换,1)横向向左的箭头,表示必须的转换。char和short型必须转换成int型,float型必须转换成double型。2)纵向向上的箭头,表示不同类型的转换方向。,28,intx=2;floaty=1.6;charc=A;则:c+x*y=c+x*y65(int)+2(int)*1.6(double)=68.2(double)二、赋值转换在赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。有下列几种情况:(1)实型整型(字符型):去掉小数部分;,例如,charc=68.5;printf(“%c”,c);,第2章C语言的基本数据类型与表达式,29,(2)整型(字符型)实型:补足有效位;(3)对char、int、short、long、unsigned型数据:赋值符右边数据(a位)赋值符左边的变量(b位)若a=b原样照赋;ab截断高a-b位,送低b位;有符号数据有符号变量:符号扩展;其他情况:高b-a位全补0。符号扩展:符号位为0,剩余的高位补0;符号位为1,剩余的高位补1。,a(1级)算术运算符(2级)(高于)单目运算符(1个优先级)移位运算符(1级)(共有10个优先级)双目运算符关系运算符(2级)三目运算符(1个优先级)位逻辑运算符(3级)赋值运算符(1个优先级)逻辑运算符(2级)逗号运算符(1个优先级)图3.5运算符优先的简洁记忆图,35,二、算术运算符和算术表达式1.五种基本算术运算符+、-(减法/取负)、*、/、%(求余数)(1)关于除法运算/C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,5/2=2。但5.0/2=2.5;(2)关于求余数运算要求两侧的操作数均为整型数据,否则出错。例如:5%3的值为2;-5%3的值为-2;5%(-3)的值为2;-5%(-3)的值为-2;12.3%3若a能被b整除,则有:a%b=0,第2章C语言的基本数据类型与表达式,36,2.表达式和算术表达式(1)表达式的概念:用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子(2)算术表达式的概念:表达式中的运算符都是算术运算符。(3)优先级:()*、/、%+、-(4)结合性:从左至右;(5)表达式的值:数值型(int、long、unsigned、double);,例如:已知:floata=2.0;intb=6,c=3;求解:a*b/c-1.5+a+fabs(-5)=?,第2章C语言的基本数据类型与表达式,37,floata=2.0;intb=6,c=3;a*b/c-1.5+a+fabs(-5),12.0/3,5,4.0-1.5,2.5+97(int),99.5+5,104.5(double),第2章C语言的基本数据类型与表达式,38,3、自增与自减运算符:自增运算使单个变量的值增,自减运算使单个变量的值减。用法与运算规则(1)前置运算:运算符放在变量之前:+i,-i。先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增减、后运算。(2)后置运算运算符放在变量之后:i+,i-。变量先参与其它运算,然后再使变量的值增(或减),即先运算、后增减。例如:,等价于i=i+1;,j=i;i+;所以i的值为4,j的值为3。,i+;j=i;所以i的值为4,j的值为4。,(1)i+;+i;(2)i=3;j=i+;(3)i=3;j=+i;,第2章C语言的基本数据类型与表达式,39,结合性:自右至左。如:i=2;j=-i+;等价于:j=-(i+);即:j=-i;i+;“+”与”-“是同优先级所以i的值为3,j的值为-2。,第2章C语言的基本数据类型与表达式,注意“+”或“-”自增与自减运算符的使用。如:设i=3,k=(i+)+(i+)+(i+),k=?如:设i=3,j=4,k=i+j,k=?,40,案例2.4自增、自减运算符的用法与运算规则示例。/*程序功能:自增、自减运算符的用法与运算规则示例*/main()intx=6,y;printf(x=%dn,x);/*输出x的初值*/y=+x;/*前置运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 入职安全教育培训记录卡课件
- 桂林医学院口腔门诊部扩建项目环评报告
- 保育员理论知识培训体会课件
- 长城经销商管理办法
- 《内部资料管理办法》
- 数学与生活:探秘概率起源
- 机场保安考试题库及答案
- 烟草投诉举报管理办法
- 特种药品药店管理办法
- 企业安全知识培训台账课件
- 从局部到整体:5G系统观-完整版
- 零基础预算培训课件
- 高中生物开学第一课【知识精研+能力提升】高一上学期生物人教版必修1
- (完整word)工程造价咨询公司管理制度
- 电子商务运营管理培训教材
- 可摘义齿修复工艺技术
- 医院麻醉科诊疗常规修订版本(2022年)
- 2023年兽医实验室考试:兽医实验室技术理论真题模拟汇编(共285题)
- 医院护理培训课件:《妊娠期急性胃肠炎护理查房》
- 食品欺诈和预防知识专题培训课件
- 锅炉专业培训教材全集
评论
0/150
提交评论