C语言程序设计第02章-数据类型、运算符和表达式.ppt

上传人:小飞机 文档编号:6504120 上传时间:2023-11-07 格式:PPT 页数:102 大小:813.50KB
返回 下载 相关 举报
C语言程序设计第02章-数据类型、运算符和表达式.ppt_第1页
第1页 / 共102页
C语言程序设计第02章-数据类型、运算符和表达式.ppt_第2页
第2页 / 共102页
C语言程序设计第02章-数据类型、运算符和表达式.ppt_第3页
第3页 / 共102页
C语言程序设计第02章-数据类型、运算符和表达式.ppt_第4页
第4页 / 共102页
C语言程序设计第02章-数据类型、运算符和表达式.ppt_第5页
第5页 / 共102页
点击查看更多>>
资源描述

《C语言程序设计第02章-数据类型、运算符和表达式.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第02章-数据类型、运算符和表达式.ppt(102页珍藏版)》请在三一办公上搜索。

1、1,第2 章 基本数据类型,2.1 C的数据类型2.2 常量与变量2.3 整型2.4 字符型2.5 浮点型(Floating Point)数据2.6 字面值常量2.7 变量赋初值(Initialization)2.8 各类数值型数据间的混合运算小结、作业及实验,2,第2章 基本数据类型,在实际问题中,可能会遇到各种各样的数据。这些数据都以某种特定的形式存在着。年龄:22 整数 工资:2381.85 实数姓名:Hussein Sadam 字符串为了方便地表示这些不同种类的数据,C语言提供了丰富的数据类型。本章仅介绍基本数据类型,3,2.1 C的数据类型(Data Types),数据类型,C语言要

2、求,必须为出现在程序中的所有数据指定数据类型。,由于C语言把程序中的数据又分为变量和常量两大类,因此,不论是常量数据还是变量数据,都要指定数据类型。,C语言根据什么把数据分为变量和常量?,返回目录,4,2.2 常量与变量,计算机处理的数据都要存储,存储就要有空间。若空间中的数据被可以修改,这个空间就称为变量空间,简称变量。若空间中的数据不能被修改,这个空间就称为常量空间,简称常量。空间的大小和数据的存储格式由数据类型来决定。若需要一个变量空间,一般需要通过定义来要求系统分配,定义时要指出变量(空间)的类型,并给出变量(空间)的名称,也称变量(空间)标识符。这个名称由用户指定,但要符合命名规则。

3、通过变量名读写变量空间数据的方式称为直接引用方式。变量定义的格式为:数据类型 标识符 变量名;int m,n;/定义两个普通整型变量m 和nfloat x;/定义一个单精度浮点实型变量xchar ch;/定义一个字符型变量ch,5,标识符(Identifier),标识符变量名、符号常量名、函数名、类型名标识符命名规范由字母、数字、下划线(Underscore,_)组成第一个字符必须为字母或下划线C语言标识符是大小写敏感的关于标识符应注意以下方面:大小写敏感,sum,Sum,SUM是3个不同的标识符。关键字不能作为标识符。一般不要使用以下划线开头的标识符ANSI C未规定标识符的最大长度,TC最

4、多允许32个字符。应尽量做到“见名知意”,6,标识符示例,正确的标识符student、num1、_SUM、_1_2_3MyName、myname、my_name错误的标识符room3-1包含了其他字符(减号)2men以数字开头long与关键字重复Mr.Zhu 包含了其他字符(小数点),7,常量(Constants),常量程序运行过程中,其值不能被改变的量例如:12、-6.7、a常量不仅能以字面常量的形式出现在程序中,还能以符号常量的形式出现在程序里。常量与变量举例int a;float b;a=-90;b=3.14*2.1;,8,常量示例:例2_补_1.c,#define PRICE 30#d

5、efine NUM 12void main().total=NUM*PRICE;total2=84*PRICE2;printf(total=%d,total);.,不会被替换,=total=12*30;,常量,符号常量,9,符号常量(Symbolic Constants),概念符号常量,就是用符号(标识符)代表的一个常量。定义方式:#define 符号名 常量值作用相当于把标识符用一个常量简单替换下来标识符是一个整体,不要试图拆开来替换在程序中,适当使用符号常量的好处:能起到“见名知意”的作用,比直接写个常量直观。能做到“一改全改”。关于符号常量再强调以下几点:符号常量名习惯上常用大写;符号常

