C语言程序设计第02章数据类型运算符和表达式课件

上传人:s9****2 文档编号:591390597 上传时间:2024-09-17 格式:PPT 页数:102 大小:858KB
返回 下载 相关 举报
C语言程序设计第02章数据类型运算符和表达式课件_第1页
第1页 / 共102页
C语言程序设计第02章数据类型运算符和表达式课件_第2页
第2页 / 共102页
C语言程序设计第02章数据类型运算符和表达式课件_第3页
第3页 / 共102页
C语言程序设计第02章数据类型运算符和表达式课件_第4页
第4页 / 共102页
C语言程序设计第02章数据类型运算符和表达式课件_第5页
第5页 / 共102页
点击查看更多>>
资源描述

《C语言程序设计第02章数据类型运算符和表达式课件》由会员分享,可在线阅读,更多相关《C语言程序设计第02章数据类型运算符和表达式课件(102页珍藏版)》请在金锄头文库上搜索。

1、第2 章 基本数据类型l2.1 C的数据类型的数据类型l2.2 常量与变量常量与变量l2.3 整型整型l2.4 字符型字符型l2.5 浮点型浮点型 (Floating Point)数据数据l2.6 字面值常量字面值常量l2.7 变量赋初值变量赋初值 (Initialization)l2.8 各类数值型数据间的混合运算各类数值型数据间的混合运算l小结、作业及实验小结、作业及实验1 1C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式第2章 基本数据类型l在实际问题中,可能会遇到各种各样的数据。这在实际问题中,可能会遇到各种各样的数据。这些数据都以

2、某种特定的形式存在着。些数据都以某种特定的形式存在着。n年龄年龄:22 整数整数 n工资工资:2381.85 实数实数n姓名姓名: Hussein Sadam 字符串字符串l为了方便地表示这些不同种类的数据,为了方便地表示这些不同种类的数据,C语言提供语言提供了丰富的数据类型。了丰富的数据类型。l本章仅介绍基本数据类型本章仅介绍基本数据类型 2 2C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.1 C的数据类型(Data Types)数据类型数据类型 C C语言要求,必须为出语言要求,必须为出现在程序中的所有数据现在程序中的所有数据指定数

3、据类型。指定数据类型。由于由于C C语言把程序中的数语言把程序中的数据又分为据又分为变量变量和和常量常量两大两大类,因此,不论是常量数类,因此,不论是常量数据还是变量数据据还是变量数据, ,都要指都要指定数据类型。定数据类型。 C语言根据什么把数语言根据什么把数据分为变量和常量?据分为变量和常量? 3 3C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.2 常量与变量l计算机处理的数据都要存储,存储就要有空间。计算机处理的数据都要存储,存储就要有空间。l若空间中的数据被可以修改,这个空间就称为若空间中的数据被可以修改,这个空间就称为变量空间

4、变量空间,简称,简称变量变量。l若空间中的数据不能被修改,这个空间就称为若空间中的数据不能被修改,这个空间就称为常量空间常量空间,简称,简称常量常量。l空间的大小和数据的存储格式由数据类型来决定空间的大小和数据的存储格式由数据类型来决定。l若需要一个变量空间,一般需要通过定义来要求系统分配,定义时要若需要一个变量空间,一般需要通过定义来要求系统分配,定义时要指出变量(空间)的类型,并给出变量(空间)的名称,也称指出变量(空间)的类型,并给出变量(空间)的名称,也称变量变量(空间)标识符(空间)标识符。n这个名称由用户指定,但要符合命名规则。这个名称由用户指定,但要符合命名规则。n通过变量名读写

5、变量空间数据的方式称为直接引用方式。通过变量名读写变量空间数据的方式称为直接引用方式。l变量定义的格式为:数据类型变量定义的格式为:数据类型 标识符标识符 变量名变量名;nint m, n; /定义两个普通整型变量定义两个普通整型变量m 和和nnfloat x; /定义一个单精度浮点实型变量定义一个单精度浮点实型变量xnchar ch; /定义一个字符型变量定义一个字符型变量ch4 4C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式标识符 (Identifier)l标识符标识符n变量名、符号常量名、函数名、类型名变量名、符号常量名、函数名、类

6、型名l标识符命名规范标识符命名规范n由字母、数字、下划线由字母、数字、下划线(Underscore, _)组成组成n第一个字符必须为字母或下划线第一个字符必须为字母或下划线nC语言标识符是大小写敏感的语言标识符是大小写敏感的l关于标识符应注意以下方面:关于标识符应注意以下方面:n大小写敏感,大小写敏感,sum,Sum,SUM是是3个不同的标识符。个不同的标识符。n关键字不能作为标识符。关键字不能作为标识符。n一般不要使用以下划线开头的标识符一般不要使用以下划线开头的标识符nANSI C未规定标识符的最大长度,未规定标识符的最大长度,TC最多允许最多允许32个个字符。字符。 n应尽量做到应尽量做

7、到“见名知意见名知意”5 5C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式标识符示例l正确的标识符正确的标识符nstudent、num1、_SUM、_1_2_3nMyName、myname、my_namel错误的标识符错误的标识符nroom3-1包含了其他字符(减号)包含了其他字符(减号)n2men以数字开头以数字开头nlong与关键字重复与关键字重复nMr.Zhu 包含了其他字符(小数点)包含了其他字符(小数点)6 6C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式常量 (Constan

8、ts)l常量常量n程序运行过程中,其值不能被改变的量程序运行过程中,其值不能被改变的量n例如:例如:12、-6.7、an常量不仅能以字面常量的形式出现在程序中,还能以符常量不仅能以字面常量的形式出现在程序中,还能以符号常量的形式出现在程序里。号常量的形式出现在程序里。l常量与变量举例常量与变量举例nint a;nfloat b;na=-90;nb=3.14*2.1;变量变量变量变量常量常量常量常量7 7C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式常量示例:例2_补_1.c#define PRICE 30#define NUM 12void

9、 main() . . total = NUM * PRICE; total2 = 84 * PRICE2; printf(total=%d, total); . .不会被替换= total = 12 * 30;常量符号常量8 8C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式符号常量 (Symbolic Constants)l概念概念n符号常量,就是用符号符号常量,就是用符号(标识符标识符)代表的一个常量。代表的一个常量。l定义方式:定义方式:#define 符号名符号名 常量值常量值l作用作用n相当于把标识符用一个常量简单替换下来相当于把

10、标识符用一个常量简单替换下来n标识符是一个整体,不要试图拆开来替换标识符是一个整体,不要试图拆开来替换l在程序中,适当使用符号常量的好处:在程序中,适当使用符号常量的好处:n能起到能起到“见名知意见名知意”的作用,比直接写个常量直观。的作用,比直接写个常量直观。n能做到能做到“一改全改一改全改”。l关于符号常量再强调以下几点:关于符号常量再强调以下几点:n符号常量名习惯上常用大写;符号常量名习惯上常用大写; n符号常量是常量而不是变量,不允许用赋值运算等改变符号常量是常量而不是变量,不允许用赋值运算等改变它的值。它的值。 9 9C C语言程序设计第语言程序设计第0202章章- -数据类型、运算

11、符和表达式数据类型、运算符和表达式符号常量l 所谓符号常量,就是用符号代表的一个常量。所谓符号常量,就是用符号代表的一个常量。l符号常量的定义方式为:符号常量的定义方式为: #define 符号名符号名 常量常量值值 #define PI 3.14 #define SNO 1001 L=2*PI*1.5; s=PI*0.6*0.6; 符号常量符号常量符号常量符号常量 l如果在程序中某处定义了符如果在程序中某处定义了符号常量(以号常量(以PI为例),为例),l从此往后,本文件中凡是出从此往后,本文件中凡是出现现PI的地方都代表的地方都代表3.14;PI可可以和常量以和常量3.14一样参加运算一样

12、参加运算. 。l为什么要用符号来表示一个为什么要用符号来表示一个常量呢?常量呢?l这样做有什么好处?这样做有什么好处?1010C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式符号常量l在程序中,适当使用符号常量在程序中,适当使用符号常量的好处在于:的好处在于: n能起到能起到“见名知意见名知意”的作用,的作用,比直接写个常量直观。比直接写个常量直观。 n能做到能做到“一改全改一改全改”。l关于符号常量再强调以下几点关于符号常量再强调以下几点n符号常量名习惯上常用大写;符号常量名习惯上常用大写; n符号常量是常量而不是变量,符号常量是常量而不是

13、变量,不允许用赋值运算等改变它的值不允许用赋值运算等改变它的值 #define PI 3.14 #define SNO 1001 L=2*PI*1.5; s=PI*0.6*0.6; 1111C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式变量 (Variables)l内存内存(memory):n每台计算机都要有内存,程每台计算机都要有内存,程序只有装入内存中,才可能序只有装入内存中,才可能被执行。被执行。 从逻辑上看,内存是由一从逻辑上看,内存是由一个个的字节构成的。个个的字节构成的。每个字节可以容纳每个字节可以容纳8位二进位二进制数。制数。

14、 每个字节都有唯一的内存每个字节都有唯一的内存地址。地址。201202203204205206207内存地址内存地址内存00001111一个字节一个字节34一一个个二二进进制制位位1212C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式变 量 所谓变量,就是在程序执行过程中,其值可以被改变的量。所谓变量,就是在程序执行过程中,其值可以被改变的量。通俗地讲,变量就像高档饭店的房间,这体现在以下几个方面:通俗地讲,变量就像高档饭店的房间,这体现在以下几个方面: 对某个房间来说,一拨客对某个房间来说,一拨客人走后,另一拨客人可以进来人走后,另一拨客

15、人可以进来, ,虽然房间不变,但里头吃饭的虽然房间不变,但里头吃饭的人在变。人在变。 在在C C程序中,变量就是建立程序中,变量就是建立在内存里的房间,它用来存储不在内存里的房间,它用来存储不断变化的信息。存放在变量中的断变化的信息。存放在变量中的信息称为信息称为变量值变量值。 为了区分不同的房间,人为了区分不同的房间,人们为每个房间起一个名字,比们为每个房间起一个名字,比如百合厅、玫瑰厅等。如百合厅、玫瑰厅等。 每个变量也有变量名。每个变量也有变量名。 房间有大小、档次之分。房间有大小、档次之分。 变量有类型之分,变量的数变量有类型之分,变量的数据类型决定了可以容纳的信息种据类型决定了可以容

