OI 入门
声明
本文语言为 C++ 。
基本语法
基本
语句后面加 ;
。
如果在 Dev C++ 报错了,有两种可能:
- 上一行末尾没有加
;
。 - 写错了。
模板
#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;