💻

CSP-J/S 编程学习

首页 C++语法 数据结构 算法 数学 初赛知识点 工具/大纲

📝 C++语法目录

  • 01-C++编程入门
  • 02-C++变量常量,输入输出
  • 03-C++标准数据类型
  • 04-C++格式化输入输出
  • 05-选择结构
  • 06-循环结构
  • 07-一维数组
  • 08-二维数组
  • 09-字符串
  • 10-函数
  • 11-结构体和联合体
  • 12-指针

01-C++编程入门

编程定义

生活中的程序

  • 人脸识别、指纹识别。
  • 无人驾驶、扫地机器人。
  • 外卖、地图导航。
  • QQ、微信、抖音、小红书。
  • 人工智能软件,DeepSeek、ChatGPT、豆包等

编程又称编写程序,程序是为了解决某个问题而编写的计算机能识别和执行的指令集合。

什么是C++

编程语言是和计算机沟通的方式

C++是计算机能认识的一门功能强大的高级语言

计算机有众多语言,但是计算机真的可以听懂这些语言吗?实际上,计算机只可以识别二进制 0 和 1。其他的内容都不能够识别,这种由 0 和 1 构成的语言就是机器语言。

而 C++、Python 等语言就是计算机提供给我们人类和计算机交互的接口。

算法竞赛

  • CSP系列, CSP-J、CSP-S、NOIP、NOI等等
  • ACM/ICPC
  • LeetCode

学习规范

  • 课上的例题要按照要求自己动手写代码。
  • 例题要求必须掌握,习题在例题熟练情况下再完成。
  • 课后习题不要照标准程序抄,先自主思考。

C++语言基本结构

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

cout 算术运算符

cout << "Hello World!" << endl;
cout << 1+2 << endl;
cout << 10/3 << endl;
cout << 10*1.0/3 << endl;
cout << 10%3 << endl;

C++ 中除法是整除,两个整数相除,结果会舍弃小数。如果要保留小数,需要将分子或分母变为小数。

02-C++变量常量,输入输出

什么是变量?

变量是程序可操作存储区的名称。顾名思义,就是可以改变的量。

变量声明的语法格式

数据类型 变量名;
数据类型 变量名 = 初始值;
例如:
int a;  // 定义一个整型变量

变量赋值

赋值号即 =,表示将 = 右边的值赋给 = 左边的变量,而并不是相等的意思。

int a;
a = 1;
a = 2;
a = 3;  // 最终输出a的值为3

变量命名规范

规则:由字母、数字和下划线组成的符号串。

  • 数字不能开头
  • 不能使用 C++ 关键字
  • 区分大小写

cin输入数据

int a;
cin >> a;
cout << a;

常量

常量是指在程序执行过程中其值不会发生变化的标识符。

const 类型名 常量名 = 常量值;
#define 常量名 常量值

const double PI = 3.1415926;
#define PI 3.1415926

03-C++标准数据类型

整型

整型最常见的就是 int,占 4 个字节,表示范围为 -2^31 ~ 2^31-1。

cout << sizeof(int) << endl;
输出:4

浮点型

float 占 4 字节,保留有效位数 7 位;double 占 8 字节,保留有效位数 16 位。

#include <iomanip>
const double PI = 3.14159265358;
cout << fixed << setprecision(6) << PI;

字符型

字符常量是由单个字符组成,所有字符采用 ASCII 编码,共有 128 个字符。

类型转换

  • 隐式转换:编译器自动转换
  • 显式转换:使用强制类型转换运算符
// 隐式转换
int a = 5;
double b = a;

// 显式转换
double c = 3.14;
int d = (int)c;

04-C++格式化输入输出

C++格式化输出

控制符功能
endl输出一个新行符
fixed按定点格式显示浮点数
setprecision(n)设置浮点数输出精度
setw(n)设置输出宽度

C语言风格格式化输出

// scanf输入
int a;
scanf("%d", &a);

// printf输出
printf("我今年%d岁了", a);
printf("%.2f", 3.14159);