16、纳的信息种类,也决定了所占单元的大小。类,也决定了所占单元的大小。 每个房间有自己的房间号每个房间有自己的房间号, ,而且房间名与房间号有对应关而且房间名与房间号有对应关系。系。 每个变量有自己的存储地址每个变量有自己的存储地址, ,而且变量名与存储地址有对应关而且变量名与存储地址有对应关系。系。 总之,变量具有名字、类型、值、地址等属性。总之,变量具有名字、类型、值、地址等属性。1313C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式下面结合例子来理解变量的这些属性。下面结合例子来理解变量的这些属性。 #include void main(

17、) int a; a=10; a=50; a=a*2; printf(”a=%dn”,a); 在在C C程序中,变量都是先定义、后使用程序中,变量都是先定义、后使用变量的定义格式:数据类型变量的定义格式:数据类型 变量名;变量名;对于程序中定义的每个变量,对于程序中定义的每个变量,TCTC会根据变量的数据类型,为会根据变量的数据类型,为它分配一定大小的存储单元。它分配一定大小的存储单元。同时,也在变量名与变量的内同时,也在变量名与变量的内存地址之间建立了对应关系。存地址之间建立了对应关系。该赋值语句会把该赋值语句会把1010存放到变量存放到变量a a中中, ,于是于是a a的值变为了的值变为了

18、1010。变量 (Variables)下面结合例子来理解变量的这些属性。下面结合例子来理解变量的这些属性。 1414C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式程序举例程序举例程序举例程序举例2.12.1:定义变量,检验变量空间大小和地址,给变量赋值,并在显:定义变量,检验变量空间大小和地址,给变量赋值,并在显:定义变量,检验变量空间大小和地址,给变量赋值,并在显:定义变量,检验变量空间大小和地址,给变量赋值,并在显示器上显示变量的值示器上显示变量的值示器上显示变量的值示器上显示变量的值( (参见演示参见演示参见演示参见演示) )#inc

