【C++从入门到熟练练习题】003 C++常量(含转义字符)及C++作用域(全局及局部变量)
目录
一、前言
1、上节课回顾
上一次给大家讲了C++数据类型还有C++注释,在以后的代码中,随着代码的增多,注释是必不可少的,它会提示我们代码功能,变量含义等等。所以我们要熟练掌握注释,我们也拓展了数据类型,数据类型是C++比较基础也比较核心的内容。
想要学好,最好的方式就是多想,多练习。
今天主要给大家讲的就是变量的作用域和常量,作用域可能等大家学到C++的循环语句,C++的函数部分才会有更加深刻的体会,在这里就是先让大家对这个概念有所认识。等我们把所有常用的基础讲完,我们会开始讲数据运算,各种循环语句,判断语句等等。
2、上节思考题答案
题目:要求:
1.定义一个生活用具枚举类型,并赋初值
2.利用typedef为双精度浮点型变量重命名,使用新的变量名创建变量
3.将他们输出。
4.在所有代码中加上单行注释。
5.在代码最前面用多行注释写自己的完成时间及内容
/*
日期:2019.1.31
内容:typedef、枚举类及注释的应用。
*/
#include<iostream> // 头文件,输入输出时使用
using namespace std; // 引用命名空间
typedef int Status; // 使用typedef给int一个新的名称
void main() { // 主函数,程序入口
enum stationery
{
pen,
eraser = 2,
pencil,
pencil_case,
} sta; // 枚举类动物
sta = pencil_case; // 给枚举类变量赋值为pencil_case,(2+2 = 4)
Status st = 1; // 利用新的类型名定义一个变量并赋初值为1.
cout << "st = " << st << endl; // 输出定义的变量
cout << "stationery = " << sta << endl; // 输出stationery 赋值后的值。
}
运行结果如下:
二、重点知识介绍
1、作用域
作用域,顾名思义,就是变量能作用的范围。比如古代的将领,兵马大元帅能够统领所有士兵,下面的一个先锋只能管自己手底下那几个人。官职不同,能管理的范围不同,权力能触及的领域也不同。
对于C++来说,在不同地方定义的变量,那它能够作用的范围也不同。
一般来说有三个地方可以定义变量:
(1)在函数或一个代码块内部声明的变量,称为局部变量。
(2)在函数参数的定义中声明的变量,称为形式参数。
(3)在所有函数外部声明的变量,称为全局变量。
第二个概念我们暂时不讲,等我们讲到函数的时候,再给大家说。接下来给大家详细讲解一下全局变量与局部变量。
1.全局变量:
在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。
全局变量有如下特点:
(1)全局变量的值在程序的整个生命周期内都是有效的。
(2)全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。
举个例子:
/*
日期:2019.1.31
内容:全局变量
*/
#include<iostream> // 头文件,输入输出时使用
using namespace std; // 引用命名空间
int a = 11; //全局变量
void main() { // 主函数,程序入口
cout << a << endl;
}
2.局部变量
在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。
举个例子:
/*
日期:2019.1.31
内容:局部变量
*/
#include<iostream> // 头文件,输入输出时使用
using namespace std; // 引用命名空间
void main() { // 主函数,程序入口
int b = 22;//局部变量
cout << b << endl;
}
3.全局变量与局部变量的联系与区别
1.局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。
举个例子:
2.当局部变量被定义时,系统不会对其初始化,必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
数据类型 | 初始化默认值 |
---|---|
int | 0 |
char | ' \0 ' |
float | 0 |
double | 0 |
pointer | NULL |
虽然如此,但是我们还是要正确初始化变量,不然可能会导致程序出现严重错误。
2、常量
学过数学的人对常量这个概念还是比较熟悉的,就不过多介绍啦,在C++中,常量是指:在程序执行期间值不会发生改变的量。
C++自带一些常量,我们也可以人为定义一些常量,首先先给大家说一下C++中自带的常量,即我们无需再次声明或定义即可直接使用的量。
1.布尔常量
C++的布尔常量一共两个,并且这两个都是标准的C++关键字。
true 值代表真。
false 值代表假。
我想大家对这两个并不陌生,在二进制中,由于0表示假,1表示真,所以C++中,当我们在判断真假时,可以直接赋值为0或1来简化代码。虽然在一些情况下并不是很规范。
2.字符常量
字符常量一般是指转义字符。在刚开始教大家换行操作时,想必大家还能想起来 “ \n ” 表示的是换行,“ \n ” 就是一个转义字符。常用转义字符如下表:
转义序列 | 含义 | 转义序列 | 含义 |
---|---|---|---|
\\ | \ 字符 | \n | 换行符 |
\' | ' 字符 | \r | 回车 |
\" | " 字符 | \t | 水平制表符 |
\? | ? 字符 | \v | 垂直制表符 |
\a | 警报铃声 | \ooo | 一到三位的八进制数 |
\b | 退格键 | \xhh . . . | 一个或多个数字的十六进制数 |
\f | 换页符 |
上面两个都是C++自带的常量,因为功能的不同,程序需要的常量也不同,所以系统不可能包含所有的常量,接下来的是我们自己定义一些常量。
3.自定义常量
自定义可以定义很多种类型的常量,比如整型的,浮点型的,字符串型的,都可以。首先我们要说的是两种自定义常量的方法:
(1)使用 #define 预处理器。
这种方法常常用于C语言的数据结构。定义一些数据结构中常用的常量,比如顺序表中的表长、溢出、正确、错误等等。当然用处不止这些。话不多说,用事实说话。
#define PAI 3.14159
#define TRUE 1
#define FALSE 0
#define ERROR -1
#define OK 1
仔细看你会发现,预处理器定义常量时有如下特点:
a.常量名每个字母都大写(当然不是必须这样写,只不过这样写更规范)
b.定义完常量后,后面不加 “ ;” 来表示语句的结束。
(2)使用 const 关键字
使用 const 关键字声明常量格式如下:
const 类型 常量名 = 常量值 ;
举几个例子:
const int LENGTH = 100;
const int WIDTH = 50;
const char NEWLINE = '\n';
三、例题
要求:
1.利用 #define 预处理器定义5个整型的全局常量:IA、IB、IC、ID、IE。
2.利用使用 const 关键字,定义5个字符型的局部常量:CA、CB、CC、CD、CE。
3.将他们输出。
4.在代码中加上单行或多行注释。
5.在代码最前面用多行注释写自己的完成时间及内容。
1.代码
/*
日期:2019.1.31
内容:全局变量、局部变量与常量
*/
//定义五个全局常量
#define IA 5
#define IB 20
#define IC 13
#define ID 14
#define IE 1024
#include<iostream> // 头文件,输入输出时使用
using namespace std; // 引用命名空间
void main() { // 主函数,程序入口
//定义五个局部常量
const char CA = 'l';
const char CB = 'o';
const char CC = 'v';
const char CD = 'e';
const char CE = 'u';
//将定义的常量输出
cout << IA << IB << IC << ID << " " << IE << endl;
cout << CA << CB << CC << CD << " " << CE << endl;
}
2.运行结果
四、思考题
要求:
1.利用 #define 预处理器定义3个整型的全局常量,2个单精度浮点型的全局变量。自由命名。
2.利用使用 const 关键字,定义3个字符型的局部常量,两个双精度浮点型的局部变量。自由命名。
3.将他们输出。
4.在代码中加上单行或多行注释。
5.在代码最前面用多行注释写自己的完成时间及内容。
思考题的答案会在下一次的【C++从入门到熟练练习题】中公布哦,希望大家能够多多练习。