
专业C5讲数据的表示ppt课件.ppt
50页单击此处编辑母版副标题样式单击此处编辑母版副标题样式•华中农业大学理学院华中农业大学理学院 章章 英英•zy@ C/C++语言程序设计语言程序设计 1/59•本章比较系统地介绍本章比较系统地介绍C++的语法要素,包括的语法要素,包括– 常量与变量及其引用常量与变量及其引用– 函数函数– 运算符运算符– 语句语句– I/O流格式控制流格式控制– 若干程序模块若干程序模块•本章的内容具有本章的内容具有“资料资料”性质,是性质,是C++语言语法的语言语法的“硬性硬性”规定,是程序设计基础的基础,必须熟记规定,是程序设计基础的基础,必须熟记–完全理解本章的规定需要一个过程(至学期结束前);完全理解本章的规定需要一个过程(至学期结束前);–建议经常地、反复地阅读本章,并自觉应用建议经常地、反复地阅读本章,并自觉应用第五讲第五讲 数据的表示数据的表示2/50学习方法学习方法 一个人走路,用不着把路上所有的石头搬掉一个人走路,用不着把路上所有的石头搬掉再走有时候要绕过去,等你走远了回头看,看再走有时候要绕过去,等你走远了回头看,看到的只是走过的路,有些石头早已看不见了到的只是走过的路,有些石头早已看不见了。
──钱伟长钱伟长3/503.1 数据的表示数据的表示• 3.1.1 常量常量• 3.1.2 变量变量• 3.1.3 变量的引用变量的引用• 3.1.4 常量的引用常量的引用4/503.1.1 常量常量• 常量常量——其值在程序运行中不允许改变的量其值在程序运行中不允许改变的量– 字面常量字面常量•布尔常量布尔常量– false、、true•字符常量字符常量((单引号包围的单引号包围的1 1个个字符字符))– ‘a’ 、、 ‘A’ 、、‘ ’ 、、 ‘!’– 转义字符转义字符 ‘\n’ 、、 ‘\t’ 、、 ‘ \’’ 、、 ‘\”’ 、、 ‘\\’– ’汉汉’、、’AB’、、’’(多个或(多个或0个字符)是错误的个字符)是错误的•字符串常量字符串常量– “汉字字符串汉字字符串” 、、 “AB” 、、 “ ”5/503.1.1 常量常量–字面常量字面常量•整型常量整型常量– 10进制形式进制形式123、、-123– 16进制形式进制形式0x7B、、-0x7B0x开头开头– 8进制形式进制形式0173、、-0173 0开头开头– 长整型数据长整型数据123L、、0x7BL加后缀加后缀L或或l– 无符号整型无符号整型123U、、0x7BU加后缀加后缀U或或u– 无符号长整型无符号长整型 123UL、、0x7BUL6/503.1.1 常量常量–字面常量字面常量•浮点型常量浮点型常量– 小数形式小数形式» 123.45、、1.0、、-123.45– 浮点形式浮点形式(科学记数法)(科学记数法)» 1.2345E+2 表示表示 1.2345×102» 12345E-2 表示表示 12345×10-2» 可用小写字母可用小写字母e。
E或或e前的数字不能省略前的数字不能省略– 默认默认double型,加后缀型,加后缀f表示表示float型字母字母字母字母E E之前必须有数字且之前必须有数字且之前必须有数字且之前必须有数字且E E之后指数必为整数之后指数必为整数之后指数必为整数之后指数必为整数7/503.1.1 常量常量–符号常量符号常量const 数据类型数据类型 常量名常量名 = 初始化值;初始化值;常量不能作左值(不能对常量赋值)常量不能作左值(不能对常量赋值)常量只能作右值(可读取访问常量的值)常量只能作右值(可读取访问常量的值)•例如:例如:const double PI = 3.1415926;const char LF = ‘\n’; // 换行字符换行字符 const unsigned long MAX_NUMBER=10000;•使用符号常量的好处:使用符号常量的好处:1.1.增加程序的可读性;增加程序的可读性;2.2.便于调试程序便于调试程序8/503.1 数据的表示数据的表示• 3.1.1 常量常量• 3.1.2 变量变量• 3.1.3 变量的引用变量的引用• 3.1.4 常量的引用常量的引用9/503.1.2 变变量量• 实际应用的需要实际应用的需要–数据的本质数据的本质• 应用问题的表达、载体应用问题的表达、载体–算法的本质算法的本质• 控制数据的变化控制数据的变化 ——— 问题的求解历程问题的求解历程 ((初值初值→→中间结果中间结果→→解)解)• 对计算机的要求对计算机的要求–能存放能存放((读读/ /写写))大量数据大量数据(Memory,内存,内存)• 数据(变量)的载体数据(变量)的载体–能对数据进行基本运算能对数据进行基本运算(CPU,中央处理器,中央处理器)• 数据(变量)加工的场所数据(变量)加工的场所10/503.1.2 变变量量• 对计算机高级语言的要求对计算机高级语言的要求–抽象性抽象性• 屏蔽具体的内存操作细节,屏蔽屏蔽具体的内存操作细节,屏蔽CPU操作细节;操作细节;–易用性易用性• 用用变量名称变量名称(标识符标识符)表示计算机表示计算机内存内存单元的内容(数据)单元的内容(数据)• 用用右值右值表达式表示从内存单元表达式表示从内存单元读取读取数据数据• 用用左值左值表达式表示表达式表示写入写入数据到内存单元数据到内存单元• 用用运算符运算符表示对数据的表示对数据的操作操作–灵活性、安全性、内存利用效率灵活性、安全性、内存利用效率• 数据的生命期(创建、销毁)数据的生命期(创建、销毁)• 可见性(读写访问权限)可见性(读写访问权限)11/503.1.2 变变量量• 变量变量——其值在程序运行中可以被改变的量其值在程序运行中可以被改变的量– 它存放在计算机内存它存放在计算机内存– 它可以被读取它可以被读取(作右值作右值)、写入新值、写入新值(作左值作左值)•变量名成为其对应内存单元的抽象变量名成为其对应内存单元的抽象• 各个变量之间的关系各个变量之间的关系– 实际问题中实际问题中•关联密切关联密切– 计算机程序中计算机程序中•相互独立相互独立– 没有联动机制,由程序员精心控制没有联动机制,由程序员精心控制12/50例如:计算圆面积例如:计算圆面积• (数学题)计算公式(数学题)计算公式– 若若 ,则,则– 若若 ,则,则 #include
称为全局变量– 全局变量存放在全局数据区中;全局变量存放在全局数据区中;– 全局变量在主函数执行之前产生、主函数结束后被销毁全局变量在主函数执行之前产生、主函数结束后被销毁 (即:全局变量的(即:全局变量的生命期是全局的生命期是全局的););– 全局变量定义语句之后的所有函数中均可以直接对其进全局变量定义语句之后的所有函数中均可以直接对其进行行读写访问读写访问(即:作用域范围大,可见性强)即:作用域范围大,可见性强)– 使用全局变量不利于程序的移植、维护使用全局变量不利于程序的移植、维护 ((建议:程序中不要使用全局变量建议:程序中不要使用全局变量)– C++语言的一些机制可以消灭程序中的全局变量语言的一些机制可以消灭程序中的全局变量18/50 #include
为静态全局变量– 静态全局变量与全局变量的唯一区别静态全局变量与全局变量的唯一区别•在多文件结构程序中,静态全局变量的作用域仅限于定义其的源在多文件结构程序中,静态全局变量的作用域仅限于定义其的源程序文件(称为编译单元)中,不能跨越源程序文件;程序文件(称为编译单元)中,不能跨越源程序文件;•全局变量可以跨越不同的源程序文件需要在某一个源程序文件全局变量可以跨越不同的源程序文件需要在某一个源程序文件中定义(分配内存空间),而在其他源程序文件中用中定义(分配内存空间),而在其他源程序文件中用“外部参照外部参照访问声明访问声明”即可:即可:•extern 数据类型数据类型 某全局变量名;某全局变量名;•即:一处定义,多处声明即:一处定义,多处声明21/50规定:静态局部变量规定:静态局部变量• 在函数内定义、存储类型为在函数内定义、存储类型为 static 的变量称为静态的变量称为静态局部变量局部变量– 静态局部变量存放在全局数据区;静态局部变量存放在全局数据区;– 静态局部变量可能不被创建静态局部变量可能不被创建•程序运行时始终不执行定义它的函数程序运行时始终不执行定义它的函数– 静态局部变量静态局部变量最多只被创建、初始化一次最多只被创建、初始化一次•程序运行时,第一调用其所在函数时创建并初始化,其生命期直程序运行时,第一调用其所在函数时创建并初始化,其生命期直到主函数结束后才终止;到主函数结束后才终止;•再次调用其所在函数时,将跳过静态局部变量定义及初始化语句,再次调用其所在函数时,将跳过静态局部变量定义及初始化语句,该变量的当前值为上次退出函数时所保存的值。
该变量的当前值为上次退出函数时所保存的值•在其所在函数外,静态局部变量处于在其所在函数外,静态局部变量处于“休眠休眠”,不可访问不可访问– 静态局部变量具有静态局部变量具有全局生命期、局部可见性全局生命期、局部可见性22/50规定:局部变量(自动变量)规定:局部变量(自动变量)•在函数内定义、存储类型为在函数内定义、存储类型为 auto 的变量称为局部变的变量称为局部变量,也称为自动变量量,也称为自动变量–局部变量是程序中使用最多的变量;局部变量是程序中使用最多的变量;–局部变量存放在栈区;局部变量存放在栈区;–生命期生命期•随所在函数调用而创建,随所在函数返回而销毁随所在函数调用而创建,随所在函数返回而销毁–可见性可见性•仅在所在函数内部仅在所在函数内部–初始化初始化•局部自动变量定义时,若未对其进行显式地初始化,则其初始值局部自动变量定义时,若未对其进行显式地初始化,则其初始值是不可预知的;是不可预知的;注注:全局变量、静态全局变量、静态局部变量定义时,若未对其全局变量、静态全局变量、静态局部变量定义时,若未对其进行显式地初始化,系统将其初始化为各位全进行显式地初始化,系统将其初始化为各位全0。
23/50 #include
的冲突• 彻底解决变量名的冲突问题见第彻底解决变量名的冲突问题见第7章名字空间章名字空间37/50例如:例如:#include 值 double x = 5.6; cout << int(x) << ’ ’ << x << endl; 输出输出 5 5.6 (既不修改既不修改x的值,也不改变的值,也不改变x的数据类型的数据类型) 40/503. 变量的值变量的值• 初值初值–变量定义时可以对其进行初始化,使其在创建时便具有对变量定义时可以对其进行初始化,使其在创建时便具有对问题求解有意义的初始值问题求解有意义的初始值• 当前值当前值–在变量的生命期内,变量值的变化代表着问题求解的历程在变量的生命期内,变量值的变化代表着问题求解的历程• 变量的控制变量的控制–编写程序编写程序•将本质上相互独立的变量有机地组织起来,协同完成计算任务将本质上相互独立的变量有机地组织起来,协同完成计算任务–阅读程序阅读程序•跟踪多个逻辑上相关的变量值的协同变化规律跟踪多个逻辑上相关的变量值的协同变化规律41/504. 变量的地址变量的地址• 变量在其存储区域中的具体地址由系统安排变量在其存储区域中的具体地址由系统安排–变量从其生命期开始至其生命期结束,其地址值(居变量从其生命期开始至其生命期结束,其地址值(居住地)不变;住地)不变;–自动变量在重新创建时,其地址值不一定与以前的相自动变量在重新创建时,其地址值不一定与以前的相同;同;• C++语言提供了(见第语言提供了(见第5章)章)–获取变量地址操作。 获取变量地址操作运算符为运算符为“&”–根据地址值,访问地址处的内容根据地址值,访问地址处的内容 运算符为运算符为“*”–地址运算(地址加减整数,两个地址值相减)地址运算(地址加减整数,两个地址值相减)42/505. 变量名变量名• 实际问题与计算机内存单元之间的桥梁实际问题与计算机内存单元之间的桥梁–表达实际事物的数量表达实际事物的数量–代表计算机内存单元代表计算机内存单元• 变量名是上述两方面的抽象记号切记变量名是上述两方面的抽象记号切记–计算机内存单元是实体计算机内存单元是实体• 变量名变量名–原原 名名 —— 定义变量时使用的标识符定义变量时使用的标识符–别别 名名 —— 为已经存在的变量声明的引用为已经存在的变量声明的引用–间接名间接名 —— 根据地址值找到的变量根据地址值找到的变量43/503.1 数据的表示数据的表示• 3.1.1 常量常量• 3.1.2 变量变量• 3.1.3 变量的引用变量的引用• 3.1.4 常量的引用常量的引用44/503.1.3 变量的引用变量的引用• 变量的引用是变量的引用是C++语言的一个重要特色语言的一个重要特色 ((C语言中没有变量引用的概念)语言中没有变量引用的概念)• 变量的引用是变量实体(一个已经存在的变量)变量的引用是变量实体(一个已经存在的变量) 的一个别名。 的一个别名数据类型数据类型 & 引用名引用名 = 已存在的变量名;已存在的变量名;–变量的引用只是声明,不是定义,不会另外分配内存空间变量的引用只是声明,不是定义,不会另外分配内存空间(常称:引用不占空间);(常称:引用不占空间);–声明引用时,必须用一个变量实体对其进行初始化;声明引用时,必须用一个变量实体对其进行初始化;–这样的这样的“绑定绑定”从引用声明开始,直到引用的生命期结束从引用声明开始,直到引用的生命期结束不能更改;不能更改;–对引用的操作就是对其对引用的操作就是对其“绑定绑定”的变量的操作(读的变量的操作(读/写);写);–程序中应保证变量实体的生命期包含其引用的生命期程序中应保证变量实体的生命期包含其引用的生命期45/50 int x; int &rx = x; x = 100; cout << rx << endl;// 输出输出 100 rx = 200; cout << x << endl;// 输出输出 200 例如:例如:46/503.1.4 常量的引用常量的引用• 可以对字面常量、符号常量、甚至变量取别名可以对字面常量、符号常量、甚至变量取别名const 数据类型数据类型 & 引用名引用名 = 常量;常量;const 数据类型数据类型 & 引用名引用名 = 已存在的变量名;已存在的变量名;可以将变量视为常量,但不能将常量作为变量。 可以将变量视为常量,但不能将常量作为变量• 编写或阅读程序时,要正确地辨明引用(别名)编写或阅读程序时,要正确地辨明引用(别名) 所指代的真正变量或常量实体所指代的真正变量或常量实体47/50 double x = 2.5; const double PI = 3.1415926; const double &rPI=1/PI, &E=2.718281828; const double &rx = x; // 允许将常量视为变量允许将常量视为变量 cout << rx << endl; x++;// 正确,正确,x仍为变量仍为变量 rx++; // 错误,因为错误,因为rx为常量为常量 cout << x << endl; double &r = PI;// 错误,不能将常量作为变量错误,不能将常量作为变量 例如:例如:48/50本讲小结本讲小结•调试程序是程序员的基本工作内容调试程序是程序员的基本工作内容•调试程序磨砺程序员的意志,锻炼程序员的思维调试程序磨砺程序员的意志,锻炼程序员的思维•小结小结–三种结构的多角度应用及相互转换三种结构的多角度应用及相互转换–常量、变量、引用的理解常量、变量、引用的理解–变量的存储类型的掌握变量的存储类型的掌握49/50作业及实验作业及实验•第三章作业:第三章作业:HZAU-专业专业C++作业作业3•第二次实验:第二次实验:HZAU-专业专业C++实验实验2(计算机计算机1-2班班)•抓紧时间!抓紧时间!50/50。