6、量是常量而不是变量,不允许用赋值运算等改变它的值。,10,符号常量,所谓符号常量,就是用符号代表的一个常量。符号常量的定义方式为:#define 符号名 常量值,#define PI 3.14#define SNO 1001 L=2*PI*1.5;s=PI*0.6*0.6;,file1.c,如果在程序中某处定义了符号常量(以PI为例),从此往后,本文件中凡是出现PI的地方都代表3.14;PI可以和常量3.14一样参加运算.。为什么要用符号来表示一个常量呢?这样做有什么好处?,11,符号常量,在程序中,适当使用符号常量的好处在于:能起到“见名知意”的作用,比直接写个常量直观。能做到“一改全改”。

7、关于符号常量再强调以下几点符号常量名习惯上常用大写;符号常量是常量而不是变量,不允许用赋值运算等改变它的值,#define PI 3.14#define SNO 1001 L=2*PI*1.5;s=PI*0.6*0.6;,12,变量(Variables),内存(memory):每台计算机都要有内存,程序只有装入内存中,才可能被执行。从逻辑上看,内存是由一个个的字节构成的。每个字节可以容纳8位二进制数。每个字节都有唯一的内存地址。,内存,一个字节,34,一个二进制位,13,变 量,所谓变量,就是在程序执行过程中,其值可以被改变的量。通俗地讲,变量就像高档饭店的房间,这体现在以下几个方面:,对某个

8、房间来说,一拨客人走后,另一拨客人可以进来,虽然房间不变,但里头吃饭的人在变。,在C程序中,变量就是建立在内存里的房间,它用来存储不断变化的信息。存放在变量中的信息称为变量值。,为了区分不同的房间,人们为每个房间起一个名字,比如百合厅、玫瑰厅等。,每个变量也有变量名。,房间有大小、档次之分。,变量有类型之分,变量的数据类型决定了可以容纳的信息种类,也决定了所占单元的大小。,每个房间有自己的房间号,而且房间名与房间号有对应关系。,每个变量有自己的存储地址,而且变量名与存储地址有对应关系。,总之,变量具有名字、类型、值、地址等属性。,14,下面结合例子来理解变量的这些属性。,#include vo

9、id main()int a;a=10;a=50;a=a*2;printf(”a=%dn”,a);,在C程序中,变量都是先定义、后使用变量的定义格式:数据类型 变量名;,对于程序中定义的每个变量,TC会根据变量的数据类型,为它分配一定大小的存储单元。同时,也在变量名与变量的内存地址之间建立了对应关系。,该赋值语句会把10存放到变量a中,于是a的值变为了10。,变量(Variables),下面结合例子来理解变量的这些属性。,15,程序举例2.1:定义变量,检验变量空间大小和地址,给变量赋值,并在显示器上显示变量的值(参见演示),#include/包含printf 的原型int main()int