19、lude /包含包含printf 的原型的原型int main() int m,n; /定义两个整型变量定义两个整型变量 float x; /定义一个单浮点型变量定义一个单浮点型变量 char ch; /定义一个字符型变量定义一个字符型变量 printf(“%d,%d,%dn”,sizeof(m),sizeof(x),sizeof(ch);/按十进制输出变量值按十进制输出变量值 printf(%x,%x,%x,%xn,&m,&n,&x,&ch); /按十六进制输出变量空间地址按十六进制输出变量空间地址 m=70; /用常量给变量赋值,用常量给变量赋值,70 表示普通整型常量表示普通整型常量 x

20、=3.14F; /用常量给变量赋值,用常量给变量赋值,3.14F 表示单浮点型常量表示单浮点型常量 ch=A; /用常量给变量赋值,用常量给变量赋值,A表示字符型常量表示字符型常量 n=m; /把变量把变量m 的值赋给变量的值赋给变量n printf(%d,%d,%f,%cn,m,n,x,ch);/输出变量的值输出变量的值 printf(“m=%d,n=%d,x=%f,ch=%cn”,m,n,x,ch); /另一种输出变量值的格式另一种输出变量值的格式 return(0);ll4,4,1l12ff7c,12ff78,12ff74,12ff70l70,70,3.140000,Alm=70,n=7

21、0,x=3.140000,ch=A1515C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式说明:l主函数框架主函数框架nint main()nn 一组程序语句一组程序语句n return(0);nlmain 是主函数名,相当于机器语言程序的入口地址。是主函数名,相当于机器语言程序的入口地址。n一对大括号是函数体,包括一组程序语句(简称语句),语句相当于机器一对大括号是函数体,包括一组程序语句(简称语句),语句相当于机器语言指令,每条语句以分号结束。语言指令,每条语句以分号结束。l“/”是注释部分,说明语句功能,便于理解,它不是程序语句。是注释

22、部分,说明语句功能,便于理解,它不是程序语句。n如果一个注释有多行,每行前都要加如果一个注释有多行,每行前都要加“/”。例如:。例如:n注释行也常常采用注释行也常常采用“/*/”的形式,的形式,l一条语句可以同时定义几个变量,变量名彼此用逗号分隔,一条语句可以同时定义几个变量,变量名彼此用逗号分隔,n例如:例如:int m,n;一行可以书写几条语句,一行可以书写几条语句,n例如:例如:int m,n; float x; char ch;一条语句如果很长,可以分几行书写,但一条语句如果很长,可以分几行书写,但是变量名或函数名不能分行写。是变量名或函数名不能分行写。1616C C语言程序设计第语言

23、程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式说明:l变量初始化变量初始化n变量可以在定义的同时赋值,称为初始化:变量可以在定义的同时赋值,称为初始化:int m=70; /初始化初始化n变量初始化与赋初值是不同的:初始化是在变量定义的变量初始化与赋初值是不同的:初始化是在变量定义的同时赋值,赋初值是指变量定义之后的第一次赋值。初同时赋值,赋初值是指变量定义之后的第一次赋值。初始化等于赋初值,但是赋初值不等于初始化。始化等于赋初值,但是赋初值不等于初始化。n下面的例子是赋初值,但不是初始化:下面的例子是赋初值,但不是初始化:int m,n;m=70; /给给m 赋

24、初值赋初值n=m; /给给n 赋初值赋初值1717C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式说明:l赋值操作符赋值操作符n变量位于赋值操作符变量位于赋值操作符“=”左端,表示给变量赋值或写左端,表示给变量赋值或写入,位于右端,表示从变量取值或读取。入,位于右端,表示从变量取值或读取。l文件包含命令文件包含命令n#include是文件包含命令,是文件包含命令,stdio.h 是库文件,是库文件,含有包括系统函数含有包括系统函数printf 在内的输入输出函数的原型。在内的输入输出函数的原型。n如果不包含这个命令而调用如果不包含这个命令而调

25、用printf 函数,系统视为非法。函数,系统视为非法。系统报错:系统报错:printfundefined(printf 没有定义)没有定义)1818C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式格式输出函数printfl前面的例题中我们已多次用过这个函数。前面的例题中我们已多次用过这个函数。l函数的一般形式:函数的一般形式:nprintf(“格式控制字符串格式控制字符串”,输出表列,输出表列)l函数功能:函数功能:n对于对于任意类型数据任意类型数据按用户指定的数据按用户指定的数据格式输出格式输出到显示器到显示器屏幕上。屏幕上。l返回值返回

26、值n若成功,返回输出的字节数,包括换行符若成功,返回输出的字节数,包括换行符n若失败,返回若失败,返回EOF (End of File)l参数说明(见下一页)参数说明(见下一页)1919C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf的参数说明l格式控制字符串:格式控制字符串:n由包括由包括“格式说明格式说明”和和“普通字符普通字符”组成,用于指定输出格式。组成,用于指定输出格式。n “格式说明格式说明”:由:由%和和“格式字符格式字符”组成,以说明输出数据的类型、组成,以说明输出数据的类型、形式、长度、小数位数等。形式、长度

27、、小数位数等。n“普通字符普通字符” :在输出时原样照印,在显示中起提示作用:在输出时原样照印,在显示中起提示作用l输出列表输出列表n给出了需要输出的数据项给出了需要输出的数据项n可以是变量、常量、表达式、函数调用等可以是变量、常量、表达式、函数调用等n输出数据项与输出数据项与“格式说明格式说明” 在数量和类型上应该一一对应在数量和类型上应该一一对应nprintf(“格式控制字符串格式控制字符串”,输出表列,输出表列)2020C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf的格式举例printf(a=%d b=%d, a, b

28、);格式说明普通字符输出列表输出结果:a=3 b=4格式字符串其一般形式为:格式字符串其一般形式为: 标志标志输出最小宽度输出最小宽度.精度精度长度长度 类类型型其格式符和意义如下所示:其格式符和意义如下所示:2121C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式表表2.1 格式字符格式字符格式说明符格式说明符输出形式输出形式举例举例输出结果输出结果%d(%i)十进制整型十进制整型int a=123;printf(%d,a);123%x(%X)十六进制整型十六进制整型int b=123;printf(%x,b);7b%o八进制整型八进制整型

29、int c=123;printf(%o,c);173%u无符号十进制无符号十进制整型整型unsigned d=123;printf(%u,d);123%c(%C)单个字符单个字符char ch=A;printf(%c,ch);A%f浮点十进制,浮点十进制,默认小数默认小数6 位位float x=123.5;printf(%f,x); 123.500000%g(或或G)浮点十进制,浮点十进制,舍无效舍无效0float y=123.5;printf(%g,y);123.52222C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式表表2.1 格式字符

30、格式字符格式说明符格式说明符输出形式输出形式举例举例输出结果输出结果%e(%E)浮点十进制浮点十进制指数形式指数形式float z=123.5;printf(%e,z);1.235000e+002%Ld十进制长整十进制长整型型long n=123456;printf(%Ld,n);123456%Lf十进制双浮十进制双浮点型点型printf(%Lf,123.56789);123.567890%Lo八进制长整八进制长整型型long m=123456;printf(%Lo,m);361100%Lx 十六进制十六进制长整型长整型long p=123456;printf(%Lx,p);1e240%s字符

31、串字符串char *str=china;printf(%s,str);china2323C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明1. d格式符格式符(例例2_补补_8.c)l作用:按整型数据的实际长度输出。作用:按整型数据的实际长度输出。l基本格式:基本格式:%dl格式一:格式一:%mdnm为指定的输出字段的宽度。为指定的输出字段的宽度。n若数据的位数小于若数据的位数小于m, 则左端补以空格,则左端补以空格,n若数据的位数大于,则按实际位数输出。若数据的位数大于,则按实际位数输出。l例例1:na=123,b

32、=12345, printf(%4d,%4d,a,b);n则输出结果为则输出结果为 123,12345l格式二:格式二: %ldn输出长整型数据。输出长整型数据。l例例2:n若若 long a=135790; printf(“%ld”,a);n则输出为:则输出为: 135790 2424C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明2. o格式符格式符(例例2_补补_8.c)l作用:以八进制数形式输出整数。作用:以八进制数形式输出整数。l基本格式:%on说明:由于将内存中的各位值说明:由于将内存中的各位值(0或或

33、1)按八进制形式输出,则输出的按八进制形式输出,则输出的数值不带符号,将符号位也一起输出。数值不带符号,将符号位也一起输出。n例例1: int a=-1; printf(%d,%o,a,a); -1在内存中的形式在内存中的形式(补码补码)为:为:1111 1111 1111 1111输出结果输出结果 -1,177777 不会输出带负号的八进制整数。不会输出带负号的八进制整数。l格式一:%lon输出对长整数输出对长整数(long型型) l格式二: %mon指定输出数据的字段宽度。指定输出数据的字段宽度。n例例2: int a=-1; printf(“%8o”,a) 输出结果:输出结果:17777

34、72525C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明3. x格式符格式符(例例2_补补_9.c)l作用:以十六进制数形式输出整数。作用:以十六进制数形式输出整数。l基本格式:基本格式:%xn不会出现负的十六进制数不会出现负的十六进制数 (原理同上原理同上)。n例例1:int a=-1; printf(“%x,%o,%d”,a,a,a);n 输出结果输出结果:ffff,177777,-1l格式一:格式一:%lxn输出长整型数输出长整型数, 如如long a=2000; printf(“%lx”,a);l格式二:

35、格式二:%mxn指定输出字段的宽度,如指定输出字段的宽度,如“%12x”。2626C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明4. u格式符格式符(例例2_补补_8.c)l作用:作用:n用来以十进制形式输出无符号(用来以十进制形式输出无符号( unsigned型)整数。型)整数。l基本格式:基本格式:%ul例例1:int a=567, printf(“%u”,a ) 输出结果输出结果567 main() /*例例4-4.c */ unsigned int a=65535; int b=-2; printf(a=

36、%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,65534l说明:说明:l一个有符号整数一个有符号整数(int型型)也可也可以用以用%u格式输出;格式输出;l一个一个unsigned型数据也可以用型数据也可以用%d格式输出。格式输出。l按相互赋值的规则处理按相互赋值的规则处理lunsigned型数据也可用型数据也可用%o或或%x格式输出格式输出2727C C语言程序设计第语言程序设计第0202章章- -

37、数据类型、运算符和表达式数据类型、运算符和表达式整型数据的输出小结整型数据的输出小结整型数据可以有以下的输出格式供选择:整型数据可以有以下的输出格式供选择:按有符号的十进制形式输出整型数据,使用格式说明按有符号的十进制形式输出整型数据,使用格式说明%d。按无符号的八进制形式输出整型数据,使用格式说明按无符号的八进制形式输出整型数据,使用格式说明%o。 另外,通过在另外,通过在%与格式字符之间加上修饰符与格式字符之间加上修饰符l,就能按相应,就能按相应形式输出长整型数据。例如,形式输出长整型数据。例如,按无符号的十进制形式输出整型数据,使用格式说明按无符号的十进制形式输出整型数据,使用格式说明%

38、u。按无符号的十六进制形式输出整型数据,使用格式说明按无符号的十六进制形式输出整型数据,使用格式说明%x。按有符号的十进制形式输出长整型数据,使用格式说明按有符号的十进制形式输出长整型数据,使用格式说明%ld。按无符号的十六进制形式输出长整型数据,使用格式说明按无符号的十六进制形式输出长整型数据,使用格式说明%lx.2828C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明5. c格式符格式符(例例2_补补_10-1.c)l作用:用来输出一个字符。作用:用来输出一个字符。l基本格式:基本格式:%cn例例1:charc

39、=a;printf(%c,c); 输出结果:输出结果:al说明说明n “%c”中的中的c是格式符,逗号右边的是格式符,逗号右边的c是变量名,不要混。是变量名,不要混。n 一个整数,只要它的值在一个整数,只要它的值在0255范围内,也可以用字符形式输出,范围内,也可以用字符形式输出,输出前,系统将该整数作为输出前,系统将该整数作为ASCII码转换成相应字符;码转换成相应字符;n反之,一个字符数据也可以用整数形式输出。反之,一个字符数据也可以用整数形式输出。l格式一:格式一:%mcn指定输出字数宽度指定输出字数宽度n例例2:char c=B;printf(“A%3c”,c);输出:;输出:“A a

40、” 。main() /*字符数据的输出。字符数据的输出。*/ char c=a; int i=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i); 运行结果为:运行结果为:a,97a,97 2929C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明6. s格式符格式符(例例2_补补_10-2.c)l作用:用来输出一个字符串。作用:用来输出一个字符串。l基本格式:基本格式:%sl例例1:printf(“%s”,“china”);输出结果:;输出结果:china(没有双引号没有双引号)。

41、l格式一:格式一:%msn输出的字符串占列,输出的字符串占列,n若字符串本身长度大于若字符串本身长度大于m,则突破的限制,将字符串全部输出。若字符,则突破的限制,将字符串全部输出。若字符串本身长度小于串本身长度小于m,则左补空格。,则左补空格。l格式二:格式二:%-msn如果串长小于,则在列范围内,字符串向左靠,右补空格。如果串长小于,则在列范围内,字符串向左靠,右补空格。l格式三:格式三:%mnsn输出占列,但只取字符串中左端输出占列,但只取字符串中左端n个字符。个字符。n这这n个字符输出在列的右侧,左补空格。个字符输出在列的右侧,左补空格。l格式四:格式四:%-mnsn在列范围的左侧输出字

42、符串左端的在列范围的左侧输出字符串左端的n个字符,右补空格。个字符,右补空格。n如果如果n,则自动取,则自动取n值,即保证值,即保证n个字符正常输出。个字符正常输出。 main() /*例例4-5-2.c字符串的输出。字符串的输出。*/ printf(“%3s,%7.2s,%.4s,%-5.3sn”,“china”, “china”, china, china) 输出结果:输出结果:china, ch,chin,chi3030C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符型数据的输出小结字符型数据的输出小结输出单个字符输出单个字符, 使

43、用格式说明使用格式说明%c。字符型数据输出有两种方式:字符型数据输出有两种方式:输出字符串输出字符串, 使用格式说明使用格式说明%s。3131C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明7. f格式符格式符(例例2_补补_11.c)l作用:作用:n用来以小数形式输出实数用来以小数形式输出实数(包括单、双精度包括单、双精度)。l基本格式:基本格式:%fn不指定字段宽度,由系统自动指定,使整数部分全部如数输出,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出并输出6位小数。位小数。n注意:注意:并非全

44、部数字都是有效数字。并非全部数字都是有效数字。单精度实数的有效位数一般为单精度实数的有效位数一般为7位。位。l格式一:格式一:%.nfn指定输出的数据共占列,其中有指定输出的数据共占列,其中有n位小数。位小数。n如果数值长度小于,则左端补空格。如果数值长度小于,则左端补空格。l格式二:格式二:%-.nfn与与%.nf基本相同,只是使输出的数值向左端靠,右端补空格。基本相同,只是使输出的数值向左端靠,右端补空格。3232C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明7. f格式符应用举例格式符应用举例例例2_补补_

45、11-1.c输出实数时有效位数。输出实数时有效位数。 main() float x,y; x=111111111; y=222222222; printf(“%f”,x+y); 输出输出结果:结果: 333333328125例例2_补补_11-2.c输出双精度数有效输出双精度数有效位数。位数。main() double x,y; x=1111111111111.111111111; y=2222222222222.222222222; printf(%f,x+y); 输出结果:输出结果:3333333333333.333010 例例2_补补_11-3.c输出实数时指定小数位数。输出实数时指定小

46、数位数。main() float f=123.456; printf(%f %10f %10.2f %.2f %-10.2fn,f,f,f,f,f); 输出结果:输出结果:123.456001 123.456001 123.46 123.46 123.463333C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明7. e格式符格式符(例例2_补补_12.c)l作用:作用:n按规范化指数形式按规范化指数形式(小数点前有且只有小数点前有且只有1位非零数字位非零数字)输出实数。输出实数。l基本格式:基本格式: %el说明:

47、说明:n不指定输出数据所占的宽度和数字部分的小数位数;不指定输出数据所占的宽度和数字部分的小数位数;n有的有的c编译系统自动指定编译系统自动指定6位小数,指数部分占位小数,指数部分占5位位(如如e+002),其中,其中“e”占占1位,指数符号占位,指数符号占1位,指数占位,指数占3位。位。nprintf(%e“,123.456);输出:;输出:1.234560e+002。( 不同系统略有不同不同系统略有不同)l格式一:格式一: %m.ne 和和 %-m.nen、n和和“-”字符含义与前相同。此处字符含义与前相同。此处n指拟输出的数据的小数部分指拟输出的数据的小数部分(又称又称尾数尾数)的小数位

48、数。的小数位数。l例如,例如,f=123.456,nprintf(“%e %10e %10.2e %.2e %-10.2e”,f,f,f,f,f); n结果:结果:1.234560e+002 1.234560e+002 1.23e+002 1.23e+002 1.23e+0023434C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式函数printf格式举例说明9. g格式符格式符l作用:作用:n用来输出实数,它根据数值的大小,自动选用来输出实数,它根据数值的大小,自动选f格式或格式或e格式中输出宽格式中输出宽度较小的一种,且不输出无意义的零。

49、度较小的一种,且不输出无意义的零。l基本格式:基本格式:%gl例例1,若,若f=123468,则,则printf(“%f %e %g”,f,f,f);n输出:输出: 123.468000 1.234680e+002 123.468 n 10列列 13列列 10列列l说明:说明:n用用%f格式输出占格式输出占10列,用列,用%e格式输出占格式输出占13列,列,n用用%g格式时,自动从上面两种格式中选择短者,故占格式时,自动从上面两种格式中选择短者,故占10列,列,n按按%f格式输出,最后格式输出,最后3个小数位个小数位“0”为无意义的为无意义的0,不输出,不输出,n因此输出因此输出123.468

50、,然后右补,然后右补3个空格。个空格。n%g格式用得较少格式用得较少3535C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式实型数据的输出小结实型数据的输出小结实型数据的输出常采用两种方式:实型数据的输出常采用两种方式: 按十进制小数形式,使用格式说明按十进制小数形式,使用格式说明%f,这种输出方式除输出,这种输出方式除输出整数部分外,还会输出整数部分外,还会输出6位小数位小数按规范化的指数形式,使用格式说明按规范化的指数形式,使用格式说明%e,这种输出方式会按,这种输出方式会按规范化的指数形式输出。规范化的指数形式输出。 关于实型数据输出强

51、调以下几点:关于实型数据输出强调以下几点: 在输出单精度数据和双精度数据时,使用相同的格式说明。在输出单精度数据和双精度数据时,使用相同的格式说明。 在输出的数字中,并非所有的数字都是有效数字。系统在输在输出的数字中,并非所有的数字都是有效数字。系统在输出单精度数据时,一般前出单精度数据时,一般前67位是有效数字;双精度数据是位是有效数字;双精度数据是1516位。位。可以用可以用%m.nf指定数据的最小输出宽度以及小数部分的位数。指定数据的最小输出宽度以及小数部分的位数。 可以用修饰符可以用修饰符“”(如(如%m.nf)实现左对齐的效果。)实现左对齐的效果。3636C C语言程序设计第语言程序

52、设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式格式输出函数printf小结l上面介绍了主要的格式字符。上面介绍了主要的格式字符。l关于格式输出再强调以下几点:关于格式输出再强调以下几点:n 转义字符可以出现在格式控制串中。转义字符可以出现在格式控制串中。例如,例如,printf(”nabct%d”,i);n 在格式控制串中,除格式说明之外的字符均作为普在格式控制串中,除格式说明之外的字符均作为普通字符输出。通字符输出。例如,例如,printf(”c=%cf=%fs=%s”,A+32,3.14,”BYE”);n 在格式控制串中,要输出字符在格式控制串中,要输出字符%,必

53、须用,必须用%表示。表示。 例如,例如,printf(”%.2f%”,5.126); 会输出会输出 5.13% 。n 要根据被输出表达式的数据类型以及希望的格式,要根据被输出表达式的数据类型以及希望的格式,选用合适的格式说明。选用合适的格式说明。3737C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式程序中常见错误l 变量必须先定义或声明,后使用,否则就是一变量必须先定义或声明,后使用,否则就是一个错误。出现这种错误的原因大多是拼写有误。个错误。出现这种错误的原因大多是拼写有误。n例如:例如:int temp; tmp=5; /把把temp

54、错写为错写为tmpn系统报错:系统报错:tmp : undeclared identifier(tmp 是没有是没有声明的标识符即名称)。声明的标识符即名称)。l如果变量没有赋初值,它的值是一个不可预测如果变量没有赋初值,它的值是一个不可预测的值。例如:的值。例如:nint temp; printf(%d,temp); /变量变量a 没有赋初值,结没有赋初值,结果是一个不可预测的值果是一个不可预测的值n系统警告:系统警告:local variable temp used without having been initialized(局部变量(局部变量temp 没有初值)。没有初值)。3838

