第三章1基本数据类型zd_第1页
第三章1基本数据类型zd_第2页
第三章1基本数据类型zd_第3页
第三章1基本数据类型zd_第4页
第三章1基本数据类型zd_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、学习如何用学习如何用C C语言实现解语言实现解数学应用题!数学应用题!程序执行过程硬盘程序内存代码操作系统heapstackData segcode1、装入内存2、找main3、运行期内存管理计算机内存内存: (Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据(计算机中所有程序的运行都是在内存中进行的),以及与硬盘等外部存储器交换的数据随机存储器(Random Access Memory,RAM):既可以从中读取数据,也可以写入数据。其中的信息是易失的,必要时可以擦除;当机器电源关闭时,其中的数据就会丢失。1MB=1024KB,1KB=1024Byte,1Byte=8Bi

2、t只读存储器(ROM)地 址计算机中的RAM是依次逐字节排列的,每个字节的内存都有一个唯一的地址,用于标识该字节,该地址可用于将该字节同内存中的其他直接区分开来。内存的地址是依次指定的,最小值为0,最大值取决于内存的容量。当编写C程序时,地址是由编译器指定的,我们无需关心。第三章(1) 基本数据类型-信息存储本节主要任务本节主要任务(3.13.7): 1、了解C语言丰富的数据类型;常量、变量的概念。 2、掌握变量和符号常量定义方法。 3、掌握常用基本数据类型(整型、实型、字符型)数据的常量表示、机内存储、变量分类以及掌握正确选择数据类型。 4、了解数值型数据混合运算及类型转换规律。主要内容3.

3、1 数据类型3.2 常量和变量3.3 计算机中数据的存储3.4 整型数据3.5 浮点型数据3.6 字符型数据3.7 变量赋初值3.8 不同类型数据间的转换引言引言C C信息存储方式信息存储方式常量和变量是C语言中存储数据/信息的两种方式,每一种又有多种不同的数据类型。1 数据类型总表数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作3.1 C3.1 C的数据类型的数据类型C数据类型基本类型构造类型指针类型空类型 void定义类型 typedef字符类型 char枚举类型 enum整 型实型单精度型 float双精度型 double数组结构体 struct共用体 uni

4、on短整型 short长整型 long整型 int数据类型是指数据在内存的表现形式(代码、存储、运算)数据类型是指数据在内存的表现形式(代码、存储、运算); ;程序中所有用到的数据都需要指定其数据类型。程序中所有用到的数据都需要指定其数据类型。3.2 变量变量变量是计算机内存中一个被命名的数据存储位置程序运行期间其值可以改变的量在程序中使用变量名时,实际上引用的是存储在这里的数据 定义、初始化、存储例: int a,b,c; float data;决定分配字节数决定分配字节数和数的表示范围和数的表示范围合法标识符合法标识符变量定义的一般格式:数据类型数据类型 变量名变量名=值值,变量名变量名=

5、值值 ;例: int a=2,b,c=4;int a=2,b,c=4; float data=3.67; float data=3.67; char ch=A; char ch=A; int x=1,y=1,z=1; int x=1,y=1,z=1; int x=y=z=1;int x=y=z=1;3.2.1 变量声明变量声明标识符u标识符是变量、函数等在程序中的唯一名字。标识符是变量、函数等在程序中的唯一名字。u凡是自己可以起名字的地方都叫标识符,都遵守标识符规则凡是自己可以起名字的地方都叫标识符,都遵守标识符规则u构造出一个标识符的名字,需要按照一定的规则取名。在构造出一个标识符的名字,需

6、要按照一定的规则取名。在C C语言中,语言中,标识符取名的规则是:标识符取名的规则是:v必须由字母、下划线或美元符开头;必须由字母、下划线或美元符开头;v并由字母、并由字母、0909的数字、下划线或美元符组成的;的数字、下划线或美元符组成的;v不能与关键字名同名。不能与关键字名同名。v大小写敏感大小写敏感v约定俗成:约定俗成:JavaJava标识符选取注意标识符选取注意“见名知意见名知意”且不能与且不能与C C语言的关键语言的关键字重名字重名例子合法标识符 add zeng name _2010(不推荐) 非法标识符 int 4year name#y变量的使用:先定义,后使用例1 int st

7、udent; stadent=19; /Undefined symbol stadent in function main 变量定义位置:一般放在函数开头main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);变量定义可执行语句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);3.2.2 变量初始化变量初始化声明变量时,便指示了计算机为变量留出存储空间。然而,存储在该空间的值-变量的值-没有指定,它可能

