C++ 语法基础
代码框架
如果不想深究背后原理,可以将如下代码框架背下来:
#include <bits/stdc++.h>
using namespace std;
int main() {
// 这里面开始写代码
return 0;
}通俗解释
下面会用比较简单的方式,给刚接触编程的同学解释以上代码的含义和作用。
整体作用
这段代码是一个 C++ 程序的基本框架,就像盖房子先搭好一个架子一样,之后我们可以在这个框架里添加具体的代码,让程序实现我们想要的功能。
代码逐行解释
#include <bits/stdc++.h>- 想象编程就像搭积木,每一块积木都有特定的功能。
#include就像是告诉我们要从一个大仓库里拿出一些积木来用。bits/stdc++.h是一个特殊的仓库,里面装了很多常用的积木(也就是功能代码),有了它,我们后面就可以方便地使用这些功能了。
- 想象编程就像搭积木,每一块积木都有特定的功能。
using namespace std;- 在编程里,不同的人可能会用相同的名字给不同的东西命名,这样就容易混乱。
std就像是一个大盒子,把很多常用的东西都放在里面。using namespace std;这句话的意思就是说,我们直接从这个大盒子里拿东西,不用每次都写这个盒子的名字。
- 在编程里,不同的人可能会用相同的名字给不同的东西命名,这样就容易混乱。
int main()- 这就像是一个指挥中心,程序开始运行的时候,就会先来到这里。
int表示这个指挥中心最后会返回一个整数,就好像是完成任务后给一个信号。main是这个指挥中心的名字,所有的程序都必须有一个叫main的指挥中心。
- 这就像是一个指挥中心,程序开始运行的时候,就会先来到这里。
{和}- 这两个大括号就像是一个房间,我们要写的具体代码都要放在这个房间里。
{是打开房间的门,}是关上房间的门。
- 这两个大括号就像是一个房间,我们要写的具体代码都要放在这个房间里。
// 这里面开始写代码- 这是一个注释,就像是给我们自己或者其他看代码的人留的小纸条,告诉我们可以在这个地方开始写具体的代码,让程序做我们想做的事情。计算机在运行程序的时候会直接忽略这行注释。
return 0;- 这就像是指挥中心完成任务后发出的信号。
return就是返回的意思,0表示一切都正常完成了。
- 这就像是指挥中心完成任务后发出的信号。
变量的概念
在编程的世界里,我们经常需要保存一些数据,就像我们用盒子来装东西一样。变量就像是一个个盒子,每个盒子都有自己的名字,我们可以往里面放不同类型的数据。不同的变量就像不同大小、不同用途的盒子,能装的东西也不一样。
int 类型
定义
int 类型的变量就像是一个能装整数的盒子。整数就是像 1、2、3、 -1、 -2 这样没有小数部分的数。
定义和使用示例
#include <iostream>
using namespace std;
int main() {
// 定义一个名为 age 的 int 类型变量,用来装年龄这个整数
int age;
// 给 age 变量赋值为 15
age = 15;
// 输出 age 变量里装的整数
cout << "年龄是:" << age << endl;
// 定义一个名为 score 的 int 类型变量,并在定义时就赋值为 90
int score = 90;
// 输出 score 变量里装的整数
cout << "分数是:" << score << endl;
return 0;
}在这个例子中,我们先定义了 age 变量,然后给它赋值,之后把它的值输出。又定义了 score 变量,并且在定义的时候就给它赋了值,最后也把它的值输出。
char 类型
定义
char 类型的变量就像是一个只能装一个字符的小盒子。字符可以是字母(a、b、c 等)、数字字符(0、1、2 等)或者一些符号(!、@、# 等)。
定义和使用示例
#include <iostream>
using namespace std;
int main() {
// 定义一个名为 grade 的 char 类型变量,用来装一个字符
char grade;
// 给 grade 变量赋值为 'A'
grade = 'A';
// 输出 grade 变量里装的字符
cout << "成绩等级是:" << grade << endl;
// 定义一个名为 initial 的 char 类型变量,并在定义时就赋值为 'J'
char initial = 'J';
// 输出 initial 变量里装的字符
cout << "名字首字母是:" << initial << endl;
return 0;
}这里我们定义了 grade 和 initial 两个 char 类型的变量,给它们赋值后输出里面装的字符。要注意字符要用单引号括起来。
float 类型
定义
float 类型的变量就像是一个能装小数的盒子。小数就是像 3.14、0.5、 -2.7 这样有小数部分的数。
定义和使用示例
#include <iostream>
using namespace std;
int main() {
// 定义一个名为 height 的 float 类型变量,用来装身高这个小数
float height;
// 给 height 变量赋值为 1.75
height = 1.75;
// 输出 height 变量里装的小数
cout << "身高是:" << height << endl;
// 定义一个名为 price 的 float 类型变量,并在定义时就赋值为 9.99
float price = 9.99;
// 输出 price 变量里装的小数
cout << "价格是:" << price << endl;
return 0;
}在这个程序里,我们定义了 height 和 price 两个 float 类型的变量,给它们赋值后输出里面装的小数。
例题
例题 1:计算两个整数的和
#include <iostream>
using namespace std;
int main() {
// 定义两个 int 类型的变量 num1 和 num2,用来装两个整数
int num1, num2;
// 给 num1 赋值为 5
num1 = 5;
// 给 num2 赋值为 3
num2 = 3;
// 定义一个 int 类型的变量 sum,用来装 num1 和 num2 的和
int sum = num1 + num2;
// 输出 num1 和 num2 的和
cout << "两个整数的和是:" << sum << endl;
return 0;
}这个例题中,我们定义了两个 int 类型的变量 num1 和 num2,把它们相加的结果存到 sum 变量里,最后输出 sum 的值。
例题 2:显示字符和对应的 ASCII 码
#include <iostream>
using namespace std;
int main() {
// 定义一个 char 类型的变量 ch,用来装一个字符
char ch = 'A';
// 输出字符 ch
cout << "字符是:" << ch << endl;
// 把字符 ch 当作整数输出,也就是它对应的 ASCII 码
cout << "对应的 ASCII 码是:" << (int)ch << endl;
return 0;
}在这个例题里,我们定义了一个 char 类型的变量 ch,输出它的值,然后把它当作整数输出,这样就能看到它对应的 ASCII 码。
例题 3:计算物品总价
#include <iostream>
using namespace std;
int main() {
// 定义一个 float 类型的变量 unitPrice,用来装物品的单价
float unitPrice = 2.5;
// 定义一个 int 类型的变量 quantity,用来装物品的数量
int quantity = 3;
// 定义一个 float 类型的变量 totalPrice,用来装物品的总价
float totalPrice = unitPrice * quantity;
// 输出物品的总价
cout << "物品的总价是:" << totalPrice << endl;
return 0;
}此例题中,我们定义了 unitPrice 这个 float 类型变量装单价,quantity 这个 int 类型变量装数量,把它们相乘的结果存到 totalPrice 这个 float 类型变量里,最后输出 totalPrice 的值。
通过这些内容和例题,大家应该对 int、char、float 类型变量的定义和使用有了一定的了解。在编程中,要根据需要存储的数据类型来选择合适的变量类型。
输入与输出
cin 与 cout
#include <iostream>
using namespace std;
int main() {
int x, y; // 声明变量
cin >> x >> y; // 读入 x 和 y
cout << y << endl << x; // 输出 y,换行,再输出 x
return 0; // 结束主函数
}-
"什么是变量?" 可以参考"变量"页面。
-
" 什么是
std?" std 是 C++ 标准库所使用的 命名空间。使用命名空间是为了避免重名。关于命名空间的详细知识,可以参考 "命名空间"页面。
scanf 与 printf
scanf 与 printf 其实是 C 语言提供的函数。大多数情况下,它们的速度比 cin 和 cout 更快,并且能够方便地控制输入输出格式。
#include <cstdio>
int main() {
int x, y;
scanf("%d%d", &x, &y); // 读入 x 和 y
printf("%d\n%d", y, x); // 输出 y,换行,再输出 x
return 0;
}其中,%d 表示读入/输出的变量是一个有符号整型(int 型)的变量。
类似地:
%s表示字符串。%c表示字符。%lf表示双精度浮点数 (double)。%lld表示长整型 (long long)。根据系统不同,也可能是%I64d。%u表示无符号整型 (unsigned int)。%llu表示无符号长整型 (unsigned long long),也可能是%I64u。
除了类型标识符以外,还有一些控制格式的方式。许多都不常用,选取两个常用的列举如下:
%1d表示长度为 1 的整型。在读入时,即使没有空格也可以逐位读入数字。在输出时,若指定的长度大于数字的位数,就会在数字前用空格填充。若指定的长度小于数字的位数,就没有效果。%.6lf,用于输出,保留六位小数。
这两种运算符的相应地方都可以填入其他数字,例如 %.3lf 表示保留三位小数。
"「双精度浮点数」,「长整型」是什么" 这些表示变量的类型。和上面一样,会留到 变量 中统一讲解。
" 为什么 scanf 中有 & 运算符?"
在这里,& 实际上是取址运算符,返回的是变量在内存中的地址。而 scanf 接收的参数就是变量的地址。具体可能要在 指针 才能完全清楚地说明,现在只需要记下来就好了。
" 什么是 \n?"
\n 是一种 转义字符,表示换行。
转义字符用来表示一些无法直接输入的字符,如由于字符串字面量中无法换行而无法直接输入的换行符,由于有特殊含义而无法输入的引号,由于表示转义字符而无法输入的反斜杠。
常用的转义字符有:
\t表示制表符。\\表示\。\"表示"。\0表示空字符,用来表示 C 风格字符串的结尾。\r表示回车。Linux 中换行符为\n,Windows 中换行符为\r\n。在 OI 中,如果输出需要换行,使用\n即可。但读入时,如果使用逐字符读入,可能会由于换行符造成一些问题,需要注意。例如,gets将\n作为字符串结尾,这时候如果换行符是\r\n,\r就会留在字符串结尾。- 特殊地,
%%表示%,只能用在printf或scanf中,在其他字符串字面量中只需要简单使用%就好了。