C程序设计第四版Chap3(新)-谭浩强_第1页
C程序设计第四版Chap3(新)-谭浩强_第2页
C程序设计第四版Chap3(新)-谭浩强_第3页
C程序设计第四版Chap3(新)-谭浩强_第4页
C程序设计第四版Chap3(新)-谭浩强_第5页
已阅读5页,还剩194页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3 3章章 数据类型、运算符、数据类型、运算符、表达式、顺序结构表达式、顺序结构第第3章章 数据类型、运算符、表达式、数据类型、运算符、表达式、顺序结构顺序结构3.1 一个简单程序的例子一个简单程序的例子3.2 数据类型数据类型3.3 标识符、常量与变量、宏定义标识符、常量与变量、宏定义3.4 整数类型整数类型3.5 浮点数类型浮点数类型3.6 字符类型字符类型3.7 变量定义及初始化变量定义及初始化3.8 各类数值型数据间的混合运算各类数值型数据间的混合运算第第3章章 数据类型、运算符、表达式、数据类型、运算符、表达式、顺序结构顺序结构3.9 算术运算符及其表达式算术运算符及其表达式3.

2、10 赋值运算符及其表达式赋值运算符及其表达式3.11 顺序运算符及其表达式顺序运算符及其表达式3.12 位运算符及其表达式位运算符及其表达式3.13 语句概述语句概述3.14 输入、输出输入、输出3.15 程序的错误类型程序的错误类型3.16 调试与测试调试与测试 第第3章章 数据类型、运算符、表达式、数据类型、运算符、表达式、顺序结构顺序结构3.1 一个简单程序的例子一个简单程序的例子3.2 数据类型数据类型3.3 标识符、常量与变量、宏定义标识符、常量与变量、宏定义3.4 整数类型整数类型3.5 浮点数类型浮点数类型3.6 字符类型字符类型3.7 变量定义及初始化变量定义及初始化3.8

3、各类数值型数据间的混合运算各类数值型数据间的混合运算一个一个简单程序的例子简单程序的例子华氏温度华氏温度 摄氏温度摄氏温度算法:算法: 1.1.输入一个华氏温度输入一个华氏温度f f 2.2.转换计算转换计算: : c - (f-32)c - (f-32)* * 5/9 5/9 3. 3.输出摄氏温度输出摄氏温度c c一个一个简单程序的例子简单程序的例子#include int main( ) double f, c; scanf(%lf,&f); c = (f-32)*5/9; printf(f=%f, c=%fn,f,c); return 0;输入转换计算输出程序运行时,输入的程序

4、运行时,输入的120放到变量放到变量f中中计算的结果计算的结果48.888889放到变量放到变量c中中第第3章章 数据类型、运算符、表达式、数据类型、运算符、表达式、顺序结构顺序结构3.1 一个简单程序的例子一个简单程序的例子3.2 数据类型数据类型3.3 标识符、常量与变量、宏定义标识符、常量与变量、宏定义3.4 整数类型整数类型3.5 浮点数类型浮点数类型3.6 字符类型字符类型3.7 变量定义及初始化变量定义及初始化3.8 各类数值型数据间的混合运算各类数值型数据间的混合运算数据类型数据类型 程序程序 = 数据数据 + 代码代码 所有数据都具有确定的数据类型所有数据都具有确定的数据类型

5、(data type) C 语言是静态类型语言语言是静态类型语言数据类型数据类型 数据数据 类型类型基本类型基本类型整数类型整数类型char char int int shortshortlonglongunsigned charunsigned charunsigned shortunsigned shortunsigned intunsigned intunsigned longunsigned longlong long long long 实数类型实数类型floatfloatdoubledoublelong double算术类型算术类型枚举类型枚举类型指针类型指针类型无值类型无值类型v

6、oidvoid构造类型构造类型数组类型数组类型结构类型结构类型联合类型联合类型数据类型数据类型数据类型决定:数据类型决定:存储空间的大小、数据值的表示范围存储空间的大小、数据值的表示范围允许的操作种类允许的操作种类 常量、变量、表达式、函数等都有确定常量、变量、表达式、函数等都有确定的数据类型。一旦确定,就不会改变。的数据类型。一旦确定,就不会改变。数据类型数据类型 数据存放在存储器中,存储器以字节为数据存放在存储器中,存储器以字节为最小存储单元,一个字节最小存储单元,一个字节( (bytebyte) )由由8 8个二个二进制位进制位( (bitbit) )组成。数据按其所需的存储组成。数据按