8、为0,也可能为一个随机的“垃圾”值。因此,在使用变量之前,一定将其初始化为一个确定的值。声明时初始化int i=0;先声明,后初始化int i;i=0;3.2.3 变量的存储变量的存储声明变量过程中的秘密:内存例子:int a;a = 10;内存名字(地址):a存储单元变量值1010 变量的声明,实际上就是分配一块内变量的声明,实际上就是分配一块内存,用于存储数据。存,用于存储数据。 反过来,我们如果在操作中需要数据反过来,我们如果在操作中需要数据的话,首先应该为其分配一块内存来存储的话,首先应该为其分配一块内存来存储它,这就是变量的声明或定义。它,这就是变量的声明或定义。问题:问题:1 1、

9、分配在什么地方?、分配在什么地方?2 2、分配多少内存?、分配多少内存?3 3、值如何表示?、值如何表示?分配在Stack空间,具体位置由编译器决定由操作系统决定类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned longunsigned short16065535有char8-128127无unsigned char80255说明:数据类型所

10、占字节数随机器硬件不同而不同,上表以IBM PC机为例:有double64-1.7e3081.7e308有float32-3.4e383.4e38内存分配计算机中数据的表示数据在内存中是以二进制形式存放的常用十进制书写,也可用八进制、十六进制书写10637)(例21011)(例8136)(例1621)(例AF计算机中数据的表示数码、基与权数码:表示数的符号基:数码的个数权:每一位所具有的值计算机中数据的表示二进制数码:0、1基:2权:十进制数码:0、19基:10权:八进制数码:0、18基:8权:十六进制数码:0、19、A、B、C、D、E、F基:16权:100123452592121202121

11、21111011)()(例10012894868381136)()(例1001231679781610162161516121)()(例AF各种进制之间的转换1)二进制、八进制、十六进制转换成十进制方法:按权相加按权相加例 把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161 C B 余11余12余 12) 十进制转换成二进制、八进制、十六进制方法:连续除以基,从低到高记录余数,直至商为连续除以基,从低到高记录余数,直至商为0例 (1101001)2=(001,101,001)2=(151)8例 (246)8=(010,100,110)2=(1010011

12、0)2000 0001 1010 2011 3100 4101 5110 6111 73)二进制与八进制之间的转换 二进制转换成八进制: 从右向左,每从右向左,每3位一组位一组(不足(不足3位左补位左补0),转换成八进制),转换成八进制 八进制转换成二进制:用用3位二进制数代替位二进制数代替每一位八进制数每一位八进制数例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000 00001 10010 20011 30100 40101 50

13、110 60111 71000 81001 91010 A1011 B1100 C1101 D1110 E1111 F4)二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每从右向左,每4位一位一组(不足组(不足4位左补位左补0),转换成十六进制),转换成十六进制十六进制转换成二进制:用用4位二进制数代位二进制数代替每一位十六进制数替每一位十六进制数内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或101234567字节和位0123456789.11111000数据在内存中是以二进制形式存放的,数数据在内存中是以二进制形式存放的,数值是以值是以补码

14、补码表示的。表示的。数值的表示方法数值的表示方法原码、反码和补码原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值原码:最高位为符号位,其余各位为数值本身的绝对值 反码:正数反码与原码相同反码:正数反码与原码相同 负数符号位为负数符号位为1 1,其余位为对原码取反,其余位为对原码取反补码:正数原码、反码、补码相补码:正数原码、反码、补码相同同 负数最高位为负数最高位为1,其余位为原码取反,再加,其余位为原码取反,再加1 (特别注意,如果特别注意,如果+1+1之后有进位之后有进位 的,要一直往前进位,包括符号位!的,要一直往前进位,包括符号位!)例例-11-11的补码的补码数在计算

15、机中是以二进制形式表示的。数分为有符号数和无数在计算机中是以二进制形式表示的。数分为有符号数和无符号数。原码、反码、补码都是有符号定点数的表示方法。符号数。原码、反码、补码都是有符号定点数的表示方法。 一个有符号定点数的一个有符号定点数的最高位为符号位,最高位为符号位,0 0是正,是正,1 1是负是负。为什么设立补码?为什么设立补码? 1 1、是为了能让计算机执行减法。、是为了能让计算机执行减法。计算机中实际上计算机中实际上只有加法,减法运算转换成加法运算进行,乘法只有加法,减法运算转换成加法运算进行,乘法运算转换成加法运算进行,除法运算转换成减法运算转换成加法运算进行,除法运算转换成减法运算

