C++教程

这是我自创的C++教程捏~
藏起来的东西居然被你发现了! \color{white}{藏起来的东西居然被你发现了!} 藏起来的东西居然被你发现了!

一、搭建C++编程环境

1.下载


先在网上找到一个你喜欢的IDE,下载即可。如Dev-C++, Visual Studio, Visual C++, …
以下默认IDE为Visual Studio。

2.创建项目

欢迎界面:
在这里插入图片描述
如何创建项目:
点新建项目:
在这里插入图片描述
点确定:
在这里插入图片描述
点下一步:
在这里插入图片描述
点确定,好,项目创建完毕!
点右边“解决方案资源管理器”:
在这里插入图片描述
右键“源文件”,选择“添加”,点“新建项”:
在这里插入图片描述
下面的“名称”可以随便更改,只要最后是.cpp就行。
点“添加”:
在这里插入图片描述
以后写代码就在这里写:
在这里插入图片描述

注:因为我写的代码不是真正的代码,有错误,所以会提示语法错误(下标红色波浪线) \color{gray}{注:因为我写的代码不是真正的代码,有错误,所以会提示语法错误(下标红色波浪线)} 注:因为我写的代码不是真正的代码,有错误,所以会提示语法错误(下标红色波浪线)

点击“本地Windows调试器”运行。

二、Hello World

1.正常

直接输入以下代码:

#include <cstdio>

using namespace std;

int main()
{
	printf("Hello World!\n");
	getchar();
	return 0;
}

样子:
在这里插入图片描述
运行一下,出来了个大黑框,长这样:
在这里插入图片描述
按一下Enter,或者按右下角的 × \times ×都可以关掉。

2.实验

1.内容

接着,做个实验:把程序双引号中的Hello World!\n改成其他的(一定要加双引号),比如ooo中文English普通符号+-*/特殊符号△▲☺☀▁▂▃▄▅▆▇█ʊəнъㅆㅘ㉮₃²双引号"反斜杠-\beautiful反斜杠在末尾呢?\

2.结果

  1. ooo 输出结果ooo,符合预期
  2. 中文English 输出结果中文English,符合预期
  3. 普通符号+-*/ 输出结果普通符号+-*/,符合预期
  4. 特殊符号△▲☺☀▁▂▃▄▅▆▇█ʊəнъㅆㅘ㉮₃² 这个要看你电脑怎么样,IDE怎么样。。我的结果是特殊符号△▲??▁▂▃▄▅▆▇█??нъ?????,后面的输出不了
  5. 双引号" 错误,没法运行
  6. 反斜杠-\beautiful 输出反斜杠eautiful,看起来很奇怪,以后再探讨
  7. 反斜杠在末尾呢?\ 错误,没法运行

三.输入,输出,变量

1.代码模板

这是写代码时候的模版

#include <cstdio>

using namespace std;

int main()
{
	//在这里写上你的代码。。。
	//代码最后面一定要加上;(分号)
	getchar();
	return 0;
}

2.输出

输出通常会用printf,比如前面说的Hello World,用的就是printf("Hello World!")最后一定要加上个分号别问我为什么,问C++创始人去

输出数字

先上代码:

#include <cstdio>

using namespace std;

int main()
{
	printf("%d", 114514);
	getchar();
	return 0;
}

输出结果:114514

发现了什么了吗?

输出数字时要在printf的两个双引号之间加上%d,再在双引号后面加上逗号,逗号后面加上数字。(中间的空格可加可不加)

数字+文字

还可以这样:

#include <cstdio>

using namespace std;

int main()
{
	printf("我今天吃了%d个苹果", 3);
	getchar();
	return 0;
}

输出结果:我今天吃了3个苹果
输出数字的时候还可以和文字一起输出,就像这样,printf会把%d自动换成数字。

多个数字

还有这样:

#include <cstdio>

using namespace std;

int main()
{
	printf("妈妈去超市买了%d个苹果,%d个梨,%d卷纸巾", 123, 456, 114514);
	getchar();
	return 0;
}

输出结果:妈妈去超市买了123个苹果,456个梨,114514卷纸巾

发现:妈妈好有钱啊输出的时候还可以有多个数字,printf会把第一个%d换成第一个数字,第二个%d换成第二个数字…以此类推
但是,如果两个%d一起,这两个数字会连在一起,比如printf("%d%d", 123, 456);会输出123456。

输出小数

printf功能非常强大,还可以输出小数(其他的也可以,只是暂时不需要):

#include <cstdio>

using namespace std;

int main()
{
	printf("%g+%g=%g", 1.2, 3.4, 4.6);
	getchar();
	return 0;
}

输出结果:1.2+3.4=4.6
输出小数和输出整数一模一样,只是把%d换成了%g而已。
别的教材中可能会说,不是%g,是%f,%lf这些,其实都差不多,但是有细微的差别:%f输出会有6位小数,%g是有几位就输出几位,比如把例子中的%g改成%f,就是1.200000+3.400000=4.600000。