7、其所需的存储单元和组织形式不同,分成不同数据类单元和组织形式不同,分成不同数据类型。型。 二进制的知识二进制的知识第第3章章 数据类型、运算符、表达式、数据类型、运算符、表达式、顺序结构顺序结构3.1 一个简单程序的例子一个简单程序的例子3.2 数据类型数据类型3.3 标识符、常量与变量、宏定义标识符、常量与变量、宏定义3.4 整数类型整数类型3.5 浮点数类型浮点数类型3.6 字符类型字符类型3.7 变量定义及初始化变量定义及初始化3.8 各类数值型数据间的混合运算各类数值型数据间的混合运算标识符、常量与变量、宏标识符、常量与变量、宏C语言的字符集语言的字符集 a b c d e f g h

8、 I j k l m a b c d e f g h I j k l m n o p q r s t u v w x y z n o p q r s t u v w x y z A B C D E F G H I J K L M A B C D E F G H I J K L M N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 !” # % & # % & ( ) ( )* * + + ,- . / :- . / : ; ? _ | ; ? _

9、 | 共共9191个字符个字符 另外另外, ,字符串中还允许出现中文字符。字符串中还允许出现中文字符。标识符、常量与变量、宏标识符、常量与变量、宏标识符标识符 用来标识变量名、符号常量名、数组名、函数用来标识变量名、符号常量名、数组名、函数名、文件名等的字符序列称为名、文件名等的字符序列称为标识符标识符。 标识符由标识符由字母字母、数字数字和和下划线下划线组成,且由字母组成,且由字母和下划线开头。和下划线开头。 例如:例如:namename、s01s01、_total_total、_123_123等都是合法等都是合法的标识符,而的标识符,而12acd12acd、R.RebinR.Rebin、$

10、12.5$12.5等都是等都是不合法的。另外组成标识符的大写字母与小写不合法的。另外组成标识符的大写字母与小写字母是不同的。字母是不同的。 例如:例如:_ABC_ABC与与_abc_abc是两个不同的标识符。是两个不同的标识符。标识符、常量与变量、宏标识符、常量与变量、宏标识符命名标识符命名 命名要命名要“见名知意见名知意”,通过变量名就知道变量,通过变量名就知道变量的含义。这样可提高程序的可读性。通常应选的含义。这样可提高程序的可读性。通常应选择能表示数据含义的英文单词(或缩写)作变择能表示数据含义的英文单词(或缩写)作变量名。量名。 例如例如: name(姓名)、(姓名)、gender(性

11、别)、(性别)、 age (年龄)、(年龄)、salary(工资)。(工资)。标识符、常量与变量、宏标识符、常量与变量、宏 标识符分为两类:标识符分为两类: 1. 1. 用户自定义标识符用户自定义标识符 2. 2. 系统定义的标识符系统定义的标识符( (称为关键字或保留字称为关键字或保留字) ) 用户自定义标识符不能与关键字相同。用户自定义标识符不能与关键字相同。 标识符、常量与变量、宏标识符、常量与变量、宏 关键字关键字 C C语言定义了一些具有特定意义的单词作语言定义了一些具有特定意义的单词作关键字关键字( (又叫又叫保留字保留字) )。对于关键字,用户只能严格按。对于关键字,用户只能严格

12、按规定使用而不能作为它用。所有关键字都用小规定使用而不能作为它用。所有关键字都用小写,且必须严格按定义拼写。写,且必须严格按定义拼写。C C语言的关键字较语言的关键字较少,只有少,只有3030多个。多个。标识符、常量与变量、宏标识符、常量与变量、宏 关键字关键字(p378)(p378) auto break case char constcontinue default do double elseenum extern float for gotoif int long register return short signed sizeof static structswitch typed

13、ef union unsigned void volatile while 等等重要提示重要提示 使用标识符时,不要忘了大小写字使用标识符时,不要忘了大小写字母之间的区别!母之间的区别!#include int main() double celsius, fahr; scanf(%lf,&fahr); celsius = 5 * (fahr - 32) / 9; printf(fahr = %f, celsius = %fn, fahr, celsius); return 0;标识符、常量与变量、宏标识符、常量与变量、宏定义定义变量变量fahr和和celsius为为double型型输

14、入数据存放到变量输入数据存放到变量fahr计算计算celsius的值的值输出输出fahr和和celsius的的值值标识符、常量与变量、宏标识符、常量与变量、宏 程序程序=数据数据+代码代码 数据数据是计算机程序处理加工的对象。是计算机程序处理加工的对象。double celsius, fahr; fahr = 100.0;celsius = 5 * (fahr - 32) / 9; 在计算机高级语言中,数据有两种表现形式:在计算机高级语言中,数据有两种表现形式: 常量:在程序运行过程中,其值不能被改变。常量:在程序运行过程中,其值不能被改变。 例如,例如,100.0,5,32,9 变量:在程序

15、运行过程中,其值可以被改变。变量:在程序运行过程中,其值可以被改变。 如:如:double celsius,fahr; fahr=123.5;标识符、常量与变量、宏标识符、常量与变量、宏 变量:变量:变量代表一个命名的存储单元,具有存储数据的能变量代表一个命名的存储单元,具有存储数据的能力。力。 变量名变量名: 用标识符表示用标识符表示 变量值变量值: 是数值是数值,存储单元中的内容,在机器内部用二存储单元中的内容,在机器内部用二进制表示进制表示 存储单元:由变量的数据类型和在内存中的位置确定存储单元:由变量的数据类型和在内存中的位置确定 在程序运行过程中,变量的值是可以改变的。在程序运行过程

