C语言程序设计教程第2章北京邮电大学出版社.ppt_第1页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第2页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第3页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第4页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、第 2 章 C语言的基本数据类型与表达式 2.1 常量和变量 2.2 C语言的基本数据类型 2.3 数据类型转换 2.4 运算符与表达式,C语言程序设计教程,2,C语言的数据类型,第2章 C语言的基本数据类型与表达式,C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。,3,本章将介绍基本类型中的整型、实型和字符型三种数据。,4,一、常量与符号常量 常量是指在程序

2、运行中,其数值不能被改变的量。 常量又可分为直接常量和符号常量。,第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、直接常量:

3、是在程序中直接引用的数据。,请判断这些常量正确与否:,6,2、符号常量 是用标识符来表示一个数据;在程序不能给它赋值。 定义形式: #define 标识符 常量数据 例如: #define PI 3.14159 在程序预处理时,凡是出现标识符PI的地方都将用数据3.14159来替换。 如: 2*2.3*PI 就等价于 2*2.3*3.14159。 二、 变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素,第2章 C语言的基本数据类型与表达式,7,(1)变量名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量

4、值存储在内存中。在程序中,通过变量名来引用变量的值。 3.标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在TC V2.0中,变量名(标识符)的有效长度为132个字符,缺省值为32。,8,(3) C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增

5、加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗? 标识符命名的良好习惯见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。,9,4.变量的定义与初始化 在语言中要求对所有用到的变量,必须先定义、后使用;且称在定义变量的同时进行赋初值的操作为变量初始化。,(2)变量初始化 在说明变量的同时给变量一个初始值。,int a=5, b=3; int a

6、=b=c=3; int a,b,c; a=b=c=3; ,例如,10,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(“x+k=%d,y+k=%dn”,z,w); ,第2章 C语言的基本数据类型与表达式,例2-1:,程序运行结果为: x+k=40,y+k=10,11,5、变量的作用域 C语言程序是由函数组成的,且有且只能有一个main函数。 变量定义可以出现在函数内,亦可出现在函数外或者是函数的参数中。,按照变量定义语句出现的

7、位置,可以分为:,局部变量:在函数内定义; 只在该函数中才能使用。 全局变量:在函数外定义; 从它被定义的位置起,在之后的所有函数中有效。 形式参数:定义为函数的参数; 只在该函数中才能使用。,第2章 C语言的基本数据类型与表达式,12,变量的特点: 变量是指以标识符为名字,其值可以改变的量。 变量代表计算机内存中的某一存储空间,该存储空间中存放的数据就是变量的值。 在同一程序块中,变量不能被重复定义。 使用变量时必须“先定义,后使用”,13,1、整型常量表示方法: (1) 十进制形式:与数学上的整数表示相同; 例如: 12, -100, 0 (2) 八进制形式:在数码前加数字0; 例如: 0

8、12=1*81+2*80=10(十进制) (3) 十六进制形式:在数码前加0X(数字0和字母X)。 例如: 0 x12=1*161+2*160=18(十进制) * 八进制的数码范围为07; 018 * 十六进制的数码除了数字09外, 还使用英文字母a f (或A F)表示1015。 如:0 x1e ,注意!,2.2 C语言的基本数据类型 一、整型数据,第2章 C语言的基本数据类型与表达式,14,2、整型变量分类: 根据数据所占的二进制位数分为:int、short、long; 同样存储长度的数据又分unsigned、signed; 故可组合出六种类型。 3、整型变量值域: 由机器中数据的存储长度

9、决定。 如Turbo C中,有 short(2字节)int(2字节) long(4字节) 关键字 所占位数 取值范围 short 16 -3276832767 unsigned short 16 065535 int 16 -3276832767 unsigned 16 065535 long 32 -21474836482147483647 unsigned long 32 04294967295,第2章 C语言的基本数据类型与表达式,15,4.数据在内存中的形式以二进制的形式存放,以补码表示。 数据在内存中是以二进制的形式存放的, 如定义 int i=12; 根据在C编译系统一个整型变量所

10、占的字节数为2,变量i在内存中的实际存放情况如图2-1所示。 图2-1 整型变量i在内存中的存放示意图 实际上,数值是以补码表示的。 正数的补码: 与原码相同 负数的补码: 负数取绝对值二进制按位取反再加1补码,16,3的原码 按位取反 加1 得-3的补码 由此可知,在整数的16位中,最左边的一位为符号位,为0,表示数值为正;为1,表示数值为负,例如:求-3在内存中的存放形式,17,5.整型数据的溢出:,不同的整型数据有不同的取值范围,在程序运行过程中,如果出现数值超出整型数据的允许值范围,就会出现“溢出”。 例如:一个int型的变量的最大值为(215-1)=32767,如果再加1,则产生溢出

11、,其结果为: -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.2 e5 2、实型变量分类: 关键字 字节数 取值范围 精度(位) float 4 3.410-38 3.41038 7 double 8 1.710-308 1.710308 15,注意,第2章 C语言的

12、基本数据类型与表达式,二、实型数据,19,3实型数据的舍入误差,void main() float a=1234567.896; float b=1234567.848; printf(“a=%fnb=%fn”,a,b); ,void main() double a=1234567.896; double b=1234567.848; printf(“a=%fnb=%fn”,a,b); ,结果: a=1234567.875000 b=1234567.875000,结果: a=1234567.896000 b=1234567.848000,20,为什么会出现这种情况?是由于实型数据是用有限的存储

