专业C5讲数据的表示ppt课件.ppt

上传人:本田雅阁 文档编号:2696189 上传时间:2019-05-05 格式:PPT 页数:50 大小:766.51KB
返回 下载 相关 举报
专业C5讲数据的表示ppt课件.ppt_第1页
第1页 / 共50页
专业C5讲数据的表示ppt课件.ppt_第2页
第2页 / 共50页
专业C5讲数据的表示ppt课件.ppt_第3页
第3页 / 共50页
专业C5讲数据的表示ppt课件.ppt_第4页
第4页 / 共50页
专业C5讲数据的表示ppt课件.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《专业C5讲数据的表示ppt课件.ppt》由会员分享,可在线阅读,更多相关《专业C5讲数据的表示ppt课件.ppt(50页珍藏版)》请在三一文库上搜索。

1、1/59,2/50,本章比较系统地介绍C+的语法要素,包括 常量与变量及其引用 函数 运算符 语句 I/O流格式控制 若干程序模块 本章的内容具有“资料”性质,是C+语言语法的“硬性”规定,是程序设计基础的基础,必须熟记。 完全理解本章的规定需要一个过程(至学期结束前); 建议经常地、反复地阅读本章,并自觉应用。,第五讲 数据的表示,3/50,学习方法,一个人走路,用不着把路上所有的石头搬掉再走。有时候要绕过去,等你走远了回头看,看到的只是走过的路,有些石头早已看不见了。 钱伟长,4/50,3.1 数据的表示,3.1.1 常量 3.1.2 变量 3.1.3 变量的引用 3.1.4 常量的引用,

2、5/50,3.1.1 常量,常量其值在程序运行中不允许改变的量 字面常量 布尔常量 false、true 字符常量 (单引号包围的1个字符) a 、 A 、 、 ! 转义字符 n 、 t 、 、 ” 、 汉、AB、(多个或0个字符)是错误的 字符串常量 “汉字字符串” 、 “AB” 、 “ ”,6/50,3.1.1 常量,字面常量 整型常量 10进制形式 123、-123 16进制形式 0x7B、-0x7B 0x开头 8进制形式 0173、-0173 0开头 长整型数据 123L、0x7BL 加后缀L或l 无符号整型 123U、0x7BU 加后缀U或u 无符号长整型 123UL、0x7BUL,

3、7/50,3.1.1 常量,字面常量 浮点型常量 小数形式 123.45、1.0、-123.45 浮点形式(科学记数法) 1.2345E+2 表示 1.2345102 12345E-2 表示 1234510-2 可用小写字母e。E或e前的数字不能省略 默认double型,加后缀f表示float型。,字母E之前必须有数字且E之后指数必为整数。,8/50,3.1.1 常量,符号常量 const 数据类型 常量名 = 初始化值; 常量不能作左值(不能对常量赋值) 常量只能作右值(可读取访问常量的值) 例如: const double PI = 3.1415926; const char LF = n

4、; / 换行字符 const unsigned long MAX_NUMBER=10000; 使用符号常量的好处: 1.增加程序的可读性;2.便于调试程序。,9/50,3.1 数据的表示,3.1.1 常量 3.1.2 变量 3.1.3 变量的引用 3.1.4 常量的引用,10/50,3.1.2 变量,实际应用的需要 数据的本质 应用问题的表达、载体 算法的本质 控制数据的变化 问题的求解历程 (初值中间结果解) 对计算机的要求 能存放(读/写)大量数据 (Memory,内存) 数据(变量)的载体 能对数据进行基本运算 (CPU,中央处理器) 数据(变量)加工的场所,11/50,3.1.2 变量

5、,对计算机高级语言的要求 抽象性 屏蔽具体的内存操作细节,屏蔽CPU操作细节; 易用性 用变量名称(标识符)表示计算机内存单元的内容(数据) 用右值表达式表示从内存单元读取数据 用左值表达式表示写入数据到内存单元 用运算符表示对数据的操作 灵活性、安全性、内存利用效率 数据的生命期(创建、销毁) 可见性(读写访问权限),12/50,3.1.2 变量,变量其值在程序运行中可以被改变的量 它存放在计算机内存 它可以被读取(作右值)、写入新值(作左值) 变量名成为其对应内存单元的抽象 各个变量之间的关系 实际问题中 关联密切 计算机程序中 相互独立 没有联动机制,由程序员精心控制,13/50,例如:

