欢迎回来!在上一章,我们学会了如何让计算机开口说话(输出)。现在,我们要学习如何让计算机拥有“记忆”和“计算”的能力,这就是变量和输入。这一章我们将一起探索C++中最重要的基础概念,保证让你轻松掌握!
2.1 变量¶
2.1.1 变量程序范例¶
我们先来看一个简单的程序,它定义了两个变量,并进行加法运算。
#include <iostream>
using namespace std;
int main() {
int a; // 定义一个整型变量,名字叫a
int b; // 定义另一个整型变量b
int c; // 定义变量c,用来存结果
a = 10; // 把10赋值给a
b = 20; // 把20赋值给b
c = a + b; // 计算a加b,结果存到c
cout << c; // 输出c的值
return 0;
}
运行结果:
30
2.1.2 变量的用法¶
什么是变量?¶
变量就像是一个小盒子,我们可以在里面放东西(数据)。每个盒子都有名字(变量名)和能放的东西的类型(数据类型)。
- 变量名:盒子的名字,比如
a、score、age。 - 数据类型:盒子能装什么类型的东西,比如整数、小数、字符等。
常用的数据类型¶
| 类型名 | 中文含义 | 能装什么 | 例子 |
|---|---|---|---|
int |
整型 | 整数 | 10, -5, 0 |
double |
双精度浮点型 | 小数 | 3.14, -2.5 |
char |
字符型 | 单个字符 | ‘A’, ‘b’, ‘9’ |
string |
字符串型 | 一串文字 | “Hello”, “C++” |
注意:
string类型需要包含<string>头文件,但我们先主要学int和double。
变量的定义和赋值¶
- 定义变量:告诉计算机我要一个新盒子,并指定类型。
int age; // 定义整型变量age
double price; // 定义双精度变量price
char grade; // 定义字符变量grade
- 赋值:往盒子里放东西。
age = 10; // 把10放进age盒子
price = 19.9; // 把19.9放进price盒子
grade = 'A'; // 把字符A放进grade盒子
- 定义时直接初始化(一边定义一边放东西):
int age = 10;
double price = 19.9;
char grade = 'A';
变量的命名规则¶
给变量起名字要遵守规则,就像每个人要有合法的身份证号一样:
1. 只能由字母(a-z,A-Z)、数字(0-9)和下划线(_)组成。
2. 不能以数字开头。
3. 不能是C++的关键字(比如 int、return 等)。
4. 尽量起有意义的名字,比如 score 比 s 好。
合法名字:myAge, _temp, number1
非法名字:2num(数字开头),int(关键字),my-name(有连字符)
2.1.3 编程实例讲解¶
实例1:交换两个变量的值¶
题目:有两个盒子a和b,分别装着苹果和橘子,现在要交换它们的内容。
思路:需要第三个临时盒子来帮忙。
#include <iostream>
using namespace std;
int main() {
int a = 5; // 盒子a有5个苹果
int b = 3; // 盒子b有3个橘子
int temp; // 临时盒子
cout << "交换前:a=" << a << ", b=" << b << endl;
temp = a; // 把a的东西放到临时盒子
a = b; // 把b的东西放到a
b = temp; // 把临时盒子的东西放到b
cout << "交换后:a=" << a << ", b=" << b << endl;
return 0;
}
运行结果:
交换前:a=5, b=3
交换后:a=3, b=5
2.1.4 阶段性编程练习¶
- 练习1:定义三个整型变量
x,y,z,分别赋值为 7, 8, 9,然后计算它们的和并输出。 - 练习2:定义两个
double型变量,赋值为 2.5 和 3.7,输出它们的乘积。 - 练习3:定义一个字符变量存储你名字的首字母,输出这个字母。
- 练习4:交换两个变量的值,但不使用临时变量(提示:可以用加法,比如
a = a + b; b = a - b; a = a - b;试试看)。
2.2 输入¶
2.2.1 输入程序范例¶
前面的程序都是我们直接赋值,现在我们要让用户从键盘输入数据。看这个例子:
#include <iostream>
using namespace std;
int main() {
int age; // 定义一个变量存放年龄
cout << "请输入你的年龄:"; // 提示用户输入
cin >> age; // 从键盘读取一个整数,存到age里
cout << "你的年龄是:" << age << "岁" << endl;
return 0;
}
运行示例(假设用户输入15):
请输入你的年龄:15
你的年龄是:15岁
2.2.2 输入的用法¶
cin 的基本用法¶
cin 是 C++ 的输入命令,和 cout 对应。>> 是提取运算符,意思是从键盘输入流中提取数据存到变量里。
- 格式:
cin >> 变量名; - 可以连续输入多个变量:
cin >> 变量1 >> 变量2 >> 变量3;输入时用空格或回车分隔。
输入不同类型的数据¶
int a;
double b;
char c;
cin >> a >> b >> c; // 输入:10 3.14 x
- 输入整数给
int变量。 - 输入小数给
double变量。 - 输入一个字符(注意不要有空格,比如直接输入
x)。
注意事项¶
- 输入的数据类型必须和变量类型匹配,否则可能出错或得到奇怪的结果。
- 输入字符串(string)需要包含
<string>头文件,并用cin >> 字符串变量;,但字符串不能有空格(空格会被当作分隔符)。如果要输入带空格的整行,需要用getline(cin, 变量);,我们以后再学。
2.2.3 编程实例讲解¶
实例2:输入两个数,求它们的和¶
#include <iostream>
using namespace std;
int main() {
int num1, num2;
cout << "请输入两个整数(用空格隔开):";
cin >> num1 >> num2;
int sum = num1 + num2;
cout << "它们的和是:" << sum << endl;
return 0;
}
运行示例:
请输入两个整数(用空格隔开):12 8
它们的和是:20
2.2.4 阶段性编程练习¶
- 练习1:编写程序,让用户输入自己的身高(厘米),然后输出“你的身高是xxx厘米”。
- 练习2:编写程序,输入一个圆的半径(整数),计算并输出圆的周长(周长 = 2 * 3.14 * 半径)。
- 练习3:输入两个小数,计算它们的乘积并输出。
- 练习4:输入一个字符,输出该字符在ASCII表中的下一个字符(比如输入 ‘A’,输出 ‘B’)。提示:字符也可以像整数一样加减。
2.3 变量的运算¶
2.3.1 运算程序范例¶
C++ 可以对变量进行各种数学运算。看这个例子:
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 3;
int sum, diff, product, quotient, remainder;
sum = a + b; // 加法
diff = a - b; // 减法
product = a * b; // 乘法
quotient = a / b; // 除法(整数除法,结果只取整数部分)
remainder = a % b; // 取余(求余数)
cout << "a + b = " << sum << endl;
cout << "a - b = " << diff << endl;
cout << "a * b = " << product << endl;
cout << "a / b = " << quotient << endl;
cout << "a % b = " << remainder << endl;
return 0;
}
运行结果:
a + b = 13
a - b = 7
a * b = 30
a / b = 3
a % b = 1
2.3.2 变量运算的用法¶
算术运算符¶
| 运算符 | 含义 | 例子 | 结果(a=10,b=3) |
|---|---|---|---|
+ |
加法 | a + b | 13 |
- |
减法 | a - b | 7 |
* |
乘法 | a * b | 30 |
/ |
除法 | a / b | 3(注意:整数除法会丢弃小数部分) |
% |
取余(模) | a % b | 1(10除以3余1) |
注意:
- 如果两个数都是整数,/执行整数除法,结果也是整数,直接去掉小数部分(不是四舍五入)。
- 如果想要小数结果,至少其中一个数要是double类型。例如:double c = 10.0 / 3;结果约为 3.33333。
-%只能用于整数。
复合赋值运算符¶
有时候我们需要对一个变量自身进行运算,比如 a = a + 5;,可以简写为 a += 5;。
| 复合运算符 | 含义 | 例子 | 等价于 |
|---|---|---|---|
+= |
加等于 | a += 5 | a = a + 5 |
-= |
减等于 | a -= 3 | a = a - 3 |
*= |
乘等于 | a *= 2 | a = a * 2 |
/= |
除等于 | a /= 4 | a = a / 4 |
%= |
模等于 | a %= 3 | a = a % 3 |
自增和自减¶
a++相当于a = a + 1(先使用a的值,再自增)++a相当于a = a + 1(先自增,再使用a的值)a--和--a同理,是减1。
初学者可以先记 a++ 就是 a = a + 1 的简写。
运算符优先级¶
和数学一样,乘除取余优先级高于加减,括号 () 可以改变优先级。
例如:a + b * c 先算 b * c,再加 a。
(a + b) * c 先算括号里的 a + b,再乘 c。
2.3.3 编程实例讲解¶
实例3:计算圆的面积和周长¶
题目:输入圆的半径(可以是小数),输出面积和周长。公式:面积 = π * r²,周长 = 2 * π * r。取 π = 3.14159。
#include <iostream>
using namespace std;
int main() {
double r, area, perimeter;
const double PI = 3.14159; // 常量,值不能改变
cout << "请输入圆的半径:";
cin >> r;
area = PI * r * r; // 计算面积
perimeter = 2 * PI * r; // 计算周长
cout << "圆的面积是:" << area << endl;
cout << "圆的周长是:" << perimeter << endl;
return 0;
}
实例4:求两个数的平均值¶
#include <iostream>
using namespace std;
int main() {
int a, b;
double avg; // 平均值可能是小数,用double
cout << "请输入两个整数:";
cin >> a >> b;
avg = (a + b) / 2.0; // 除以2.0,确保结果是小数
cout << "平均值为:" << avg << endl;
return 0;
}
2.3.4 阶段性编程练习¶
- 练习1:输入一个三位整数,分离出它的个位、十位、百位,并输出。例如输入 123,输出“百位是1,十位是2,个位是3”。(提示:用除法和取余)
- 练习2:输入两个整数,交换它们的值(使用加减法交换,不用临时变量)。
- 练习3:输入一个华氏温度,转换为摄氏温度。公式:摄氏 = (华氏 - 32) * 5 / 9。
- 练习4:输入一个秒数(整数),转换为小时:分钟:秒的形式。例如输入 3661,输出 1小时1分钟1秒。
2.4 第2章编程作业¶
现在,你已经学会了变量、输入和运算,来挑战一下综合题目吧!
作业1:计算总分和平均分¶
编写一个程序,要求用户输入三门课的成绩(整数),计算总分和平均分(平均分保留一位小数)。
输入示例:
请输入三门课的成绩:80 90 75
输出示例:
总分:245
平均分:81.7
作业2:简单的计算器¶
编写程序,让用户输入两个整数,然后分别输出它们的和、差、积、商(如果第二个数是0,则输出“除数不能为0”)、余数。
输入示例:
请输入两个整数:10 3
输出示例:
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3
10 % 3 = 1
作业3:数字反转¶
输入一个三位整数,输出反转后的数(例如输入 123,输出 321)。注意:如果个位是0,反转后要输出没有前导0的数,比如输入 120,输出 21。
提示:先分离个十百,再组合。
作业4:猜数字游戏(拓展)¶
程序随机生成一个1-100之间的整数(用 rand() 函数),让用户猜,每次告诉用户猜大了还是猜小了,直到猜中为止。(提示:需要用到 #include <cstdlib> 和 #include <ctime>,以及 srand(time(0)); 初始化随机种子,rand() % 100 + 1 生成1-100的随机数。)这个题目有点挑战,但你可以尝试!
恭喜你完成了第2章的学习!你已经掌握了C++编程中最核心的基础:变量、输入和运算。