55、C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式程序中常见错误l 语句之后丢失分号。语句之后丢失分号。n例如:例如:int a,b /丢失分号。丢失分号。n正确的书写是:正确的书写是:int a,b; a=3; b=4;n系统报错:系统报错:missing ; before identifier a(标识符(标识符a 之之前缺少分号)。而且系统的错误标志指向的是第前缺少分号)。而且系统的错误标志指向的是第2 条语条语句,而不是第句,而不是第1 条语句,这是为什么呢?条语句,这是为什么呢?n因为语句可以换行,定义语句因为语句可以换行,定义语句“

56、inta,b;”可以分两行可以分两行书写,其中的分号可以单独出现在第书写,其中的分号可以单独出现在第2 行,所以系统是行,所以系统是在语句在语句“a=3;”之前还没有遇到分号时才报错。之前还没有遇到分号时才报错。l 在格式控制字符串之后丢失逗号:在格式控制字符串之后丢失逗号:nprintf(%dn); /正确的书写是:正确的书写是:printf(%d,n);n系统报错:系统报错:missing ) before n(n 之前丢失右括号)。之前丢失右括号)。系统按最简单的形式处理。系统按最简单的形式处理。3939C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型

57、、运算符和表达式程序中常见错误l 整型数和浮点型数的存储格式不同,整型数不整型数和浮点型数的存储格式不同,整型数不能按浮点格式显示,反之亦然。能按浮点格式显示,反之亦然。n例如:例如:nint a=12; float f=12.5;nprintf(a=%fn,a); /错!整型数不能按浮点格式显示错!整型数不能按浮点格式显示nprintf(f=%dn,f); /错!浮点型数不能按整型格式显错!浮点型数不能按整型格式显示示n系统没有报错,但是显示结果都是系统没有报错,但是显示结果都是0。l 对程序语句中出现的中文输入方式下的逗号、对程序语句中出现的中文输入方式下的逗号、分号、小括号等分隔符,系统

58、都要报错:分号、小括号等分隔符,系统都要报错:unknown character 0xa3。4040C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.3整型 (Integer)数据l数制和数制之间的转换数制和数制之间的转换l整型常量的表示方法整型常量的表示方法l整型变量整型变量n整型数据在内存中的存放形式整型数据在内存中的存放形式n整型变量的类型整型变量的类型n整型变量的定义整型变量的定义n整型数据的溢出整型数据的溢出l整型常量的类型整型常量的类型4141C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、

59、运算符和表达式整型常量的表示方法l整型常量可以以三种形式出现在整型常量可以以三种形式出现在C程序中。程序中。l十进制十进制 (Decimal)n例如,例如,123、-456、0l八进制八进制 (Octal)n为避免与十进制混淆,八进制以为避免与十进制混淆,八进制以0开头开头,不得含有不得含有8或或9n例如,例如,(0123)8= 182+281+380=(83)10 、-0456n错例,错例,0138、-0912l十六进制十六进制 (Hexadecimal)n以以0x或或0X开头,用开头,用af或或AF表示表示1015n例如,例如,(0x123)16= 1162+2161+3160 =(291

60、)10n -0X45、0x3AB、-0xabc4242C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型变量的表示方法l首先,定义整型变量,其形式为:首先,定义整型变量,其形式为:int 变量名变量名;n例如例如 int i;n TC系统会在内存中为变量系统会在内存中为变量I 分配分配2字字节的存储单元,共计节的存储单元,共计16个二进制位。个二进制位。l其次,用赋值语句把整型数据存其次,用赋值语句把整型数据存放到变量放到变量i中。中。n例如,例如, i=10; 可以把可以把10存放到变量存放到变量i中,也就是把中,也就是把10存放到变量存

61、放到变量i的的2字节字节的存储单元中。的存储单元中。l再次,在变量中有值以后,我们再次,在变量中有值以后,我们可以用可以用%d格式符来输出整型变量格式符来输出整型变量值,值,n例如,例如, printf(”%d”,i); 会输出会输出10。内存内存201202203204205206207i10整型数据整型数据10在存在存储单元中是如何储单元中是如何存放的呢?存放的呢? 4343C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型数据在内存中的存放方式内存内存201202203204205206207i00 0 0 000110 0 0 0

62、0 0 00 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0高地址字节低地址字节l整型数据在存储单元中是如何存放的整型数据在存储单元中是如何存放的呢?即,如何用呢?即,如何用16位二进制数来表示位二进制数来表示整型数据呢?分两种情况:整型数据呢?分两种情况: n 1若数据若数据0,数据直接以其二进,数据直接以其二进制形式存放制形式存放 由于由于10的二进制形式是的二进制形式是1010,所以所以10的存放情况如图所示。的存放情况如图所示。 如果把两个字节画在同一行上如果把两个字节画在同一行上,就有就有 4444C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达

63、式数据类型、运算符和表达式整型数据在内存中的存放方式l2若数据若数据0,数据以其补码,数据以其补码形式存放。形式存放。n求负数的补码的方法:将负数的求负数的补码的方法:将负数的绝对值的二进制形式按位取反,绝对值的二进制形式按位取反,再加再加1n由于由于-10的补码为的补码为1111111111110110,所以,所以-10的存的存放情况如图所示。放情况如图所示。1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0高地址字节低地址字节内存内存201202203204205206207i11 1 1 110011 1 1 1 1 1 14545C C语言程序设计第语言程序设计第0202章

64、章- -数据类型、运算符和表达式数据类型、运算符和表达式补码举例l举例举例nint i=-50; /*int类型占类型占2字节字节*/0 00 0 0 0 0 0 0 0 1 1 0 0 1 01 1 1 1 1 1 1 1 1 1 0 0 1 1 0 11 1 1 1 1 1 1 1 1 1 0 0 1 1 1 050的原码-50的补码取反加一l补码补码 (Complement)n正数:与原码一致,首位为正数:与原码一致,首位为0n负数:绝对值取反加一,首位为负数:绝对值取反加一,首位为1n零:各位全为零:各位全为04646C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符

65、和表达式数据类型、运算符和表达式整型数据在内存中的存放方式注意:在注意:在 10的存储表示中,其最左面的一位为的存储表示中,其最左面的一位为0; 在在-10的存储表示中,其最左面的一位为的存储表示中,其最左面的一位为1。10的存储表示的存储表示-10的存储表示的存储表示 实际上,在整数的实际上,在整数的16位中,最左面的一位是表示符号的,也称位中,最左面的一位是表示符号的,也称为符号位。该位为为符号位。该位为0,表示数据为正;该位为,表示数据为正;该位为1,表示数据为负。,表示数据为负。这样一来,一个这样一来,一个int型变量值最大为型变量值最大为 即为即为2151=32767 类似地,一个类

