C++基础入门讲义

从输入输出、变量和数据类型开始,建立阅读 C++ 程序的基础

本节目标:看懂基本程序框架,正确区分字符和字符串,理解赋值与比较,知道常见整数类型的范围,并能在写题前检查下标、类型和溢出问题。

一、输入与输出

cin:把数据输入程序

int a; cin >> a;

>> 可以理解为“把输入的数据送进变量”。输入多个数据时可以连续写:

int a, b; cin >> a >> b;

cout:把结果输出

cout << a; cout << endl;

<< 可以理解为“把数据送到输出流”。也可以一次输出多个内容:

cout << "answer = " << a << endl;
工具库:cincout 属于 C++ 标准输入输出工具。竞赛中常写 #include <bits/stdc++.h>,它会导入常用的标准库。

二、C++程序基本框架

#include <bits/stdc++.h> using namespace std; int main() { // 程序从 main 函数开始执行 return 0; }
代码作用
#include <bits/stdc++.h>导入常用工具库
using namespace std;使用标准命名空间,省去反复书写 std::
int main()主函数,程序从这里开始运行
{ }表示一段代码的范围
;大多数 C++ 语句的结束标志
易错点:int a = 1; 末尾要有分号;函数、循环和判断的代码块使用花括号。

三、变量与基本数据类型

变量可以理解为一块有名字的存储空间。声明变量时,必须说明它准备保存什么类型的数据。

类型常见大小保存内容例子
int4字节普通整数int a = 1;
long long8字节较大的整数long long sum;
float4字节小数,精度较低float x = 1.3;
double8字节小数,精度较高double y = 1.3;
char1字节单个字符char c = 'a';
bool通常1字节真或假bool ok = true;
string不固定字符串string s = "abc";

赋值:把右边的值放入左边

int a; a = 1; a = a + 2; // a 变成 3

等号 = 在这里表示赋值,不是“判断相等”。

比较:判断两个值是否相等

if (a == 3) { cout << "a 等于 3"; }

两个等号 == 才表示比较相等。

四、字符、字符串与数字

单引号:一个字符

char c1 = 'a'; char c2 = ' '; char c3 = '0'; char c4 = '\n';

字符可以是字母、数字字符、空格或换行符。

双引号:字符串

string s1 = "abc"; string s2 = ""; string s3 = "123";

字符串可以包含多个字符,也可以是空字符串。

写法含义
0整数 0
'0'字符“0”
"0"只包含一个字符的字符串
0 == '0' // false '0' - '0' // 0 string s = "0";
常见错误:char c = "a"; 错误,因为 "a" 是字符串;string s = 'a'; 不符合初学阶段的常规写法,应写成 string s = "a";

五、常用运算符

类别运算符作用示例
算术运算符+ - * / %加、减、乘、整除、取余a % 2 判断奇偶
赋值运算符= += -= *= /= %=给变量赋值或更新变量sum += x;
关系运算符== != > < >= <=比较两个值的关系a >= b
逻辑运算符&& || !连接或取反多个条件x > 0 && x < 10

整数除法与取余

7 / 2 // 3 7 % 2 // 1

两个整数相除时,结果仍是整数;取余常用于判断奇偶、周期和数字拆分。

条件组合

if (age >= 18 && hasCard) { cout << "可以进入"; }

&& 表示同时满足,|| 表示满足其一,! 表示取反。

六、类型转换

不同类型的数据参与运算时,C++ 可能自动转换类型;也可以使用强制类型转换明确指定结果类型。

隐式转换

int a = 3; double b = 2.5; double c = a + b; // a 自动转换为 double

表达式中较小范围的类型通常会转换为较大范围的类型。

显式转换

int a = 7, b = 2; double x = (double)a / b; double y = static_cast<double>(a) / b;

显式转换可以避免整数除法,并让代码意图更清楚。

注意:把小数转换成整数时,小数部分会被舍去;大范围类型转换成小范围类型时,可能发生精度丢失或溢出。

七、布尔值与分支结构

bool 主要有两种取值:true 表示真,false 表示假。

表达式得到 true / falseif 决定是否执行

单分支

if (score >= 60) { cout << "及格"; }

双分支

