C++教程

AMlhd主站

C++教程(持续更新)

若本文有错误的地方(包括语法错误,错别字,内容错误)或者有排版不美观,没有用LaTeX或KaTeX渲染的数学或算法公式,请读者在评论区予以指正,提出宝贵意见.

版本: 1.0.0

目录:

  • 入门
    • C++语言
    • C++编译环境
    • C++基本结构
    • C++的基本语法
      • 声明变量语句
      • 赋值语句以及运算语句
      • 输入输出语句
      • 数组
      • 判断语句
        • if判断
        • switch判断
      • 循环语句
        • for循环
        • while循环
        • 其他循环
    • 函数
    • 数组
    • 结构体
    • 其他一些知识
      • 文件操作
  • 算法
  • STL及其他

一. 入门

1. C++语言


像英语,汉语,计算机的01语言一样, C + + C++ C++也是一门语言,有着固定的语法与框架,并且可以通过一些程序来编译,使之能够成为我们能够看到的程序.例如,EXE,dYSM等,这些都是可以直接运行的程序,显示的内容都是程序中想要表达的(也就是输入输出的)内容.

2. C++的编译环境


前面说了,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,完全免费,有亚马逊用户即可.

3. C++的基本结构


既然环境配置好了,那么,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函数的结尾,又可以写在程序的中间,在程序的中间结束整个程序.

4. C++的基本语法


(1). 声明变量语句

变量是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:字符串类型,可以储存字符串,(竟然也可以储存汉字…).

(2). 赋值语句以及运算语句

对于每一个变量,都有一个它对应的值.在函数外命名是,默认为 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.

(3). 输入输出语句

为了从键盘(或其他文件源)输入或在屏幕上(或在其他文件里)写入(显示,输出)一些内容,这时,就需要用到输入输出语句.

1> cin,cout语句

输入输出可以用cin,cout语句实现.

格式:

cin>>变量1>>变量2>>...>>变量n;

cout<<内容1<<内容2<<...<<内容n;

  • 注意: 变量的类型可以是上面提到的任意一种类型,包括后面要讲的数组.
  • 注意后面的分号以及大于号和小于号的方向.
  • 只能写在函数内.
2> printf,scanf语句

输入输出还可以用printf,scanf语句实现.

格式:

printf+'('+<格式>+','+<变量或内容集>+')'+';'

scanf+'('+<格式>+','+<变量或内容集>+')'+';'

  • 注意,只有在输入和输出很大时才会用这两个语句,平常不很用.
  • 其他具体情况请上网查询,这里不仔细讲述.
3> getchar,putchar语句.

主要用于快读等方面,具体内容自行查询.

速度比较:

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;
}
(4). 数组

数组在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;
}
  • 注意,访问时,不能超过数组的大小.
  • 重点: 数组的编号是从 0  空间 − 1 0~空间-1 0 空间1的,也就是说, i n t a [ 1000 ] int a[1000] inta[1000]没有 a [ 1000 ] a[1000] a[1000],只有 a [ 0 ] , a [ 1 ] , . . . a [ 999 ] a[0],a[1],...a[999] a[0],a[1],...a[999].

5. 判断语句

(1). if判断

当我们想要判断一个语句的正确性,或者对于不同的变量值,有不同的做法,我们就需要用到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(...)
        {
            ...
        }
}
  • 其中,我们可以讲一个if看成一个语句.也就是说,当if中只有一个if时,花括号可以省去.另外,语句可以用逗号连接,例如:
    a=0,b=0,o=0,p=0;
    int a=0,b=0,abcdef=143249873;

但是,问题来了.如果不符合if中的判断,怎么办呢?是不是需要繁琐的反着写呢?

这时,我们可以用else来判断不符合__离其最近的if__的判断的情况,用法和if完全相同,只是将if中的条件全部反着写.

(2). switch判断.

当我们有多个判断同一个数字的值的判断时,就需要用到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;
}

你可能感兴趣的:(c++,c++,开发语言)