《《c语言教学资料》2基本数据类型及运算.ppt》由会员分享,可在线阅读,更多相关《《c语言教学资料》2基本数据类型及运算.ppt(147页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2章章 基本数据基本数据类型及运算型及运算2第第2 2章章 基本数据类型及运算基本数据类型及运算本章内容本章内容 2.2 标准输入输出函数标准输入输出函数 2.3 运算符与表达式运算符与表达式 2.4 算术运算符与算术表达式算术运算符与算术表达式 2.1 数据类型数据类型 2.5 自增自减运算符及其表达式自增自减运算符及其表达式3第第2 2章章 基本数据类型及运算基本数据类型及运算 2.7 关系运算符和关系表达式关系运算符和关系表达式 2.8 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 2.9 其他类型运算符和表达式其他类型运算符和表达式 2.6 赋值运算符和赋值表达式赋值运算符和赋值表
2、达式 2.11 库函数库函数 2.10 表达式的运算顺序和类型转换表达式的运算顺序和类型转换4 2.1 2.1 数据类型数据类型本节内容本节内容 2.1.2 常量与变量常量与变量 2.1.3 整型整型 2.1.4 实型实型 2.1.1 标识符标识符 2.1.5 字符型字符型52.1 2.1 数据类型数据类型C C语言语言数据类型数据类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型枚举类型枚举类型整型整型字符型字符型实型实型(浮点型浮点型)基本类型基本类型指针类型指针类型构造类型构造类型空类型空类型单精度型单精度型 双精度型双精度型 6 2.1.1 2.1.1 标识符标识符vC C程
3、序是程序是基本字符基本字符的序列。的序列。v基本字符包括:基本字符包括:数字(数字(0 09 9)大小写字母(大小写字母(a az z,A AZ Z)标点符号标点符号特殊字符:空格、换行、制表符特殊字符:空格、换行、制表符等,起分隔的等,起分隔的作用。增删空白一般不影响程序的意义。作用。增删空白一般不影响程序的意义。7 2.1.1 2.1.1 标识符标识符v标识符标识符是一个字符序列,用来标识程序中用到的是一个字符序列,用来标识程序中用到的常量、变量、函数、数组、语句标号以及符号常常量、变量、函数、数组、语句标号以及符号常量等的名称。量等的名称。vC C语言语言规定规定标识符应满足以下规则:标
4、识符应满足以下规则:只能由只能由字母字母、下划线下划线和和数字数字组成组成第一个字符不能是数字第一个字符不能是数字标识符中的字母区别标识符中的字母区别大小写大小写不能使用不能使用C C语言的语言的关键字关键字vC C语言中有语言中有3 3类标识符:关键字,系统预定义的标类标识符:关键字,系统预定义的标识符识符 ,用户标识符。,用户标识符。82.1.1 2.1.1 标识符标识符v关键字:关键字:C C语言规定的具有特定意义的字符串,通语言规定的具有特定意义的字符串,通常也称保留字(小写字母)。常也称保留字(小写字母)。标识数据类型(标识数据类型(1414个):个):intint、longlong
5、、charchar、floatfloat、doubledouble等等标识存储类型(标识存储类型(5 5个):个):autoauto、staticstatic、registerregister等等标识流程控制(标识流程控制(1212个):个):gotogoto、breakbreak、ifif、elseelse、continuecontinue等等标识运算符(标识运算符(1 1个):个):sizeofsizeof 9 2.1.1 2.1.1 标识符标识符v2.1.1.2 2.1.1.2 预定义标识符预定义标识符v总是以固定的形式用于专门的地方,例如标识库函总是以固定的形式用于专门的地方,例如标识
6、库函数名和编译预处理命令。数名和编译预处理命令。编译预处理命令:编译预处理命令:definedefine,endefendef,ifdefifdef,endifendif,includeinclude等等 。标准库函数:标准库函数:数学函数:数学函数:sqrtsqrt,sinsin,coscos,powpow,loglog,fabsfabs,expexp等。等。输入输出函数:输入输出函数:scanfscanf,printfprintf,getchargetchar,getsgets等。等。v2.1.1.3 2.1.1.3 用户自定义标识符用户自定义标识符v用户根据自己的需要定义的一类标识符,主
7、要用于用户根据自己的需要定义的一类标识符,主要用于标识变量、函数、数组名等。标识变量、函数、数组名等。10 2.1.2 2.1.2 常量与变量常量与变量v2.1.2.1 常量常量v常量是指在程序中固定不变的数据量。常量又可常量是指在程序中固定不变的数据量。常量又可分为直接常量和符号常量。分为直接常量和符号常量。直接常量:就是在程序中直接引用的数据:直接常量:就是在程序中直接引用的数据:整型常量:整型常量:1,0,-50,32767。实型常量:实型常量:3.14,-55.6,1.7e4。字符常量:字符常量:A,$,s。字符串常量:字符串常量:Good morning,how are you。11
8、 2.1.2 2.1.2 常量与变量常量与变量v符号常量:是用标识符表示一个数据。定义符号常符号常量:是用标识符表示一个数据。定义符号常量:量:#define#define 标识符标识符 常量常量v#define#define是一条预处理命令,称为宏定义,其功能是是一条预处理命令,称为宏定义,其功能是把该标识符定义为其后的常量值。一经定义,以后把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母。值。习惯上符号常量的标识符用大写字母。#define PI#define PI 3.
9、141593.14159v标识符标识符PIPI代表常量代表常量3.141593.14159。程序中,凡是出现标识。程序中,凡是出现标识符符PIPI的地方都用的地方都用3.141593.14159替换。替换。122.1.2 2.1.2 常量与变量常量与变量v【例例2-12-1】分析以下程序中,常量有哪些?分析以下程序中,常量有哪些?#include#defineN10voidmain()inta=6;intsum;floatb=4.5,c;sum=a+N;c=b*N;printf(a=6,sum=%dn,sum);printf(%f,c);13 2.1.2 2.1.2 常量与变量常量与变量v2.
10、1.2.2 2.1.2.2 变量变量v变量代表内存中的一个存储单元,它用变量代表内存中的一个存储单元,它用来存放数据,也就是变量的值,在程序来存放数据,也就是变量的值,在程序运行期间,可以读出所存放的值或写入运行期间,可以读出所存放的值或写入新值。新值。v变量名实际上是一个以一个名字对应代变量名实际上是一个以一个名字对应代表一个内存单元的地址,在对程序编译表一个内存单元的地址,在对程序编译时由编译系统给每一个变量名分配对应时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该通过变量名找到相应的内存地址,从该存储
11、单元中读取数据。存储单元中读取数据。2000Ha514 2.1.2 2.1.2 常量与变量常量与变量v2.1.2.2 2.1.2.2 变量变量vC C语言中语言中要求对所有用到的变量作强制定义,也就要求对所有用到的变量作强制定义,也就是是“先定义,后使用先定义,后使用”。v在定义变量时要指定变量名和变量的数据类型,在定义变量时要指定变量名和变量的数据类型,也可以同时为定义的变量赋初值。变量的数据类也可以同时为定义的变量赋初值。变量的数据类型决定了编译系统为其分配的空间大小。型决定了编译系统为其分配的空间大小。v 变量变量“先定义,后使用先定义,后使用”的目的:的目的:未定义的,系统不作为变量名
12、(编译时出错);未定义的,系统不作为变量名(编译时出错);编译时为变量分配相应存储单元;编译时为变量分配相应存储单元;根据变量类型,检查运算是否合法,如整型变量的求根据变量类型,检查运算是否合法,如整型变量的求余运算余运算 a%ba%b15 2.1.2 2.1.2 常量与变量常量与变量v变量定义必须放在变量使用之前,一般放在函数变量定义必须放在变量使用之前,一般放在函数体的开头部分,之后是程序的执行语句。主函数体的开头部分,之后是程序的执行语句。主函数mainmain()()的结构为:的结构为:main()main()变量声明语句变量声明语句 执行语句序列执行语句序列 16 2.1.2 2.1
13、.2 常量与变量常量与变量v定义变量的语句格式为:定义变量的语句格式为:类型类型 变量表;变量表;v类型可以是类型可以是intint、floatfloat、charchar、voidvoid或自定义类或自定义类型。变量表可以是一个或多个变量名,各变量之型。变量表可以是一个或多个变量名,各变量之间要用逗号分开,声明语句要以分号作为结束。间要用逗号分开,声明语句要以分号作为结束。int abc;/int abc;/声明一个名为声明一个名为abcabc的整型变量的整型变量float m,n,p;/float m,n,p;/声明声明3 3个实型变量,名字分别为个实型变量,名字分别为m m、n n、p
14、pv定义变量的同时赋初值:定义变量的同时赋初值:float m=1,n=2,p;float m=1,n=2,p;v应注意,在初始化中不允许连续赋值,如应注意,在初始化中不允许连续赋值,如int int a=b=c=5a=b=c=5是不合法的。是不合法的。172.1.3 2.1.3 整型数据整型数据v2.1.3.1 2.1.3.1 整型常量整型常量十进制整型常量:十进制整常数没有前缀。十进制整型常量:十进制整常数没有前缀。八进制整型常量:以数字八进制整型常量:以数字0 0作为前缀。所用数码为作为前缀。所用数码为0 07 7。八进制数通常是无符号数。八进制数通常是无符号数。例如:例如:012012
15、(十进制为(十进制为1010)、)、01030103(十进制为(十进制为6767)、)、01777770177777(十进制为(十进制为6553565535)十六进制整型常量:十六进制整型常量以十六进制整型常量:十六进制整型常量以0X0X或或0 x0 x为前为前缀。所用数码为缀。所用数码为0909,AFAF或或afaf。例如:例如:0X1B0X1B(十进制为(十进制为2727)、)、0XC20XC2(十进制为(十进制为194194)、)、0XFFFF0XFFFF(十进制为(十进制为6553565535)。)。182.1.3 2.1.3 整型数据整型数据v长整型数的表示:在基本整型数后加大写字母
16、长整型数的表示:在基本整型数后加大写字母“L”L”或小写字母或小写字母“l”l”来表示。来表示。例如:例如:72767L72767L(十进制为(十进制为7276772767)、)、0200000L0200000L(十进制(十进制为为6553665536)、)、0X21FFFL0X21FFFL(十进制为(十进制为139263139263)等。)等。长整型数占长整型数占4 4个字节(个字节(3232位)存储空间。位)存储空间。v整型常量的无符号数的后缀为整型常量的无符号数的后缀为“U”U”或或“u”u”。例如:例如:625u625u,0 x12Du0 x12Du,115Lu 115Lu 均为无符号
17、数。均为无符号数。v程序中是根据前缀来区分各种进制数的。整型常程序中是根据前缀来区分各种进制数的。整型常量后面加量后面加u u或或U U,则认为是,则认为是unsigned intunsigned int型,整型型,整型常量后面加常量后面加l l或或L L,则认为是,则认为是long intlong int型。型。192.1.3 2.1.3 整型数据整型数据v2.1.3.2 2.1.3.2 整型变量整型变量v整型变量用来存放整型常量。整型变量按其取值整型变量用来存放整型常量。整型变量按其取值范围可分为以下几类:范围可分为以下几类:基本型基本型类型说明符为类型说明符为intint,在内存中占,在
18、内存中占4 4个字节(个字节(TCTC编译系统为编译系统为2 2个字节),其取值为基本整常数。个字节),其取值为基本整常数。短整型短整型类型说明符为类型说明符为short intshort int或或shortshort。所占字节和取值范围。所占字节和取值范围均与基本型相同。均与基本型相同。长整型长整型类型说明符为类型说明符为long intlong int或或long long,在内存中占,在内存中占4 4个字节,个字节,其取值为长整型数。其取值为长整型数。202.1.3 2.1.3 整型数据整型数据v整型变量还可添加类型说明符整型变量还可添加类型说明符unsignedunsigned,表示
19、该,表示该变量是无符号型变量。无符号型与上述三种类型变量是无符号型变量。无符号型与上述三种类型匹配可构成:匹配可构成:无符号基本型无符号基本型 类型说明符为类型说明符为unsigned intunsigned int或或unsignedunsigned。无符号短整型无符号短整型 类型说明符为类型说明符为unsigned shortunsigned short无符号长整型无符号长整型 类型说明符为类型说明符为unsigned longunsigned long212.1.3 2.1.3 整型数据整型数据数的数的类类型型 数的范数的范围围 字节数字节数 int int-3276832767-327
20、6832767 4 4short int short int-3276832767-3276832767 2 2long int long int-2147483648-2147483648 2147483647 2147483647 4 4unsigned int unsigned int 065535 065535 4 4unsigned short unsigned short 065535 065535 2 2unsigned long unsigned long 04294967295 04294967295 4 4222.1.3 2.1.3 整型数据整型数据v【例例2-22-2】将
21、八进制数将八进制数01000100赋给变量赋给变量a a,十六进制数,十六进制数0 x1F0 x1F赋赋给变量给变量b b,十进制数,十进制数1010赋值给变量赋值给变量c c,然后计算,然后计算d=a+b+cd=a+b+c,最,最后以十进制和八进制形式显示后以十进制和八进制形式显示a,b,c,da,b,c,d的值。的值。#includevoidmain()inta=0100,b=0 x1F;intc=10,d;d=a+b+c;printf(a=%db=%dc=%dd=%d,a,b,c,d);printf(n);printf(a=%ob=%oc=%od=%o,a,b,c,d);232.1.3
22、2.1.3 整型数据整型数据v2.1.3.3 2.1.3.3 整型数据在内存中的存储方式整型数据在内存中的存储方式v一个数分为正数和负数,在计算机中为了表示数,一个数分为正数和负数,在计算机中为了表示数,可以采用多种方法,一般有原码、反码、补码这可以采用多种方法,一般有原码、反码、补码这三种表示形式。实际上,在计算机中,数值是用三种表示形式。实际上,在计算机中,数值是用补码表示的。补码表示的。原码:将最高位作为符号位(以原码:将最高位作为符号位(以0 0代表正,代表正,1 1代表负),代表负),其余各位代表数值本身的绝对值,即转换成相应的二进其余各位代表数值本身的绝对值,即转换成相应的二进制形
23、式,我们以短整型(制形式,我们以短整型(intint)来举例:)来举例:+7+7的原码:的原码:0000000000000111 0000000000000111 -7-7的原码:的原码:242.1.3 2.1.3 整型数据整型数据反码:一个数如果为正,则它的原码与反码表示方法反码:一个数如果为正,则它的原码与反码表示方法相同;一个数如果为负,则符号位为相同;一个数如果为负,则符号位为1 1,其余各位是对,其余各位是对原码取反。原码取反。+7+7的反码:的反码:00000000000001110000000000000111-7-7的反码:的反码:补码:在计算机中,数值是用补码表示的。一个数如
24、补码:在计算机中,数值是用补码表示的。一个数如果为正,则它的原码、反码、补码相同;一个数如果为果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为负,则符号位为1 1,其余各位是对原码取反,然后整个,其余各位是对原码取反,然后整个数加数加1 1。+7+7的补码:的补码:00000000 0000011100000000 00000111-7-7的补码:第一步,的补码:第一步,7 7的原码:的原码:00000000 0000011100000000 00000111第二步,按位取反:第二步,按位取反:11111111 1111100011111111 11111000第三步,整个数第三
25、步,整个数+1+1,得,得-7-7的补码:的补码:11111111 1111100111111111 11111001252.1.3 2.1.3 整型数据整型数据v已知一个负数的补码,将其转换为十进制数:步已知一个负数的补码,将其转换为十进制数:步骤如下:骤如下:(1 1)先将各位取反;)先将各位取反;(2 2)将其转换为十进制数;)将其转换为十进制数;(3 3)加上负号,再减去)加上负号,再减去1 1。例如:,最高位为例如:,最高位为1 1,是负数,先对各位取反得,是负数,先对各位取反得00000000000001010000000000000101,转换为十进制数得,转换为十进制数得5 5
26、,加上负号得,加上负号得-5 5,再减,再减1 1得得-6-6。v在计算机中,数值是采用补码表示的。这样做可在计算机中,数值是采用补码表示的。这样做可以把减法运算转换成加法运算,仍然能获得正确以把减法运算转换成加法运算,仍然能获得正确的结果。使得计算机的运算器具备加法器就可以的结果。使得计算机的运算器具备加法器就可以完成各种运算了,简化了计算机的硬件结构。完成各种运算了,简化了计算机的硬件结构。262.1.3 2.1.3 整型数据整型数据v计算机所能表达的数的范围叫做计算机所能表达的数的范围叫做“模模”。v模与某数的差,叫做某数的模与某数的差,叫做某数的“补数补数”。v如果丢弃超出模的进位的话
27、,数如果丢弃超出模的进位的话,数A A减数减数B B所得的差,所得的差,与数与数A A加数加数B B的补数所得的和是一致的。的补数所得的和是一致的。例如:以例如:以1010为模,为模,9-4=59-4=5。9+6=159+6=15,丢掉进位也是,丢掉进位也是5 5。如果计算机用一个字节表示数。模就是如果计算机用一个字节表示数。模就是1 00000000(256)107-3这个减法运算就可以变成这个减法运算就可以变成7+3的补码(的补码(253)的加法运算。)的加法运算。00000111(7的补码)的补码)+11111101(3的补码的补码253)1 00000100(丢掉进位为(丢掉进位为4)
28、272.1.4 2.1.4 实型数据实型数据v2.1.4.1 2.1.4.1 实型常量实型常量v实数有两种表示形式:小数形式和指数形式。实数有两种表示形式:小数形式和指数形式。小数形式小数形式由数码由数码0909和小数点组成。和小数点组成。指数形式指数形式指数形式也称科学计数法,由十进制小数加阶码标志指数形式也称科学计数法,由十进制小数加阶码标志“e”e”或或“E”E”以及阶码组成。指数表示的一般形式为:以及阶码组成。指数表示的一般形式为:a E na E n (a a为实数,为实数,n n为整数)表示为整数)表示a10a10n n。注意:注意:实型常数实型常数不分单、双精度,都按双精度不分单
29、、双精度,都按双精度doubledouble型型处理。处理。282.1.4 2.1.4 实型数据实型数据v2.1.4.2 2.1.4.2 实型变量实型变量v实型变量分为两类:单精度实型和双精度实型。实型变量分为两类:单精度实型和双精度实型。vfloatfloat为单精度说明符,为单精度说明符,doubledouble为双精度说明符。为双精度说明符。v单精度型占单精度型占4 4个字节(个字节(3232位)内存空间,其数值范位)内存空间,其数值范围为围为3.4E-383.4E-383.4E+383.4E+38,只能提供,只能提供7 7位有效数字。位有效数字。v双精度型占双精度型占8 8个字节(个字
30、节(6464位)内存空间,其数值范位)内存空间,其数值范围为围为1.7E-3081.7E-3081.7E+3081.7E+308,可提供,可提供1616位有效数字。位有效数字。292.1.4 2.1.4 实型数据实型数据#includevoidmain()floata;doubleb;a=1.0/3;b=1.0/3;printf(a=%.20fnb=%.20fn,a,b);【例例2-3】编写一个程序,用编写一个程序,用float和和double两种类型变量保两种类型变量保存存1/3的计算结果。的计算结果。302.1.5 2.1.5 字符型数据字符型数据v一个字符,占一个字符,占1 1个字节的存
31、储空间。个字节的存储空间。字节中存放字符的字节中存放字符的8 8位二进制的位二进制的ASCIIASCII码,总共码,总共256256种,种,对应对应0 0255255的整数。的整数。A=65a=97 =320=48常见字符常见字符常见字符常见字符的的的的ASCIIASCII码码码码312.1.5 2.1.5 字符型数据字符型数据v2.1.5.1 2.1.5.1 字符常量字符常量v字符类型常量或变量都占用字符类型常量或变量都占用1 1个字节。字符型变量个字节。字符型变量用于存放一个用于存放一个ASCIIASCII码。码。C C语言是把字符型的数据语言是把字符型的数据当成整型数处理的,因此,当成整
32、型数处理的,因此,对于整型数据的所有对于整型数据的所有处理均可用于字符型数据处理均可用于字符型数据。v在在C C语言中,字符型常量是由一对单引号引起来的语言中,字符型常量是由一对单引号引起来的单个字符构成。单个字符构成。例如:例如:AA,55,$等。等。aa的的ASCIIASCII码为:码为:0110 00010110 0001(十进制(十进制9797,十六进制,十六进制6161)322.1.5 2.1.5 字符型数据字符型数据v字符常量有以下特点:字符常量有以下特点:v字符常量只能用单引号括起来,不能用双引号字符常量只能用单引号括起来,不能用双引号或其它括号。或其它括号。v字符常量只能是单个
33、字符,不能是字符串。字符常量只能是单个字符,不能是字符串。v字符常量占用一个字节的存储单元,而实际在字符常量占用一个字节的存储单元,而实际在存储单元内存放的是该字符的存储单元内存放的是该字符的ASCIIASCII码值,即一个码值,即一个整型量。因此,整型量。因此,字符常量可以参加数值运算字符常量可以参加数值运算。332.1.5 2.1.5 字符型数据字符型数据#includevoidmain()charm=a;printf(%cn,m);【例例2-5】分析以下程序运行结果。分析以下程序运行结果。342.1.5 2.1.5 字符型数据字符型数据v转义字符是在一些字符前加上反斜杠转义字符是在一些字
34、符前加上反斜杠“”“”构成,用于表示构成,用于表示某些控制字符(如某些控制字符(如nn表示回车)或一些特殊字符(表示回车)或一些特殊字符(”表示表示双引号,还可以表示任意双引号,还可以表示任意ASCIIASCII字符(字符(bbbbbb、0 xhh0 xhh)。)。转义字符转义字符含义含义转义字符转义字符含义含义反斜线反斜线nn 换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头单引号单引号rr 回车,将当前位置移到本行开头回车,将当前位置移到本行开头”双引号双引号bb 退格,将当前位置移到前一列退格,将当前位置移到前一列aa响响 铃铃tt 水平跳格,跳到下一个水平跳格,跳到下一个T
35、abTab位置位置ff换换 页页bbbbbb 3 3位位8 8进制数代表的进制数代表的ASCIIASCII码字符码字符00空字符空字符xhhxhh 2 2位位1616进制数表示的进制数表示的ASCIIASCII码字符码字符352.1.5 2.1.5 字符型数据字符型数据#includevoidmain()printf(1t2t3t4n);#includevoidmain()printf(Yb=n);【例例2-6】输出输出1、2、3、4,要求以制表符,要求以制表符(tab)分隔分隔【例例2-7】转义字符的转义字符的使用使用362.1.5 2.1.5 字符型数据字符型数据#includevoidm
36、ain()printf(101x42Cn);printf(Hesaid:Thankyoun);printf(CProgramn);printf(TurboCn);【例例2-8】判断输判断输出结果出结果37v字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法 一个字符常量存放到一个字符变量中,即将该字一个字符常量存放到一个字符变量中,即将该字符的相应的符的相应的ASCIIASCII码放到存储单元中。因而字符码放到存储单元中。因而字符型数据和整型数据之间可以通用。型数据和整型数据之间可以通用。例如:例如:char c=A;char c=A;int y;int y;y=c+
37、32;y=c+32;字符型数据字符型数据382.1.5 2.1.5 字符型数据字符型数据v2.1.5.2 2.1.5.2 字符串字符串常量常量v字符串常量是由一对字符串常量是由一对双引号括起的字符序列双引号括起的字符序列。例如:例如:“ABC”“ABC”、“123”“123”、“a”“a”、“nt”“nt”、“nGood morning”“nGood morning”等都是合法的字符串常量。等都是合法的字符串常量。v字符串常量和字符常量是不同的量。它们之间主字符串常量和字符常量是不同的量。它们之间主要有以下区别:要有以下区别:字符常量由单引号括起来,字符串常量由双引号括起字符常量由单引号括起来
38、,字符串常量由双引号括起来。来。字符常量只能是单个字符,字符串常量则可以包含一字符常量只能是单个字符,字符串常量则可以包含一个或多个字符。个或多个字符。392.1.5 2.1.5 字符型数据字符型数据可以把一个字符常量赋予一个字符变量,但不能把一可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在语言中没有相应个字符串常量赋予一个字符变量。在语言中没有相应的字符串变量,但是可以用一个字符数组来存放一个字的字符串变量,但是可以用一个字符数组来存放一个字符串常量。这一内容将在数组一章详细介绍。符串常量。这一内容将在数组一章详细介绍。字符常量占一个字节的内存空间。字符串常量
39、占的内字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加存字节数等于字符串中字符数加1 1。增加的一个字节中用来存放增加的一个字节中用来存放字符串结束标志字符字符串结束标志字符“0”0”(ASCII(ASCII码为码为0000 0000)0000 0000)。v字符串字符串 C programC program在内存中的存储形式为:在内存中的存储形式为:C Cp pr ro og gr ra am m00402.1.5 2.1.5 字符型数据字符型数据v2.1.5.3 2.1.5.3 字符型变量字符型变量v同其他类型的变量一样,必须在使用前声明。字同其他类型的变量一样,
40、必须在使用前声明。字符型变量占一个字节,字符型变量的取值是字符符型变量占一个字节,字符型变量的取值是字符常量,即单个字符。类型说明符是常量,即单个字符。类型说明符是charchar。例如,。例如,声明两个字符型变量:声明两个字符型变量:char c1,c2;char c1,c2;v在声明时,也可以直接赋初值:在声明时,也可以直接赋初值:char c1=x,c2=y;char c1=x,c2=y;char c3=,c4=95;char c3=,c4=95;412.1.5 2.1.5 字符型数据字符型数据v字符字符x x的十进制的十进制ASCIIASCII码是码是120120,y y的十进制的十进
41、制ASCIIASCII码码是是121121。对字符变量。对字符变量c1,c2c1,c2赋予赋予xx和和yy值:值:c1=x,c2=y;c1=x,c2=y;实际上是在实际上是在c1,c2c1,c2两个单元内存放两个单元内存放120120和和121121的二进制代码:的二进制代码:c1c10 1 1 1 1 0 0 0 x0 1 1 1 1 0 0 0 xc2c20 1 1 1 1 0 0 1 y0 1 1 1 1 0 0 1 yv所以也可以把它们看成是整型量。所以也可以把它们看成是整型量。v语言允许对整型变量赋以字符值,也允许对字语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时
42、,允许把字符变量符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。按整型量输出,也允许把整型量按字符量输出。422.1.5 2.1.5 字符型数据字符型数据#includevoidmain()chartab;tab=t;printf(1%c2%c3%c4n,tab,tab,tab);【例例2-9】判断输判断输出结果出结果432.1.5 2.1.5 字符型数据字符型数据#includevoidmain()intsum=0;sum=sum+a;printf(“sum=%dn,sum);【例例2-10】判判断输出结果断输出结果442.1.5 2.1.5 字符型数据字
43、符型数据#includevoidmain()charc1=A;inty;y=c1+32;printf(c1:%c,%dn,c1,c1);printf(y:%c,%dn,y,y);【例例2-11】编写一程序,将字符编写一程序,将字符A赋给字符型变量赋给字符型变量c1,计,计算算y=c1+32,最后以字符和整数两种形式显示,最后以字符和整数两种形式显示c1和和y的值。的值。452.2 2.2 标准输入输出函数标准输入输出函数本节内容本节内容 2.2.2 格式输出函数格式输出函数printf 2.2.1 格式输入函数格式输入函数scanf462.2 2.2 标准输入输出函数标准输入输出函数C C语言
44、本身不提供输入输出语句语言本身不提供输入输出语句,输入和输出操作是输入和输出操作是由由C C函数库中的函数来实现函数库中的函数来实现例如例如:字符输入函数字符输入函数:getchar:getchar 字符输出函数字符输出函数:putchar:putchar格式输入函数格式输入函数:scanf :scanf 格式输出函数格式输出函数:printf:printf字符串输入函数字符串输入函数:gets :gets 字符串输出函数字符串输出函数:puts:puts472.2 2.2 标准输入输出函数标准输入输出函数v在使用系统库函数时在使用系统库函数时,要用预编译命令要用预编译命令“#include”
45、#include”将有关的将有关的“头文件头文件”包括到用户源包括到用户源文件中。文件中。v例如:在调用标准输入输出库函数时,文件开头例如:在调用标准输入输出库函数时,文件开头应该有:应该有:#include“stdio.h”#include“stdio.h”或:或:#include#include v用双引号表示先在当前程序所在的目录查找所包用双引号表示先在当前程序所在的目录查找所包含的文件,一般在要包含自己写的文件时使用。含的文件,一般在要包含自己写的文件时使用。用尖括号表示先在系统目录查找所包含的文件,用尖括号表示先在系统目录查找所包含的文件,一般在要包含系统头文件时使用。一般在要包含系
46、统头文件时使用。482.2.1 2.2.1 格式输入函数格式输入函数scanfscanfv此处所说的数据输入指的是程序从键盘上输入数此处所说的数据输入指的是程序从键盘上输入数据。据。v注意:注意:scanf()scanf()函数的声明包含在函数的声明包含在stdio.hstdio.h头文件头文件中。因此,要调用这个函数,必须在程序开始处中。因此,要调用这个函数,必须在程序开始处添加添加#include#include 预处理命令。预处理命令。492.2.1 2.2.1 格式输入函数格式输入函数scanfscanfv格式格式 int scanf(“int scanf(“格式化字符串格式化字符串”
47、,地址表地址表);v地址表:地址表是一系列要求输入数据的变量的地址表:地址表是一系列要求输入数据的变量的地址。对普通变量而言,变量地址就在变量前加地址。对普通变量而言,变量地址就在变量前加“&”符号(取变量地址运算符)。符号(取变量地址运算符)。例如:例如:int n;int n;变量变量n n的地址是的地址是&n&n。v格式化字符串:格式化字符串包括格式化字符串:格式化字符串包括空白字符空白字符、普普通字符通字符(非空白字符)和(非空白字符)和格式说明符格式说明符3 3部分。部分。vscanf()scanf()函数按从左到右的顺序扫描格式化字符串,函数按从左到右的顺序扫描格式化字符串,对其进
48、行处理。对其进行处理。502.2.1 2.2.1 格式输入函数格式输入函数scanfscanf空白字符包括空格、空白字符包括空格、“t”t”水平制表符和水平制表符和“n”n”回车回车换行符等。换行符等。空白符将被跳过空白符将被跳过。普通字符(非空白字符)包括除百分号普通字符(非空白字符)包括除百分号“%”%”以外的以外的所有所有ASCIIASCII字符。字符。普通字符必须原样输入普通字符必须原样输入。格式说明符用于规定所读入数据的类型,它是由百分格式说明符用于规定所读入数据的类型,它是由百分号加特定字符组成号加特定字符组成。v常用格式说明符及含义如下表:常用格式说明符及含义如下表:512.2.
49、1 2.2.1 格式输入函数格式输入函数scanfscanf格式说明符格式说明符格式字符的意义格式字符的意义%d%d输入有符号十进制整数输入有符号十进制整数%u%u输入无符号十进制整数输入无符号十进制整数%o%o输入八进制整数输入八进制整数%x%x输入十六进制整数输入十六进制整数%f%f输入实型数输入实型数(小数形式小数形式)%e%e输入实型数输入实型数(指数形式指数形式)%c%c输入单个字符输入单个字符%s%s输入字符串输入字符串 522.2.1 2.2.1 格式输入函数格式输入函数scanfscanfv格式说明符按从左到右的顺序与地址表中的各参格式说明符按从左到右的顺序与地址表中的各参数相
50、匹配,格式说明符的个数要与参数表中的参数相匹配,格式说明符的个数要与参数表中的参数个数相同。数个数相同。scanf(%d,%o,%x,&a,&b,&c);532.2.1 2.2.1 格式输入函数格式输入函数scanfscanf#includevoidmain()inta,b,c,sum;printf(Pleaseinputa,b,c:n);scanf(%d,%o,%x,&a,&b,&c);sum=a+b+c;printf(a=%db=%dc=%dsum=%d,a,b,c,sum);printf(n);【例例2-12】编写一程序,分别输入编写一程序,分别输入一个十进制、八进制、十六进制数,一个十