6、计算圆面积,(数学题)计算公式 若 ,则 若 ,则,#include using namespace std; int main() / 错误的程序 const double PI = 3.1415926; double r, s; s = PI * r * r; /r的值不可预知,不宜直接作右值 cout r endl; /因而s所获得的值亦无实际意义 r = 10; cout s endl; /s与r相互独立,不可能联动 r = 20; cout s endl; /s无变化 return 0; ,14/50,#include using namespace std; int main()

7、/ 正确的程序 5-1.cpp const double PI = 3.1415926; double r, s; r = 10; cout r endl; / 输出 10 并换行 s = PI * r * r; / 根据当前的r计算s的值 cout s endl; / 输出 314.159 并换行 r = 20; s = PI * r * r; / 根据当前的r重新计算s cout r ”,” s endl; / 输出 20,1256.64换行 return 0; ,15/50,3.1.2 变量,变量其值在程序运行中可以被改变的量 变量必须先定义、后使用 定义变量意味着为该变量分配内存空间

8、变量定义需要确定其 5 要素: 存储类型 (决定变量的生命期、可见性) 数据类型 (决定变量的存储格式、取值范围) 变量名 (“小精灵”的名字) 变量的初始值 (“小精灵”的初态) 变量的地址 (由系统确定,见第5章),16/50,变量定义的格式,变量定义语句 存储类型 数据类型 变量名 = 初始化值; 程序中何处可以定义变量? 在所有的函数之外 全局变量 存储类型 缺省 静态全局变量 存储类型 static 在某函数之内 静态局部变量 存储类型 static 局部(自动)变量 存储类型 auto 或者 缺省,存放在栈区,17/50,1. 变量的存储类型,一个程序在操作系统控制下启动执行时,由

9、操作系统分配给该程序一定的内存空间,包括: 代码区 存放程序代码(体现冯诺依曼的“存储程序”思想) 数据区 全局数据区、常量池 存放全局变量、静态全局变量 静态局部变量、一些常量 栈区 存放局部(自动)变量 堆区 存放动态变量,18/50,规定:全局变量,在所有函数之外定义、缺省存储类型的变量 称为全局变量。 全局变量存放在全局数据区中; 全局变量在主函数执行之前产生、主函数结束后被销毁 (即:全局变量的生命期是全局的); 全局变量定义语句之后的所有函数中均可以直接对其进行读写访问(即:作用域范围大,可见性强)。 使用全局变量不利于程序的移植、维护 (建议:程序中不要使用全局变量)。 C+语言

10、的一些机制可以消灭程序中的全局变量。,19/50,#include /不好的程序 using namespace std; int temp; / 全局变量 int max(int a, int b, int c) temp = a; if(btemp) temp = b; if(ctemp) temp = c; return temp; int main() cout max(2, 5, 3) endl; return 0; ,/ 此函数强烈地依赖于变量temp,不能独立移植到其他程序中 / 修改了temp的值,可能影响其他部分,20/50,#include /5-2.cpp using n

11、amespace std; int max(int a, int b, int c) int temp; / 局部(自动)变量 temp = a; if(btemp) temp = b; if(ctemp) temp = c; return temp; int main() cout max(2, 5, 3) endl; return 0; ,好的代码! 不依赖于全局变量, 相对独立,便于移植,21/50,规定:静态全局变量,在所有函数之外定义、存储类型为static的变量称为静态全局变量。 静态全局变量与全局变量的唯一区别 在多文件结构程序中,静态全局变量的作用域仅限于定义其的源程序文件(称

12、为编译单元)中,不能跨越源程序文件; 全局变量可以跨越不同的源程序文件。需要在某一个源程序文件中定义(分配内存空间),而在其他源程序文件中用“外部参照访问声明”即可: extern 数据类型 某全局变量名; 即:一处定义,多处声明。,22/50,规定:静态局部变量,在函数内定义、存储类型为 static 的变量称为静态局部变量。 静态局部变量存放在全局数据区; 静态局部变量可能不被创建 程序运行时始终不执行定义它的函数。 静态局部变量最多只被创建、初始化一次 程序运行时,第一调用其所在函数时创建并初始化,其生命期直到主函数结束后才终止; 再次调用其所在函数时,将跳过静态局部变量定义及初始化语句

13、,该变量的当前值为上次退出函数时所保存的值。 在其所在函数外,静态局部变量处于“休眠”,不可访问。 静态局部变量具有全局生命期、局部可见性。,23/50,规定:局部变量(自动变量),在函数内定义、存储类型为 auto 的变量称为局部变量,也称为自动变量。 局部变量是程序中使用最多的变量; 局部变量存放在栈区; 生命期 随所在函数调用而创建,随所在函数返回而销毁 可见性 仅在所在函数内部 初始化 局部自动变量定义时,若未对其进行显式地初始化,则其初始值是不可预知的; 注:全局变量、静态全局变量、静态局部变量定义时,若未对其进行显式地初始化,系统将其初始化为各位全0。,24/50,#include

