C语言程序设计:第2章 数据的表示与存储_第1页
C语言程序设计:第2章 数据的表示与存储_第2页
C语言程序设计:第2章 数据的表示与存储_第3页
C语言程序设计:第2章 数据的表示与存储_第4页
C语言程序设计:第2章 数据的表示与存储_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

1、1第2章 数据的表示与存储2主要内容2.1 C语言的数据类型2.2 整型数据2.3 浮点型数据2.4 字符型数据2.5 字符串数据2.6 指针型数据2.7 枚举型数据2.8 符号常量与const限定2.9 使用typedef命名数据类型2.1 C语言的数据类型程序设计语言中与数据表示相关的三个基本问题2022/7/25姓名性别身高职业职称擅长的技术姓名性别体力速度耐力技术对现实世界的抽象类型与变量人类在计算机中的表示410101111011101101100101000000001100011111000100152.1 C语言的数据类型数据类型是程序设计语言中描述数据结构的机制刻画了数据符号

2、所能具有的一组值在这组值上定义的相关操作/运算为数据分配多少存储空间(多少个二进位)如何存储可表示值的范围数据类型的概念62.1 C语言的数据类型程序设计语言提供数据类型的方式提供一些预定义的基本数据类型允许程序设计者使用预定义的数据类型构造(派生)出新的类型为已有数据类型起一个新的名字程序设计语言中的数据类型72.1 C语言的数据类型7C语言中的数据类型82.2 整型数据2.2.1 整型常量2.2.2 整型变量92.2 整型数据有符号整型数(signed)与无符号整型数(unsigned)使用不同的二进位个数,表示不同范围的整数不同进制形式可以使用整数表示逻辑值C语言中整型数据的特点102.

3、2 整型数据C语言中的整数类型112.2 整型数据存储位数的要求C标准并没有统一规定int、short和long型数据使用多少二进制位存储,但是就存储位数而言,要求short int longint型数据的存储位数至少为16位long型数据的的存储位数至少为32位。带符号整数的表示带符号整数采用补码表示数据采用n位存储位数时的表数范围带符号整型数据的数值表示范围为-2n-12n-1-1无符号整型数据的数值表示范围为02n-1 11整数的二进制表示要求122.2 整型数据12Turbo C中整型类型及数值表示范围132.2.1 整型常量常量是在程序运行过程中其值已知且不能改变的量从表示形式上看,

4、C语言中有字面常量和符号常量13142.2.1 整型常量十进制形式的整型常量十进制形式的整型常量由+、号(+号可有可无)和十进制数字构成。例如:100 -567 +123八进制形式的整型常量八进制形式的整型常量由+、号和八进制数字构成。书写时符号可有可无但必须以数字0开头。例如:0123 -076十六进制形式的整型常量十六进制形式的整型常量由+、号和十六进制构成。书写时符号可有可无但必须以0 x或0X开头。例如:0 x123 -0 xAE14整型字面常量的形式152.2.1 整型常量没有任何类型指示的整型常量其数值在int型数据的表示范围内则为int型,否则为 long型如果超出long型数的

5、表示范围,自动进行溢出处理显式地指定整型常量的数据类型在整型常量后面添加字母u或U,表示按无符号类型处理与存储,例如:123u (表示unsigned int型)在整型常量后面添加字母l或L,表示按long类型处理与存储,123L (表示long型)u或U与l或L可以组合使用15整型常量的类型162.2.2整型变量变量是在程序运行期间其值可以改变的量 变量的属性变量的标识类型值与取值范围初始化存储引用及作用域16172.2.2整型变量变量的名字按C语言的标识符命名规则确定标识符就是一个名字。用于标识变量、符号常量、函数、数组、类型、文件等。标识符是由字母或下划线开头的字母、数字 和下划线序列。

6、17变量的命名变量的命名但需要注意:不能使用关键字作为变量名避免使用保留字作为变量名不宜使用库函数名作变量名为避免混淆不应使用预处理命令标识符作为变量名变量的名字应该尽量反映变量在程序中的作用与含义因各编译程序允许的变量名的长度不同,为程序的易移植性,应尽量使用短标识符。变量名中区分大小写字母变量的命名具有特定严格含义的标识符,称为关键字;保留给系统自己使用,称为保留字。C的关键字(32个)auto break case char const continue default do double else enum extern float for goto if int long regis

7、ter return short signed sizeof static struct switch typedef union unsigned void volatile while202.2.2整型变量合法的变量名Sum sum Total_value j k_ _errorno _1_非法的变量名M.D.john 123 -1-2-3 $33 c/s tax凵rate int合法但不合适的变量名 ifdef printf _kcab20变量的命名212.2.2整型变量变量必须先声明(declaration)后使用规定变量先声明后使用还有利于及时发现程序中的错误“声明”是C语言中的一种

