1、第第2 2章章 基本数据类型基本数据类型lC C语言的数据类型:语言的数据类型:整型、浮点型、字符型、整型、浮点型、字符型、枚举类型、数组类型、结构体类型、共用体类枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。型、指针类型和空类型。l整数的表示:有整数的表示:有十十进制、进制、八八进制、进制、十六十六进制三进制三种形式。一般占用种形式。一般占用2个字节,长整型占用个字节,长整型占用4个个字节。字节。附注:附注:如第一位为如第一位为0 0,第二位为数字的整数是八进制数,第二位为数字的整数是八进制数形式,如前两位为形式,如前两位为0 x0 x的整数是十六进制数形式,其余整的整数是十
2、六进制数形式,其余整数是十进制数形式数是十进制数形式2 2字节整数存储范围:字节整数存储范围:-2-215152 21515-1(-1(即即-32768-3276832767)32767)。如超过此范围,要在整数后面加上字母如超过此范围,要在整数后面加上字母L(L(大小写均可大小写均可),则该数为长整型,范围可达:则该数为长整型,范围可达:-2-231312 23131-1-1lC C语言的数据类型:语言的数据类型:整型、浮点型、字符型、枚举类型、数组类型、结构整型、浮点型、字符型、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。体类型、共用体类型、指针类型和空类型。l整数的表示
3、有整数的表示:有十十进制、进制、八八进制、进制、十六十六进制三种形式。一般占用进制三种形式。一般占用2个字节,个字节,长整型占用长整型占用4个字节。个字节。附注:附注:如第一位为如第一位为0 0,第二位为数字的整数是八进制数形式,如前两位为,第二位为数字的整数是八进制数形式,如前两位为0 x0 x的的整数是十六进制数形式,其余整数是十进制数形式整数是十六进制数形式,其余整数是十进制数形式2 2字节整数存储范围:字节整数存储范围:-2-215152 21515-1(-1(即即-32768-3276832767)32767)。如超过此范围,要在整数后面加上字母如超过此范围,要在整数后面加上字母L
4、L(大小写均可大小写均可),则该数为长整型,范围,则该数为长整型,范围可达:可达:-2-231312 23131-1-1l浮点小数的表示:浮点小数的表示:有十进制小数和指数两种表有十进制小数和指数两种表示形式。示形式。1.451.45、-34.5-34.5;2.78E122.78E12、1.34e-41.34e-4附注:字母附注:字母E大小写均可,阶码即指数部分必须是整数。大小写均可,阶码即指数部分必须是整数。l单个字符的表示:由单引号括起来的一个字符单个字符的表示:由单引号括起来的一个字符或一个转义字符。在内存中存储的是其对应的或一个转义字符。在内存中存储的是其对应的ASCIIASCII码
5、占用一个字节。码,占用一个字节。l字符串的表示:由双引号括起来的字符序列。在字符串的表示:由双引号括起来的字符序列。在内存中占用的字节数是字符序列占用字节数内存中占用的字节数是字符序列占用字节数+1+1。附注:附注:字符串存储按照从左到右的顺序依次存储在一字符串存储按照从左到右的顺序依次存储在一段连续的空间中,每个字符占一个字节段连续的空间中,每个字符占一个字节(汉字占用汉字占用2 2个字个字节节),),系统将在字符串最后补上一个转义字符系统将在字符串最后补上一个转义字符0作为作为字符串结束标志。字符串结束标志。C C语言没有专门的字符串变量,字符串放在字符数组中语言没有专门的字符串变量,字
6、符串放在字符数组中l浮点小数的表示:浮点小数的表示:有十进制小数和指数两种表示形式。有十进制小数和指数两种表示形式。1.451.45、-34.5-34.5;2.78E122.78E12、1.34e-41.34e-4附注:字母附注:字母E大小写均可,阶码即指数部分必须是整数。大小写均可,阶码即指数部分必须是整数。l单个字符的表示:由单引号括起来的一个字符单个字符的表示:由单引号括起来的一个字符或一个转义字符。在内存中存储的是其对应的或一个转义字符。在内存中存储的是其对应的ASCIIASCII码,占用一个字节。码,占用一个字节。l字符串的表示:由双引号括起来的字符序列。在内存中占用的字节数是字符字
7、符串的表示:由双引号括起来的字符序列。在内存中占用的字节数是字符序列占用字节数序列占用字节数+1+1。附注:附注:字符串存储按照从左到右的顺序依次存储在一段连续的空间中,每个字符串存储按照从左到右的顺序依次存储在一段连续的空间中,每个字符占一个字节字符占一个字节(汉字占用汉字占用2 2个字节个字节),),系统将在字符串最后补上一个转义字符系统将在字符串最后补上一个转义字符0作为字符串结束标志。作为字符串结束标志。C C语言没有专门的字符串变量,字符串放在字符数组中。语言没有专门的字符串变量,字符串放在字符数组中。l整数在计算机中的表示整数在计算机中的表示 分为带符号数和不带符号数两类。对于带符
8、号分为带符号数和不带符号数两类。对于带符号整数,存储在计算机中的形式是该数的补码。整数,存储在计算机中的形式是该数的补码。附注:附注:原码:最高位为符号位(正数为原码:最高位为符号位(正数为0 0,负数为,负数为1 1),),其余位表示数值。其余位表示数值。反码:正数的反码同原码,负数的反码除符号位反码:正数的反码同原码,负数的反码除符号位外取反(即外取反(即0 0变变1 1,1 1变变0 0)。)。补码:正数的补码同原码,负数的补码等于反码补码:正数的补码同原码,负数的补码等于反码加加1 1(即原码除符号位外取反加(即原码除符号位外取反加1 1)。)。l整数在计算机中的表示整数在计算机中的表
9、示 分为带符号数和不带符号数两类。对于带符号整数,存储在计算机中的形式分为带符号数和不带符号数两类。对于带符号整数,存储在计算机中的形式是该数的补码。是该数的补码。附注:原码:最高位为符号位(正数为附注:原码:最高位为符号位(正数为0 0,负数为,负数为1 1),其余位表示数值。),其余位表示数值。反码:正数的反码同原码,负数的反码除符号位外取反(即反码:正数的反码同原码,负数的反码除符号位外取反(即0 0变变1 1,1 1变变0 0)。)。补码:正数的补码同原码,负数的补码等于反码加补码:正数的补码同原码,负数的补码等于反码加1 1(即原码除符号位外取反(即原码除符号位外取反加加1 1)。)
10、lC C语言类型修饰符语言类型修饰符 longlong、shortshort、signedsigned和和 unsignedunsignedl基本数据类型变量的存储空间和取值范围:基本数据类型变量的存储空间和取值范围:见教材见教材P36。l标识符的命名规则标识符的命名规则 由英文字母、数字和下划线组成,首字母由英文字母、数字和下划线组成,首字母只能是英文字母和下划线。只能是英文字母和下划线。附注:附注:标识符中,大、小写英文字母含义不同。标识符中,大、小写英文字母含义不同。C C语言定义的语言定义的3232个关键字不能作为用户标识符使用。个关键字不能作为用户标识符使用。附注:无符号整型常量加
11、字母附注:无符号整型常量加字母u u或或U UlC C语言类型修饰符语言类型修饰符 longlong、shortshort、signedsigned和和 unsignedunsignedl基本数据类型变量的存储空间和取值范围:基本数据类型变量的存储空间和取值范围:见教材见教材P36。l标识符的命名规则标识符的命名规则 由英文字母、数字和下划线组成,首字母只能是英文字母和下划线。由英文字母、数字和下划线组成,首字母只能是英文字母和下划线。附注:附注:标识符中,大、小写英文字母含义不同。标识符中,大、小写英文字母含义不同。C C语言定义的语言定义的3232个关键字不能作为用户标识符使用。个关键字不
12、能作为用户标识符使用。附注:无符号整型常量加字母附注:无符号整型常量加字母u u或或U Ul变量的赋值:变量的赋值:变量名变量名=表达式;表达式;附注:附注:如果表达式的值超过变量可以存储的数据范围,如果表达式的值超过变量可以存储的数据范围,将导致意外的结果。将导致意外的结果。将实数赋给整型变量时,系统自动舍弃小数部分将实数赋给整型变量时,系统自动舍弃小数部分(注注意:不能四舍五入意:不能四舍五入)。字符型数据赋给整型变量时,当字符字符型数据赋给整型变量时,当字符ASCII码值小于码值小于127时,其值一般等于字符数据时,其值一般等于字符数据ASCII码值,当字符码值,当字符ASCII码值大于
13、码值大于127时,不同的系统处理方式不同时,不同的系统处理方式不同 。字符型数据、转义字符和整数都可以赋给字符变量。字符型数据、转义字符和整数都可以赋给字符变量。当整数超过字符变量存储范围时,只将整数二进制当整数超过字符变量存储范围时,只将整数二进制形式的低形式的低8位存放到字符型变量中。位存放到字符型变量中。数学中的数学中的“=”符号不同于符号不同于C C语言中的赋值符号语言中的赋值符号“=”。在在C C语言中判断两个数是否相等时使用符号语言中判断两个数是否相等时使用符号“=”。l变量的赋值:变量的赋值:变量名变量名=表达式;表达式;附注:附注:如果表达式的值超过变量可以存储的数据范围,将导
14、致意外的结果。如果表达式的值超过变量可以存储的数据范围,将导致意外的结果。将实数赋给整型变量时,系统自动舍弃小数部分将实数赋给整型变量时,系统自动舍弃小数部分(注意:不能四舍五入注意:不能四舍五入)。字符型数据赋给整型变量时,当字符字符型数据赋给整型变量时,当字符ASCII码值小于码值小于127时,其值一般等于字符时,其值一般等于字符数据数据ASCII码值,当字符码值,当字符ASCII码值大于码值大于127时,不同的系统处理方式不同时,不同的系统处理方式不同 。字符型数据、转义字符和整数都可以赋给字符变量。当整数超过字符变量存字符型数据、转义字符和整数都可以赋给字符变量。当整数超过字符变量存储
15、范围时,只将整数二进制形式的低储范围时,只将整数二进制形式的低8位存放到字符型变量中。位存放到字符型变量中。数学中的数学中的“=”符号不同于符号不同于C C语言中的赋值符号语言中的赋值符号“=”。在。在C C语言中判断两个数语言中判断两个数是否相等时使用符号是否相等时使用符号“=”。l数据类型的自动转换规则:数据类型的自动转换规则:如果运算的数据有如果运算的数据有floatfloat型或型或doubledouble型,自动转型,自动转换为换为doubledouble型。如果没有型。如果没有floatfloat和和doubledouble型,但型,但是有是有longlong型型,则自动转换为则自
16、动转换为longlong型。其余情况自型。其余情况自动转换为动转换为intint型。型。附注:附注:数据运算的最终结果类型只有数据运算的最终结果类型只有intint、longlong和和 doubledouble三种情况。三种情况。当计算结果超过该数据类型范围当计算结果超过该数据类型范围(例如:例如:intint型数据型数据超过超过-32768-3276832767)32767)时,会出现意外的结果。时,会出现意外的结果。l数据的强制类型转换形式:数据的强制类型转换形式:(类型类型)表达式表达式附注:强制类型转换只是强制得到需要类型的临时数附注:强制类型转换只是强制得到需要类型的临时数 据,并
17、不改变表达式中变量的类型。据,并不改变表达式中变量的类型。l数据类型的自动转换规则:数据类型的自动转换规则:如果运算的数据有如果运算的数据有floatfloat型或型或doubledouble型,自动转换为型,自动转换为doubledouble型。如果没有型。如果没有floatfloat和和doubledouble型,但是有型,但是有longlong型型,则自动转换为则自动转换为longlong型。其余情况自动转换型。其余情况自动转换为为intint型。型。附注:附注:数据运算的最终结果类型只有数据运算的最终结果类型只有intint、longlong和和 doubledouble三种情况。三种
18、情况。当计算结果超过该数据类型范围当计算结果超过该数据类型范围(例如:例如:intint型数据超过型数据超过-32768-3276832767)32767)时,时,会出现意外的结果。会出现意外的结果。l数据的强制类型转换形式:数据的强制类型转换形式:(类型类型)表达式表达式附注:强制类型转换只是强制得到需要类型的临时数据,并不改变表达式中附注:强制类型转换只是强制得到需要类型的临时数据,并不改变表达式中变量的类型。变量的类型。l算术运算符和算术表达式算术运算符和算术表达式 +(+(加法加法)、-(-(减法或负值减法或负值)、*(乘法乘法)、/(/(除法除法)、%(%(模或取余模或取余)附注:附
19、注:算术运算符的结合性是从左往右。算术运算符的结合性是从左往右。算术运算符的优先级:算术运算符的优先级:P246。模运算符要求运算符两侧必须为整型数据。模运算符要求运算符两侧必须为整型数据。计算时要特别注意数据类型,特别是除法运算计算时要特别注意数据类型,特别是除法运算l(复合复合)赋值运算符和赋值运算符和(复合复合)赋值表达式赋值表达式 简单赋值运算符简单赋值运算符 =复合赋值运算符复合赋值运算符 +=(+=(加赋值加赋值)、-=(-=(减赋值减赋值)、*=(=(乘赋值乘赋值)、/=(/=(除赋值除赋值)、%=(%=(取余赋值取余赋值)附注:附注:(复合复合)赋值运算符的结合性是从右往左赋值
20、运算符的结合性是从右往左(复合复合)赋值运算符的优先级相同。赋值运算符的优先级相同。(复合复合)赋值运算符左边必须是变量,作用是先赋值运算符左边必须是变量,作用是先将复合运算符右边表达式的结果与左边的变量将复合运算符右边表达式的结果与左边的变量进行算术运算,再将结果赋于左边的变量。进行算术运算,再将结果赋于左边的变量。复合赋值运算符右边的表达式计算完成后才参复合赋值运算符右边的表达式计算完成后才参与复合赋值运算。与复合赋值运算。l(复合复合)赋值运算符和赋值运算符和(复合复合)赋值表达式赋值表达式 简单赋值运算符简单赋值运算符 =复合赋值运算符复合赋值运算符 +=(+=(加赋值加赋值)、-=(
21、减赋值减赋值)、*=(=(乘赋值乘赋值)、/=(/=(除赋值除赋值)、%=(%=(取余赋值取余赋值)附注:附注:(复合复合)赋值运算符的结合性是从右往左。赋值运算符的结合性是从右往左。(复合复合)赋值运算符的优先级相同。赋值运算符的优先级相同。(复合复合)赋值运算符左边必须是变量,作用是先将复合运算符右边表达式的结赋值运算符左边必须是变量,作用是先将复合运算符右边表达式的结果与左边的变量进行算术运算,再将结果赋于左边的变量。果与左边的变量进行算术运算,再将结果赋于左边的变量。复合赋值运算符右边的表达式计算完成后才参与复合赋值运算。复合赋值运算符右边的表达式计算完成后才参与复合赋值运算。l
22、单个字符输入单个字符输入 方法一:格式输入函数方法一:格式输入函数scanfscanf()(),使用单个字符的格式,使用单个字符的格式符符%c%c,例如:,例如:char c;char c;scanf(scanf(“%c%c”,&c,&c););方法二:字符输入函数方法二:字符输入函数getchargetchar()(),其执行结果是从输,其执行结果是从输入设备得到一个字符。例如:入设备得到一个字符。例如:char c;c=char c;c=getchargetchar();();附注:附注:getchargetchar()()函数同带格式符函数同带格式符%c%c 的的scanfscanf()
23、)函函数数都可以接收一个字符,此字符可以是回车等特殊都可以接收一个字符,此字符可以是回车等特殊字符,并可将得到的字符赋给一个字符型变量或者字符,并可将得到的字符赋给一个字符型变量或者整型变量。整型变量。getchargetchar()()一次只接收一个字符,一次只接收一个字符,scanfscanf函数可通函数可通过多个过多个%c%c接收多个字符。注意:单个字符输入时,接收多个字符。注意:单个字符输入时,无分隔符,紧接着上次读取的内容后连续读取。无分隔符,紧接着上次读取的内容后连续读取。getchargetchar()()接收的字符可以不赋给任何变量。接收的字符可以不赋给任何变量。l单个字符输
24、入单个字符输入 方法一:格式输入函数方法一:格式输入函数scanfscanf()(),使用单个字符的格式符,使用单个字符的格式符%c%c,例如:例如:char c;char c;scanf(scanf(“%c%c”,&c,&c););方法二:字符输入函数方法二:字符输入函数getchargetchar()(),其执行结果是从输入设备得到一个字符。,其执行结果是从输入设备得到一个字符。例如:例如:char c;c=char c;c=getchargetchar();();附注:附注:getchargetchar()()函数同带格式符函数同带格式符%c%c 的的scanfscanf()()函数函数
25、都可以接收一个字符,都可以接收一个字符,此字符可以是回车等特殊字符,并可将得到的字符赋给一个字符型变量或此字符可以是回车等特殊字符,并可将得到的字符赋给一个字符型变量或者整型变量。者整型变量。getchargetchar()()一次只接收一个字符,一次只接收一个字符,scanfscanf函数可通过多个函数可通过多个%c%c接收多个字符。接收多个字符。注意:单个字符输入时,无分隔符,紧接着上次读取的内容后连续读取。注意:单个字符输入时,无分隔符,紧接着上次读取的内容后连续读取。getchargetchar()()接收的字符可以不赋给任何变量。接收的字符可以不赋给任何变量。l单个字符输出单个字符输
26、出 方法一:格式输出函数方法一:格式输出函数printfprintf()(),使用单个字符的格式符,使用单个字符的格式符%c%c,例如:例如:char c=char c=A A;printf(printf(“%c%c”,c,c););方法二:字符输出函数方法二:字符输出函数putcharputchar(字符型或整型数据字符型或整型数据),其作用是将一个字,其作用是将一个字符型或整型数据对应的符型或整型数据对应的ASCIIASCII码字符输出到输出设备(如显示器)。码字符输出到输出设备(如显示器)。例如:例如:char c=char c=A A;putchar(cputchar(c););附注:附注:函数函数putcharputchar()()可以输出字符型变量、整型变量、字符型常量以及可以输出字符型变量、整型变量、字符型常量以及控制字符和转义字符。控制字符和转义字符。getchargetchar()()函数函数一次只能输出一个字符,一次只能输出一个字符,printfprintf()()函数可以同时输出函数可以同时输出多多个字符。个字符。






