最不全的C++教程

# 额,大概,应该是最全的保姆级C++教程了吧{.alert .alert-info}

##### 先赞后看好习惯/滑稽

还有啊啊啊啊,我学艺不精,可能误人子弟,有意见记得提哈,

------

# 正片开始{.alert .alert-info}

## 一、C++概述和使用软件 

简而言之,C++ 是一种强类型或静态类型、通用、区分大小写的编译语言,是一种自由形式的编程语言。  除此之外,它还支持面向对象的编程功能以及许多其他功能,如 STL,这使它成为一种突出的语言。 大多数 C++ 编译器都支持 ANSI 标准,这确保了 C++ 是可移植的。
(资料来源:360百科)

编写C++,推荐使用红Dev或蓝Dev,区别的话就是红Dev可以用调试等功能。

![](https://asset.gitblock.cn/Media?name=99E0A13D5000E8F870D4EF2C87779795.png)

![](https://asset.gitblock.cn/Media?name=1A8249B5326212C37028278ADA083A7A.png)

上图是一个蓝Dev编写代码时的图样。图片可能看不太清楚,将就着看吧。在帮助的下方有一个四个颜色不一的正方形组成的大正方形,那是编译,编译右边的盒子是运行。但是我们一般都不用,我们用他们俩右边的他俩的组合体——编译与运行。

![](https://asset.gitblock.cn/Media?name=416AB41AC3C53551B50A774F6F19B538.png)

此处使用蓝框框起来的就是编译与运行啦,写完代码记得按编译与运行来检查代码是否正确哦!

新手注意:本文中代码可能~~注释过多~~,注释就是让这一段代码不运行,在这一行之内、“//”之后的内容将不会运行,从“/*”开始到“*/”的内容也将不会运行。

语句结束,加上';'代表终止;主程序结束,加上“return 0;”,养成好习惯。

## 二、C++基本

### 1.怎么写一个基本的C++代码?

```c++
#include
```

这是一个获取头文件的方法,头文件就是一个工具箱,C++的基本东西都在里面,如果你要搞代码,你就得使用头文件拿工具。我们可以使用不同的头文件,也可以使用多个头文件。

#### 基本头文件

<bits/stdc++.h> 万能头文件

<iostream> in out 输入输出库

<stdio.h>(cstdio) scanf printf 输入输出库(区别后面会讲到)

<cmath> 数学库

后面就不说啦,一般来说我们使用万能头就可以啦~但是萌新注意:前期要养成良好的习惯,先尽量使用其它头文件,这样后期才能使用自如!

第二步,开辟一个命名空间,命名空间是为了解决各个作用域中的工具重名而不知道是哪一个的问题,一般使用std,有时使用ios。

```c++
#include<bits/stdc++.h>
using namespace std;
```

#### 提问时间

SXY:刚刚说开辟一个命名空间是用来解决各个作用域中工具重复的问题,那是不是不可以同时开辟两个命名空间?{.text-primary}

XYF:那必须的。{.text-success}

SXY:那如果我要同时使用std和ios中的工具该怎么办呢?{.text-primary}

XYF:ios(命名空间名)::(两个冒号)+使用工具  即可。{.text-success}

##划重点!!!

C++中,以;作为为每一行的结束(除了最开始头文件和循环等结尾为括号的语句),这意味着我们可以把代码压成最短两行,这种不良行为叫做压行。

接着,运行后面的程序,我们需要主函数(main),主函数的定义方法与其它函数保持一致。这个后面会讲到。注意,这个地方的函数数据类型只能是int。

```c++
#include<bits/stdc++.h>
using namespace std;
int main(){

}
```

### 2.变量、常量与数据类型

变量是一个可变的量,常量是一个不可变的量。例如温度,就是一个变量,圆周率,就是一个常量。(~~不要在评论区跟我讲变量又分为自变量和因变量,什么sinα=cosβ,什么ax²+bx+c~~)

变量和常量的命名规则如下:

(1).变量(常量)名只能由字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。

(2).第一个空必须是字母或下划线。

(3).不能使用C++关键字的名字,以免冲突(关键字就是C++已经设置好的东西,例如刚刚说的include)。

(4).变量名大小写敏感(这意味着A和a不是一个东西)。

正确命名例如awa、_9_9_、qwq123456、_12aW_1234等。

错误命名例如555aWa、-114514-、~变量1~。

而变量又有不同的类型,例如整数类型、小数类型、字符串等。

最基本的整数类型为int,它是32位整数类型,范围为-2^31~2^31-1,最大是21,4748,3647,是二十亿多,这意味着它可以处理10^9这么大的数。(^的意思为幂次方,10^9就是十的九次方)

```c++
int n,m; //可以加逗号同时定义两个哦
```

定义两个整数类型变量,分别是n和m。

常量分为#define宏常量和const常量,一般来说,定义一个常量我们用const。

```c++
const int chou=114514;
```

定义一个整数类型常量chou,它的数值为114514,并且不可修改值。

#### 提问时间

SXY:刚刚说到常量分为#define和const,#define是什么呢?{.text-primary}

XYF:忘了讲了/滑稽#difine宏常量是将所有的一类东西替换成另一类东西(~~汇编语言之父~~),就这么~~简单~~。一般来说,我们在要更改一个值,但这个值又出现了很多次的时候会用define。同时,undef可以取消宏,防止你又把宏搞错了。{.text-success}

```c++
#include<bits/stdc++.h>
using namespace std;
#define int i //宏定义int为i
#undef int //取消宏定义int
```

SXY:#define和const的区别是什么?{.text-primary}

XYF:**请看VCR** {.text-success}

![](https://asset.gitblock.cn/Media?name=306015746CE9A828FA81E3798EE97B65.png)

![](https://asset.gitblock.cn/Media?name=4565B9F581435B81E123CA3B15AB00FF.png)

SXY:6{.text-primary}

SXY:~~为啥聊天记录是断的?~~ {.text-primary}

XYF:**请看VCR** {.text-success}

![](https://asset.gitblock.cn/Media?name=F7D42383F66E1AA7982AA69808509211.png)

SXY:~~6~~ {.text-primary}

有一句至理名言,叫做:

# 十年OI一场空,不开long long见祖宗{.text-center}  

看到这句话,你或许已经知道,long long是个很牛X的东西了,但是它不是。~~只是有一些出题者配的数据点太毒瘤了。~~

long long 的范围是-2^63~2^63-1,比int大,接近10^19,但是只能处理10^18的数.。因此,见到数据范围为1<n<10^18的题目,一定要开long long!!!~~不然就见祖宗去吧~~

```c++
//防止见祖宗的
#include<bits/stdc++.h>
using namespace std;
int main(){
#define int long long
    int a;
    cin>>a; //看就行了,这是输入
    cout<<a; //看就行了,这是输出

```

测试了下应该是可以的,注意之前说的,main()主函数只能是int类型的,所以#define的位置要往后放。

这两个是整数类型的,接下来我们来讲一下字符类型和字符串,整数类型和字符串是最常用的数据类型。

字符类型包括字母、汉字、数字、符号等,但注意这里的数字不可以进行运算,因为它是一个字符,字符下的’1’在计算上的角度就等于汉字一,所以字符一加字符一等于十一,也算是一加一等于十一的由来了。

字符类型使用char,学过python的同学注意啦!区分str和char!python的str其实是string的缩写,而string在C++中是字符串。新手没用万能头的注意!使用string时需要头文件!

```c++
#include<string>
```
加入这一行就可以用啦!

接下来,我们观察一下char和string的区别,还有一个习惯问题。

```c++
#include<iostream>
#include<string>
using namespace std;
int main(){
    char c=’H’;
    string s=”Hello world!”;
}
```

这里char和string的区别包括但不限于char的长度最长只为1,而string的长度随着内容不断延长;习惯上char的单字符使用单引号,而string的字符串使用双引号等。还有就是其实你可以写char c=”Hello world!”,但是这个操作结束c的值为H,也就是第一个字符。

还有啊啊啊啊,经过SXY的提醒修改这个地方,额变量名+'='+内容的形式叫做给变量名赋值内容,也就是更改变量的实际内容为等号后的内容。 

下面我们来说一说布尔类型:布尔类型是一种只包括真假的类型,使用布尔类型可以直接做判断(这句话可以以后再说)。

```c++
#include<bits/stdc++.h>
using namespace std;
int main(){
    bool flag=0;
    flag=1;
}
```

这里flag的0和1分别就是Ture真和False假。所有大于零的数都会被认为是真。

#### 结构体

如果你觉得一种类型还不过瘾,不妨试试结构体类型,你可以定义属于自己的一种类型,使用struct。**这里如果新手同学看不懂,可以先跳过,后面再回来看哦。**

先看代码:

```c++
#include<bits/stdc++.h>
using namespace std;
struct student{ //定义一个数据类型student
    string name; //定义一个字符串name
    int id; //定义一个整数类型id~~(完了这里会见祖宗)~~
    bool is_he_good; //定义一个布尔类型is_he_good
}stu; //定义一个student类型的stu
int main(){
    student s; //定义一个student类型的s
    student luoxiang={.id=31,.is_he_good=1,.name="zhangsan"}; //乱序定义一个student类型的luoxiang,name为zhangsan,id为31,并且he is good
    s.name="shuaige"; //将s的name改为shuaige
}
```
这段代码涵盖了结构体的定义和结构体类型的定义与赋值,我定义了一个结构体,也就是一个数据类型student学生类型,它的成员变量有三个,分别是名字、学号和棒不棒。struct结构体的写法与函数(最基本的就是主函数main)类似,但第一没有圆括号,第二大括号最后要加分号表示结束。在结构体中增加成员变量的方式与定义正常变量的方式一致。同时,我们可以在最后的大括号之后、分号之前写一个名字,这个地方就可以直接定义一个本结构体类型的变量了。同时我们还有一种定义方法,就是依照之前讲的数据类型+空格+变量名,也是可以的。

给结构体数据类型的变量传成员参数时,我们有如下几个方案,大家可以观察上面代码:1.在定义时直接传参,这里的传参如果按照结构体中定义成员的顺序就可以在大括号中直接写成员变量,如果你不按照结构体中定义的顺序,也就是乱序传参,那就是第二种了->;2.乱序传参,这种方式机器无法直接识别,那么我们就需要在每个传进的参数前加上操作符'.',后面接上要传的参数是什么就可以了。

重点:如果你在定义时不直接传参数,那么你就不能一口气传进好多成员变量了。所以你就可以使用第三种方法:变量名+'.'+成员变量名+'='+内容。

### 2.输入与输出

输入输出的方法有两个:一个是cin/cout,还有一个是scanf/printf,~~但是作者不会scanf和printf,这是真的~~

最基本的cin/cout,需要头文件<iostream>,其中i意为input,也就是输入;o意为output,也就是输出。最后的stream意为流,iostream就是输入输出流的意思。

```c++
#include<iostream>
using namespace std;
int n;
int main(){
    cin>>n;
    cout<<n;
}
```

这段代码的意思就是输入一个数(-10^9<n<10^9),然后再输出这个数。cin后面跟的两个符号是尖口朝向变量的,意为将输入传给变量;cout后面的两个符号是开口朝向变量的,意为将变量的值推出。最后不要忘记加上分号哦!

~~scanf我不会,谁会的教一下我我再写~~

OK开始做[题](https://www.luogu.com.cn/problem/B2002)好吧,大家注册一个洛谷账号,这个平台是比较大众的C++在线评测网站。

#### P2002 Hello,World!

**题目描述**

编写一个能够输出 Hello,World! 的程序。

**提示:**

1.使用**英文标点符号**;

2.Hello,World! 逗号后面**没有空格**。

3.H 和 W 为**大写字母**。

**输入格式**

**输出格式**

**输入输出样例**

**输入** #1

**输出** #1

Hello,World!

总结题目,不难得出:1.题目没有输入,直接输出;2.给了输出样例,可以直接复制。~~这不就解决了吗?~~

参考代码:

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

![](https://asset.gitblock.cn/Media?name=B47EFF96A829ECF1BBDFA2682034D891.png)

AC通过。

------

# [语言月赛202208] 你几岁了

## 题目描述

小 A 今年 x 岁。他刚学了英语,想告诉其他人:`I am x years old.`

## 输入格式

输入一个数 x(2 <= x <= 100),代表小 A 的年龄。

## 输出格式

输出一句话。

## 样例 #1

### 样例输入 #1

```
2
```

### 样例输出 #1

```
I am 2 years old.
```

## 样例 #2

### 样例输入 #2

```
5
```

### 样例输出 #2

```
I am 5 years old.
```

## 提示

完成的程序的编写后,请记得在 `Dev-c++` 上编译运行,然后测试样例,比较自己的输出和样例输出是不是**一字不差**。

分析题目,不难得出这道题的输出分为三步:1."I am ";2.x;3.“ years old.”,那么我们就拆分输出就可以了。对了,再说一件事,C++的输出不会自动换行,所以我们可以分三行写这个输出。

参考代码一:

```c++
#include<iostream>
using namespace std;
int x;
int main(){
    cin>>x;
    cout<<"I am ";
    cout<<x;
    cout<<" years old.";
    return 0;
}
```

![](https://asset.gitblock.cn/Media?name=4332A3F538C23040BA864523A1177D0E.png)

AC通过,但是……

SXY:不能一行全输出吗?{.text-primary}

XYF: ~~你压行呗~~ {.text-success}

SXY:那我可以打你几下? {.text-primary}

XYF:好吧,看参考代码二 {.text-success}

参考代码二:

```c++
#include <bits/stdc++.h>
using namespace std;
int x;
int main(){
    cin>>x;
    cout<<"I am "<<x<<" years old.";
    return 0;
}
```

![](https://asset.gitblock.cn/Media?name=C5F8A678F772C026B1211AC76259D299.png)

AC通过,应该……最优吧

# 未完待续啊喂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值