8、特殊语句,其特殊性在于:非计算功能语句不能前缀语句标号限定使用位置有定义性与引用性声明之分21变量的声明222.2.2整型变量在C语言程序中的多个不同位置处都可以声明变量在不同位置处声明的变量具有不同的作用域、生命期作用域指程序中的标识符能够被引用的范围生命期则是指标识符从建立到撤消的有效与存在时间22 程序中声明变量的位置232.2.2整型变量在函数外部声明的变量相对函数而言称之为“外部变量”编译阶段被分配存储空间生命周期是整个程序运行期除特别说明外,其作用域是整个源程序文件,所以也称为文件作用域例int a; /* 外部变量声明 */int main(void ) 23外部变量242.2.

9、2整型变量在函数内部声明的变量则称之为“局部变量”可以在函数中的四个不同位置处声明局部变量在函数体的开始位置在函数的形式参数位置函数中复合语句的开始位置在for循环语句中24局部变量252.2.2整型变量在函数体开始位置声明的变量只在该函数内有效,具有块作用域,在该函数内的语句可以直接使用它们。这种变量是在函数被调用执行时才被分配存储空间,而当退出函数时取消其定义。例如:int main(void ) int a; 25局部变量262.2.2整型变量复合语句是一对大括号括住的程序块,也称分程序。在复合语句开始位置声明的变量是一种作用域更小的局部变量,仅限于该复合语句,对函数的其他部分是不可见、

10、不可存取的。每当执行进入复合语句时才给其中声明的变量分配存储空间,离开复合语句时取消其定义。例:int main(void ) while(a0) int a; 26局部变量272.2.2整型变量在函数的形式参数位置声明的变量称为形式参数变量。形式参数变量也是一种局部变量,其性质及其作用域与在函数体的开始部分定义的变量相同。int fun(int a, int b) 27局部变量282.2.2整型变量语法形式存储类型 数据类型 变量名1 =初始化值1 ,变量名n =初始化值n ;28变量声明的一般语法形式292.2.2整型变量两种最常用形式:数据类型 变量名; 数据类型 变量名1,变量名2,变

11、量名n ;例int count;unsigned int a,b,c;long seconds, minutes, hours;29变量声明的常用语法形式302.2.2整型变量首次向变量中存值称之为变量的初始化系统自动初始化外部变量和静态局部变量:C编译程序将在编译阶段将分配的存储空间清0,这相当于给这类变量置初值0;非静态局部变量:开始时无法预知存储空间中数据是什么,此时称变量的值“无定义”;程序中不应该使用无定义的变量。程序员显式初始化三种手段 30变量初始化312.2.2整型变量在声明变量的同时指定初值,语法形式:数据类型 变量名=初始化值;例: int a=1,b=2,c=3;注意:s

12、tatic型变量和外部变量的初始化值必须为常量或常量表达式 函数和复合语句中声明的带有初始化值的static型局部变量仅在编译时对它们初始化一次auto、register型局部变量的初始化值可以是:常量、符号常量、变量名、函数调用及由它们组成的表达式。 但如果含有变量名,则必须是在这之前已经指定了初始化值的变量名不能为函数的形式参数指定初始化值31变量初始化方法(1)322.2.2整型变量通过赋值语句给变量赋初值。定义变量后,可以通过变量名引用变量的值,也可以通过变量名改变变量的值。例:int a,b;a=-10b=a+2;32变量初始化方法(2)332.2.2整型变量从外部读入数据存入指定的

13、变量中可以通过调用scanf()等库函数实现。例: int val ;scanf(“%d”,&val);33变量初始化方法(3)342.2.2整型变量变量的名字,变量存储空间,变量的值,变量的地址之间的关系假设在16位的C编译程序中,变量val是存储在地址从1000 开始的存储存储空间中,并存储了值为-10的int型变量。34变量的属性总结352.2.2整型变量例2.1 使用未初始化变量的值。int main(void) int a,b; b=a; scanf(“%d”, &a); 35声明、使用变量时的常见错误362.2.2整型变量例2.2 变量声明在动作语句之后。int main(void

14、) a=3; int a; 36声明、使用变量时的常见错误(2)372.2.2整型变量例2.3 变量声明语法错误。int main(void) int a, int b; 37声明、使用变量时的常见错误(3)382.2.2整型变量例2.4 声明变量的初始化方式错误。不能以如下方式声明带初始化值的变量:int a=b=c=1;如果需要将变量a,b,c都初始化为1,必须写成:int a=1,b=1,c=1;或者int a,b,c;a=b=c=1;38声明、使用变量时的常见错误(4)392.3 浮点型数据2.3.1 浮点数常量2.3.2 浮点型变量浮点型数据在计算机中的表示二进制指数形式A2 k符号