算式

还可以输出算式,不过这不是printf的功能,在C++哪里都可以用:

#include <cstdio>

using namespace std;

int main()
{
	printf("%g*%d+%g=%g\n", 1.25, 8, -9.0, 1.25*8+(-9));
	getchar();
	return 0;
}

输出结果:1.25*8+-9=1
这个就不多说了。

注意

注意:不能把%d对应的数字打成小数,也不能把%f对应的数字打成整数,要不然会是0或者乱码(如1911829346)

2.变量

C++有个东西呢,叫变量,它常常把人们搞得头昏脑涨,失魂落魄,不明所以,泪如雨下,熬夜到凌晨3点半。。。
好了不废话了,我们先来看看这个:

定义

#include <cstdio>

using namespace std;

int main()
{
	int IAKIOI;
	getchar();
	return 0;
}

输出结果:没输出
这些代码定义了一个变量叫做IAKIOI,可以存放整数,还没存放:

int 					IAKIOI              ;
 ↓                         ↓                ↓
这个变量可以存放整数	这个变量叫IAKIOI 这里也要加分号

类型

(int是integer的缩写)

类型前面的东西范围(太大存不下)
整数int − 2 64 → 2 64 − 1 -2^{64} \to 2^{64}-1 2642641
小数double我有一个绝妙的数字,可以这里空白太小,写不下
逻辑(后面会讲)bool 0 , 1 0,1 0,1(假,真)
字符(就一个)char不同的不一样:实际上有用的是 0 → 127 0 \to 127 0127

注意,这里和printf不同,把小数放到整数变量里面没错,只是小数部分没了,把整数放到小数变量里面就更没错了,相当于小数放进去。

变量名命名规则:

  1. 只能由数字,字母和下划线组成
  2. 数字不能在开头
  3. 不能是关键字(关键字是什么后面讲)

比如:abcdef可以,Apple可以,I_AK_IOI_AND_IOI_AK_YOU可以,a1145141919810可以,s123!2j不可以,一个小变量要看IDE,标准是不支持,有些IDE有额外拓展,1gexiaobianliang不可以,int不可以,long不可以,I see you不可以。

初始化,赋值,注释

#include <cstdio>

using namespace std;

int main()
{
	int a = 1;
	getchar();
	return 0;
}

输出:还是没有输出
这个程序定义了一个变量a,可以存放整数, = 1代表一开始就放进去一个整数1。
所以最后a里面是1。

#include <cstdio>

using namespace std;

int main()
{
	int a = 2; //初始化
	a = 312; //赋值
	getchar();
	return 0;
}

输出:没有。
大家可能有疑惑:直接在代码里写初始化,赋值这些字,不会报错吗?其实大家注意到没有,这些子前面都有////代表注释,专门在代码里面写解释,从//到这一行末尾的字全都没用,会被忽略掉,就是给人看的。
同样的注释符号还有/**/,从/**/之间的字也是全都被忽略掉,但是如果只有/*或者只有*/,会报错。

回归正题(敲黑板):
int a=2;这个大家都熟悉,那么a=312呢?
a=312就是把原本a里面的数字扔掉(不管他是几,都扔),然后再把312放进去(因为只有一个位置)。
也就是,执行完后,a就会是312而不是2了,再也找不到2了,所以操作时要慎重。

自更新

变量还可以自更新,比如:

#include <cstdio>

using namespace std;

int main()
{
	int a = 1; //放进去1
	a = a + 3; //把1扔出来,放进去a+3,也就是1+3,也就是4
	a /= 2; //把4扔出来,放进去a/2,也就是4/2,也就是2
	getchar(); //最后a是2
	return 0;
}

输出:无
a = a+3这行代码是怎么执行的呢?

  1. 先算出a+3
  2. 计算a+3时,发现有变量a,替换成a里面的东西,变成1+3
  3. 计算1+3=4
  4. 把a原来的东西扔出来
  5. 把刚刚算出来的4放进去

所以执行完后,a=4。
a /= 2又是什么意思呢?
其实,a /= 2就相当于a = a/2
举一反三:

  1. a += x就相当于a = a + x
  2. a -= x就相当于a = a - x
  3. a *= x就相当于a = a * x

输出

再也不是漆黑一片啥都没有咯~
输出,也用printf,只是把数字改成了变量名而已。

#include <cstdio>

using namespace std;

int main()
{
	int a = 21; //a = 21
	a += 7;     //a = 28
	a /= 7;     //a = 4
	a -= 7;     //a = -3
	a *= 7;     //a = -21
	a = -a;     //a = 21
	printf("a是:%d", a);
	getchar();
	return 0;
}