66、似地,一个int型变量值最小为型变量值最小为 即为即为215=32768 符号位符号位符号位符号位0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0高地址字节低地址字节1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 1 1 1 1 1 1 1 1 1 1 1 1 1 1 14747C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型变量的分类l在在Turbo C中,一个中,一个int型变量值的范围为型变量值的范围为3276832767。即,一个即,一个

67、int型变量仅能存放这个范围之间的整数。型变量仅能存放这个范围之间的整数。l但在有些场合,这个范围太小,无法容纳某些整型数据。但在有些场合,这个范围太小,无法容纳某些整型数据。例如,全国人口数、汽车数等。另外,在有些情况下,这例如,全国人口数、汽车数等。另外,在有些情况下,这个范围又显得过大,造成内存的浪费,例如年龄、月份等。个范围又显得过大,造成内存的浪费,例如年龄、月份等。l于是,于是,C语言又对整型变量作了进一步的分类,按占用存语言又对整型变量作了进一步的分类,按占用存储空间的大小细分为三种:储空间的大小细分为三种:n基本整型基本整型 int, 如如int sum; n短整型短整型 sh

68、ort int, 如如short age; n长整型长整型 long int, 如如long popul;4848C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整数的长度l整数的类型与长度整数的类型与长度nshort:占占2字节字节/16bit 取值范围:取值范围:-3276832767nlong: 占占4字节字节/32bit取值范围:取值范围:-231(231-1)nint: 占占2或或4字节字节/16或或32bit 取值范围:取值范围:-3276832767 (16bit)n若需要精确的长度,可选用若需要精确的长度,可选用short或或

69、longl各类型的变量可以容纳的整数范围取决于为各类型的变量各类型的变量可以容纳的整数范围取决于为各类型的变量所分配的存储单元的大小。所分配的存储单元的大小。n ANSI C并未具体规定各类整型变量的存储单元的大小,具体由各并未具体规定各类整型变量的存储单元的大小,具体由各厂家自行决定,但要符合以下原则厂家自行决定,但要符合以下原则: n长整型的存储单元长整型的存储单元基本整型的存储单元基本整型的存储单元短整型的存储单元短整型的存储单元n一般,一般,2Bytes = short int long = 4Bytesn例如:例如:Borland C3.1: int长度为长度为2BytesMicro

70、soft C:int长度为长度为4Bytes4949C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型变量的定义 (Definition)l定义形式定义形式nsigned int a, b; unsigned c;nsigned long d; unsigned short e; l变量的定义一般放在一个函数开头的声明部分,关于变量变量的定义一般放在一个函数开头的声明部分,关于变量定义的具体内容在以后相关章节里详细介绍定义的具体内容在以后相关章节里详细介绍l有符号数有符号数n二进制补码表示,首位为符号位二进制补码表示,首位为符号位n指定指定

71、signed或缺省情况,即为有符号数或缺省情况,即为有符号数l无符号数无符号数n没有符号位,只能表示非负数没有符号位,只能表示非负数n无符号数类型必须指定为无符号数类型必须指定为unsignedn若把负数赋值给无符号数,则把该负数的补码当作无符若把负数赋值给无符号数,则把该负数的补码当作无符号数进行处理号数进行处理为什么需要无符号数?为什么需要无符号数?程序举例程序举例5050C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型变量的定义与使用举例lvoid main()ll int a;/*定义有符号基本整型变量定义有符号基本整型变量a*/

72、l unsigned b; /*定义无符号基本整型变量定义无符号基本整型变量b*/l long c; /*定义有符号长整型变量定义有符号长整型变量c*/l a = -23;/*a的值为的值为-23*/l b = 45; /*b的值为的值为45*/l c = a + b;/*c的值为的值为22*/l5151C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式无符号整型变量l在有些应用场合,涉及的整数均为非负整数,如在有些应用场合,涉及的整数均为非负整数,如学号、年龄、人口数等。在这种情况下,可以使学号、年龄、人口数等。在这种情况下,可以使用无符号整

73、型变量。用无符号整型变量。l无符号整型变量也有三种类型:无符号整型变量也有三种类型:n符号基本整型:符号基本整型:unsigned int 例例 unsigned stu_no; n无符号短整型:无符号短整型:unsigned short int例例 unsigned short age; n无符号长整型:无符号长整型:unsigned long int 例例 unsigned long population;l另外,另外, 无符号整型与对应的有符号整型所需存储无符号整型与对应的有符号整型所需存储单元大小相同。单元大小相同。5252C C语言程序设计第语言程序设计第0202章章- -数据类型、

74、运算符和表达式数据类型、运算符和表达式无符号整型变量和有符号整型变量的区别有符号整型变量有符号整型变量b的存储单元中最的存储单元中最左一位代表符号左一位代表符号(0为正,为正,1为负为负)无符号变量无符号变量a只能表示非负整数。只能表示非负整数。 下面以如下定义的变量下面以如下定义的变量a、b为例来加以说明。为例来加以说明。 unsigned int a; int b;无符号整型变量无符号整型变量a的存储单元中的存储单元中所有二进制位都用来存放数据本所有二进制位都用来存放数据本身,并无符号位。身,并无符号位。最大值:最大值:216-1=65535最小值:最小值:0最大值:最大值:215-1=3

75、2767最小值:最小值:-215=-32768 一般地说,无符号整型变量所能表示的最大值比有符号整型变量一般地说,无符号整型变量所能表示的最大值比有符号整型变量所能表示的最大值扩大一倍。所能表示的最大值扩大一倍。有符号整型变量有符号整型变量b正负均可。正负均可。a的取值范围为的取值范围为065535b的取值范围为的取值范围为32768327670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1符号位符号位1 1 1 1 1 1 1 1 1 1 1 1 1 1

76、1 15353C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式有符号数与无符号数举例l例例2_补补_2.c lvoid main()ll int i;l unsigned j;l i=j=-50;l i=i/2; /*-25*/l j=j/2; /*32743*/l1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0-50的补码i,j/ 21 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1i/2-25的补码j/232743的补码/原码0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 15454C C语言程序设计

77、第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型数据的取值范围类类 型型长度长度 (bit)取值范围取值范围signed short int16-215 215-1unsigned short int160 216-1signed int16 or 32-215(31) 215(31)-1unsigned int16 or 320 216(32)-1signed long int32-231 231-1unsigned long int320 232-15555C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表

78、达式整型数据的溢出 (Overflow)l溢出溢出n数据超出了变量能够存储的范围,造成数据丢失或数值数据超出了变量能够存储的范围,造成数据丢失或数值改变等改变等例2_补_3.c void main() int a = 32767; a+; /*32768?*/0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1+132767的补码-32768的补码1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 05656C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型常量的类型l常量的类型后缀常量的类型后缀 (Suffix)nl、L

79、表示常量是一个长整型表示常量是一个长整型nu、U表示常量是一个无符号整型数表示常量是一个无符号整型数n两种后缀可以一起使用两种后缀可以一起使用l举例举例n123l长整型常数长整型常数123n456U无符号整型常数无符号整型常数456n789ul无符号长整型常数无符号长整型常数789n101Lu无符号长整型常数无符号长整型常数1015757C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型常量使用中的类型问题l对整型变量赋值对整型变量赋值n常量的值不要超过变量的取值范围常量的值不要超过变量的取值范围l直接使用常量直接使用常量n带有带有l、L、

80、u、U等后缀的整型常量一般用于函数调用等后缀的整型常量一般用于函数调用n不带有后缀的整型常量的类型,是根据其数值大小所处不带有后缀的整型常量的类型,是根据其数值大小所处的范围来确定的的范围来确定的5858C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式整型变量总结l下面列出了下面列出了C语言中提供的六种整数类型。语言中提供的六种整数类型。n基本整型:基本整型:intn短整型:短整型: short intn长整型:长整型: long intn无符号基本整型:无符号基本整型:unsigned intn无符号短整型:无符号短整型: unsigned

81、 short intn无符号长整型:无符号长整型: unsigned long intl虽然虽然ANSI C并未统一规定各类整型变量的存储单并未统一规定各类整型变量的存储单元所占字节数元所占字节数,但每个但每个C系统都有自己的明确规定。系统都有自己的明确规定。 nTurbo C系统的规定见系统的规定见P43表表3-1。n在定义整型变量时,应根据可能的取值范围来确定变量在定义整型变量时,应根据可能的取值范围来确定变量的类型的类型. 有符号整型有符号整型5959C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式编写程序编写程序编写程序编写程序2.2

82、2.2:将一个整数在显示器上逆序显示。:将一个整数在显示器上逆序显示。:将一个整数在显示器上逆序显示。:将一个整数在显示器上逆序显示。 ( (参见演示参见演示参见演示参见演示) )l基本方法:反复使用整型的基本操作:整除和求余。基本方法:反复使用整型的基本操作:整除和求余。l步骤:步骤:n 用用10 对该整数求余,结果是该整数在十进制下的个对该整数求余,结果是该整数在十进制下的个位数,然后显示。位数,然后显示。n 用用10 对该整数进行整除,结果是该整数在十进制下对该整数进行整除,结果是该整数在十进制下的十位数降为个位数,然后求余显示。的十位数降为个位数,然后求余显示。n 用用100 对该整数

83、进行整除,结果是该整数在十进制下对该整数进行整除,结果是该整数在十进制下的百位数降为个位数,然后求余显示。的百位数降为个位数,然后求余显示。n 依次类推。依次类推。6060C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式程序程序程序程序2.2 2.2 将将将将3 3 位整数按逆序输出。位整数按逆序输出。位整数按逆序输出。位整数按逆序输出。 ( (参见演示参见演示参见演示参见演示) )l#includelint main()ll int i, n=578, re;l i=n%10; /步骤步骤 求求n 的个位数。的个位数。i=8l printf

84、(%d,i);l re=n/10; /步骤步骤 降位。降位。re=57l i=re%10; /求求n 的个位数。的个位数。 i=7l printf(%d,i);l re=n/100; /步骤步骤降位。降位。re=5l i=re%10; /求求n 的个位数。的个位数。i=5l printf(%dn,i);l return(0);l8756161C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式说明:l整型常量前加符号0x,表示十六进制数,包括数字09 和af(AF),其中af 表示1015。n例如0x12fe,表示12fe 是十六进制整数。l整型