10、 m,n;/定义两个整型变量 float x;/定义一个单浮点型变量 char ch;/定义一个字符型变量 printf(“%d,%d,%dn”,sizeof(m),sizeof(x),sizeof(ch);/按十进制输出变量值 printf(%x,%x,%x,%xn,4,4,112ff7c,12ff78,12ff74,12ff7070,70,3.140000,Am=70,n=70,x=3.140000,ch=A,16,说明:,主函数框架int main()一组程序语句 return(0);main 是主函数名,相当于机器语言程序的入口地址。一对大括号是函数体,包括一组程序语句(简称语句),语

11、句相当于机器语言指令,每条语句以分号结束。“/”是注释部分,说明语句功能,便于理解,它不是程序语句。如果一个注释有多行,每行前都要加“/”。例如:注释行也常常采用“/*/”的形式,一条语句可以同时定义几个变量,变量名彼此用逗号分隔,例如:int m,n;一行可以书写几条语句,例如:int m,n;float x;char ch;一条语句如果很长,可以分几行书写,但是变量名或函数名不能分行写。,17,说明:,变量初始化变量可以在定义的同时赋值,称为初始化:int m=70;/初始化变量初始化与赋初值是不同的:初始化是在变量定义的同时赋值,赋初值是指变量定义之后的第一次赋值。初始化等于赋初值,但是

12、赋初值不等于初始化。下面的例子是赋初值,但不是初始化:int m,n;m=70;/给m 赋初值n=m;/给n 赋初值,18,说明:,赋值操作符变量位于赋值操作符“=”左端,表示给变量赋值或写入,位于右端,表示从变量取值或读取。文件包含命令#include是文件包含命令,stdio.h 是库文件,含有包括系统函数printf 在内的输入输出函数的原型。如果不包含这个命令而调用printf 函数,系统视为非法。系统报错:printfundefined(printf 没有定义),19,格式输出函数printf,前面的例题中我们已多次用过这个函数。函数的一般形式:printf(“格式控制字符串”,输出

13、表列)函数功能:对于任意类型数据按用户指定的数据格式输出到显示器屏幕上。返回值若成功,返回输出的字节数,包括换行符若失败,返回EOF(End of File)参数说明(见下一页),20,函数printf的参数说明,格式控制字符串:由包括“格式说明”和“普通字符”组成,用于指定输出格式。“格式说明”:由%和“格式字符”组成,以说明输出数据的类型、形式、长度、小数位数等。“普通字符”:在输出时原样照印,在显示中起提示作用输出列表给出了需要输出的数据项可以是变量、常量、表达式、函数调用等输出数据项与“格式说明”在数量和类型上应该一一对应,printf(“格式控制字符串”,输出表列),21,函数pri

14、ntf的格式举例,printf(a=%d b=%d,a,b);,输出结果:a=3 b=4,格式字符串其一般形式为:标志输出最小宽度.精度长度 类型其格式符和意义如下所示:,22,表2.1 格式字符,23,表2.1 格式字符,24,函数printf格式举例说明,1.d格式符(例2_补_8.c),作用:按整型数据的实际长度输出。基本格式:%d格式一:%mdm为指定的输出字段的宽度。若数据的位数小于m,则左端补以空格,若数据的位数大于,则按实际位数输出。例1:a=123,b=12345,printf(%4d,%4d,a,b);则输出结果为 123,12345格式二:%ld输出长整型数据。例2:若 l

15、ong a=135790;printf(“%ld”,a);则输出为:135790,25,函数printf格式举例说明,2.o格式符(例2_补_8.c),作用:以八进制数形式输出整数。基本格式:%o说明:由于将内存中的各位值(0或1)按八进制形式输出,则输出的数值不带符号,将符号位也一起输出。例1:int a=-1;printf(%d,%o,a,a);-1在内存中的形式(补码)为:1111 1111 1111 1111输出结果-1,177777 不会输出带负号的八进制整数。格式一:%lo输出对长整数(long型)格式二:%mo指定输出数据的字段宽度。例2:int a=-1;printf(“%8o

16、”,a)输出结果:177777,26,函数printf格式举例说明,3.x格式符(例2_补_9.c),作用:以十六进制数形式输出整数。基本格式:%x不会出现负的十六进制数(原理同上)。例1:int a=-1;printf(“%x,%o,%d”,a,a,a);输出结果:ffff,177777,-1格式一:%lx输出长整型数,如long a=2000;printf(“%lx”,a);格式二:%mx指定输出字段的宽度,如“%12x”。,27,函数printf格式举例说明,4.u格式符(例2_补_8.c),作用:用来以十进制形式输出无符号(unsigned型)整数。基本格式:%u例1:int a=56

17、7,printf(“%u”,a)输出结果567,main()/*例4-4.c*/unsigned int a=65535;int b=-2;printf(a=%d,%o,%x,%un“,a,a,a,a)printf(b=%d,%o,%x,%un“,b,b,b,b);运行结果为:a=-1,177777,ffff,65535b=-2,177776,fffe,65534,说明:一个有符号整数(int型)也可以用%u格式输出;一个unsigned型数据也可以用%d格式输出。按相互赋值的规则处理unsigned型数据也可用%o或%x格式输出,28,整型数据的输出小结,整型数据可以有以下的输出格式供选择:

18、,按有符号的十进制形式输出整型数据,使用格式说明%d。,按无符号的八进制形式输出整型数据,使用格式说明%o。,另外,通过在%与格式字符之间加上修饰符l,就能按相应形式输出长整型数据。例如,,按无符号的十进制形式输出整型数据,使用格式说明%u。,按无符号的十六进制形式输出整型数据,使用格式说明%x。,按有符号的十进制形式输出长整型数据,使用格式说明%ld。,按无符号的十六进制形式输出长整型数据,使用格式说明%lx.,29,函数printf格式举例说明,5.c格式符(例2_补_10-1.c),作用:用来输出一个字符。基本格式:%c例1:charc=a;printf(%c,c);输出结果:a说明“%

19、c”中的c是格式符,逗号右边的c是变量名,不要混。一个整数,只要它的值在0255范围内,也可以用字符形式输出,输出前,系统将该整数作为ASCII码转换成相应字符;反之,一个字符数据也可以用整数形式输出。格式一:%mc指定输出字数宽度例2:char c=B;printf(“A%3c”,c);输出:“A a”。,main()/*字符数据的输出。*/char c=a;int i=97;printf(%c,%dn,c,c);printf(%c,%dn,i,i);,运行结果为:a,97a,97,30,函数printf格式举例说明,6.s格式符(例2_补_10-2.c),作用:用来输出一个字符串。基本格式

20、:%s例1:printf(“%s”,“china”);输出结果:china(没有双引号)。格式一:%ms输出的字符串占列,若字符串本身长度大于m,则突破的限制,将字符串全部输出。若字符串本身长度小于m,则左补空格。格式二:%-ms如果串长小于,则在列范围内,字符串向左靠,右补空格。格式三:%mns输出占列,但只取字符串中左端n个字符。这n个字符输出在列的右侧,左补空格。格式四:%-mns在列范围的左侧输出字符串左端的n个字符,右补空格。如果n,则自动取n值,即保证n个字符正常输出。,main()/*例4-5-2.c字符串的输出。*/printf(“%3s,%7.2s,%.4s,%-5.3sn”

21、,“china”,“china”,china,china),输出结果:china,ch,chin,chi,31,字符型数据的输出小结,输出单个字符,使用格式说明%c。,字符型数据输出有两种方式:,输出字符串,使用格式说明%s。,32,函数printf格式举例说明,7.f格式符(例2_补_11.c),作用:用来以小数形式输出实数(包括单、双精度)。基本格式:%f不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。注意:并非全部数字都是有效数字。单精度实数的有效位数一般为7位。格式一:%.nf指定输出的数据共占列,其中有n位小数。如果数值长度小于,则左端补空格。格式二:%-.n

22、f与%.nf基本相同,只是使输出的数值向左端靠,右端补空格。,33,函数printf格式举例说明,7.f格式符应用举例,例2_补_11-1.c输出实数时有效位数。main()float x,y;x=111111111;y=222222222;printf(“%f”,x+y);输出结果:333333328125,例2_补_11-2.c输出双精度数有效位数。main()double x,y;y=2222222222222.222222222;printf(%f,x+y);输出结果:3333333333333.333010,例2_补_11-3.c输出实数时指定小数位数。main()float f=1

23、23.456;printf(%f%10f%10.2f%.2f%-10.2fn,f,f,f,f,f);输出结果:123.456001 123.456001 123.46 123.46 123.46,34,函数printf格式举例说明,7.e格式符(例2_补_12.c),作用:按规范化指数形式(小数点前有且只有1位非零数字)输出实数。基本格式:%e说明:不指定输出数据所占的宽度和数字部分的小数位数;有的c编译系统自动指定6位小数,指数部分占5位(如e+002),其中“e”占1位,指数符号占1位,指数占3位。printf(%e“,123.456);输出:1.234560e+002。(不同系统略有不同

24、)格式一:%m.ne 和%-m.ne、n和“-”字符含义与前相同。此处n指拟输出的数据的小数部分(又称尾数)的小数位数。例如,f=123.456,printf(“%e%10e%10.2e%.2e%-10.2e”,f,f,f,f,f);结果:1.234560e+002 1.234560e+002 1.23e+002 1.23e+002 1.23e+002,35,函数printf格式举例说明,9.g格式符,作用:用来输出实数,它根据数值的大小,自动选f格式或e格式中输出宽度较小的一种,且不输出无意义的零。基本格式:%g例1,若f=123468,则printf(“%f%e%g”,f,f,f);输出:

25、123.468000 1.234680e+002 123.468 10列 13列 10列说明:用%f格式输出占10列,用%e格式输出占13列,用%g格式时,自动从上面两种格式中选择短者,故占10列,按%f格式输出,最后3个小数位“0”为无意义的0,不输出,因此输出123.468,然后右补3个空格。%g格式用得较少,36,实型数据的输出小结,实型数据的输出常采用两种方式:按十进制小数形式,使用格式说明%f,这种输出方式除输出整数部分外,还会输出6位小数按规范化的指数形式,使用格式说明%e,这种输出方式会按规范化的指数形式输出。,关于实型数据输出强调以下几点:在输出单精度数据和双精度数据时,使用相

26、同的格式说明。在输出的数字中,并非所有的数字都是有效数字。系统在输出单精度数据时,一般前67位是有效数字;双精度数据是1516位。可以用%m.nf指定数据的最小输出宽度以及小数部分的位数。可以用修饰符“”(如%m.nf)实现左对齐的效果。,37,格式输出函数printf小结,上面介绍了主要的格式字符。关于格式输出再强调以下几点:转义字符可以出现在格式控制串中。例如,printf(”nabct%d”,i);在格式控制串中,除格式说明之外的字符均作为普通字符输出。例如,printf(”c=%cf=%fs=%s”,A+32,3.14,”BYE”);在格式控制串中,要输出字符%,必须用%表示。例如,p

27、rintf(”%.2f%”,5.126);会输出 5.13%。要根据被输出表达式的数据类型以及希望的格式,选用合适的格式说明。,38,程序中常见错误,变量必须先定义或声明,后使用,否则就是一个错误。出现这种错误的原因大多是拼写有误。例如:int temp;tmp=5;/把temp 错写为tmp系统报错:tmp:undeclared identifier(tmp 是没有声明的标识符即名称)。如果变量没有赋初值,它的值是一个不可预测的值。例如:int temp;printf(%d,temp);/变量a 没有赋初值,结果是一个不可预测的值系统警告:local variable temp used w

28、ithout having been initialized(局部变量temp 没有初值)。,39,程序中常见错误,语句之后丢失分号。例如:int a,b/丢失分号。正确的书写是:int a,b;a=3;b=4;系统报错:missing;before identifier a(标识符a 之前缺少分号)。而且系统的错误标志指向的是第2 条语句,而不是第1 条语句,这是为什么呢?因为语句可以换行,定义语句“inta,b;”可以分两行书写,其中的分号可以单独出现在第2 行,所以系统是在语句“a=3;”之前还没有遇到分号时才报错。在格式控制字符串之后丢失逗号:printf(%dn);/正确的书写是:p

29、rintf(%d,n);系统报错:missing)before n(n 之前丢失右括号)。系统按最简单的形式处理。,40,程序中常见错误,整型数和浮点型数的存储格式不同,整型数不能按浮点格式显示,反之亦然。例如:int a=12;float f=12.5;printf(a=%fn,a);/错!整型数不能按浮点格式显示printf(f=%dn,f);/错!浮点型数不能按整型格式显示系统没有报错,但是显示结果都是0。对程序语句中出现的中文输入方式下的逗号、分号、小括号等分隔符,系统都要报错:unknown character 0 xa3。,返回目录,41,2.3整型(Integer)数据,数制和数

30、制之间的转换整型常量的表示方法整型变量整型数据在内存中的存放形式整型变量的类型整型变量的定义整型数据的溢出整型常量的类型,42,整型常量的表示方法,整型常量可以以三种形式出现在C程序中。十进制(Decimal)例如,123、-456、0八进制(Octal)为避免与十进制混淆,八进制以0开头,不得含有8或9例如,(0123)8=182+281+380=(83)10、-0456错例,0138、-0912十六进制(Hexadecimal)以0 x或0X开头,用af或AF表示1015例如,(0 x123)16=1162+2161+3160=(291)10-0X45、0 x3AB、-0 xabc,43,

31、整型变量的表示方法,首先,定义整型变量,其形式为:int 变量名;例如 int i;TC系统会在内存中为变量I 分配2字节的存储单元,共计16个二进制位。其次,用赋值语句把整型数据存放到变量i中。例如,i=10;可以把10存放到变量i中,也就是把10存放到变量i的2字节的存储单元中。再次,在变量中有值以后,我们可以用%d格式符来输出整型变量值,例如,printf(”%d”,i);会输出10。,内存,201,202,203,204,205,206,207,10,整型数据10在存储单元中是如何存放的呢?,44,整型数据在内存中的存放方式,整型数据在存储单元中是如何存放的呢?即,如何用16位二进制数

32、来表示整型数据呢?分两种情况:1若数据0,数据直接以其二进制形式存放 由于10的二进制形式是1010,所以10的存放情况如图所示。如果把两个字节画在同一行上,就有,45,整型数据在内存中的存放方式,2若数据0,数据以其补码形式存放。求负数的补码的方法:将负数的绝对值的二进制形式按位取反,再加1,46,补码举例,举例int i=-50;/*int类型占2字节*/,50的原码,-50的补码,补码(Complement)正数:与原码一致,首位为0负数:绝对值取反加一,首位为1零:各位全为0,47,整型数据在内存中的存放方式,注意:在 10的存储表示中,其最左面的一位为0;在-10的存储表示中,其最左

33、面的一位为1。,10的存储表示,-10的存储表示,实际上,在整数的16位中,最左面的一位是表示符号的,也称为符号位。该位为0,表示数据为正;该位为1,表示数据为负。,这样一来,一个int型变量值最大为,即为2151=32767,类似地,一个int型变量值最小为,即为215=32768,48,整型变量的分类,在Turbo C中,一个int型变量值的范围为3276832767。即,一个int型变量仅能存放这个范围之间的整数。但在有些场合,这个范围太小,无法容纳某些整型数据。例如,全国人口数、汽车数等。另外,在有些情况下,这个范围又显得过大,造成内存的浪费,例如年龄、月份等。于是,C语言又对整型变量

34、作了进一步的分类,按占用存储空间的大小细分为三种:基本整型 int,如int sum;短整型 short int,如short age;长整型 long int,如long popul;,49,整数的长度,整数的类型与长度short:占2字节/16bit 取值范围:-3276832767long:占4字节/32bit取值范围:-231(231-1)int:占2或4字节/16或32bit 取值范围:-3276832767(16bit)若需要精确的长度,可选用short或long各类型的变量可以容纳的整数范围取决于为各类型的变量所分配的存储单元的大小。ANSI C并未具体规定各类整型变量的存储单元

35、的大小,具体由各厂家自行决定,但要符合以下原则:长整型的存储单元基本整型的存储单元短整型的存储单元一般,2Bytes=short int long=4Bytes例如:Borland C3.1:int长度为2BytesMicrosoft C:int长度为4Bytes,50,整型变量的定义(Definition),定义形式signed int a,b;unsigned c;signed long d;unsigned short e;变量的定义一般放在一个函数开头的声明部分,关于变量定义的具体内容在以后相关章节里详细介绍有符号数二进制补码表示,首位为符号位指定signed或缺省情况,即为有符号数无

36、符号数没有符号位,只能表示非负数无符号数类型必须指定为unsigned若把负数赋值给无符号数,则把该负数的补码当作无符号数进行处理,为什么需要无符号数?,程序举例,51,整型变量的定义与使用举例,void main()int a;/*定义有符号基本整型变量a*/unsigned b;/*定义无符号基本整型变量b*/long c;/*定义有符号长整型变量c*/a=-23;/*a的值为-23*/b=45;/*b的值为45*/c=a+b;/*c的值为22*/,52,无符号整型变量,在有些应用场合,涉及的整数均为非负整数,如学号、年龄、人口数等。在这种情况下,可以使用无符号整型变量。无符号整型变量也有

37、三种类型:符号基本整型:unsigned int 例 unsigned stu_no;无符号短整型:unsigned short int例 unsigned short age;无符号长整型:unsigned long int 例 unsigned long population;另外,无符号整型与对应的有符号整型所需存储单元大小相同。,53,无符号整型变量和有符号整型变量的区别,有符号整型变量b的存储单元中最左一位代表符号(0为正,1为负),无符号变量a只能表示非负整数。,下面以如下定义的变量a、b为例来加以说明。unsigned int a;int b;,无符号整型变量a的存储单元中所有二

38、进制位都用来存放数据本身,并无符号位。,最大值:216-1=65535,最小值:0,最大值:215-1=32767,最小值:-215=-32768,一般地说,无符号整型变量所能表示的最大值比有符号整型变量所能表示的最大值扩大一倍。,有符号整型变量b正负均可。,a的取值范围为065535,b的取值范围为3276832767,符号位,54,有符号数与无符号数举例,例2_补_2.c void main()int i;unsigned j;i=j=-50;i=i/2;/*-25*/j=j/2;/*32743*/,55,整型数据的取值范围,56,整型数据的溢出(Overflow),溢出数据超出了变量能够

39、存储的范围,造成数据丢失或数值改变等,例2_补_3.c void main()int a=32767;a+;/*32768?*/,32767的补码,-32768的补码,57,整型常量的类型,常量的类型后缀(Suffix)l、L表示常量是一个长整型u、U表示常量是一个无符号整型数两种后缀可以一起使用举例123l长整型常数123456U无符号整型常数456789ul无符号长整型常数789101Lu无符号长整型常数101,58,整型常量使用中的类型问题,对整型变量赋值常量的值不要超过变量的取值范围直接使用常量带有l、L、u、U等后缀的整型常量一般用于函数调用不带有后缀的整型常量的类型,是根据其数值大

40、小所处的范围来确定的,59,整型变量总结,下面列出了C语言中提供的六种整数类型。基本整型:int短整型:short int长整型:long int无符号基本整型:unsigned int无符号短整型:unsigned short int无符号长整型:unsigned long int虽然ANSI C并未统一规定各类整型变量的存储单元所占字节数,但每个C系统都有自己的明确规定。Turbo C系统的规定见P43表3-1。在定义整型变量时,应根据可能的取值范围来确定变量的类型.,有符号整型,60,编写程序2.2:将一个整数在显示器上逆序显示。(参见演示),基本方法:反复使用整型的基本操作:整除和求余

41、。步骤:用10 对该整数求余,结果是该整数在十进制下的个位数,然后显示。用10 对该整数进行整除,结果是该整数在十进制下的十位数降为个位数,然后求余显示。用100 对该整数进行整除,结果是该整数在十进制下的百位数降为个位数,然后求余显示。依次类推。,61,程序2.2 将3 位整数按逆序输出。(参见演示),#includeint main()int i,n=578,re;i=n%10;/步骤 求n 的个位数。i=8 printf(%d,i);re=n/10;/步骤 降位。re=57 i=re%10;/求n 的个位数。i=7 printf(%d,i);re=n/100;/步骤降位。re=5 i=r

42、e%10;/求n 的个位数。i=5 printf(%dn,i);return(0);,875,62,说明:,整型常量前加符号0 x,表示十六进制数,包括数字09 和af(AF),其中af 表示1015。例如0 x12fe,表示12fe 是十六进制整数。整型常量前加符号0,表示八进制数,包括数字07。例如0127,表示127 是八进制整数。在整型常量后面加符号L 或U(l 或u),表示长整型或无符号整型。例如52388L 表示长整数,40000U 表示无符号整数。如果编译系统中普通整型(int)和长整型(long)的长度相同,后缀L 就可以省去,但是加上后缀,有利于程序“移植”。,63,编写程序

43、2.3:根据数值的特征,设计变量名称。(参见演示),#include/包含printf 的声明int main()int A,HexA,OctalA;/普通整型变量 long LongA,LongHexA;/长整型变量 unsigned UnsignedA;/无符号整型变量 A=12;/普通整数 HexA=0 x12;/十六进制整数 OctalA=012;/八进制整数 printf(%d,%x,%on,A,HexA,OctalA);/显示十进制十六进制和八进制 printf(%d,%d,%dn,A,HexA,OctalA);/以十进制显示 LongA=52388L;/长整数 LongHexA=

44、0 x4fea2L;/长整型十六进制数 UnsignedA=40000U;/无符号整数 printf(%Ld,%Lx,%dn,LongA,LongHexA,UnsignedA);return(0);,12,12,1212,18,1052388,4fea2,400002.3,返回目录,64,2.4字符型(Character)数据,字符型常量字符型变量字符型数据在内存中的存放形式字符型数据的使用方法字符串常量,65,字符型(Character)数据,字符类型是 C 语言中的基本数据类型。字符数据包括大小写字母、数字、标点符号及特殊字符。在字处理、文本输入输出和数据通信中,应用最广泛的是128 个标

45、准字符ASCII字符集。标准字符分为可见字符和控制字符,控制字符用于数据通信和设备控制,例如,换行,响铃。128 个标准字符和数值0 至127 一一对应,这种对应使字符型数据能以一个字节的整数形式存储(只用7 位,27=128),后者称为字符的代码。常见ASCII 字符代码见表2.3。,66,表2.3 ASCII 代码字符集,注:表示空格。,67,ASCII 代码字符集的特点,所有在程序中可以使用的字符,每个字符都有一个编码,称为ASCII码。通过分析,不难发现ASCII码有以下规律:相邻字母或数字的ASCII码差1对应大小写字母的ASCII码差32,68,编写程序2.4:测试字符和字符代码,

46、大写字符和小写的关系。(参见演示),#includeint main()char ch1,ch2;ch1=A;/或ch1=65;字符型常量也可以用代码表示 ch2=ch1+32;/ch2 的值为小写字符a printf(%c,%cn,ch1,ch2);/显示字符 printf(%d,%dn,ch1,ch2);/显示字符代码 ch1=ch1+1;/ch1 的值改为B ch2=ch2+1;/ch2 的值改为b printf(%c,%cn,ch1,ch2);/显示字符 return(0);,A,a65,97B,b,69,字符型常量,与整型、实型类型数据一样,字符数据也分为字符常量和字符变量。字符常量

47、是用单引号括起来的单个字符。举例,a、A、1、?、D、n、101 错例,abc、我需要注意的是:要用字符 构成字符常量,不能写为,应写作 要用字符 构成字符常量,不能写为,应写作,70,字符变量,首先,定义字符型变量,其形式为:char 变量名;例如,char c;TC系统会在内存中为每个字符变量分配1字节的存储单元。其次,用赋值语句把字符型数据存放到变量c中。例如,c=A;可把字符A存放到变量c中存储单元中实际存放的是字符A的ASCII码65,且以二进制形式。再次,在变量中有值以后,我们可以用%c格式符来输出字符型变量值例如,printf(“%c”,c);会输出A。它会按c中存的ASCII码

48、输出相应字符。,内存,201,202,203,204,205,206,207,A,c,字符变量中只能存放一个字符,71,字符型数据在内存中的存放形式,一个字符型数据占一个字节的空间字符型数据以其ASCII码形式存放字符型数据的存放形式与只占一个字节长度的整型数据完全相同,72,字符数据与整型数据可以通用,由于字符数据在内存中以ASCII码存放,而且其存储形式和整数的存储形式类似,所以C语言中字符数据与整型数据之间可以通用。这体现在三方面:1.字符数据可以参加算术运算 例如,100-A,该式的值为100-65=35 2.可以把整数赋值给字符变量 例如,c=66;3.字符数据既能按字符形式输出,也

49、能按整数形式输出。当以字符形式输出时,使用%c 格式符,系统输出的是存储单元中的ASCII码所对应的字符。printf(%c,c);当以整数形式输出时,使用%d 格式符,直接将ASCII码作为整数输出。printf(%d,c);,c,73,字符型数据的使用方法,可以把字符型数据视作一种长度为1字节的整型数据处理当使用字符型数据时,与使用这个字符的ASCII码(一个8位整数)是完全一样的字符型数据的用法与整型数据完全一样,包括运算、赋值、输入、输出等字符型数据使用过程中,同样需要注意溢出、符号等问题是字符还是整数,只有在输出时才有意义,74,字符型数据使用举例2_补_5.c,void main(

50、)char c;int i,j;c=97;/*c=a*/i=c+20;/*i=117*/j=2;/*j=50*/printf(%c,%dn,c,c);/*a,97*/,75,字符型数据使用举例2_补_6.c,#include void main()char ab;ab=A;printf(%c,ab);printf(%d,ab);ab=ab+32;printf(%c,ab);printf(%d,ab);,#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%c,c1,c2);,76,字符型变量的符号,字符型变量与

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号