16、中,变量的值是可以改变的。 300变量值变量名存储单元weightweightint weight=300;标识符、常量与变量、宏标识符、常量与变量、宏 变量定义的一般形式:变量定义的一般形式: 数据类型名数据类型名 变量名列表;变量名列表; 例如:例如:int s; /定义整型变量定义整型变量float x; /定义单精度浮点型变量定义单精度浮点型变量double area, length; /定义双精度浮点型变量定义双精度浮点型变量 定义变量时要指定变量名和数据类型定义变量时要指定变量名和数据类型 用变量名代表内存中的一个存储单元用变量名代表内存中的一个存储单元 存储单元的大小存储单元的大

17、小(字节数字节数)由变量的数据类型决定由变量的数据类型决定标识符、常量与变量、宏标识符、常量与变量、宏 变量必须先变量必须先定义定义,后,后使用使用。#include int main( ) double celsius, fahr; scanf(%lf,&fahr); celsius = 5 * (fahr - 32) / 9; printf(fahr = %f, celsius = %fn, fahr, celsius); return 0; int price=10; 定义一个变量定义一个变量,变量名叫变量名叫price,类型是类型是 int,初始值是初始值是10。 这里的这里的

18、“=”是一个赋值运算符,表示将是一个赋值运算符,表示将“=”右边的右边的值赋给左边的变量。值赋给左边的变量。 在定义变量时,就对变量进行赋值,这时候的赋值又在定义变量时,就对变量进行赋值,这时候的赋值又叫做初始化。叫做初始化。 int price; price=10;标识符、常量与变量、宏标识符、常量与变量、宏 int a=10,b=20; a=b; /将变量将变量b的值赋给变量的值赋给变量a,a,b均为均为20 b=a; /将变量将变量a的值赋给变量的值赋给变量b,a,b均为均为10C语言中的变量代表存储数据的存储单元语言中的变量代表存储数据的存储单元标识符、常量与变量、宏标识符、常量与变量

19、、宏标识符、常量与变量、宏标识符、常量与变量、宏 数学中的变量代表未知数数学中的变量代表未知数 数学中:数学中:x = x+1 (错误的错误的) C语言中:语言中: int x=10; x = x+1; (将变量将变量x所代表的存储单元中的值读取所代表的存储单元中的值读取出来,增加出来,增加1,再存放到存储单元中。,再存放到存储单元中。)10 11x = x+1x x int i;int j;j=i+10;请问请问 j的值是多少?的值是多少?标识符、常量与变量、宏标识符、常量与变量、宏int i=0;int j;j=i+10;所有变量第一次出现在赋值运算符的右边之所有变量第一次出现在赋值运算符

20、的右边之前应该被赋值一次前应该被赋值一次.标识符、常量与变量、宏标识符、常量与变量、宏 常量:常量:指在程序运行过程中值不变的量 常数:常数:例如,例如,32,3.14,“ABCD”,A 在在C C语言中,不同类型的常量有不同的表示方法。语言中,不同类型的常量有不同的表示方法。 符号常量:符号常量:在程序中为了能明确表示常量的含义,提高程序的可阅读在程序中为了能明确表示常量的含义,提高程序的可阅读性,常用一个符号名称代表一个常量。性,常用一个符号名称代表一个常量。 #include #define PRICE 30 /注意该行末尾没有分号注意该行末尾没有分号 / #define是是预编译命令,

21、称为宏预编译命令,称为宏( (macromacro) )定义定义。作用是作用是符号替换符号替换。 int main( ) printf( “total=%d”,PRICE*10 ); return 0; 在对程序进行编译之前,系统会进行预处理,将所有在对程序进行编译之前,系统会进行预处理,将所有PRICE符号常量全部替换为符号常量全部替换为30。预编译后。预编译后程序变成:程序变成: int main( ) printf( “total=%d”,30*10 ); return 0; 标识符、常量与变量、宏标识符、常量与变量、宏#include int main( ) float l,s,r,v

22、; r =3.5; l=2.0* *r; s= *r*r; v=4.0/3* *r*r*r; printf(l=%10.4fn,l); printf(s=%10.4fn,s); printf(v=%10.4fn,v); return 0;#define PI 3.1415926 PI3.14159263.14159263.1415926注意事项注意事项: 符号常量一定要先定义再使用 符号常量的值是不能改变的 符号常量在程序中可以直接引用而不必作任何说明,因为编译程序能够根据常量的书写形式辨别其数据类型。PIPI标识符、常量与变量、宏标识符、常量与变量、宏 定义常量的另一种方法:定义常量的另一种