15、位尾数阶码N位412.3 浮点型数据单精度型(float)双精度型(double)长双精度型(long double)C语言中的浮点数据类型Turbo C中浮点类型的相关信息 422.3.1浮点数常量 浮点数常量的表示形式 十进制小数形式 一般书写形式是: a . b 例如:0.1,0.0,3.0,.1,1.,.2,+31.45,000.321 十进制指数形式 一般书写形式:a.be c 或 a.bEc表示的数值为:a.b10c。 例如:1.234e8 /* 表示1.234108 */ .456e9 /* 表示0.456109 */ 432.3.1浮点数常量浮点型常量的类型 大多数C编译程序都

16、规定:程序中浮点数常量在没有任何类型指示的情况下都按double型处理,允许在浮点数直接量后面加上一个字母F或f,强制将其按单精度浮点数存储与处理。规格化形式的浮点型常量 书写形式是小数点前只有一位非0数字例如:1.23e-2 442.3.2 浮点型变量 声明浮点型变量float a,b;double pi=3.14;long double c;引用浮点型变量float a,b;a=1.0; b=a; 452.4 字符型数据 2.4.1 字符集2.4.2 字符常量2.4.3 字符型变量462.4.1 字符集 字符型数据指的是C语言中表示字母、标点符号、特殊符号之类的数据。 C语言主要使用标准A

17、SCII字符集中的符号。 472.4.2 字符常量 可显示字符的常量表示一对单引号内放一个字符的常量形式 例如:5、 a、 A、 ;、 、 + 单引号的表示反斜杠的表示482.4.2 字符常量非打印字符的常量表示与转义序列 492.4.2 字符常量转义序列的使用main()printf(” ab ct derftgn”); printf(”htibbj k”);打印机输出:fab c gdeh jik显示器输出:f gdeh j k512.4.2 字符常量字符型数据的值与存储字符常量:占用内存的一个字节存储其编码值,而不是存储字符本身。程序中任何使用整数的地方都可用对应的字符常量代替。 int

18、 a;a=5;printf(“a=%dn”,a); 事实上C语言中把字符型数据归类到整型数据类型,是按整型数据来处理的。 522.4.3 字符型变量 字符变量的存储字符变量在内存中也占用一个字节的存储空间用于存储字符的编码。字符变量的声明使用类型关键字char ;因C语言把字符型数据按整型数据处理,所以可以在char前使用修饰符signed和unsigned,指出对字符型变量按有符号数还是按无符号数解释。 532.4.3 字符型变量字符变量的使用定义了字符变量之后,就可以向字符变量中存储数据。 例如: char ch;ch=A; /* 直接赋字符常量 */ ch=65; /* 赋字符A的ASC

19、II编码值 */ ch=101; /* 用字符A的八进制转义序列 *2.5 字符串数据 552.5 字符串数据 字符串常量的表示形式 双引号括起来的0个或多个字符(任何可表示的字符)就构成了字符串常量。例如:“hello world!” /* 字符串中的空格有意义 */“2009.2.25.”“5”“” /* 字符串中可以无任何字符 */ “The dentist said: ”open wide! ” ” “The path is d:newtime” “2389” /* 字符串中包含3个字符: 23 、8和9 */562.5 字符串数据字符串常量的存储 当C 编译程序扫描到一个字符串时,将

20、其含有的字符依次存储到一片连续的存储单元中,每个字符占一个字节,存储的是字符的编码,并在最后自动加上一个NULL(0)字符作为字符串的结束符。 例572.5 字符串数据字符型数据与字符串数据的区别书写形式不同,字符常量的界限符为单引号;而字符串常量的界限符与用双引号。 字符型数据可作为整数参与数值运算;而字符串数据不能。 字符型数据的值是整型值;而字符串数据的值是地址量。字符型数据用一个字节存储;而字符串数据需要所包含的字符个数+1个字节存储。字符型数据有对应的字符型变量;而字符串常量没有对应的字符串变量 582.6 指针型数据 2.6.1 地址的概念2.6.2 指针变量声明及初始化592.6

21、.1 地址的概念计算机主存按字节编址。一个变量在主存中占有的空间中的第一个字节即为该变量的存储地址。通过变量的地址及变量的数据类型,可以完全确定一个变量所占用的存储空间。602.6.1 地址的概念例2.5int main(void) int i; char c; float f; printf(“%p ,%p ,%p”,&i,&c,&f);程序输出可能是:FFD6 , FFD9 , FFDA 612.6.2 指针变量声明及初始化 一个变量的地址称为该变量的指针。不同的计算机中表示地址的方式不同,所以给指针型变量分配的存储空间大小也不同。当一个指针变量存储了某个变量的地址后就称该指针变量指向那个