输出:a是:21
这个相信大家都能看懂,就不多说了啊~

输入

以前我们的程序都是每次运行都一样,想要不一样就得修改我们的程序,但是现在我们有了一种在程序运行的时候就可以“修改”我们的程序的方法:输入
比如,我们写了一个计算器,要计算1+3,可以是这样:

#include <cstdio>

using namespace std;

int main()
{
	int a = 1;
	printf("%d+3=%d", a, a+3);
	getchar();
	return 0;
}

要计算2+3,就得把1改成2。
但是现在,我们要计算n+3,这个n要求不能修改程序,并且每次都可以用敲键盘来决定,这就要用到输入
正像输出有一个printf函数,输入也有一个函数,叫做scanf
用法:scanf("类似printf的字符串,比如%d,%d%d,%lf%d", &变量名1, &变量名2, ...);
还有,scanf输入小数就不能用%g了,要用%lf,不过敲键盘的时候不用6位小数。
注意

  1. 变量名前面一定要加&
  2. 变量名前面一定要加&
  3. 变量名前面一定要加&
  4. 重要的事情说三遍!

比如:

#include <cstdio>

using namespace std;

int main()
{
	printf("妈妈买了一些苹果,我吃了3个,还剩几个呢?\n妈妈买了几个苹果呀:");
	int apples;
	scanf("%d", &apples);
	apples -= 3;
	printf("还剩%d个苹果。\n", apples);
	getchar();
	return 0;
}

怎么输入呢?先敲键盘输入数字,再按下Enter,表示“我输完了”
第一次输入:123
第一次输出:

妈妈买了一些苹果,我吃了3个,还剩几个呢?
妈妈买了几个苹果呀:(在这里输入了123)
还剩120个苹果。

第二次输入:114514
第二次输出:

妈妈买了一些苹果,我吃了3个,还剩几个呢?
妈妈买了几个苹果呀:(在这里输入了114514)
还剩114511个苹果。

看,输出不一样了!

注意看
双引号里面的\n是什么意思呢?表示的是“换行”,也就相当于我们按下Enter键,换新的一行。

注意!!!

scanf不能像printf一样在里面还插入文字,如果插入了的话,比如scanf("妈妈买了几个苹果呀:%d", &apples);,就会先一直等待,知道输入字,然后还会一直等待,知道输入第二个,然后会等待输入,然后会等待输入…输入完这些之后,在输入数字才能行,很多人都会犯这个错误,尤其是从Python转来的

四、表达式,分支,循环,数组

注!

我的代码里会有{ },有的教程里说如果只有一条语句(比如printf("Hello World!");就是一条),就不用加{ },但是可能会犯糊涂。(我同学就在最近犯了这个错,if错位。。。惨)

表达式

数学表达式

数学程序
a + b a+b a+ba+b
a − b a-b aba-b
a × b a \times b a×ba*b
a ÷ b a \div b a÷ba / b如果 a, b均为整数,则结果向0取整。如果要得到精确的结果,需要1.0*a/b
a b a^b abpow(a, b)使用前需要再整个程序的最前面加上 #include <cmath>
a \sqrt{a} a sqrt(a)使用前需要再整个程序的最前面加上 #include <cmath>
{ [ ( ) ] } \{[()]\} {[()]}()数学中的所有括号在编程中都是小括号。

常用的就这么多,其他自己查。
比如: a × ( b + c ÷ d ) a \times (b+c \div d) a×(b+c÷d) 就是 a*(b+1.0*c/d)

逻辑表达式

这个。。。学过逻辑学的会更好理解,但是我也没学过。

逻辑程序
a与b(a,b同时成立)a && b
a或b(a,b至少一个成立)a ∣ ∣ || ∣∣ b (你猜我为什么不用Markdown?)
非a(a成立->不成立 a不成立->成立)!a

在程序中,定义一个逻辑变量(假设名字为miao)代码为:

bool miao;

或者

bool miao = ......;

把…替换成逻辑表达式。
当然bool变量也可以像普通变量一样赋值:

bool miao = ......;
miao = miao || !miao; //莎士比亚电路(有兴趣的自己查)

附吐槽:CSDN的KATEX真不好用,字都是斜着的
附连续吐槽:CSDN的表格真难用,都不能有字符 |

分支

分支就是这个:
在这里插入图片描述
我看见有人一脸懵逼。。。
没事,更简单的解释:分支就是分支。
好吧,分支就是选择,有一个逻辑表达式(见上),如果为真,则执行…。如果为假,执行…。
比如:
老师改作业时,如果对,打钩,如果错,打叉。这就是分支。
大概就是这样:

如果 题目正确:
	打钩
否则:
	打叉

if

在C++中,分支用if关键字:

if(problem_correct)
{
	printf("√");
}
else
{
	printf("×");
}

那么else是什么意思呢?

else