23、方法: const double pi=3. 1415926535; (C99标准标准!) #define PI 3.1415926 两种方法的区别:两种方法的区别: PI不分配存储单元,不分配存储单元,pi与变量一样分配存储单元,与变量一样分配存储单元,但但pi的值不允许修改。的值不允许修改。第第3章章 数据类型、运算符、表达式、数据类型、运算符、表达式、顺序结构顺序结构3.1 一个简单程序的例子一个简单程序的例子3.2 数据类型数据类型3.3 标识符、常量与变量、宏定义标识符、常量与变量、宏定义3.4 整数类型整数类型3.5 浮点数类型浮点数类型3.6 字符类型字符类型3.7 变量定义及初

24、始化变量定义及初始化3.8 各类数值型数据间的混合运算各类数值型数据间的混合运算整数类型整数类型整型常数的表示方法整型常数的表示方法有三种表示形式:有三种表示形式:(1 1)十进制:)十进制: 与数学中十进制写法相同与数学中十进制写法相同 如如 6 6、-31-31、101 101 等都是合法的。等都是合法的。(2 2)八进制:)八进制: 用用0 0开始的由开始的由0707构成的数构成的数 如如 07770777、012 012 等都是合法的。等都是合法的。(3 3)十六进制:用)十六进制:用0 x0 x或或0X0X开始的由开始的由 0,1,2,0,1,2,9,a,9,a,f (,f (或或

25、大写大写) )构成的数构成的数 如如 0 x1230 x123、0 xffFF 0 xffFF 等都是合法等都是合法 的整型常量。的整型常量。整数类型整数类型整型常数的表示方法整型常数的表示方法 还有一种被称为长整型常数的整型常数,其表还有一种被称为长整型常数的整型常数,其表示形式是在整型常数的三种表示形式后加上字示形式是在整型常数的三种表示形式后加上字母母l l或或L L。此外,还有。此外,还有LL,LULL,LU等多种形式。等多种形式。 如:如: 6l6l或或6L 012l6L 012l或或012L 012L 0 x12l 0 x12l或或0 x12L 012LU0 x12L 012LU或

26、或0 x12ul0 x12ul 123LL 0157LLU 123LL 0157LLU等。等。整数类型整数类型整型数据在内存中的存放方式整型数据在内存中的存放方式 数据在内存中是以二进制补码数据在内存中是以二进制补码(complement)形形式表示的。式表示的。 例如例如(32位机器位机器): int i; i=10; int j;j=-100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 j 符号位1 1 1 1 1 1 1 1 0 1 1 0

