变量进阶
在C++的世界里,理解和掌握变量类型与作用域是构建程序的基础。本教程将带你了解不同类型的变量以及它们的作用域,帮助你在编程的海洋中航行得更远。
本文包含以下关键内容:
- 字符与布尔类型:探讨了
char
的ASCII编码本质和bool
的逻辑值表示。 - 整数类型:对比了
int
和long long
的存储范围和应用场景。 - 浮点类型:强调了
double
相较于float
在精度和范围上的优势。 - 变量作用域:概述了局部变量、全局变量以及循环内变量的作用域规则。
- 格式化输出:介绍了
printf
函数在输出不同数据类型时的格式化方法,特别是浮点数的精度控制。
# 变量类型
# char(字符)
char
类型在C++中代表一个字符,但实际上它存储的是该字符的 ASCII 码值。ASCII 码是一个用于表示字符的数字编码标准,例如,字符 'A'
对应的 ASCII 码是 65。在计算机中,一切都是数字,char
类型的变量实际上是以数字的形式存储的。这种“横看成岭侧成峰”的视角,让我们能够通过数字来理解和操作字符。
#include <iostream>
int main() {
char letter = 'A';
cout << "字符 '" << letter << "' 的 ASCII 码是: " << (int)letter << endl;
return 0;
}
2
3
4
5
6
7
# bool(布尔)
bool
类型是C++中的一种基本数据类型,用于存储逻辑值 true
或 false
。它通常用于条件判断和控制程序的流程。
bool isEven(int num) {
return num % 2 == 0;
}
2
3
# int(整型)
int
类型是一个32位的整数类型,它的取值范围大约是 long long
类型相比,int
类型的取值范围较小,但在大多数情况下,int
足以满足我们的需求。
int maxIntValue = 2000000000; // int 类型的最大值大约是20亿
# long long(长整型)
long long
类型是一个64位的整数类型,它的取值范围远大于 int
类型。long long
类型的变量可以用来存储非常大的整数值,大约是
long long bigNumber = 1234567890123456789;
# float(浮点型)
float
类型是一个单精度浮点数,用于存储小数。然而,在实际应用中,我们更推荐使用 double
类型,因为它提供了更高的精度。
float pi = 3.14159265f; // 使用后缀 f 来指定这是一个 float 类型的量
# double(双精度浮点型)
double
类型是一个双精度浮点数,它比 float
类型有更大的范围和精度,一般在写算法题的时候,我们都用double
就可以了。
double goldenRatio = 1.618033988749895;
# 变量的作用域
变量的作用域定义了程序中可以访问该变量的区域。C++中的变量作用域可以分为局部变量、全局变量以及在特定代码块(如循环或条件语句)中定义的变量。
# 局部变量
局部变量是在函数或代码块(比如for循环的花括号内,就是一个代码块)内部定义的变量,它们只能在定义它们的函数或代码块内部被访问和修改。
void exampleFunction() {
int localVariable = 10; // 这个变量只在函数内部可见
cout << localVariable << endl;
}
2
3
4
# 全局变量
全局变量是在函数外部定义的变量,它们在整个程序中都是可见的,从定义点开始,直到程序结束。
int globalVariable = 20; // 这个变量在整个程序中都是可见的
void anotherFunction() {
cout << globalVariable << endl; // 可以在这里访问全局变量
}
2
3
4
5
# for循环中的变量
在 for
循环中定义的变量仅在循环体内部有效,循环结束后它们的作用域就结束了。
for (int i = 0; i < 5; ++i) {
cout << "i: " << i << endl;
}
// i 在这里已经不可用了,因为它的作用域已经结束
2
3
4
通过这些基础的示例,我们了解了C++中变量的类型和作用域。记住,编程是一门实践的艺术,不断地编写和运行代码将帮助你更好地理解这些概念。
# printf
printf是C风格的输出函数。
# 示例
printf用%
作为占位符,格式化输出变量的值。
在 printf 函数中,逗号后面也可以跟多个变量,但每个变量都会与格式化字符串中的下一个占位符相对应。
int a = 10;
int b = 20;
printf("hello world\n"); // 输出一句话并换行
printf("a = %d\n", a); // 格式化输出一个整数,换行
printf("a = %d, b = %d\n", a, b); // 格式化输出两个整数,换行
2
3
4
5
在代码中\n
表示换行符,与endl
效果上相同。
在这个例子中,%d 是一个整数占位符,用于输出整数。a 和 b 分别对应两个 %d 占位符。输出结果将是 a = 10, b = 20。
# 保留指定位数的浮点数输出
在这里,我们讲它的一种经典用法,即输出浮点数并保留指定位数。
#include <iostream>
int main() {
double num = 123.456789; // 定义了一个 double 类型的变量 num 并初始化为 123.456789。
// 保留两位小数
printf("%.2f\n", num);
// 保留五位小数
printf("%.5f\n", num);
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
%.2f:这个占位符指定输出一个双精度浮点数(double 或 float 类型),并保留两位小数。2 表示小数点后的数字位数。
%.5f:这个占位符指定输出一个双精度浮点数,并保留五位小数。5 包括小数点后的数字位数。
而用cout实现保留精度,写法比较麻烦,不好记,类似于setPrecision(3)
,不如%.3f
写起来方便。