else代表否则。
if(problem_correct)(代表如果):√
else(代表否则):×

多条件判断

if(第一个条件)
{
	aaa
}
else if(第二个条件)
{
	bbb
}
else if(第三个条件)
{
	ccc
}
......
else if(倒数第二个条件)
{
	yyy
}
else
{
	zzz
}

暂时不用理解原理。。。。。。
什么?你想知道原理?

if(...)
{
	...
}
else
{
	if(...)
	{
		...
	}
	else
	{
		if(...)
		{
			...
		}
		else
		{
			......
		}
	}
} //请自行理解。

switch-case

switch(abcdefg)
{
case a: ......; break;
case b: ......; break;
case c: ......; break;
...
case z: ......; break;
default: .....; break; //可以不加

相当于:

if(abcdefg == a) ......
else if(abcdefg == b) ......
else if(abcdefg == c) ......
...
else if(abcdefg == z) ......
else ......

为什么要有个break呢?
不加试试
有时候故意踩坑是一种好的学习方法(真的)

#include <cstdio>

using namespace std;

int main()
{
	int x;
	printf("输入一个正整数x:");
	scanf("%d", &x);
	switch(x)
	{
		case 1: printf("1\n");
		case 2: printf("2\n");
		case 3: printf("3\n");
		case 4: printf("4\n");
		case 5: printf("5\n");
		default: printf("都不是。\n");
	}
	//自己看看吧~
	return 0;
}

循环

循环,就是重复很多次。
比如我们要输出一百个 Hello World!,要不要写100次printf呢?呵呵。

for循环

代码:

#include <cstdio>

using namespace std;

int main()
{
	for(int i=1;i<=100;i++)
	{
		printf("Hello World!\n"); //输出
	}
	getchar();
	return 0;
}

如果你很闲的话,数一数有多少个 Hello World!,是100个没错QwQ。
我就写了一个Hello World,所以1=100。
Why?

#include <cstdio>

using namespace std;

int main()
{
	for(int i=1;i<=100;i++)
	{
		printf("循环:这是第%d次,共100次\n", i); //输出
	}
	getchar();
	return 0;
}

是不是明白一点了?这里新建了一个变量 i,从1开始,到100结束。
所以这个for循环相当于:

int i = 1;
if(!(i <= 100)) 结束。
printf("循环:这是第%d次,共100次\n", i);
i++;
if(!(i <= 100)) 结束。
printf("循环:这是第%d次,共100次\n", i);
i++;
if(!(i <= 100)) 结束。
printf("循环:这是第%d次,共100次\n", i);
............

哦,所以

for(a; b; c)
{
	d
}

相当于

a;
if(!(b)) 结束。
d
c
if(!(b)) 结束。
d
c
......

while循环

f o r \color{purple}{for} for 变成紫色的了!
w h i l e \color{purple}{while} while 也变成紫色的了!
while循环格式:

while(a)
{
	b
}

简单吧?
说不简单的是小狗!
汪汪汪!
while循环:

if(a) 结束。
b
if(a) 结束。
b
if(a) 结束。
b
......

难吧?
说不难的是小猫!
喵呜!喵呜!喵呜!
附:

for(a; b; c)
{
	d
}

=

a
while(b)
{
	d
	c
}

数组

数组是什么?
是很多数。
啊?????
比如你可以定义一个数组,长度为10000000000000000,相当于10000000000000000个变量。
不过这些变量都是在你自己电脑里的,先看看你电脑有多少内存,看看会不会爆。。
-----------------------------------------不是很华丽的分割线:上面的都是废话------------------------------------------

不完全是废话。 \color{white}{不完全是废话。} 不完全是废话。
定义数组:

int arr[1005];

这个数组里有1005个变量,他们分别是:
arr[0] arr[1] arr[2] arr[3] arr[4] arr[5] … arr[1004]
注意:没有arr[1005]!
通常,我们在定义数组时会多定义5~10个数,比如需要1000个数,我们就会定义int arr[1005],使用arr[1]到arr[1000]。
斐波那契数列:

#include <cstdio>

using namespace std;
//数组一定要定义在这里!
//这里!
//这里!
int feibonaqi[1005];
int main()
{
	feibonaqi[1] = feibonaqi[2] = 1; //新奇的写法:连续赋值
	// 相当于feibonaqi[1] = 1; feibonaqi[2] = 1;
	for(int i=3;i<=1000;i++)
	{
		feibonaqi[i] = feibonaqi[i-1] + feibonaqi[i-2]; //这一项相当于前面两项之和
	}
	printf("斐波那契数列第1000项:%d\n", feibonaqi[1000]);
	return 0;
}

注意!以上程序不可以正确求出斐波那契数列第1000项!!!会溢出!!!(详见三.输入,输出,变量->2.变量->类型)
懂?
吃饭去。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值