27、1 1 1 1 符号位整数类型整数类型原码:符号位原码:符号位+绝对值转换后的二进制绝对值转换后的二进制反码:符号位反码:符号位+绝对值转换后的二进制每位的反绝对值转换后的二进制每位的反补码:符号位补码:符号位+(反码(反码+1)一般带符号的整数采用补码表示方法。一般带符号的整数采用补码表示方法。整数类型整数类型 类 型 含 义 占存储空间 数 值 的 范 围 char 字符1个字节 -128127-128127int 整型4个字节-21474836482147483647-21474836482147483647long 长整型4个字节-21474836482147483647-214748

28、36482147483647 仅以仅以32位编译器为例!位编译器为例!long long 长长整型长长整型8个字节个字节-263263-1short 短整型短整型2个字节个字节-3276832767unsigned的范围?的范围?二进制转换辅助工具 http:/ 这由编译系统自己决定。这由编译系统自己决定。C标标准只规定了准只规定了long 类型的表示范围不小于类型的表示范围不小于int,但,但也允许它们表示范围相同。也允许它们表示范围相同。short类型的表示范类型的表示范围不大于围不大于int型。型。u在不同编译器中,数据类型所占的字节数可能在不同编译器中,数据类型所占的字节数可能是不同的

29、。如是不同的。如:GCC:GCC中中intint类型是类型是4 4个字节个字节, , 而早而早期的期的TCTC中的中的intint是是2 2个字节。个字节。usizeof(sizeof(类型名)或类型名)或 sizeof(sizeof(表达式表达式) ) 返回该类型在使用编译器中的所占字节数返回该类型在使用编译器中的所占字节数如如:GCC:GCC中中sizeof(int)sizeof(int)是是 4 4,TCTC中中sizeof(int)sizeof(int)是是 2 2整数类型整数类型 如果所表示的数据都为正数,则可以将变量定义如果所表示的数据都为正数,则可以将变量定义“无符号无符号”整型

30、:整型: 无符号基本整型无符号基本整型 unsigned int 无符号短整型无符号短整型 unsigned short int 无符号长整型无符号长整型 unsigned long int 无符号双长整型无符号双长整型 unsigned long long int 无符号整型数据存储单元的最高位不表示符号位无符号整型数据存储单元的最高位不表示符号位 有符号基本整型有符号基本整型 signed int 有符号短整型有符号短整型 signed short int 有符号长整型有符号长整型 signed long int 有符号双长整型有符号双长整型 signed long long int 有符

31、号整型数据存储单元的最高位代表符号位(有符号整型数据存储单元的最高位代表符号位(0为正,为正,1为负)为负) short int a=32767,b=-1; unsigned short int u=65535; 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1a0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1b1 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 1 1ua=32767;b=-1;u=65535;在32位机中,变量a、b、u的实际存储整数类型整数类型整型变量的定义和使用整型变量的

32、定义和使用 例例: #include int main() int a,b,c,d; /变量的定义变量的定义 a=12;b=-24; /变量的赋值变量的赋值 c=a+b; d=a-b; printf(a+b=%d,a-b=%dn,c,d); return 0; 运行结果为运行结果为: a+b=-12,a-b=36变量在使用之前必须先定义!a整数类型整数类型整型变量的溢出整型变量的溢出(overflow)(overflow) 一个一个intint型的变量最大允许值为型的变量最大允许值为INT_MAX(INT_MAX(定义在定义在limits.hlimits.h中中) ),最小为,最小为INT_M

33、ININT_MIN,如果超出范围,如果超出范围就会出现所谓溢出的运行时错误(就会出现所谓溢出的运行时错误(run-time run-time errorerror)。)。 如在一个如在一个3232位系统中,一个位系统中,一个intint类型的数据最类型的数据最大值为大值为21474836472147483647,如果再加上,如果再加上1 1,就会溢出,就会溢出, , 值变为值变为-2147483648-2147483648。整数类型整数类型整型变量的溢出整型变量的溢出 例:例: #include int main() int a,b; a=2147483647; b=a+1; printf(“

34、a=%d,b=%dn”,a,b); return 0; 3232位系统中的运行结果为位系统中的运行结果为: : a=a=21474836472147483647,b=-,b=-2147483642147483648 8整数类型整数类型整型变量的溢出整型变量的溢出 上上例:例: 如在如在3232位系统中位系统中 a: 7f ff ff ffa: 7f ff ff ff b: 80 00 00 00 b: 80 00 00 002147483647-2147483648运行时,系统不会给出溢出提示!运行时,系统不会给出溢出提示!防止溢出的发生是程序员的责任!防止溢出的发生是程序员的责任!重要提示重

35、要提示 编程时必须保证所有整型变量在任编程时必须保证所有整型变量在任何时候都没有超出数据类型的取值何时候都没有超出数据类型的取值范围!范围!第第3章章 数据类型、运算符、表达式、数据类型、运算符、表达式、顺序结构顺序结构3.1 一个简单程序的例子一个简单程序的例子3.2 数据类型数据类型3.3 标识符、常量与变量、宏定义标识符、常量与变量、宏定义3.4 整数类型整数类型3.5 浮点数类型浮点数类型3.6 字符类型字符类型3.7 变量定义及初始化变量定义及初始化3.8 各类数值型数据间的混合运算各类数值型数据间的混合运算浮点型类型浮点型类型 浮点型常数浮点型常数,有两种表示形式:,有两种表示形式

36、: (1)十进制小数形式)十进制小数形式 例如:例如:0.618、108.02、-1.414、 108.0、0.0等,这与等,这与数学中表示实数的方法相同;数学中表示实数的方法相同; (2)指数形式)指数形式例如:例如:108E2(或(或108e2)表示实数)表示实数108102 ; -16.578E5(-16.578e5)表示实数)表示实数-16.5781050.1234E-6 ,表示实数,表示实数0.123410-6浮点型类型浮点型类型 浮点型浮点型 单精度单精度( float型型 ) 双精度双精度( double型型 ) 长双精度长双精度( long double型型 ) 例如:定义浮点

37、型变量例如:定义浮点型变量 float f1,f2; double d1,d2; long double ld;浮点型类型浮点型类型 类 型 占存储空间 有效数位数 数 值 范 围 float4个字节6 7-3.4-3.41010-38-38 3.4 3.410103838 double8个字节15 16-1.7-1.71010-308-308 1.7 1.71010308308 long double16个字节18 19-1.2-1.21010-4932-4932 1.2 1.2101049324932 仅以某种机器为例!仅以某种机器为例!long double一般不支持!一般不支持!浮点型

38、类型浮点型类型 float和和double在计算机的存储单元中是以指数形在计算机的存储单元中是以指数形式存放的,即,把一个浮点数用符号位、指数和式存放的,即,把一个浮点数用符号位、指数和尾数来表示。指数部分和尾数部分各占多少位在尾数来表示。指数部分和尾数部分各占多少位在C标准中并无具体规定,由编译系统自己决定。标准中并无具体规定,由编译系统自己决定。符号位符号位指数指数尾数尾数长度长度float1(bit)8(bit)23(bit)32(bit)double1(bit)11(bit)52(bit)64(bit)浮点型类型浮点型类型浮点型数据在内存中的浮点型数据在内存中的存放方式存放方式 一个浮