16、进行。用补码可以很方便的进行这种运算。运算进行。用补码可以很方便的进行这种运算。2 2、是为了统一正、是为了统一正0 0和负和负0 0。正零:正零:00000000 00000000 负零:负零:10000000 10000000 这两个数其实都是这两个数其实都是0 0,但他们的原码却有不同的表示。,但他们的原码却有不同的表示。 但是他们的补码是一样的,都是但是他们的补码是一样的,都是00000000 00000000 已知已知XX补补=11100110=11100110,求,求X X原原。对于机器数为正数,则对于机器数为正数,则X X原原= =X X补补对于机器数为负数,则有对于机器数为负数

17、,则有X X原原= =X X补补补补现给定的为负数,故有:现给定的为负数,故有: X X补补=11100110=11100110 X X补补反反=10011001=10011001 十)十) 1 1 X X补补补补=10011010=10011010=X X原原小结小结1、变量声明、变量声明标识符标识符2、变量初始化、变量初始化3、变量存储、变量存储补码补码/ /* *变量声明语句变量声明语句, ,告诉编译器分告诉编译器分配配4 4字节的名为字节的名为a a的内存的内存* */ /int a;int a;/ /* *赋值语句赋值语句,a a内存的值存入内存的值存入-3,-3,补码补码11111

18、111 11111111 11111111 11111111 11111111 1111110111111111 11111101* */ /a = -3;a = -3;Intel CPUIntel CPU的架构是的架构是Little EndianLittle Endian( (小字节顺序小字节顺序) )定义:程序运行时其值不能改变的量(即常数)定义:程序运行时其值不能改变的量(即常数) 分类分类: : 1) 1)直接常量直接常量( (存于代码段存于代码段):): 整型常量整型常量 如:如: 1212 实型常量实型常量 4.6 4.6 字符常量字符常量 aa 字符串常量字符串常量 “abcda

19、bcd”常量常量3.3 3.3 常量常量2)2)符号常量符号常量: :用标识符代表常量用标识符代表常量定义格式:定义格式: #define#define 符号常量名符号常量名 常量值常量值 const const 类型类型 标识符标识符= =值;值;如如 #define PRICE 30 const float PI = 3.1415926;1 1、 #define#define是预处理指令,在编译预处理时进行是预处理指令,在编译预处理时进行简单的简单的替换替换。是一个。是一个Compile-TimeCompile-Time概念。编译器在概念。编译器在处理代码之前会将处理代码之前会将PRICE

20、PRICE替换为替换为3030。 #define#define常量常量存在于程序的代码段。存在于程序的代码段。2 2、 constconst的常量是一个的常量是一个Run-TimeRun-Time的概念,他在程的概念,他在程序中确确实实的存在可以被调用、传递。序中确确实实的存在可以被调用、传递。 constconst常常量存在于程序的数据段量存在于程序的数据段(Data Segment)(Data Segment)。注意:一般用大写字母是宏定义预处理命令,不是C语句例 符号常量举例(3.1)const double PI=3.14;#define PRICE 30void main() int

21、 num,total; num=10; total=num*PRICE; printf(total=%d,total);heapstackData segcode3.14PInumtotal1、分配PI(先执行main函数外的语句,再执行main函数体)2、分配num,total3、赋值num104、赋值total300编译时变量常量30Intel CPU的架构是Little Endian301 1 整型常量(整常数)整型常量(整常数)3.4 3.4 整型数据整型数据 intint三种形式:三种形式:十进制整数:由数字十进制整数:由数字0909和正负号表示和正负号表示. .如如 123,-45

22、6,0123,-456,0八进制整数:由数字八进制整数:由数字0 0开头开头, ,后跟数字后跟数字0707表示表示. .如如0123,0110123,011十六进制整数:由十六进制整数:由0 x0 x开头开头, ,后跟后跟09,af,AF09,af,AF表示表示. .如如0 x123,0Xff0 x123,0Xff2 2 整型变量整型变量1)1)分类分类: :据数值范围:基本整型据数值范围:基本整型intint,短整型,短整型shortshort,长整型,长整型longlong据符号:有符号型据符号:有符号型signedsigned 无符号型无符号型unsignedunsigned (P43P

23、43表表3 31 1 ) 2)2)整型变量的定义整型变量的定义 int aint a,b b; unsigned int cunsigned int c;long elong e;2)2)溢出溢出: : (例3.3)3)3)注意注意u u、U U、l l、L: 12345u 4322LL: 12345u 4322L1)1)存放形式存放形式 (图(图3 33 3)3 3 注意问题注意问题1 1 浮点型常量(实数或浮点数)浮点型常量(实数或浮点数)3.5 3.5 浮点型(实型)数据浮点型(实型)数据表示形式:表示形式:十进制数形式:(必须有小数点)十进制数形式:(必须有小数点) 如如0.123,

24、.123, 123.0, 0.0, 123.0.123, .123, 123.0, 0.0, 123.指数形式指数形式( (科学计数法科学计数法a.b * 10n ) ): (e e或或E E之前必须有数字;指数必须为整数)之前必须有数字;指数必须为整数)如如12.3e3 ,123E2, 1.23e4 , (12.3e3 ,123E2, 1.23e4 , (e-5,1.2E-e-5,1.2E-3.5 3.5 非法非法) )。规范化的指数形式。规范化的指数形式 2 2 浮点型变量浮点型变量floatfloat:占:占4 4字节,提供字节,提供7 7位有效数字位有效数字doubledouble:占