85、常量前加符号0,表示八进制数,包括数字07。n例如0127,表示127 是八进制整数。l在整型常量后面加符号L 或U(l 或u),表示长整型或无符号整型。n例如52388L 表示长整数,40000U 表示无符号整数。l如果编译系统中普通整型(int)和长整型(long)的长度相同,后缀L 就可以省去,但是加上后缀,有利于程序“移植”。6262C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式编写程序编写程序编写程序编写程序2.32.3:根据数值的特征,设计变量名称。:根据数值的特征,设计变量名称。:根据数值的特征,设计变量名称。:根据数值的特征

86、,设计变量名称。 ( (参见演示参见演示参见演示参见演示) )l#include /包含包含printf 的声明的声明lint main()ll int A,HexA,OctalA; /普通整型变量普通整型变量l long LongA,LongHexA; /长整型变量长整型变量l unsigned UnsignedA; /无符号整型变量无符号整型变量l A=12; /普通整数普通整数l HexA=0x12; /十六进制整数十六进制整数l OctalA=012; /八进制整数八进制整数l printf(%d,%x,%on,A,HexA,OctalA); /显示十进制十六进制和八进制显示十进制十六

87、进制和八进制l printf(%d,%d,%dn,A,HexA,OctalA); /以十进制显示以十进制显示l LongA=52388L; /长整数长整数l LongHexA=0x4fea2L; /长整型十六进制数长整型十六进制数l UnsignedA=40000U; /无符号整数无符号整数l printf(%Ld,%Lx,%dn,LongA,LongHexA,UnsignedA);l return(0);l12,12,1212,18,1052388,4fea2,400002.36363C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.4字

88、符型 (Character)数据l字符型常量字符型常量l字符型变量字符型变量l字符型数据在内存中的存放形式字符型数据在内存中的存放形式l字符型数据的使用方法字符型数据的使用方法l字符串常量字符串常量6464C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符型 (Character)数据l字符类型是 C 语言中的基本数据类型。n字符数据包括大小写字母、数字、标点符号及特殊字符。l在字处理、文本输入输出和数据通信中,应用最广泛的是128 个标准字符ASCII字符集。l标准字符分为可见字符和控制字符,n控制字符用于数据通信和设备控制,例如,换行,

89、响铃。l128 个标准字符和数值0 至127 一一对应,这种对应使字符型数据能以一个字节的整数形式存储(只用7 位,27=128),后者称为字符的代码。l常见ASCII 字符代码见表2.3。6565C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式表2.3 ASCII 代码字符集01234567890Null3!#$%&4()*+,./01523456789:;6?ABCDE7FGHIJKLMNO8PQRSTUVWXY9ZabC10defghijklm11nopqrstuvw12xyz|del 注:注:表示空格。表示空格。6666C C语言程序

90、设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式ASCII 代码字符集的特点所有在程序中可以使用的字符,每个字符都有一个编码,所有在程序中可以使用的字符,每个字符都有一个编码,称为称为ASCII码。码。通过分析,不难发现通过分析,不难发现ASCII码有以下规律:码有以下规律:相邻字母或数字的相邻字母或数字的ASCII码差码差1对应大小写字母的对应大小写字母的ASCII码差码差32大写字母大写字母ABCXYZASCII码码656667888990小写字母小写字母abcxyzASCII码码979899120121122数字字符数字字符012789ASCII码码

91、4849505556576767C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式编写程序编写程序编写程序编写程序2.42.4:测试字符和字符代码,大写字符和小写的关系。:测试字符和字符代码,大写字符和小写的关系。:测试字符和字符代码,大写字符和小写的关系。:测试字符和字符代码,大写字符和小写的关系。 ( (参见演示参见演示参见演示参见演示) )l#includelint main()ll char ch1,ch2;l ch1=A; /或或ch1=65; 字符型常量也可以用代码表示字符型常量也可以用代码表示l ch2=ch1+32; /ch2

92、的值为小写字符的值为小写字符al printf(%c,%cn,ch1,ch2); /显示字符显示字符l printf(%d,%dn,ch1,ch2); /显示字符代码显示字符代码l ch1=ch1+1; /ch1 的值改为的值改为Bl ch2=ch2+1; /ch2 的值改为的值改为bl printf(%c,%cn,ch1,ch2); /显示字符显示字符l return(0);lA,a65,97B,b6868C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符型常量l与整型、实型类型数据一样,字符数据也分为字与整型、实型类型数据一样,字符数据

93、也分为字符常量和字符变量。符常量和字符变量。 l字符常量是用单引号括起来的单个字符。字符常量是用单引号括起来的单个字符。n举例,举例,a、A、1、 、? 、n D、n、101 n错例,错例,abc、我我l需要注意的是:需要注意的是:n要用字符要用字符 构成字符常量,不能写为构成字符常量,不能写为 ,应写作,应写作 n要用字符要用字符 构成字符常量,不能写为构成字符常量,不能写为,应写作,应写作 6969C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符变量 l首先,定义字符型变量,其形式为:首先,定义字符型变量,其形式为:char 变量名变

94、量名;n例如例如, char c;n TC系统会在内存中为每个字符系统会在内存中为每个字符变量分配变量分配1字节的存储单元字节的存储单元 。l其次,用赋值语句把字符型数据存其次,用赋值语句把字符型数据存放到变量放到变量c中。中。n例如,例如,c=A;可把字符可把字符A存放到存放到变量变量c中中l存储单元中实际存放的是字符存储单元中实际存放的是字符A的的ASCII码码65,且以二进制形式。,且以二进制形式。l再次,在变量中有值以后,我们可再次,在变量中有值以后,我们可以用以用%c格式符来输出字符型变量值格式符来输出字符型变量值n例如,例如,printf(“%c”,c);会输出会输出A。它会按它会

95、按c中存的中存的ASCII码输出相应码输出相应字符。字符。内存内存201202203204205206207Ac0001010065字符变量中只能字符变量中只能存放一个字符存放一个字符 7070C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符型数据在内存中的存放形式l一个字符型数据占一个字节的空间一个字符型数据占一个字节的空间l字符型数据以其字符型数据以其ASCII码形式存放码形式存放l字符型数据的存放形式与只占一个字节长度的整字符型数据的存放形式与只占一个字节长度的整型数据完全相同型数据完全相同c1=a(ASCII=97)c1=2(AS

96、CII=50)7171C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符数据与整型数据可以通用l 由于字符数据在内存中以由于字符数据在内存中以ASCII码存放,而码存放,而且其存储形式和整数的存储形式类似,所以且其存储形式和整数的存储形式类似,所以C语言中字符数据与整型数据之间可以通用。语言中字符数据与整型数据之间可以通用。这体现在三方面:这体现在三方面: l1.字符数据可以参加算术运算字符数据可以参加算术运算l 例如,例如,100-A,该式的值为,该式的值为100-65=35 l2.可以把整数赋值给字符变量可以把整数赋值给字符变量l 例如

97、,例如,c=66; l3.字符数据既能按字符形式输出,也能按整字符数据既能按字符形式输出,也能按整数形式输出。数形式输出。n当以字符形式输出时,使用当以字符形式输出时,使用 %c 格式符,系格式符,系统输出的是存储单元中的统输出的是存储单元中的ASCII码所对应的码所对应的字符。字符。printf(%c,c); n当以整数形式输出时,使用当以整数形式输出时,使用 %d 格式符,直格式符,直接将接将ASCII码作为整数输出。码作为整数输出。printf(%d,c);c000101006500010010667272C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类

98、型、运算符和表达式字符型数据的使用方法l可以把字符型数据视作一种长度为可以把字符型数据视作一种长度为1字节的整型数字节的整型数据处理据处理n当使用字符型数据时,与使用这个字符的当使用字符型数据时,与使用这个字符的ASCII码码(一一个个8位整数位整数)是完全一样的是完全一样的n字符型数据的用法与整型数据完全一样,包括运算、赋字符型数据的用法与整型数据完全一样,包括运算、赋值、输入、输出等值、输入、输出等n字符型数据使用过程中,同样需要注意溢出、符号等问字符型数据使用过程中,同样需要注意溢出、符号等问题题l是字符还是整数,只有在输出时才有意义是字符还是整数,只有在输出时才有意义7373C C语言

99、程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符型数据使用举例2_补_5.clvoid main()ll char c;l int i, j;l c = 97; /*c = a*/l i = c + 20;/*i = 117*/l j = 2; /*j = 50*/l printf(%c, %dn, c, c); /*a, 97*/l7474C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符型数据使用举例2_补_6.cl#include lvoid main()llchar ab;lab=A;l

100、printf(%c,ab);lprintf(%d,ab);lab=ab+32;lprintf(%c,ab);lprintf(%d,ab);ll#include lvoid main()l char c1,c2;l c1=a;l c2=b;l c1=c1-32;l c2=c2-32;l printf(%c %c,c1,c2);l 7575C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符型变量的符号l字符型变量与整型变量一样,也分为有符号数与字符型变量与整型变量一样,也分为有符号数与无符号数无符号数l无符号字符无符号字符nunsigned c

101、har c;n举例,表示一个班级的人数举例,表示一个班级的人数 (256)l赋值和使用中需要注意的问题,与整型变量相同赋值和使用中需要注意的问题,与整型变量相同7676C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符串(String)常量l表示形式表示形式n一对双引号括起来的字符序列一对双引号括起来的字符序列n引号内可以包括引号内可以包括0个、个、1个或多个字符个或多个字符n字符序列中的特殊字符用转义字符表示字符序列中的特殊字符用转义字符表示n举例,举例,abc、a、 、我我n举例,举例,12.4、$#*!、C:HOME“l存放方式存放方

