Date: Mar 17 2020
Tag: Code
这是一个从零开始的C++教程,主要教基本语法,算法和数据结构。
本人是个OIer,更注重算法类的设计,不善于生活应用程序,但希望能将编程共同的算法精华传给更多人。
算法的写法不是最重要的,更重要的是算法和实际问题结合的思维,学习编程对学习生活也大有所益。
希望能有更多的Coder加入!
Menu
- 1.C++编辑器和环境
- └─ 1.1 C++IDE
- 2.C++基础语法
- ├─2.1 第一个程序HelloWorld.cpp —— 简单的输出与输入
- │ ├─cin & cout
- │ └─scanf & printf
- ├─2.2 “a+b”Problem —— 变量的定义及运算
- ├─2.3 “To be or not to be” —— if判断语句(计划中)
- │ ├─if & else
- │ ├─if条件中的逻辑运算
- │ └─switch & case
- ├─2.4 “Sumary 1 to 100” —— for & while循环 (计划中)
- │ ├─for
- │ └─while
- ├─2.5 “the game of a salty fish” —— 数组的存储及应用 (计划中)
- └─2.6 Point —— 简单了解指针 (计划中)
1.C++编辑器和环境
1.1 C++IDE
学习一门语言当然要先有一个IDE与之配套啦。
以下是2个推荐的C++のIDE
1.Dev-C++
轻量级的编辑器,使用方便,下载简单。
主要的问题是调试能力比较弱。
[Download from sourceforge.net]
2.Vscode
轻量版Visual Studio,可自定义化模块、拓展,使用方便,界面清爽。
主要问题是安装须配置调试环境,不方便临时安装,建议安装在常用电脑上。
[Download from microsoft]
建议使用Code runner插件,支持多语言,不用配置环境,只需提前安装好对应语言的编译/解释器。
网上关于这两个软件的安装教程众多详细,不在此赘述。
2.C++基础语法
2.1 第一个程序HelloWorld.cpp —— 简单的输出与输入
好啦,安装完了IDE,就开始写第一个属于自己的HelloWorld程序吧!
- 1.打开你的编辑器
- 2.创建一个test.cpp
- 3.输入以下代码
1
2
3
4
5
6
7
8
9
10
11
12
13//引用头文件
//#include <官方头文件>
//#include "自己的头文件/代码"
using namespace std; //引用std命名空间,包括cin,cout函数等
int main() //定义主程序入口,程序从这里开始运行
{ //使用{}大括号限定范围
cout << "Hello World!" << endl; //输出Hello World/endl表示换行
return 0; //结束主程序,并返回0(运行正常)
} - 4.[DevC++]按f11编译运行这段代码。
怎么样?看到输出的Hello World了吗?这就是属于你的第一个程序了。
2.1.a cin & cout
cin cout 顾名思义 c in 是输入 c out 是输出。
cin cout 是c++特有的输入输出方式,属于namespace std
如果不在程序开头写 using namespace std;
在调用时需要添加 std::表示调用std命名空间
具体方法会在下方样例程序中展示
我们继续修改上个程序,并展示不使用using namespace std的调用cin cout方法。
1 | 众所周知,每个OIer都有对Visual Girlfriend的幻想,我们来写一个对VG(幽灵军校[确信])表白的程序。 |
1 |
|
这里总结一下cin和cout的优缺点:
- Advantages
- 使用方便,在输入较少数据和字符串的时候,快捷方便
- 对数据有一定自适应能力,不容易出错。
- Disadvantages
1.处理大量数据的时候速度远不如scanf和printf,1e5个以上的输入输出需求不建议使用
2.使用cout输出时,要””和变量拼接,比较麻烦。如
1 | cout<<my_name<<" love "<<girl_name<<"!"; |
2.1.b scanf & printf
我们还是以上面两个程序为模板,只不过把cin&cout换成scanf和printf
1 |
|
可以很明显发现:
- scanf和printf用法相似,格式为(“%xxx”,value);
- %xxx是控制符
- 其中%xxx代表后面的变量,%xxx与变量类型对应关系如下如果想要用scanf输入一个数字则需以下格式:
1
2
3
4
5
6
7
8
9
10//%控制符关系表
%d int(十进制)
%x/%X 16进制输出某数
//16进制下A-F字母大小写,与x大小写相同
%lld long long int
%f float
%lf double
%LLF long double
%s string //字符串 char[]
%c charP.S.输入字符串时(%s)不应+&,因为字符串本身就是一个指针,一个内存地址,不需要添加&转译地址。1
2
3int a;
scanf("%d", &a); //&表示取a在内存中的地址,将输入内容写到a的内存地址里
printf("%d", a); //print时不需要加&,直接输出a的变量值
同时scanf和printf可以同时输入输出多个数值:
1 | int a, b; |
在printf中无法使用endl换行,但可以使用”\n”表示换行,一下还有一些使用技巧
1 | \n 换行 |
2.2 “a+b”Problem —— 变量的定义及运算
题源:LuoguP1001
[题目描述]
输入两个整数 a,b 输出它们的和(|a|,|b|<=10^9)。
[分析]
很简单的题目,只要定义a,b两个变量,进行输入,输出a+b即可
1 |
|
提交一发轻松AC。
很显然,上述解题过程中,我们使用了a,b两个int变量
- 但如果我们对题目稍加修改
- 变为:
输入两个数 a,b 输出它们的和(保留3位小数)(|a|,|b|<=10^9)。
[分析]
这里没有说明a,b是整数,可能存在浮点数,这里我们就需要用到float浮点数
1 |
|
- 那假如a,b的范围再大一些呢?
输入两个整数 a,b 输出它们的和(|a|,|b|<=10^12)。
此时 a+b <=2e12 超过了2^31,也就是int的最大范围
为了解决这个问题,我们可以使用long long来代替int即可
可见我们应当注意数据类型的大小范围,来选取数据类型。
以下是各数据类型的范围
1 | int -2^31 ~ 2^31 整数 %d |
今天先写到这里,上网课去了,该教程会保持更新。
– Mar 17 8:17