LogoCSP Wiki By Yundou
基础知识

C++语法基础

代码框架

如果不想深究背后原理,可以将如下代码框架背下来:

#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  // 这里面开始写代码
  return 0;
}

通俗解释

下面会用比较简单的方式,给刚接触编程的同学解释以上代码的含义和作用。

整体作用

这段代码是一个C++程序的基本框架,就像盖房子先搭好一个架子一样,之后我们可以在这个框架里添加具体的代码,让程序实现我们想要的功能。

代码逐行解释

  1. #include <bits/stdc++.h>
    • 想象编程就像搭积木,每一块积木都有特定的功能。#include 就像是告诉我们要从一个大仓库里拿出一些积木来用。bits/stdc++.h 是一个特殊的仓库,里面装了很多常用的积木(也就是功能代码),有了它,我们后面就可以方便地使用这些功能了。
  2. using namespace std;
    • 在编程里,不同的人可能会用相同的名字给不同的东西命名,这样就容易混乱。std 就像是一个大盒子,把很多常用的东西都放在里面。using namespace std; 这句话的意思就是说,我们直接从这个大盒子里拿东西,不用每次都写这个盒子的名字。
  3. int main()
    • 这就像是一个指挥中心,程序开始运行的时候,就会先来到这里。int 表示这个指挥中心最后会返回一个整数,就好像是完成任务后给一个信号。main 是这个指挥中心的名字,所有的程序都必须有一个叫 main 的指挥中心。
  4. {}
    • 这两个大括号就像是一个房间,我们要写的具体代码都要放在这个房间里。{ 是打开房间的门,} 是关上房间的门。
  5. // 这里面开始写代码
    • 这是一个注释,就像是给我们自己或者其他看代码的人留的小纸条,告诉我们可以在这个地方开始写具体的代码,让程序做我们想做的事情。计算机在运行程序的时候会直接忽略这行注释。
  6. 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;
}

这里我们定义了 gradeinitial 两个 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;
}

在这个程序里,我们定义了 heightprice 两个 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 类型的变量 num1num2,把它们相加的结果存到 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 的值。

通过这些内容和例题,大家应该对 intcharfloat 类型变量的定义和使用有了一定的了解。在编程中,要根据需要存储的数据类型来选择合适的变量类型。

输入与输出

cincout

#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

scanfprintf 其实是 C 语言提供的函数。大多数情况下,它们的速度比 cincout 更快,并且能够方便地控制输入输出格式。

#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 型)的变量。

类似地:

  1. %s 表示字符串。
  2. %c 表示字符。
  3. %lf 表示双精度浮点数 (double)。
  4. %lld 表示长整型 (long long)。根据系统不同,也可能是 %I64d
  5. %u 表示无符号整型 (unsigned int)。
  6. %llu 表示无符号长整型 (unsigned long long),也可能是 %I64u

除了类型标识符以外,还有一些控制格式的方式。许多都不常用,选取两个常用的列举如下:

  1. %1d 表示长度为 1 的整型。在读入时,即使没有空格也可以逐位读入数字。在输出时,若指定的长度大于数字的位数,就会在数字前用空格填充。若指定的长度小于数字的位数,就没有效果。
  2. %.6lf,用于输出,保留六位小数。

这两种运算符的相应地方都可以填入其他数字,例如 %.3lf 表示保留三位小数。

"「双精度浮点数」,「长整型」是什么" 这些表示变量的类型。和上面一样,会留到 变量 中统一讲解。

" 为什么 scanf 中有 & 运算符?" 在这里,& 实际上是取址运算符,返回的是变量在内存中的地址。而 scanf 接收的参数就是变量的地址。具体可能要在 指针 才能完全清楚地说明,现在只需要记下来就好了。

" 什么是 \n?" \n 是一种 转义字符,表示换行。

转义字符用来表示一些无法直接输入的字符,如由于字符串字面量中无法换行而无法直接输入的换行符,由于有特殊含义而无法输入的引号,由于表示转义字符而无法输入的反斜杠。

常用的转义字符有:

  1. \t 表示制表符。
  2. \\ 表示 \
  3. \" 表示 "
  4. \0 表示空字符,用来表示 C 风格字符串的结尾。
  5. \r 表示回车。Linux 中换行符为 \n,Windows 中换行符为 \r\n。在 OI 中,如果输出需要换行,使用 \n 即可。但读入时,如果使用逐字符读入,可能会由于换行符造成一些问题,需要注意。例如,gets\n 作为字符串结尾,这时候如果换行符是 \r\n\r 就会留在字符串结尾。
  6. 特殊地,%% 表示 %,只能用在 printfscanf 中,在其他字符串字面量中只需要简单使用 % 就好了。

练习:

Status
Problem
Tags