25、:占8 8字节,提供字节,提供15161516位有效数字位有效数字long doublelong double:占:占1616字节,提供字节,提供18191819位有效数字位有效数字1 1)分类:单精度)分类:单精度floatfloat,双精度,双精度doubledouble和长双和长双精度精度long doublelong double(P46 P46 表表3 32 2)2 2)定义:)定义:float xfloat x,y y;double zdouble z; 2 2 注意问题注意问题1 1)存放形式:规范化指数形式)存放形式:规范化指数形式 (P45P45图图3 37 7)符号+小数部

26、分+指数二进制的科学计数法为 1.x *10N, 整数部分恒为1, 所以只要存贮X与N就可以.一般都是用一个位存贮符号, 再用几个二进制位存贮X, 另几个二进制位存贮N.IEEE(国际电子电器工程师协会)float 共计32位,折合4字节 由最高到最低位分别是第31、30、29、0位 31位是符号位,1表示该数为负,0反之。 30-23位,一共8位是指数位。 22-0位,一共23位是尾数位。 每8位分为一组,分成4组,分别是A组、B组、C组、D组。 每一组是一个字节,在内存中逆序存储,即:DCBA 例:例:13.5f13.5f2. 2. 二进制:整数部分二进制:整数部分1313,二进制为,二进

27、制为1101; 1101; 小数部小数部分分0.5, 0.5, 二进制是二进制是.1.1,先把他们连起来:,先把他们连起来:1101.1 1101.1 3. 3. 写成指数形式:写成指数形式:1.10111.1011(103)(103)4. 4. 指数位存储:指数位存储:127+3=130=127+3=130=(1000001010000010)2 25. 5. 尾数:尾数:10110000000000000000000(10110000000000000000000(补补1919个个0)0)1. 1. 符号位:符号位:0 0(正)(正)6. 6. 连写:连写: 0 10000010 1011

28、0000000000000000000 0 10000010 1011000000000000000000001000001 01011000 00000000 0000000001000001 01011000 00000000 00000000 41 58 00 00 41 58 00 000 x000058410 x00005841存储1.24f:0 x52 B8 9E 3F 2 2)舍入误差:舍入误差: (P47P47例例 3.43.4)1)定义:用单引号单引号括起来的单个普通字符普通字符或转义转义 字符字符. 字符常量的值:该字符的ASCII码值如 A65, a97, 048 , n

29、10如 a A ? n 1011 1 字符常量字符常量3.6 3.6 字符型数据字符型数据(char)(char)转义字符及其含义:转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如 101 -A 012 -n 376 - x61 -a 60 -0 483 -()2) 2) 转义字符转义字符:反斜线后面跟一个字符或一个代码 值表示P48 例子3.5 #include void main() printf( ab ct derftgn); printf(htibbj kn);3 3)转义字符举

30、例 2 2 字符变量字符变量例 a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */ 字符变量用来存放字符常量,存的是字符ASCII码 一个字节存放一个字符,一个字符变量占一个字节 字符型数据和整形数据之间可以通用字符常量与字符串常量不同字符常量与字符串常量不同定义:用双引号定义:用双引号(“”)(“”)括起来的字符序列,可以是括起来的字符序列,可以是任意字符,包括中文。任意字符,包括中文。存储:每个字符串尾存储:每个字符串尾自动自动加一个加一个 0 0 作为字符作为字符串结束标志串结束标志h e l l o 0例例 字符串字符串

31、“hellohello”在内存中在内存中a a 0例例 a“a”例例空串空串“”“”0例例: char ch; ch=“A”; 例例: char ch; ch=A; 3 3 字符串常量字符串常量没有没有字符串变量字符串变量,用字符数组存放,用字符数组存放3.7 3.7 不同类型数据间的转换不同类型数据间的转换1 1 显式转换显式转换2 2 隐式转换隐式转换例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3较高类型向较低类型转换时可能发生精度损失问题1 1 显式转换(强制转换显式转换(强制转换p60p60)一般形式:一般形式:(类型名类型名)(表达式)表达式) 例例: (int)(x+y): (int)(x+y) (

温馨提示

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

评论

0/150

提交评论