14、 / Variable_Test.cpp #include “VarExample.h” using namespace std; static float a=800.8f; /静态全局变量 int main() int a=10000,x=500,n=800;/ 局部自动变量 function1(); function2(); function3(); function1(); function2(); function3(); cout“in main() : N=”:n “,n=”n“,A=”:a “,a=”a“,x=”xendl; return 0; ,25/50,800.8,静态全

15、局变量 a,局部自动变量 a,局部自动变量 x,局部自动变量 n,10000,500,800,当执行到main()函数体的第一行语句后,main(),26/50,/ VarExample.h #ifndef VAREXAMPLE_H #define VAREXAMPLE_H extern int n; / 全局变量外部参照访问声明,并非定义变量 int function1(); / 函数原型,用于函数声明 double function2(); void function3(); #endif,27/50,/ VarExam1cpp #include #include “VarExample.

16、h“ using namespace std; int n; / 定义全局变量 static int a=10000; / 定义静态全局变量 int function1() static int a; / 定义静态局部变量 0 double x=5.5; / 局部自动变量 int n=100; / 局部自动变量 x+; / 访问局部变量 6.5 :n+; / 访问全局变量 1 :a+; / 访问静态全局变量 10001 a = a + :a + (int)x + :n + n; /10108 cout “in function1(): N = “ :n “, n = “ n / 访问局部变量

17、“, A = “ :a “, a = “ a / 访问静态局部变量 “, x = “ x endl; return a; ,28/50,800.8,静态全局变量 a,局部自动变量 a,局部自动变量 x,局部自动变量 n,10000,500,800,main(),全局变量 n,静态全局变量 a,10000,10000,静态局部变量 a,局部自动变量 x,局部自动变量 n,5.5,100,function1(),0,0,当执行到function1()函数体的第3条语句后,function1(),29/50,800.8,静态全局变量 a,局部自动变量 a,局部自动变量 x,局部自动变量 n,1000

18、0,500,800,全局变量 n,静态全局变量 a,10001,静态局部变量 a,局部自动变量 x,局部自动变量 n,6.5,100,1,10108,当执行到function1()函数体的最后一条语句时,main(),function1(),function1(),30/50,/ VarExam2.cpp #include #include “VarExample.h“ using namespace std; static double a=200.5; / 定义一个静态全局变量 double function2() static double a=2.71828; / 定义一个静态局部变量

19、 int x = 200; a += +n + +x; cout “in function2(): N = “ n /全 “, x = “ x / 局 “, A = “ :a / 静全 “, a = “ a endl; / 静局 return a; ,31/50,800.8,静态全局变量 a,局部自动变量 a,局部自动变量 x,局部自动变量 n,10000,500,800,全局变量 n,静态全局变量 a,10001,function2(),1,main(),当执行到function2()函数体的第二条语句时,静态局部变量 a,局部自动变量 x,200,2.71828,静态全局变量 a,200.

20、5,静态局部变量 a,10108,function1(),function2(),function1(),32/50,800.8,静态全局变量 a,局部自动变量 a,局部自动变量 x,局部自动变量 n,10000,500,800,全局变量 n,静态全局变量 a,10001,function2(),2,main(),当执行到function2()函数体的最后一条语句时,静态局部变量 a,局部自动变量 x,201,205.71828,静态全局变量 a,200.5,静态局部变量 a,10108,function1(),function2(),function1(),33/50,void functi

21、on3() double a=3.1415926; static char x=C; int n = 300; :a+; /201.5 x+; /68 a = a + :a + n + :n + x; cout “in function3(): N = “ :n /全 “, n = “ n / 局 “, A = “ :a / 静全 “, a = “ a / 局 “, x = “ x endl; / 静局 ,34/50,800.8,静态全局变量 a,局部自动变量 a,局部自动变量 x,局部自动变量 n,10000,500,800,全局变量 n,静态全局变量 a,10001,function3()

22、,2,main(),当执行到function3()函数体的第三条语句时,局部自动变量 a,静态局部变量 x,C,3.1415926,300,局部自动变量 n,静态全局变量 a,200.5,function1(),function2(),function1(),静态局部变量 a,10108,35/50,800.8,静态全局变量 a,局部自动变量 a,局部自动变量 x,局部自动变量 n,10000,500,800,全局变量 n,静态全局变量 a,10001,2,main(),当执行到function3()函数体的最后一条语句时,局部自动变量 a,静态局部变量 x,D,574.6415926,201

