OI 入门

声明

本文语言为 C++ 。

基本语法

基本

语句后面加 ;

如果在 Dev C++ 报错了,有两种可能:

  1. 上一行末尾没有加 ;
  2. 写错了。
模板
#include <bits/stdc++.h>//头文件,这是万能头文件,可以代替竞赛中需要的所有头文件
using namespace std;//使用命名空间
int main()//主函数
{
    
    return 0;//主函数的结束命令
}

变量和数组

定义

C++ 有这些类型:

  • 数字

    short               //没啥用,加快速度%0.001
    unsigned short      //更没啥用
    int                 //最常用,范围 -2147483648~2147483647
    unsigned int        //unsigned 表示无符号,不能存负数,但绝对值差不多大两倍,空间占用相同
    long long           //对于范围大于int范围的数据适用,空间占用大一倍,速度慢一丁点
    unsigned long long
    __int128            //巨大范围,空间是long long的两倍,但必须配快读快写,慢一些,基本不用
    unsigned __int128   //最没用
    
  • 字符

    char  //字符,空间最小
    string//字符串
    
  • 单一变量

    bool//存储bool值,1为真,0为假,可以放在条件框中,空间最小
    

定义方式均为 【类型】 【变量名或数组名】 (注意中间有空格)。
其中,数组定义需要在后面加 [] 填数组大小。

示例:

int a;
int a[10];
杂项

数组和变量不能重名。
当然,如果你在某一行需要用某个变量,那定义语句应该在它上面的某行,一切变量都在 using namespace std; 之下。

变量可以定义成全局变量或局部变量,全局变量是在所有函数外定义的,可以在任何地方使用,局部变量只能在定义它的函数内使用。

还有一些指定类型变量,不常用,有时候为了加速可以用 register ,表示指定寄存器变量。
注意, register 只能定义局部变量。

定义:

register int a;

输入输出

cin 和 cout

字符

string str;//这个等同于 char str[10]
cin >> str;
cout << "【字符串】";

cout << "\n";//换行
cout << endl;//换行(巨慢)

变量

int a;
cin >> a;
cout << a;
scanf 和 printf

字符

char c;
scanf("%s",c);
printf("%s",c);

char str[10];
scanf("%s",str);
printf("%s",str);

printf("\n");//换行

变量

int a;
scanf("%d",&a);
printf("%d",a);

long long b;
scanf("%lld",&b);
printf("%lld",b);
getchar 和 putchar

这两个函数都只能输入输出单个字符,但是超级快。

getchar() 输入一个字符。
putchar(‘【输出的字符】’) 输出一个字符。

利用它们的速度可以写出快读和快写。

inline int read()
{
    register int x=0;bool f=1;register char c=getchar();
    while(c<48||c>57){if(c=='-') f=0;c=getchar();}
    while(c>=48&&c<=57){x=x*10+(c^48);c=getchar();}
    return f?x:-x;
}
inline void write(int x)
{
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+48);
}

这几行应该放在一切变量之上,最好紧贴在 using namespace std; 下面。

用法:

int a=read();
比较几种输入输出的速度

\(cin:scanf:read≈120:13:10\)

\(cout:printf:write≈13:12:10\)

运算

++ 将一个变量加一。
-- 将一个变量减一。
+ 加。
- 减。
* 乘。
/ 除。
+= 将一个变量加上某个数。
-= 将一个变量减去某个数。
*= 将一个变量乘上某个数。
\= 将一个变量除上某个数。
! 取反,写在条件前面,条件成立返回假,反之返回真。

注意, ++-- 可以写在变量前或后,但写在后面不会被立即执行。

如:

int a=1;
cout << a++;
cout << a;

输出 \(1\)

int a=1;
cout << ++a;

输出 \(2\)

条件判断

逻辑运算

在条件判断语句中有一些逻辑运算,如果返回真则语句执行,反之则不执行。

== 判断左右是否相等。
> 判断左边是否大于右边
< 判断右边是否大于左边
&& 在左右条件均成立时返回真,否则返回假
|| 在左右有任意一个条件成立时返回真,否则返回假

if 语句
if(【判断条件】)
{
    【条件成立之后你要干的事】
}

后面可以加 else 语句,为条件不成立时干的事。

例如判断 \(a\) 是否大于 \(b\) 就该这么写:

if(a>b)
{
    cout << "Yes";
}
else
{
    cout << "No";
}

如果括号中只有一行,可以省略括号写成一行,俗称压行。

if(a>b) cout << "Yes";
else cout << "No";
if-else if 语句

用法差不多,但是注意, if-else if-else 语句中,每个 else if 只有在上一个 if 或 else if 条件不成立时才会执行,也就是说,在整个 if-else if-else 语句中,只有一个语句中的代码会被执行。

  • else if 可以添加若干个。
if(a>b) cout << ">";
else if(a==b) cout << "=";
else cout << "<";

循环

for

用法:

for(int 【循环变量】=【起始数据】;【终止条件】;【改变循环变量】)
{
    【代码】
}

for 循环和 while 循环的最大差别在于 for 循环内带有循环变量,它在循环变量满足某个条件时终止。
for 循环的优势在于它的循环变量,可以以一定规律增加循环变量,数组读入用 for 循环就十分方便

int a[10];
for(int i=1;i<=10;i++) cin >> a[i];
while

用法:

while(【运行条件】)
{
    【代码】
}

while 循环的括号内是它的运行条件,没有循环变量。
while 循环的优点是比 for 更快,而且通用任何条件作为循环条件。

如用 while 循环可以求出一个数字的每一位之和:

int x,sum=0;
cin >> x;
while(x>0)
{
    sum+=x%10;
    x/=10;
}
cout << sum;
posted @ 2023-01-02 18:58  wangxuzhou  阅读(140)  评论(0编辑  收藏  举报