102、式l输出形式输出形式n可用可用 printf(”CHINA”); 或者或者 printf(”%s”,”CHINA”); 来输出字符串来输出字符串7777C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符串在内存中的存放方式l在内存中每个字符按顺序存放在内存中每个字符按顺序存放l字符串结尾有一个空字符字符串结尾有一个空字符(ASCII=0, 0)作为字作为字符串结束标志符串结束标志l字符串结束标志字符串结束标志0是不能显示的,在字符串常是不能显示的,在字符串常量中,也不用显式写出来量中,也不用显式写出来l举例举例nTESTnnaT E S T

103、 084698384000a 00097007878C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式字符常量和字符串常量的区别 l1.从形式上看,从形式上看,n 字符常量是单个字符用单撇号括起来,字符常量是单个字符用单撇号括起来,例如,例如,A,n, 0n 字符串常量是若干个字符用双撇号括起来,字符串常量是若干个字符用双撇号括起来,例如,例如,”USA”,”A”,” l2.从存储上看,从存储上看,n为保存一个字符常量只需为保存一个字符常量只需1字节的内存;字节的内存;n为保存字符串常量,除了要为串中的每个字符分配为保存字符串常量,除了要为串中

104、的每个字符分配1字节外,还要多分配一个字节用来存放字节外,还要多分配一个字节用来存放 字符串结字符串结束符即束符即0。例如,为保存例如,为保存“CHINA” 需要需要6个字节的内存。个字节的内存。 n设置字符串结束符的目的在于,方便函数判断字符设置字符串结束符的目的在于,方便函数判断字符串是否结束。串是否结束。例如,在用例如,在用printf(“CHINA”);输出时,是一个字符一输出时,是一个字符一个字符的输出,直到遇到个字符的输出,直到遇到0为止。为止。298A299301302303304305306NIHCA07979C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符

105、和表达式数据类型、运算符和表达式字符常量和字符串常量的区别l3.字符变量可以用来保存字符常量的值,字符变量可以用来保存字符常量的值,n 例如,例如,char c; c=A;n 但是,字符变量不能用来保存字符串常量,但是,字符变量不能用来保存字符串常量, 例如,例如, c=”A”; 是非法的,是非法的,n 字符串常量可以保存在字符数组中字符串常量可以保存在字符数组中l4.字符字符 可以直接出现在字符串中,可以直接出现在字符串中,n例如,例如,”Im” 是合法的字符串。是合法的字符串。 n但是,字符但是,字符 ” 不能直接出现在字符串中,而应以不能直接出现在字符串中,而应以”的形式出现在字符串中。

