知识库 / 2026-09-05

C/C++ 快速基础上手教程:一段从 Hello World 开始的旅途

本系列旨在帮助零基础的同学快速上手 C/C++ 语法基础,全程大白话讲解,代码可直接复制进 IDE 运行。本篇整合了三站内容:基础运算与选择结构、循环结构、数组。每一站都配有洛谷练习题,学完即练,包教包会(不包会就多练两遍)。

旅途的开始:基础运算,选择结构

1. 基础运算

这个板块其实没啥可以多讲的,基本是记忆后用一用就会的事。

 + - * / % //加 减 乘 除 模运算(取余数)
a = b = 1; //将1的值赋值给b,再将b的值赋值给a(赋值语句从右往左执行)
a++; a+=1; ++a; //三个式子的结果最后都是a的值被更新为了(a+1),但a++和++a都只能加1,a+= 增加的值可以改变

特殊的性质:当 a++ 和 ++a 被用做赋值时,被赋值的对象会被分别赋于迭代前原本的 a 的值( a++ )和迭代后的 (a+1) 的值( ++a )。 示例代码如下:(可以粘到自己的 IDE 里面尝试运行一下)

#include <iostream>
using namespace std;
int main() {
    int a = 5;
    int b = a++;
    cout << "b1=" << b << endl;
    a = 5, b = ++a;
    cout << "b2=" << b << endl;
    return 0;
}

位运算现阶段使用不多,我在这也不打算讲,想了解的可以去搜「CSDN 位运算」,对应练习题 P4702。

稍微扩展一点常用的数学运算:

#include <cmath> //调用数学运算关键字的头文件
abs(x)      //求x的绝对值
ceil(x)     //向上取整
floor(x)    //向下取整
sqrt(x)     //根号x
pow(x, y);  //x的y次方

对其他运算函数感兴趣的可以自行查阅 cmath 头文件的完整函数表。

2. 选择结构

基本格式:

if(条件){
    如果条件满足则依次执行当前语句;
    条件满足则依次执行当前语句;
    满足则依次执行当前语句;
}else if(第二条件){
    如果第一条件不满足,第二条件满足则依次执行当前语句;
    第一条件不满足,第二条件满足则依次执行当前语句;
    不满足,第二条件满足则依次执行当前语句;
}else {
    如果条件不满足则依次执行当前语句;
    条件不满足则依次执行当前语句;
    不满足则依次执行当前语句;
}

基本判断:(同样在这里暂时不会提及位运算相关判断)

== != < <= > >= //等于 不等于 小于 小于等于 大于 大于等于
&& || //且 或

例题(作业中同步更新):

P5711 闰年判断

旅途的第一级台阶:循环结构

1. for 循环

//常见模板
for(int i = 1; i <= n; i++) {//创建变量i=1作为指针,i从1到n以1为间隔进行遍历,通俗讲就是i会从1变化到n然后停止,每次变化为+1
    //每次i发生变化时执行括号中语句,可为多句。称为循环体
}
//此时举一反三可知:i可以从任意值开始到任意值进行遍历,每次变化也可以自定义,例如:
for(int i = a; i <= b; i+=c)//a,b,c均为可替换值
//同样的变化也不一定是增加,甚至可以乘除
for(int i = n; i >= 1; i--)

根本逻辑:

for:作为关键字表示将开始 for 循环。 (int i = 1; i <= n; i++) { } :for 循环进行的条件,当条件满足时,将执行循环体(大括号中的语句)。内部逻辑为:最开始为创建变量 i 为指针并赋于初始值;中间为条件语句,每次循环进行判断,如果满足条件,则执行后续语句;最后为指针变化语句,改变指针使循环变为有限次并且按需求完成指定的变化。

注意:指针的创建是一次性的,而后续的判断和变化是随每次循环执行的。执行顺序为循环判断 → 循环体(大括号中内容)→ 循环变量自增 → 下一次循环判断。

例如:输入 n 个正整数,输出最大值

输入格式:第一行:一个数 n;第二行:n 个数。

输出格式:一行:最大值。

数值范围:n <= 10000,每次输入值小于 2 的 31 次方(<= 2147483647)。

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    int n, x, max_ = -1;
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> x;
        max_ = max(x, max_);
    }
    cout << max_ << endl;
    return 0;
}