39、点一个浮点floatfloat型数据一般在内存中占型数据一般在内存中占4 4个字节。与整个字节。与整型数据的存储方式不同,浮点型数据是按照指数形式型数据的存储方式不同,浮点型数据是按照指数形式存储的。分成尾数和指数两部分。存储的。分成尾数和指数两部分。 x127+c符号符号 0/1尾数部分尾数部分 M=1.x指数指数2c IEEE 754 float表示表示 M 2C : M称为尾数,称为尾数,C称为阶码称为阶码 M和和C均采用二进制表示。均采用二进制表示。 float 共共32位,在内存的存放形式:位,在内存的存放形式: 最高位:符号位,最高位:符号位, 指数(指数(8位):位):127+C

40、 尾数(尾数(23位):位):M除去最左边的除去最左边的1后的部分后的部分例例: 12.5 = (1100.1)2 = (1.1001)2 * 23 表示为表示为: 01000001 01001000 00000000 00000000浮点型类型浮点型类型 例例: -0.25 = -(0.01)2 = -(1.0)2 * 2-2 表示为表示为: 10111110 10000000 00000000 00000000 浮点型类型浮点型类型 IEEE 754 double表示表示 M 2C :M称为尾数,称为尾数,C称为阶码称为阶码 ,M和和C均采用二进均采用二进制表示。制表示。 double 共

41、共64位,在内存的存放形式:位,在内存的存放形式: 最高位:符号位最高位:符号位 指数(指数(11位):位):1023+C 尾数(尾数(52位):位):M除去最左边的除去最左边的1后的部分后的部分浮点型类型浮点型类型浮点型类型浮点型类型 例:例:double型浮点数型浮点数38414.4的内存存储形式:的内存存储形式: 1、把整数部和小数部分开处理、把整数部和小数部分开处理:(1)整数)整数部分的部分的十六进制十六进制表示表示:960E(1001011000001110)。(2)小数的处理)小数的处理: 0.4=0.01100110011001100110 38414.4的二进制表示:的二进制

42、表示: 1001011000001110.0110011001100110011001100110011001100110. 2、以指数形式表示:四舍五入取、以指数形式表示:四舍五入取53位位 1.0010110000011100110011001100110011001100110011001101*215 (小数点前面小数点前面只有一位,并且必只有一位,并且必为为1,该该1为隐藏值为隐藏值,在内存是不存储的在内存是不存储的) 3、尾数为小数点后的、尾数为小数点后的52位,指数为位,指数为15,将指数用二进制,将指数用二进制 表示。表示。 指数占指数占11位,将指数先位,将指数先加上加上10

43、23再转化为二进制表示。再转化为二进制表示。 15+1023=1038,其二进制表示为:其二进制表示为:100 00001110 4、符号位为、符号位为0(正数),将三部分(正数),将三部分合在一起(尾数最高位的合在一起(尾数最高位的1不要):不要):01000000 11100010 11000001 11001100 11001100 11001100 11001100 11001101按字节倒序存储的十六进制数就是:按字节倒序存储的十六进制数就是: CD CC CC CC CC C1 E2 40 一个基本类型数据的几个字节的在内存中存放次序,一个基本类型数据的几个字节的在内存中存放次序,

44、不同不同CPU可能不同。可能不同。如:如:Intel CPU:称为:称为 little_endian(小端格式)(小端格式)浮点型类型浮点型类型 地址编号地址编号0 x40000000CD0 x40000001CC0 x40000002CC0 x40000003CC0 x40000004CC0 x40000005C10 x40000006E20 x4000000740低地址中存放的是数据的低字节;高地址存放的是数据的高字节。浮点型类型浮点型类型浮点型数据的表示误差浮点型数据的表示误差 由于浮点型变量存放在有限的几个字节的存储由于浮点型变量存放在有限的几个字节的存储单元中,所以能提供的有效数字总

45、是有限的,单元中,所以能提供的有效数字总是有限的,因此有效位以外的数字将被舍去,由此会产生因此有效位以外的数字将被舍去,由此会产生误差。误差。 即:即:浮点数的表示是不精确的浮点数的表示是不精确的! !浮点型类型浮点型类型浮点型数据的误差浮点型数据的误差例例: :#include int main() double a; a=0.1; printf(a = %.17fn,a); return 0; GCC GCC运行结果为运行结果为: : a = 0.10000000000000001 a = 0.10000000000000001 由于一个由于一个doubledouble变量只能保证变量只能