if (score >= 60) { cout << "及格"; } else { cout << "不及格"; }

多分支

if (score >= 90) grade = 'A'; else if (score >= 60) grade = 'B'; else grade = 'C';

三目运算符

string result = score >= 60 ? "及格" : "不及格";

适合简单的二选一赋值,复杂逻辑仍建议使用 if...else

switch:按固定值分情况

switch (day) { case 1: cout << "星期一"; break; case 2: cout << "星期二"; break; default: cout << "其他"; }
易错点:switch 中通常需要写 break,否则程序会继续执行后面的分支。
int age = 18; bool ok = (age >= 18); if (ok) { cout << "可以进入"; }

常见比较运算符:

运算符含义例子
==等于a == b
!=不等于a != b
><大于、小于a > b
>=<=大于等于、小于等于a >= 18

八、循环结构

循环可以把重复执行的代码集中写一次。例如:

print(1); print(2); ... print(n);

如果每次只改变一个数字,就不需要重复写 n 行代码,只需要一个循环。

for 循环格式

for (1.起点; 2.条件; 4.增量) { 3.循环执行的内容; }
for (int i = 1; i <= n; i++) { cout << i << " "; }

while 循环格式

while (条件) { 循环执行的内容; }

当循环次数明确时常用 for;当重复次数取决于条件是否满足时常用 while

循环检查:起点是否正确?条件是否会结束?每轮是否更新变量?循环体是否可能越界?

九、一维数组

一维数组用于保存一组类型相同的数据,适合处理成绩、序列、计数和批量输入。

int a[100]; for (int i = 0; i < n; i++) { cin >> a[i]; }
写法含义
int a[100];定义最多保存 100 个整数的数组
a[i]访问下标为 i 的元素
i = 0...n-1常见的数组遍历范围

使用场景包括:保存一批输入数据、求最大值最小值、统计总和、逆序输出、查找满足条件的元素。

易错点:长度为 n 的数组通常使用下标 0n-1;访问 a[n] 会越界。

十、二进制与存储单位

计算机底层使用二进制,只能识别 01

bit:一个二进制位

1 个 bit 只能保存一个二进制位,因此有 2 种可能。

01

2 个 bit 有 2 × 2 = 4 种组合;8 个 bit 有:

2^8 = 256 种组合

Byte:字节

8 个二进制位组成 1 个字节:

01010101
1 Byte = 8 bit

大写 B 表示 Byte,小写 b 通常表示 bit。

单位换算
KB1 KB = 1024 B
MB1 MB = 1024 KB
GB1 GB = 1024 MB
TB1 TB = 1024 GB

十一、整数范围与溢出

常见的 32 位 int 使用 32 个二进制位,共有:

2^32 = 4,294,967,296 种编码

有符号整数还要表示正数、负数和 0,因此常见 int 范围是:

int 范围:-2,147,483,6482,147,483,647

当结果可能很大时,应使用 long long

long long sum = 0; for (int i = 1; i <= n; i++) { sum += i; }

例如阶乘、组合数、总路程、很大的前缀和,都要先考虑是否会超出 int

十二、写题前的四步检查

检查1类型

这是整数、小数、字符、字符串还是布尔值?

检查2符号

这是赋值 =,还是比较 ==

检查3范围

计算结果会不会超出 int?需要不需要 long long

检查4下标

数组从 0 开始还是从 1 开始?循环会不会越界?

十三、课堂小测

1. 下列写法正确的是:

A. char c = "a"; B. char c = 'a'; C. string s = 'a'; D. string s = "a";

答案:B、D。单个字符用单引号,字符串用双引号。
2. 判断变量 a 是否等于 5,应写:

A. a = 5 B. a == 5 C. a === 5 D. a => 5

答案:B。== 表示比较相等,= 表示赋值。
3. 下列说法正确的是:

A. 0'0'"0" 完全相同 B. 1 Byte 等于 8 bit C. int 永远能保存任意大的整数 D. 可能溢出时应考虑 long long

答案:B、D。三种“0”的类型不同,整数类型有范围限制。
最后记忆:字符用单引号,字符串用双引号;输入用 cin >>,输出用 cout <<;比较用 ==,赋值用 =;可能超范围就考虑 long long