13、单元进行存储的,因而能提供的有效数字有限,在有效数字以外的数字将被舍弃。对于float型变量,只能保证前7位数字是准确的,后面的数字是无意义的,而采用double型变量后,其精度大幅度提高,能保证前15位有效数字是准确的。另外,同样因为有效数字的位数问题,在程序中应避免用一个很大的数加上或减去一个很小的数,否则会丢失小的数。,21,1、字符常量: (1) 用单引号括起来的一个字符;如:A、 1、?等。 (2) 用单引号括起来的由反斜杠()引导的转义字符。 转义是指在源程序中碰到这种字符组合时,反斜杠的意义已经发生转变,变成控制代码和具有某些特殊用途的单个字符。例如,n已不再代表英文小写字母n,

14、而转义成了“换行符”。 字符形式 功能 n 换行 t 横向跳格 b 退格 r 回车 反斜杠字符 单引号字符 ddd 8进制数表示的ASCII码对应的字符 xhh 16进制数表示的ASCII码对应的字符,第2章 C语言的基本数据类型与表达式,四、字符类型,22,例如:字符A的ASCII码为: 65D(十进制)=41H(十六进制)=101Q(八进制) 字符A可以表示为A、x41、101。 2、分类: char 和 unsigned char; 3、值域: 每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。 4、变量值的存储 字符数据在内存中的存储形式:以

15、二进制的ASCII码形式存储。 字符数据在内存中存储的是字符的ASCII码 一个无符号整数,其形式与整数的存储形式一样,所以语言允许字符型数据与整型数据之间通用。,第2章 C语言的基本数据类型与表达式,23,(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。 案例2.1 字符变量的字符形式输出和整数形式输出。 /*程序功能:用字符形式和整数形式输出字符变量*/ main() char ch1,ch2; ch1=a; ch2=b; printf(“ch1=%c,ch2=%cn”,ch1,ch2); printf(“ch1=%d,ch2=%dn”,ch1,ch2); 程序运行结果: c

16、h1=a,ch2=b ch1=97,ch2=98,24,(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。案例2.2 字符数据的算术运算。 /*程序功能:字符数据的算术运算*/ main() char ch1,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)

17、; printf(ch1+256=%cn, ch1+256); ,程序运行结果: ch1=A,ch2=b ch1+200=297 ch1+200=) ch1+256=353 ch1+256=a,25,4、字符串: 是用一对双引号括起来的字符序列。 如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。 字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“ ” (一对紧连的双引号)。 例如“How do you do.”、“Good morning.”等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。 如果反斜

18、杠和双引号作为字符串中的有效字符,则必须使用转义字符。 例如:(1)C:msdosv6.22 C:msdosv6.22 (2)I say:Goodbye! I say:Goodbye!“,注意, a与“a”的区别。,26,字符串的存储:C语言规定在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。 注意:在源程序中书写字符串常量时,不必加结束字符0,否则画蛇添足。 如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示: 所以最后一个字符0是系统自动加上的,它占用字节而非字节内存空间。 综上所述,字符常量A与字符串常量A是两回事: (1)定界符不同:字符常量使用

19、单引号,而字符串常量使用双引号; (2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数; (3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0,27,C语言允许整型、实型、字符型数据进行混合运算。 有3种转换方式:自动转换、赋值转换和强制转换。 一、类型自动转换 如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。转换规则如图所示。 注意:箭头方向只表示数据类型由低向高转换,不要理解为int型先转换成unsign

20、ed型,再转换成long型,最后转换成double型,第2章 C语言的基本数据类型与表达式,2.3 数据类型转换,1)横向向左的箭头,表示必须的转换。char和short 型必须转换成 int 型,float型必须转换成double型。 2)纵向向上的箭头,表示不同类型的转换方向。,28,int x=2;float y=1.6;char c=A; 则:c+x*y = c + x * y 65(int)+ 2(int) * 1.6(double) = 68.2(double) 二、 赋值转换 在赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。 有下列几种情况: (1) 实型 整型(字

21、符型):去掉小数部分;,例如,char c=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。,ab,float f=23; 23.00000 f (7位) double f=A; 23.000

22、0000000000 f(15位),第2章 C语言的基本数据类型与表达式,30,三、强制类型转换 数据类型强制转换的一般格式为: (要转换成的数据类型)(被转换的表达式) 当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。例如: (double)a (等价于(double)(a) /*将变量a的值转换成double型*/ (int)(x + y) /*将x+y的结果转换成int型*/ 例如: int a=2,b=5;float x=4.4; 则有: 表达式 结果 b/a 2 (float)b/a 2.5 (float)(b/a) 2.0 (int)x%a+x 4.4 (int)x%

23、(a+x) 强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。,第2章 C语言的基本数据类型与表达式,31,一、C语言的运算符简介 按操作功能运算符大致可分为算术运算符、关系运算符、逻辑运算符、按位运算符以及其它运算符如赋值运算符、条件运算符、逗号运算符等。 表达式是由操作数和运算符组成的序列。,第2章 C语言的基本数据类型与表达式,2.4 运算符与表达式,算术运算符 + - * / % 关系运算符 = = = != 逻辑运算符 ! int b=6,c=3; 求解:

24、 a*b/c-1.5+a+fabs(-5)=?,第2章 C语言的基本数据类型与表达式,37,float a=2.0; int b =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)后置运算运算符放在变量

25、之后: 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() int x=6, y; printf(x=%dn,x); /*输出x的初值*/ y = +x; /*前置运算*/ p

温馨提示

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

评论

0/150

提交评论