46、保证1616位有效数字,所以后面位有效数字,所以后面的数字是无意义的。的数字是无意义的。 类似的还有:类似的还有:1.0/31.0/3* *3 3 结果并不一定等于结果并不一定等于1 1。浮点型类型浮点型类型浮点型数据的误差浮点型数据的误差 例例: : #include int main() double a,b; b = 2.0e20 + 1.0; a = b - 2.0e20; printf(%f n, a); return 0; GCC GCC运行结果为运行结果为: : 0.000000 浮点型常量的类型浮点型常量的类型 浮点型常量的类型为浮点型常量的类型为double,而不是,而不是f

47、loat。 例如:例如: float a=3.14159; 在编译时,系统给变量在编译时,系统给变量a分配分配4个字节,但对于浮点个字节,但对于浮点型常量型常量3.14159则按照则按照double型(型(8个字节)处理,系个字节)处理,系统会发出警告统会发出警告“warning:truncation from const double to float”,提醒用户这种转换可能会损失精,提醒用户这种转换可能会损失精度。度。浮点型类型浮点型类型 float f; f=2.45678*4523.65; 系统将系统将2.45678和和4523.65按按double数据存储和运算,数据存储和运算,得到

48、一个得到一个double的乘积,然后取前的乘积,然后取前7位赋值给位赋值给float变变量量 f,这样做的目的是为了保证计算结果更精确。但,这样做的目的是为了保证计算结果更精确。但是运算速度降低了。可以在是运算速度降低了。可以在浮点型常量的后面加上浮点型常量的后面加上字符字符f或或F(如如2.45678f、4523.65F),此时编译系统会,此时编译系统会按按float处理它们。处理它们。浮点型类型浮点型类型浮点型类型浮点型类型 浮点型变量的溢出浮点型变量的溢出(overflow)(overflow)和下和下溢溢(underflow(underflow) ) 一个一个doubledouble型

49、的变量最大绝对值为型的变量最大绝对值为DBL_MAX(DBL_MAX(定义在定义在float.hfloat.h中中) )(如:(如:1.7976931348623157e+308),最小),最小绝对值为绝对值为DBL_MINDBL_MIN(如:(如:2.2250738585072014e-308),),如果超出范围就会出现上溢或下溢的错误情况。如果超出范围就会出现上溢或下溢的错误情况。浮点型类型浮点型类型 上溢上溢 double toobig = DBL_MAX * 100.0; printf(%en, toobig); 32 32位系统中的运行结果可能为位系统中的运行结果可能为: : 1.#

50、INF00e+000 浮点型类型浮点型类型 下溢下溢( (过于接近于过于接近于0)0) double toosmall = DBL_MIN / 1E30; printf(%en, toosmall); 32 32位系统中的运行结果可能为位系统中的运行结果可能为: : 0.000000e+000第第3章章 数据类型、运算符、表达式、数据类型、运算符、表达式、顺序结构顺序结构3.1 一个简单程序的例子一个简单程序的例子3.2 数据类型数据类型3.3 标识符、常量与变量、宏定义标识符、常量与变量、宏定义3.4 整数类型整数类型3.5 浮点数类型浮点数类型3.6 字符类型字符类型3.7 变量定义及初始