22、变量。622.6.2 指针变量声明及初始化指针变量声明的一般形式存储类型数据类型*变量名 数据类型:不是指针变量本身的数据类型,而是指针变量所指向对象的数据类型,称为“基类型”。基类型限定了指针变量只能用于存放基类型对象的地址。 指针类型指示符:“*”用来指出其后的变量名被定义成指针类型。 632.6.2 指针变量声明及初始化指针变量的初始化:定义指针变量的同时给指针变量置初始值。 int val, x=1085; int *p=&x,*p1=p; 定义时未给定初值,则:外部与static型指针变量初值自动为0(NULL)局部与非static型指针变量在没有指定初值之前其值无定义(其值不确定)

23、,不应直接使用!642.6.2 指针变量声明及初始化空指针变量与未定义指针变量空指针变量:指针变量的值为0,表示指针变量未指向任何对象 。int *p=0 ; 或int *p=NULL; 未定义指针变量:值是不确定的,它可能指向一个不可预知的存储单元,如果通过它访问指向的对象将造成无法预测的后果。 652.6.2 指针变量声明及初始化无基类型指针变量 定义形式void *指针变量名; 用途可用来存储任何一种数据类型对象的地址,可以在需要的时候通过强制类型转换把它的值赋给另一个具有确定基类型的指针变量。662.7 枚举型数据 2.7.1 定义枚举数据类型2.7.2 枚举型变量的声明672.7.1

24、 定义枚举数据类型 枚举类型的一般定义形式 enum 枚举类型名枚举常量列表; 例:enum color red, green, yellow;enum 与枚举类型名组合(enum 枚举类型名)在一起即为自定义的枚举数据类型的标识。枚举常量列表由若干个枚举符号常量组成,它们之间用逗号隔开 682.7.1 定义枚举数据类型枚举常量的命名规则按标识符的命名规则由程序设计者自行确定。在同一作用域范围内, 所有的枚举常量名不能与变量等其他对象名相同。枚举常量的值形如“枚举常量名=常量表达式” 的枚举常量的值由相应的常量表达式给定。其他枚举常量,如果是枚举常量列表中第一个,则其值为0,否则其值为其前一个

25、枚举常量值增1。692.7.1 定义枚举数据类型枚举类型定义举例 enum week_daySunday,Monday,Tuesday, Wednesday,Thursday,Friday,Saturday; enum color red, green=5, yellow, chartreuse=100 , burgundy, claret, winedark; 702.7.2 枚举型变量的声明 一般形式 enum 枚举类型名 变量名列表; 举例enum week_day working_day , *holiday; 712.7.2 枚举型变量的声明枚举类型数据的使用C编译程序总是把枚举型数

26、据对象按整型数据来处理在程序中要求使用整型常数的地方都可以使用枚举常量符号名。大多数C编译程序都要求先把整数值强制转换成枚举型后再赋给枚举型变量。例如:working_day=(enum week_day)1; 722.8 符号常量2.8.1 符号常量732.8.1 符号常量 C语言中使用常量的方式字面常量/直接常量符号常量 枚举类型定义枚举符号常量 预处理宏定义命令#define定义符号常量 742.8.1 符号常量宏定义是指在预处理宏定义命令#define中用一个标识符来代替一个字符序列。语法形式:预处理命令行可插入在源程序文件中的任何行中。必须以#号开头,预处理命令的内容跟在#号之后。预

27、处理命令的作用域是从该行所在位置起到它所在的源文件的末尾。 新行(回车换行符)字符作为行结束符。类对象宏(无参数)和类函数宏(带参数)。预处理宏定义命令 752.8.1 符号常量一般定义形式 #define 宏名 宏主体 举例#define FOUR 2*2 在预处理程序扫描源程序文件时,每遇到一个宏名便用宏主体部分所指定的字符序列替换掉该宏名,替换过程称为“宏展开”。 类对象宏定义 762.8.1 符号常量#include /* price代表30 */#define price 30int main(void) int number, money;number=10;money=price*number;printf(“prince %d a book ,%d books cost $%d!n”, price, number, money); 类对象宏定义例2.6 预处理之前772.8.1 符号常量类对象宏定义例2.6 int main(void) int number, money; number=10; money=30*number; /* 原来的price被30 替换 */ printf(“prince %d a book ,%d books cos

温馨提示

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

评论

0/150

提交评论