05-选择结构

布尔类型

bool a = true, b = false;
cout << a << " " << b;  // 输出:1 0

关系运算

>、<、>=、<=、==、!=

逻辑运算

&&(与)、||(或)、!(非)

if 语句

if (条件) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}

switch语句

switch(表达式){
    case 常量1:
        // 语句
        break;
    case 常量2:
        // 语句
        break;
    default:
        // 默认语句
}

06-循环结构

for 循环

for(初始化; 条件; 增量) {
    循环体;
}

// 常见写法
for(int i = 0; i < n; i++)    // 循环n次
for(int i = 1; i <= n; i++)   // i从1到n

while 循环

while(条件) {
    循环体;
}

do...while 循环

do {
    循环体;
} while(条件);

循环基本问题

  • 计数问题:cnt++
  • 累加问题:s += x
  • 累乘问题:r *= x
  • 最值问题:maxn = max(maxn, x)

循环跳出

  • continue:重新开始循环
  • break:跳出当前循环
  • return:返回函数

07-一维数组

为什么需要数组?

用一个数组变量存储所有的学员分数:int a[50];

一维数组定义

数据类型 数组名[数组长度];
int a[10];   // 合法
int b[n];    // 非法(n是变量)

数组初始化

int a[5] = {1,2,3,4,5};
int b[10] = {0,1,2,3,4};  // 其余为0
int c[5] = { };            // 全部初始化为0

全局变量与局部变量

  • 全局变量:定义在所有函数外,自动初始化为0,占用内存空间
  • 局部变量:定义在函数内,默认随机值,占用栈空间

08-二维数组

二维数组定义

数据类型 数组名[行数][列数];
int a[3][4];  // 3行4列的二维数组

二维数组初始化

int a[2][3] = {
    {1,2,3},
    {4,5,6}
};

int b[2][3] = {1,2,3,4,5,6};  // 按行顺序初始化

二维数组遍历

for(int i = 0; i < n; i++) {
    for(int j = 0; j < m; j++) {
        cin >> a[i][j];
    }
}

09-字符串

C风格字符串

char str[100];
cin >> str;          // 输入字符串(空格结束)
cin.getline(str, n); // 输入整行(包含空格)

C++字符串

#include <string>
string s;
cin >> s;
getline(cin, s);  // 读取整行

字符串常用操作

s.length()     // 获取长度
s.empty()      // 判断是否为空
s.substr(pos, len)  // 截取子串
s.find(t)      // 查找子串位置
s + t          // 字符串拼接

10-函数

函数定义

返回类型 函数名(参数列表) {
    函数体;
    return 返回值;
}

函数分类

  • 无参无返回值
  • 有参无返回值
  • 无参有返回值
  • 有参有返回值

函数重载

同名函数但参数列表不同(参数个数或类型不同)。

递归函数

函数调用自身,需要有终止条件。

int factorial(int n) {
    if(n == 1) return 1;
    return n * factorial(n-1);
}

11-结构体和联合体

结构体定义

struct 结构体名 {
    数据类型 成员名1;
    数据类型 成员名2;
    ...
};

struct Student {
    string name;
    int age;
    double score;
};

Student s;
s.name = "小明";
s.age = 10;

结构体数组

struct Student stu[100];
for(int i = 0; i < n; i++) {
    cin >> stu[i].name >> stu[i].score;
}

联合体

联合体的所有成员共享同一块内存空间,同一时刻只能有一个成员有效。

12-指针

什么是指针?

指针是一个变量,它存储的是另一个变量的内存地址。

指针声明

数据类型 *指针名;
int a = 10;
int *p = &a;  // p指向a的地址

指针操作

*p    // 解引用,获取指针指向的值
&a    // 取地址,获取变量a的地址
p++   // 指针移动

指针与数组

int a[5] = {1,2,3,4,5};
int *p = a;  // p指向数组首元素
cout << *p;  // 输出1
cout << *(p+1);  // 输出2

CSP-J/S 编程学习教程 | 版权所有

↑