106、的形式出现在字符串中。例如,不能写为例如,不能写为”abc”d”,应写为,应写为”abc”d” 。 8080C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式转义字符l理论上讲,理论上讲,ASCII码表中字符都可出现在码表中字符都可出现在C程序中。程序中。n字母、数字等字符可以直接从键盘上输入,字母、数字等字符可以直接从键盘上输入,n图形字符、控制字符(图形字符、控制字符(如换行、回车、换页、响铃、换页)以及一些特殊字符(如单引号用作字符常量界限符)无法直接从键盘上输入。无法直接从键盘上输入。n在程序中如何表示它们呢?在程序中如何表示它们呢?l

107、转义字符:把反斜杠转义字符:把反斜杠后面的字符转换为别的意义后面的字符转换为别的意义nC语言用以语言用以 开头的字符序列来表示任意特殊字符开头的字符序列来表示任意特殊字符n例如,例如,n 表示表示“换行符换行符”(ASCII码为码为10)n b 表示表示“退格符退格符”(ASCII码为码为8)l常见的转义字符如表常见的转义字符如表2.5所示。所示。8181C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式表2.5 常用转义字符转义字符转义字符代码代码功能功能00空字符(空字符(null)a7音符(音符(bell)b8退格(退格(backspac

108、e)t9水平制表(水平制表(horizontal tab)n10或或0x0a换行(换行(newline)v11或或0x0b垂直制表(垂直制表(vertical tab)f12或或0x0c换页(换页(formfeed)r13或或0x0d回车(回车(carriage return)34或或0x22双引号(双引号(double quote)39或或0x27单引号(单引号(single quote)92或或0x5c反斜杠(反斜杠(backslash)ddd1到到3位八进制数所代表的字符位八进制数所代表的字符xhh1到到2位十六进制数所代表的字符位十六进制数所代表的字符8282C C语言程序设计第语言程

109、序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式转义字符l转义字符的表示:转义字符的表示:n八进制格式:八进制格式:ddd 。ddd表示字符的表示字符的ASCII码码1到到3位位8进制形式进制形式 例如,例如,101 代表代表ASCII码为码为65=(101)8的的A。n十六进制格式:十六进制格式:xhh 。hh表示字符的表示字符的ASCII码码1到到2位位16进制形进制形式式例如,例如, x41代表代表ASCII码为码为65=(41)16的的A。n举例,举例,n、t、“、123、x3A l例例2-补补- #include nvoid main ( ) n print

110、f( ab ct derftgn);n printf(htibbj kn);nf g d eh j k 8383C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式编写程序编写程序编写程序编写程序2.52.5:检测字符常量的多种表示法。:检测字符常量的多种表示法。:检测字符常量的多种表示法。:检测字符常量的多种表示法。 ( (参见演示参见演示参见演示参见演示) )l#includelint main()ll char ch1,ch2,ch3,ch4,ch5,ch6;l ch1=N; /字符常量字符常量Nl ch2=78; /78 是字符常量是字符

111、常量N 的十进制代码的十进制代码l ch3=0x4e; /0x4e 是字符常量是字符常量N 的十六进制代码的十六进制代码l ch4=0116; /0116 是字符常量是字符常量N 的八进制代码的八进制代码l ch5=x4e; /x4e表示十六进制整数代表的字符常量表示十六进制整数代表的字符常量Nl ch6=116; /116是八进制整数代表的字符常量是八进制整数代表的字符常量Nl printf(%ct%ct%ctn,ch1,ch2,ch3); /t 表示按水平制表格式输表示按水平制表格式输出字符出字符l printf(a); /a 代表一声铃响代表一声铃响l printf(%ct%ct%ctn

112、,ch4,ch5,ch6);l printf(a);l return(0);lN N NN N N8484C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.5 浮点型 (Floating Point)数据l浮点型常量的表示方法浮点型常量的表示方法l浮点型变量浮点型变量n浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式n浮点型变量的类型浮点型变量的类型n浮点型数据的舍入误差浮点型数据的舍入误差l浮点型常数的类型浮点型常数的类型l举例举例8585C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符

113、和表达式2.5 浮点型 (Floating Point)数据l首先来了解一下关于首先来了解一下关于有效数字有效数字的概念。的概念。n一个数的有效数字是指从该数最左边不为一个数的有效数字是指从该数最左边不为0的数字位起的数字位起至最右边不为至最右边不为0的数字位止之间的每一个数字位,而这的数字位止之间的每一个数字位,而这些数字位的个数称为该数的有效数字位数。些数字位的个数称为该数的有效数字位数。n另外,若一个数带有指数部分,它不影响该数的有效数另外,若一个数带有指数部分,它不影响该数的有效数字位数字位数数数 值值有效数字有效数字有效数字位数有效数字位数35003,522.7052,7,0,540

114、.2782,7,8363.006,32数数 值值有效数有效数字字有效数有效数字位数字位数3.143,1,433141053,1,433.141063,1,438686C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式浮点型常量的表示方法l十进制小数形式十进制小数形式n由符号、数字和小数点由符号、数字和小数点(必须必须)组成组成n整数和小数部分都可省略,但不能同时省略整数和小数部分都可省略,但不能同时省略n举例,举例,12.3、-.123、123.、0.0、0.、.0l指数形式指数形式n由整数由整数(或小数或小数)、e(或或E)、整数顺序组成、整

115、数顺序组成ne或或E之前必须有数字,之后必须是整数之前必须有数字,之后必须是整数n举例,举例,123.4e-5表示表示123.410-5n错例,错例,e1、12e、1.2e3.4、.e5、e、1En一个实数可以用多种指数形式表示出来。一个实数可以用多种指数形式表示出来。123.45可表示为:可表示为:1234.5e-1,123.45e0,1.2345e2,0.12345e38787C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式规范化指数形式l规范化指数形式规范化指数形式n类似于类似于“科学计数法科学计数法”ne或或E之前的小数中,小数点前面

116、有且仅有一个非零数之前的小数中,小数点前面有且仅有一个非零数字字l举例,举例,123.456n规范化形式,规范化形式,1.23456e2、1.23456E+002n非规范化形式,非规范化形式,123.456、12.3456e1、12345.6e-2、0.123456e3、12345600e-58888C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式浮点型变量l定义实型变量形式:定义实型变量形式:float 变量名变量名;n例如例如float f;n TC系统在内存中为它分配系统在内存中为它分配4字节的存字节的存储单元,共计储单元,共计32个比

117、特。个比特。l用赋值语句把实型数据存放到变量用赋值语句把实型数据存放到变量f中。中。n例如例如 f=123.456;可以把可以把123.456存放到存放到变量变量f中中。 l在变量中有值以后,我们可以用在变量中有值以后,我们可以用%f,%e格式符来输出实型变量值格式符来输出实型变量值n可按小数形式或按规范化的指数形式可按小数形式或按规范化的指数形式输出实型变量值。例,输出实型变量值。例, printf(”%f”,f); 输出输出 123.456000 printf(”%e”,f);输出输出 1.23456e+02内存内存201202203204205206207123.456实型数据在存实型数

118、据在存储单元中是如储单元中是如何存放的呢?何存放的呢? f8989C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式浮点型数据在内存中的存放方式l二进制规范化指数形式二进制规范化指数形式n小数部分长度与能表示的精度有关小数部分长度与能表示的精度有关n指数部分长度与能表示的数值范围有关指数部分长度与能表示的数值范围有关lANSI C标准并没有规定每一部分各占多少二进制位。标准并没有规定每一部分各占多少二进制位。n显然,在总位数一定的前提下,小数部分占的位数越多,则可显然,在总位数一定的前提下,小数部分占的位数越多,则可表示数的更多有效数字位,数值

119、的范围就越小;反之,指数部表示数的更多有效数字位,数值的范围就越小;反之,指数部分占的位数越多,则数值的范围就越大,可表示的有效数字位分占的位数越多,则数值的范围就越大,可表示的有效数字位就更少。就更少。1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 0指数部分e小数部分f符号s9090C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式几个特殊的数l无穷大无穷大 (Infinition)nInf举例,举例,1.0/0.0n-Inf举例,举例,-1.0/0.0lNaN (Not a Number)nNaN举例,举例,sqrt(-1)

120、/*开平方开平方*/n-NaN举例,举例,-sqrt(-1)l零零 (Zero)n浮点数用特殊的形式表示零浮点数用特殊的形式表示零9191C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式浮点型变量的类型l为适应不同应用场合,为适应不同应用场合,C语言把实型变量分类为语言把实型变量分类为 :n单精度单精度 float 例例float x; n双精度双精度 double 例例double y;n长双精度长双精度 long double 例例long double z;lTurbo C中各类实型变量长度和取值范围的规定:中各类实型变量长度和取值范围

121、的规定:类类 型型长度长度 (bit)有效数字绝对值范围绝对值范围float326710-371038double64151610-30710308long double128181910-49311049329292C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式浮点型数据的舍入误差l由于浮点型变量能够表示的有效数字有限,将有由于浮点型变量能够表示的有效数字有限,将有效位以外的数字舍去造成误差效位以外的数字舍去造成误差n例如:例如:float型变量的有效数字位数为型变量的有效数字位数为67,这意味着,这意味着float型变量最多只保证接收型

122、变量最多只保证接收7位有效数字。位有效数字。n因此,若定义因此,若定义 float a;a=123456.789; 那么,由于那么,由于float型只能接收型只能接收7位有效数字,所以最后两位将被舍去位有效数字,所以最后两位将被舍去,这样这样就会造成舍入误差。就会造成舍入误差。l例2_补_7.Cnfloat a=123456.789e5, b;nb = a + 20; /*b=12345678920?*/nprintf(a=%fnb=%fn, a, b);l思考:思考:1.0/3*3=?运行结果运行结果 a=12345678848.000000b=12345678848.0000009393C

123、 C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式浮点型常量的类型l 通常,无后缀的浮点型常量被认为是双精度型的。通常,无后缀的浮点型常量被认为是双精度型的。n例如,例如,float a; a=1.23*0.456;n系统会把系统会把1.23和和0.456作为双精度数据存储和运算,得到作为双精度数据存储和运算,得到一个双精度的乘积,然后取前一个双精度的乘积,然后取前7位有效数字赋给变量位有效数字赋给变量a。这样做的好处是提高了精度,但也降低了运算速度这样做的好处是提高了精度,但也降低了运算速度l类型后缀类型后缀n加加f、F:表示把某实型常量按单精

124、度型浮点数处理:表示把某实型常量按单精度型浮点数处理n例如,例如,1.23f -10.836F,365f和和365.等价。等价。 l对浮点型变量赋值对浮点型变量赋值n一个浮点型常量可以赋值给任何类型的浮点型变量,根一个浮点型常量可以赋值给任何类型的浮点型变量,根据变量类型截取常量的相应有效数字据变量类型截取常量的相应有效数字例如:例如:float a; double b; a=123456.789; /*接收接收7位位*/ b=123456.789; /*9位全接收位全接收*/ 注意防止出现溢出注意防止出现溢出9494C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式

125、数据类型、运算符和表达式编写程序编写程序2.6:检测实型变量的各种输出格式。:检测实型变量的各种输出格式。l#includelint main()ll double x=3.14159E4; /或double x=3.14159*104l printf(%fn,x); /按小数形式输出l printf(%gn,x); /按小数形式输出,省去无效0l printf(%en,x); /按指数形式输出l return(0);l31415.90000031415.93.141590e+0049595C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式编写

126、程序编写程序2.7:检测实型常量的表示法。:检测实型常量的表示法。l#includelint main()ll float x1=314.159F; /单精度l double x2=314.159; /双精度l long double x3=3.14159E2L; /长精度,指数格式l printf(%gn,x1); /按小数形式输出,舍去无效0l printf(%en,x2); /按指数形式输出l printf(%fn,x3); /按小数形式输出,小数6 位l return(0);l314.1593.141590e+002314.1590009696C C语言程序设计第语言程序设计第0202

127、章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.6字面值常量l若空间中数据不能被修改,该空间称常量空间常量空间,简称常量常量。l最常使用的常量是字面值常量字面值常量,简称字面量字面量。n字面值常量的特点:它由常量值和表示该数值类型的后缀字符或字面值常量的特点:它由常量值和表示该数值类型的后缀字符或界限符组成。例如:界限符组成。例如:n52388L 是长整型字面量,是长整型字面量,52388是常量值,是常量值,L 代表长整型的后缀。代表长整型的后缀。n3.1416F 是单浮点型字面量,是单浮点型字面量,3.1416 常量值,常量值,F代表单浮点型后缀代表单浮点型后缀nA是字符型字面

128、量,是字符型字面量,A 是常量值,单引号是定界符;是常量值,单引号是定界符;l普通整型和双浮点型的字面量没有表示类型的后缀,它们是默认的,n例如:例如:345 是普通整型字面量,是普通整型字面量,3.1416是双浮点型字面量。是双浮点型字面量。l赋值操作符“=”两边的含义:n从右边的名称所表示的空间中读取数据,存储到左边的名称所表从右边的名称所表示的空间中读取数据,存储到左边的名称所表示的空间中。示的空间中。9797C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.6字面值常量l用字面值常量给变量赋值的语句举例用字面值常量给变量赋值的语句举

129、例nint m; /定义一个普通整型变量定义一个普通整型变量nm=345 ; /给整型变量给整型变量m 赋初值赋初值nlong n=52388L; /初始化一个长整型变量初始化一个长整型变量nndouble x=3.1416; /初始化一个双浮点型变量初始化一个双浮点型变量xnfloat y=3.1416F ; /初始化一个单浮点型变量初始化一个单浮点型变量ynchar ch= A; /初始化一个字符型变量初始化一个字符型变量chl用矩形表示变量空间,用阴影矩形表示字面值常量空间:用矩形表示变量空间,用阴影矩形表示字面值常量空间:l与变量不同,字面值常量的空间虽然也在机器内存的某个与变量不同,

130、字面值常量的空间虽然也在机器内存的某个地方,但是不可寻址,程序员无法访问它的地址,即不能地方,但是不可寻址,程序员无法访问它的地址,即不能对它实施取址运算对它实施取址运算&。34534552388L523883.14163.14163.1416F 3.1416AAm 345n52388x3.1416y 3.1416chA9898C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式操作符操作符sizeofl测定所使用的测定所使用的C系统中各类型数据长度的方法系统中各类型数据长度的方法n运算符运算符 sizeof(或或或或) nsizeof的作用:测

131、定某类型数据所占内存空间大小(的作用:测定某类型数据所占内存空间大小(byte)l举例:举例:nsizeof(345)=sizeof 345=sizeof(int)=4nsizeof(52388L)=sizeof 52388L=sizeof(long)=4nsizeof(3.1416)=sizeof 3.1416=sizeof(double)=8nsizeof(3.1416F)=sizeof 3.1416=sizeof(float)=4nsizeof(A)=sizeof A=sizeof(char)=1n main( )n printf(“Short %d bytesn”,sizeof(sho

132、rt);n printf(“Int %d bytesn”,sizeof(int); n printf(“Long %d bytesn”,sizeof(long);n printf(“Fload %d bytesn”,sizeof(fload); n printf(“Double %d bytesn”,sizeof(double);n printf(“Char %d bytesn”,sizeof(char); n 运行结果:运行结果:Short 1 bytesInt 2 bytesLong 4 bytesFloat 4 bytesDouble 8 bytesChar 1 bytes9999C C

133、语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.7变量赋初值 (Initialization)l在定义变量的同时对变量赋值在定义变量的同时对变量赋值(初始化初始化)l举例举例nint a=1; /*相当于相当于 int a; a=1;*/nfloat f=12.34; /*相当于相当于 float f; f=12.34;*/nchar c=A; /*相当于相当于 char c; c=A;*/nint a, b=3; /*对对b赋初值,赋初值,a没有初值没有初值*/nint a=100,b=100,c=100;n/*对三个变量赋同样的初值对三个变

134、量赋同样的初值*/nint a=b=c=100;/*不正确不正确*/l变量使用前,一般应先对它赋值变量使用前,一般应先对它赋值100100C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式2.8各类数值型数据间的混合运算l整型、字符型、浮点型数据可混合运算整型、字符型、浮点型数据可混合运算l混合运算时,混合运算时,C系统会按照一定的规则,自动地将系统会按照一定的规则,自动地将操作数转换成同一类型,然后再进行运算。操作数转换成同一类型,然后再进行运算。 转换转换原则分为两部分,原则分为两部分,char, shortdoublelongunsign

135、edintfloat高高低低float型一律转化为型一律转化为double型,型,即使是两个即使是两个float型数据运算。型数据运算。 char型、型、short型一律转化为型一律转化为int型型 。 务必要做的转换务必要做的转换务必要做的转换务必要做的转换根据操作数的类根据操作数的类型进行转换,级型进行转换,级别低的向级别高别低的向级别高的转换的转换101101C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式第2章 小结 l本章要掌握的内容包括:本章要掌握的内容包括:n 三种基本的数据类型:整型、实型、字符型。三种基本的数据类型:整型、实型、字符型。n 各类型常量的表示以及变量的定义。各类型常量的表示以及变量的定义。l在复习本章内容时,要特别注意以下几个方面:在复习本章内容时,要特别注意以下几个方面:n 要从功能、目数、优先级、结合性、限制等方面理要从功能、目数、优先级、结合性、限制等方面理解运算符解运算符n 表达式的求解规则。表达式的求解规则。n 在描述表达式时,应按在描述表达式时,应按C语言语法来写。语言语法来写。102102C C语言程序设计第语言程序设计第0202章章- -数据类型、运算符和表达式数据类型、运算符和表达式

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号