测试数据:

输入:
20
18 36 16 30 40 14 28 12 24 32 10 20 34 38 26 22 4 8 2 6
输出:
40
输入:
10
16 30 34 14 32 2 4 18 36 28 15144400 38 22 26 40 20 8 6 12
输出:
15144400
输入:
10
12 38 14 30 34 16 32 16192976 20 28 26 36 22 40 24 2 8 6 4
输出:
16192976

2. while 循环(不做重点)

基本模板:

while(条件) {
    //循环体
}

同样的:小括号中为条件,大括号中为循环体。多的不赘述,可以在作业题中体会。

习题

B2055

B2071

旅途中的第一家水果店:数组

"小哥买苹果吗"

在后续面向对象开发的过程中,数组无疑是除基本框架外的头等重要的部分,也是 C++ 的半壁江山。在本篇中仅介绍数组的基本概念和一维数组的基本使用方式,在后续函数与算法部分会涉及高维数组。

总之先老老实实把基础打好吧

1. 概念

数组是一组相同类型元素的集合。(对没错就这么点)但基于这一概念,衍生出数组的两个重要特性:

数组中存放的是 1 个或者多个数据,但是数组元素个数不能为 0。

数组中存放的多个数据,类型是相同的。

2. 一维数组

(1)数组创建

一维数组创建的基本语法如下:

 type arr_name[常量值];

存放在数组的值被称为数组的元素,数组在创建的时候需要指定数组的大小和数组的元素类型。

type 指定的是数组中存放数据的类型,可以是: char、short、int、double 等。

arr_name 是数组的名字,这个名字可以自定义,根据实际情况,起得有意义就行。 实则脸滚键盘也行

[] 中的常量值是用来指定数组大小的,根据实际需求指定就行。 为了保证不越界访问,往往会多开辟一些空间,后期题目中会讲到。

可以使用 const int N = 1000 的方式定义常量,来指定数组的大小。

例如:

 const int N = 1000;
 int arr[N];

(2)数组的初始化

在部分情况,数组在创建的时候,我们需要给定一些初始值 ,这种就称为初始化。 那数组如何初始化呢?最基本的,使用大括号进行数组的初始化,将数据放在大括号中:

 //完全初始化,数据会依次放入数组 int arr[5] = {1, 2, 3, 4, 5};
 //不完全初始化 int arr2[6] = {1};
 //第一个元素初始化为1,剩余的元素默认初始化为0 //错误的初始化 - 初始化项太多 int arr3[3] = {1, 2, 3, 4};

重点:

数组的大小是从0 号位开始计算的,也就是说,当创建了一个大小为 10 的数组时,内部的编号只有0~9 号,不包括 10 号。

(3)循环在数组中的运用

当我们需要将 n 个元素从键盘输入进数组时,就需要循环来助力了:

 #include <iostream>
using namespace std;
const int MAXN = 0xfff; //将MAXN定义为16进制下的fff,确保MAXN,即数组大小大于n
int a[MAXN]; //创建大小为MAXN的整型数组
int main() {
    int n;
    cin >> n; //给定的n
    for(int i = 1; i <= n; i++) {
        cin >> a[i]; //从第一位开始,依次存储输入的a[i],直至a[n]。注意:此处也可以从0处开始存储,
    }                //但是同样后期的处理也需要从0处开始
    for(int i = n; i > 1; i--) {
        for(int j = 1; j < i; j++) {
            if(a[j] > a[j + 1])
                swap(a[j], a[j + 1]);
        }
    } //冒泡排序,循环嵌套和排序的基础,在后续算法基础中将详细讲述,此处仅做了解
    for(int i = 1; i <= n; i++) {
        cout << a[i] << " "; //输出数组
    }
    return 0;
}

以上便是冒泡排序的基础代码,不硬性要求掌握完整逻辑,重点理解数组在实例中的使用方法。

练习题:

P1428 小鱼比可爱

P5727 【深基5.例3】冰雹猜想

写在最后

至此,你已经走完了这段旅途的前三站:会算、会选、会循环、会存一排数。下一阶段将进入函数与算法基础的内容,届时难度会陡增,请系好安全带。

如果这篇教程对你有帮助,欢迎点赞收藏; 发现笔误或讲得不清楚的地方,评论区直接拍砖,我会及时修正。