51、化变量定义及初始化3.8 各类数值型数据间的混合运算各类数值型数据间的混合运算字符类型字符类型 字符常数字符常数 普通字符:普通字符:用用单引号单引号括起的一个字符,如括起的一个字符,如a、?、B、5和和*等都是合法的字符常量。等都是合法的字符常量。 a和和A是不同的字符常量。是不同的字符常量。字符型数据存储在内存中占一个字节,字符型数据存储在内存中占一个字节,是以其代码(是以其代码(ASCII码码)存储的。存储的。字符常量 存储形式 十进制表示A01 000 00165a01 100 00197?00 111 11163500 11010153 附录附录B,给出给出了常用字符了常用字符与其对

52、应的与其对应的ASCII码。码。字符类型字符类型 ASCII - American Standard Code for Information Interchange。 ASCII字符集的大小为字符集的大小为7位,位,MSB为为0。 ASCII字符集包含可打印字符和非打印字符(控字符集包含可打印字符和非打印字符(控制字符)两类。制字符)两类。 转义字符:转义字符:在在ASCII码表中有一些非打印的控制字符码表中有一些非打印的控制字符,例如例如回车、响铃、退格回车、响铃、退格等。为了能够表示它们,等。为了能够表示它们,C语言采用在语言采用在反斜杠反斜杠()字符后加其他字符字符后加其他字符的方法来

53、解决。这称为的方法来解决。这称为转义序转义序列字符列字符。 转义字符中转义字符中反斜杠反斜杠()后面的字符在编译时需要特殊处后面的字符在编译时需要特殊处理,不能当作普通字符对待。理,不能当作普通字符对待。 例如,例如,n是在第一个字符是在第一个字符反斜杠(反斜杠()后紧跟一个字后紧跟一个字符符n,它表示一个换行字符。,它表示一个换行字符。 n代表一个字符(换行符)代表一个字符(换行符),其,其ASCII为为10。字符类型字符类型字符类型字符类型转义序列转义序列 含含 义义ASCII码码 n n 回车换行,将光标移至下一行首回车换行,将光标移至下一行首10r r 回车,将光标移至本行开头位置回车

54、,将光标移至本行开头位置 13b b 退格,将光标左移一格退格,将光标左移一格 8t t 水平制表,光标移至本行下一水平制表,光标移至本行下一tabtab位置位置 9v v 垂直制表符垂直制表符 11f f 换页,将光标移至下一页开头位置换页,将光标移至下一页开头位置 12aa响铃响铃70 0 空字符,其符号常量名为空字符,其符号常量名为NULL NULL 0 单引号字符单引号字符 39 ”双引号字符双引号字符34反斜杠字符反斜杠字符92ooo ooo 1 1到到3 3位八进制数所代表的字符位八进制数所代表的字符 xhh xhh 1 1到到2 2位十六进制数所代表的字符位十六进制数所代表的字符

55、 字符类型字符类型字符变量字符变量 字符变量用于存放字符,在内存中占字符变量用于存放字符,在内存中占1 1字节。字节。 字符变量的定义形式如下:字符变量的定义形式如下: char c1char c1,c2c2; 可以把字符常量赋值给字符变量,例如:可以把字符常量赋值给字符变量,例如: c1=c1=a a;c2=c2=b b;字符类型字符类型字符型变量数据在内存中的存放方式字符型变量数据在内存中的存放方式 将一个字符常量存放到一个字符变量中,其实将一个字符常量存放到一个字符变量中,其实是存放了该字符的是存放了该字符的ASCIIASCII码码( (也称字符的内码也称字符的内码) )。 例如:例如:

56、 char c1char c1,c2c2;c1=c1=a a; c2=; c2=b b; c1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0c2 字符类型字符类型#include int main() char c1,c2; c1=97; c2=98; /向字符变量赋整数值向字符变量赋整数值 /* c1=a; c2=b; */ printf(“%c,%cn”,c1,c2); /以字符形式输出以字符形式输出 printf(“%d,%dn”,c1,c2); /以十进制整数形式输出以十进制整数形式输出 return 0; 运行的结果是:运行的结果是: a,b 97,98字符类型字符

57、类型 一个字符变量中的值,是被当成整数值使用,一个字符变量中的值,是被当成整数值使用,还是当成字符使用,完全看程序员的意愿。还是当成字符使用,完全看程序员的意愿。0 1 1 0 0 0 0 1c1a%c%d97字符类型字符类型 例例:大小写字母的转换大小写字母的转换 #include int main() char c1,c2; c1=a;c2=b; c1=c1-32; c2=c2-32; printf(%c,%cn,c1,c2); return 0; 运行的结果是:运行的结果是: A,B注意:在ASCII表(P377)中大写字母排在小写字母的前面,且两者间隔有6个其他字母。从ASCII码表可

58、以看到每个小写字母比它相应的大写字母的ASCII码值大32。字符常量和变量可以看成是一个8位的整型数据。 所以:c1=a+2;则c1中的值99(即c字符)。字符类型字符类型 字符字符1和整数和整数1是不同的概念是不同的概念: 字符字符1只是代表一个形状为只是代表一个形状为1的符号,的符号,在内存中以在内存中以ASCII码码(49)二进制二进制形式存储,占形式存储,占1个字节个字节 整数整数1是以整数存储方式是以整数存储方式(二进制补码方式二进制补码方式)存存储的,储的,以以short int型存放则型存放则占占2个个字节字节0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0

59、 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 1字符类型字符类型 字符串常数字符串常数 用双引号括起来的一个或多个字符序列,如用双引号括起来的一个或多个字符序列,如How How are youare you 、 a a 、 chinachina、 、 汉字等都是等都是合法的字符串常数。合法的字符串常数。 每个字符串常数都用一个每个字符串常数都用一个0 0(00或或NULLNULL) )作为结作为结束符,所以每个字符串长度为其字符个数加束符,所以每个字符串长度为其字符个数加1 1。 如如a a的长度为的长度为2 2个字节个字节

60、; ;而而How are youHow are you的长度的长度为为1212个字节;个字节;汉字的长度为的长度为5 5个字节。个字节。字符类型字符类型 字符串常数字符串常数 How are youHow are you 在内存中的存放形式:在内存中的存放形式:0 1 0 0 1 0 0 00 1 1 0 1 1 1 10 0 1 0 0 0 0 00 1 1 1 0 1 1 10 1 1 0 0 0 0 10 1 1 1 0 0 1 00 0 1 0 0 0 0 00 1 1 0 0 1 0 10 1 1 1 1 0 0 10 1 1 0 1 1 1 10 0 0 0 0 0 0 00 1 1 1 0 1 0 10uHow a

温馨提示

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

最新文档

评论

0/150

提交评论