23、.5,300,局部自动变量 n,function3(),function1(),function2(),function1(),静态全局变量 a,静态局部变量 a,10108,36/50,第二轮依序调用三个function函数的变化过程 同学们自行分析,分析讨论,37/50,同名变量的屏蔽,背景 众人集体开发软件 (不同的人员参与) 大型软件 (程序功能模块多,关系复杂) 利用已有代码或库 (黑箱) 同名变量之间的关系(例3.1) 注意各变量的生命期、可见性、作用域 访问被局部变量屏蔽的全局变量时需使用(:) 称为作用域区分符 可见C+通过变量的存储类型可以较好地解决变量名 的冲突。 彻底解决

24、变量名的冲突问题见第7章名字空间。,38/50,例如:,#include using namespace std; int i; /文件作用域 int main() i=5; int i; /块作用域 i=7; cout“i=”iendl; /输出? cout“i=”i; /输出? return 0; ,39/50,#include using namespace std; void fun(); int main() fun(); fun(); return 0; void fun() static int a=1; int i=5; a+; i+; cout“i=“i“,a=“aendl;

25、 ,例如:,运行结果: i=6, a=2 i=6, a=3,40/50,2. 变量的数据类型,变量的数据类型决定了该变量的数据在内存中 的存放格式 占用字节数 取值范围 可执行的运算 定义变量时所规定的数据类型是不会改变的 类型强制转换、类型自动转换运算仅仅是将变量作为右值。 double x = 5.6; cout int(x) x endl; 输出 55.6 (既不修改x的值,也不改变x的数据类型),41/50,3. 变量的值,初值 变量定义时可以对其进行初始化,使其在创建时便具有对问题求解有意义的初始值。 当前值 在变量的生命期内,变量值的变化代表着问题求解的历程 变量的控制 编写程序

26、将本质上相互独立的变量有机地组织起来,协同完成计算任务 阅读程序 跟踪多个逻辑上相关的变量值的协同变化规律,42/50,4. 变量的地址,变量在其存储区域中的具体地址由系统安排 变量从其生命期开始至其生命期结束,其地址值(居住地)不变; 自动变量在重新创建时,其地址值不一定与以前的相同; C+语言提供了(见第5章) 获取变量地址操作。 运算符为“&” 根据地址值,访问地址处的内容。 运算符为“*” 地址运算(地址加减整数,两个地址值相减),43/50,5. 变量名,实际问题与计算机内存单元之间的桥梁 表达实际事物的数量 代表计算机内存单元 变量名是上述两方面的抽象记号。切记 计算机内存单元是实

27、体 变量名 原 名 定义变量时使用的标识符 别 名 为已经存在的变量声明的引用 间接名 根据地址值找到的变量,44/50,3.1 数据的表示,3.1.1 常量 3.1.2 变量 3.1.3 变量的引用 3.1.4 常量的引用,45/50,3.1.3 变量的引用,变量的引用是C+语言的一个重要特色。 (C语言中没有变量引用的概念) 变量的引用是变量实体(一个已经存在的变量) 的一个别名。 数据类型 & 引用名 = 已存在的变量名; 变量的引用只是声明,不是定义,不会另外分配内存空间(常称:引用不占空间); 声明引用时,必须用一个变量实体对其进行初始化; 这样的“绑定”从引用声明开始,直到引用的生

28、命期结束不能更改; 对引用的操作就是对其“绑定”的变量的操作(读/写); 程序中应保证变量实体的生命期包含其引用的生命期。,46/50,int x; int / 输出 200,例如:,47/50,3.1.4 常量的引用,可以对字面常量、符号常量、甚至变量取别名 const 数据类型 & 引用名 = 常量; const 数据类型 & 引用名 = 已存在的变量名; 可以将变量视为常量,但不能将常量作为变量。 编写或阅读程序时,要正确地辨明引用(别名) 所指代的真正变量或常量实体。,48/50,double x = 2.5; const double PI = 3.1415926; const double / 错误,不能将常量作为变量,例如:,49/50,本讲小结,调试程序是程序员的基本工作内容。 调试程序磨砺程序员的意志,锻炼程序员的思维。 小结 三种结构的多角度应用及相互转换 常量、变量、引用的理解 变量的存储类型的掌握,50/50,作业及实验,第三章作业:HZAU-专业C+作业3 第二次实验:HZAU-专业C+实验2(计算机1-2班) 抓紧时间!,see you!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1