若本文有错误的地方(包括语法错误,错别字,内容错误)或者有排版不美观,没有用LaTeX或KaTeX渲染的数学或算法公式,请读者在评论区予以指正,提出宝贵意见.
像英语,汉语,计算机的01
语言一样, C + + C++ C++也是一门语言,有着固定的语法与框架,并且可以通过一些程序来编译,使之能够成为我们能够看到的程序.例如,EXE
,dYSM
等,这些都是可以直接运行的程序,显示的内容都是程序中想要表达的(也就是输入输出的)内容.
前面说了,C++需要一定的程序来编译才能编程可以直接运行的程序,让其他不懂C++的人看懂或者是将一些复杂,繁多的计算交给计算机来完成,这些程序就叫做编译器.那么,现在主流的编译器有什么呢?
答案就是VS Code
,Microsoft
公司开发的一个巨好用的编译器,外观简洁大方,程序比较小,不怎么占用空间,并且功能非常强大,世界上很多计算机科研人员都在用.
官网地址:
code.visualstudio.com
其他的一些用户配置自己在网上可以查一查,推荐只使用三个插件,Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code
,C/C++
,C/C++ Compile Run
,另外,AI插件还可以使用AWS Toolkit
,完全免费,有亚马逊用户即可.
既然环境配置好了,那么,C++的基本框架又如何写呢?
代码如下:(一定要背)
#include
using namespace std;
int main()
{
return 0;
}
#include
的下面还可以再加上一些其他的头文件,有其他的用途,后面再说iostream
在竞赛或其他编译环境中,还能用bits/stdc++.h
来代替,相当于写了几乎所有的头文件了,灰常方便.现在,来一句一句地解释.
#include
等以#
开头的行:
这是头文件行,可以有无数行(别把电脑写爆即可),在其中有很多C++的基础性命令,是C++编译的基础.这些都可以将C++代码"Translate成计算机能看懂的01
代码,从而实现可执行的目标.
using namespace std;
: 注意后面的分号,一定不可少,后面讲解时请注意何时必须加分号,何时禁止加分号.这句话实际上就是使用了一个std
的命名空间,将std
中包含的函数,命令等"导入"我们的代码,使我们能用其中的一些便捷的函数,不必像其他语言一样自己编写.
int main(){...}
:主函数,程序从这里开始.电脑识别完include
行,using
行以及主函数外的变量声明后,直接进入int main()
函数,其中,它的内容都写在花括号内.
return 0;
:注意后面的分号,这句话写在main
函数的最后(花括号前面),用来结束程序.**Tips: 这只是在main函数中的用法,其他的函数还有其他的用法$$**注意,main
函数中的语句均写在两花括号之间的行内,按照层级进行缩进,这样使代码层次清晰,可读性很高,并且看起来也很舒服.例如,可以如此缩进:
#include
using namespace std;
int main()
{
int a;
cin>>a;
for(int i=1;i<=n;i++)
{
int b;
while(1)
{
int temp;
cin>>temp;
if(0)
{
return 0;
}
}
}
return 0;
}
return 0;
既必须写在main
函数的结尾,又可以写在程序的中间,在程序的中间结束整个程序.变量是C++中必不可少的一个元素.变量,变化的量
,是C++中用来储存数值(字符,字符串等)的元素,分为可变变量
与不可变变量
(虽然有点怪,但可以当做是一个固定的数值,只是这个量不可变).每一个变量都有它对应的内容,以及它的固定的占用空间,以及名字.
变量的声明可以在函数内,也可以在函数外,但是,无论怎样,变量的声明后面__必须__跟上一个分号
.
例如:
#include
using namespace std;
int a;
int b;
int AMlhd;
long long c;
long long AMlhdlonglong;
char d;
string AMlhdsstring;
short AMlhd;
bool AMlhdsbool;
......
int main()
{
int p;
int AMlhd;
......
return 0;
}
......
处可以添加很多很多声明变量的语句下面来讲解每一种变量的用法,用途与规则.
总体格式:
<变量类型(int,char等)>+' '+<变量名称(可以随便取,但不能重复)>+';'
int
:最常用的变量类型范围,储存的都是整数,范围是 − 2147483648 2147483647 -2147483648~2147483647 −2147483648 2147483647,占用4个字节.
long long
:最大的整型变量,范围是 − 9223372036854775808 9223372036854775807 -9223372036854775808 ~9223372036854775807 −9223372036854775808 9223372036854775807.
short
:整型变量类型,范围是 − 32768 32767 -32768~32767 −32768 32767.
float
:单精度浮点类型.
double
:双精度浮点类型.
long double
:超精度浮点类型.
char
:字符类型,具体可以上网查一下,遵循 A S C I I ASCII ASCII值, 0 255 0~255 0 255.
string
:字符串类型,可以储存字符串,(竟然也可以储存汉字…).
对于每一个变量,都有一个它对应的值.在函数外命名是,默认为 0 0 0.那么,如何赋值呢?
格式:
<变量名>+'='+<算式>
算式的格式和数学上基本相同,注意 × \times ×应为 ∗ * ∗, ÷ \div ÷应为 / / /, a b a^b ab应为函数 p o w pow pow.
其中还可以写自增语句.例如: a = a + 10 a=a+10 a=a+10,意思就是 a a a自增10.
为了从键盘(或其他文件源)输入或在屏幕上(或在其他文件里)写入(显示,输出)一些内容,这时,就需要用到输入输出语句.
输入输出可以用cin,cout语句实现.
格式:
cin>>变量1>>变量2>>...>>变量n;
cout<<内容1<<内容2<<...<<内容n;
输入输出还可以用printf,scanf语句实现.
格式:
printf+'('+<格式>+','+<变量或内容集>+')'+';'
scanf+'('+<格式>+','+<变量或内容集>+')'+';'
主要用于快读等方面,具体内容自行查询.
速度比较:
cin,cout最慢,printf,scanf其次,getchar,putchar最快.但是,使用cin,cout时可以在main函数中(cin,cout语句前)写上std::ios::sync_with_stdio(false);
,就可以提高速度了.
示例:
#include
using namespace std;
int a,b,c,d,e,f,g,abc;
int main()
{
cin>>a>>b;
cout<<a+b;
printf("%d",a*b);
scanf("%d%d",&c,&abc);
......
return 0;
}
数组在C++中有着不可撼动的地位.它可以用来存储一组数,它们都是同一类型,并且在同一维上意义相同.这样,我们就可以用数组来存储它们.
数组和变量一样,声明既可以在函数内,也可以在函数外.
格式:
一维数组:
<变量类型>+' '+<变量名称>+'['+数组大小+']'+';'
二维数组:
<变量类型>+' '+<变量名称>+'['+数组大小+']'+'['+数组大小+']'+';'
三维数组:
<变量类型>+' '+<变量名称>+'['+数组大小+']'+'['+数组大小+']'+'['+数组大小+']'+';'
…
以此类推.
访问时,可以如此访问:
变量名[i1][i2]...[in]
示例:
#include
using namespace std;
int a,b;
int c[1001][1001];
int k[12345];
int main()
{
cin>>a>>b;
cin>>c[123][456];
cin>>k[2834];
return 0;
}
当我们想要判断一个语句的正确性,或者对于不同的变量值,有不同的做法,我们就需要用到if
语句.
格式:
if(<判断语句或运算>)
{
语句
}
struct
后面的花括号必须加分号,其他的花括号后都不能加分号.if()
后不加分号下面来讲解判断语句.
判断语句有两个值, 0 0 0和 1 1 1,当值为0时,不会执行if中的语句;反之亦然.判断语句有这几种运算符:
==
,判断是否等于,注意是两个等号.例如:a==b
就是判断a是否等于b.若a和b相等,则其值为1,反之则为0.
!=
,判断__是否不等于__,例如,a!=b
就是判断a是否不等于b.若a\neqb
,则为1,反之,则为0.
>=
,判断是否大于等于.
>
,判断是否大于.
<=
,判断是否小于等于.
<
,判断是否小于.
!
,非运算符判断一个数是否为0(判断是否错误),也可用==0
.
下面来讲解运算.
运算很好理解,就是如果运算的值为0,则为0;若不为0,则为1.其他用法均相同.
一个问题,多个判断怎么办?
你可以写多个嵌套的if,在if的花括号中写上if,那么还可以怎么做呢?
用&&
或||
.&&
指的是并且,||
指的是或者,&&的优先级要高于||,故会先执行&&,再执行||.
例如:
if(a==b || b==c && c==a || 123==234)
{
if(123==a)
if(...)
{
...
}
}
a=0,b=0,o=0,p=0;
int a=0,b=0,abcdef=143249873;
但是,问题来了.如果不符合if中的判断,怎么办呢?是不是需要繁琐的反着写呢?
这时,我们可以用else
来判断不符合__离其最近的if__的判断的情况,用法和if完全相同,只是将if中的条件全部反着写.
当我们有多个判断同一个数字的值的判断时,就需要用到switch.注意,只有判断__同一个变量__并且是__判断其数值,也就是是否是…时(==)__才可以用switch.
格式:
switch(<变量名>)
{
case <数值>:语句1;语句2;...;语句n;break;
case <数值>:语句1;语句2;...;语句n;break;
......
case <数值>:语句1;语句2;...;语句n;break;
default:语句1;语句2;...;语句n;
}
case
意思是是否为该数值.若是,则执行中间的语句,执行完毕后退出switch.
default
指的是如果case中的都不能满足变量的值时,执行下面的内容.
if和switch的示例:
#include
using namespace std;
int abc;
int main()
{
cin>>abc;
switch(abc)
{
case 1: cout<<"值为1"<<endl;break;
case 2: cout<<"值为2"<<endl;break;
default: cout<<"既不是1也不是2"<<endl;
}
if(abc==456)
cout<<"你发现了秘钥,恭喜!!!"<<endl;
else
cout<<"你没有发现秘钥!!!"<<endl;
return 0;
}