信息学奥赛

文件输入输出

#inlucde<bits/stdc++.h>
freopen("hello.in","r",stdin);
freopen("hello.out","w",stdout);


fclose(stdin);
fclose(stdout);

头文件

#include < bits/stdc++.h > 万能头文件

#include < iostream > cin cout的头文件  基本输入流

#include < cstdio >scanf printf的头文件  定义输入/输出函数

#include < cmath > 调用数学函数

#include < cstring >   #include < string >调用字符数组和字符串函数

#include < algorithm > 调用标准算法库

#include < iomanip > setiosflags( )setprecision( )头文件

变量和基本类型

  整型常量:
    十进制形式:99、-1
    八进制形式:以 0 开头,由 0~7 构成
    十六进制形式:以 0x 开头,由 0 ~ 9,A ~ F 构成
  实型常量:3.1、6.1E+2
  字符常量:’ k ’ 、’ 5 ’ 、’ % ’

全局变量

  定义在所有函数之外,初始值为0
  定义在全局,运行速度比局部快

局部变量

  定义在函数内的变量,初始值为随机数
  全局变量和局部变量重名,以局部变量为准

数据类型

类型类型存储范围
整数类型int
long long
− 2 31 -2^{31} 231 ~ 2 31 − 1 2^{31}-1 2311   ~   /   ~   1e9   ~   /   ~   1 0 9 10^{9} 109
− 2 63 -2^{63} 263 ~ 2 63 − 1 2^{63}-1 2631   ~   /   ~   1e18   ~   /   ~   1 0 18 10^{18} 1018
浮点数类型float
double
小数点后6~7位
小数点后15~16位
字符类型char一个字符
逻辑值booltrue或者false

整数类型存储范围正数-1 包含整数0

typedef long long ll;  将long long进行重命名

0转化为false    1或非0转化为true

类型转换(小→大)

char→int→long long→double

1.0*int=double

强制数据类型转换:(数据类型)(变量)

输入输出

scanf和printf

# 只用于基本数据类型 int、long long、float、double、char

输入类型符号输出类型符号
int%dint%d
long long%lldlong long%lld
float%ffloat%f
double%lfdouble%f
char%cchar%c
char[ ]%schar[ ]%s

# char[ ]输入不用地址符

特殊输出格式

格式控制符类型功能
%xdint右对齐x位输出,不足空格补齐
%0xdint右对齐x位输出,不足0补齐
%-xdint左对齐x位输出,不足空格补齐
%-0xdint左对齐x位输出,不足0补齐
%.xf浮点数输出 x 位小数
setprecision( x )浮点数输出 x 位数字
fixed+setprecision( x )浮点数输出 x 位小数

进制

十进制转二进制

  除二取余,逆序排位

int n,i=0;
cin>>n;
do{
    a[i]=n%2;
    n/=2;
    i++
}while(n>0);
for(int j=i-1;j>=0;j--){
    cout<<a[j];
}

二进制转十进制

  数值乘以2的幂次依次相加

int n;
int a=1,sum=0;
cin>>n;
while(n>0){
	int x=n%10;
	int y=x*a;
	sum+=y;
	n/=10;
	a*=2;
}
cout<<sum;

表达式

算术运算符

  加法运算符 +

  减法运算符 -

  乘法运算符 *

  除法运算符 /             ~~~~~~~~~~~             # 有一个浮点数则保留小数部分,否则舍去

  模(取余)运算符 %      ~~~~      # 两个数必须是整数

关系运算符

关系符号
大于    ~~    >    ~~   
小于    ~~    <    ~~   
大于等于    ~~    >=    ~~   
小于等于    ~~    <=    ~~   
等于    ~~    ==    ~~   
不等于    ~~    !=    ~~   

逻辑运算符

  逻辑与 (&&):两个条件是否同时成立

  逻辑或 (   ~  ||   ~  ):两个条件是否至少有一个成立

  逻辑异或(   ~  ^   ~  )   ~  :两个条件刚好一个成立,另一个不成立

  逻辑非 (   ~  !   ~  )   ~  :将一个条件取反

条件运算符

  (表达式1) ? (表达式2) : (表达式3)
  先执行表达式1,如果为真,那么返回表达式2的值,否则返回表达式3的值

复合赋值运算符

a+=b
a=a+b
a-=b
a=a-b
a*=b
a=*b
a/=b
a=a/b
a%=b
a=a%b

目运算符

单目运算符

  ! , ^

双目运算符

  && , ||

三目运算符

  ? :

语句

条件语句

单分支

if语句
    if(表达式){
        语句组
    }

双分支

if-else语句
    if(表达式){
        语句组1
    }else{
        语句组2
    }
条件运算符
    (表达式1)(表达式2)(表达式3)

多分支

级联if-else if语句
    if( 表达式1){
        语句组1
    }else if(表达式2){
        语句组2
    }else{
        语句组3
    }
switch语句
    switch(表达式){
        case 常量表达式1:
            代码段1
            break;
        case 常量表达式2:
            代码段2
            break;
        default:
            代码段3
            break;
    }

循环语句

for循环

      ~~~~~      # 知道循环次数

    for(初始值;循环条件;条件改变){
        循环体
    }

while循环

    while(循环条件){
        循环体
    }

do-while循环

      ~~~~~      # 至少循环一次

    do{
        循环体
    }while(循环条件)

嵌套循环

死循环

      ~~~~~      # 搭配break使用

    for( ; ; )
    while( 1 )

结束循环

  continue 结束本轮循环

  break 结束本层循环

函数

  三要素:功能,参数,返回值

  返回类型:int、long long、float、double、char、void、inline

  参数传递:单项值传递、引用传递(改变实参)   # (数据类型& 变量)

返回类型 函数名( 形式参数表) {
	函数体
    return 0;	#voidreturn ; 或省略
{

数学函数

符号功能类型
max求最大值
min求最小值
pow a b a^{b} abdouble
abs求绝对值int
fabs求绝对值float / double
sqrt x \sqrt{x} x double
round四舍五入取整double
ceil向上取整double
floor向下取整double

数组

数组初始化函数

  memset函数

memset(数组名,要填充数值,sizeof(数组名))

   int 类型的数组只能填充0,-1
   bool 类型的数组只能填充0,1

一维数组

  用来存储一类同类型数据

  数组下标从 0 开始,for循环全部遍历不取等

  const将变量转化成常量

  数据范围    ~~    变量    ~~    [ 大小 ] ;

二维数组

  由同类型一维数组数据组成

  先行后列   ~   [ 行 ]    ~~   [ 列 ]

  行和列的下标都是从 0 开始

  遍历从0开始不取等,从1开始取等号

字符数组

  有结束符    ~~   ’ /0 '
  # 存储数量=字符数组大小 - 2

char a[6]="hello";
a[0]='h';1
a[1]='e';2
a[2]='l';3
a[3]='l';4
a[4]='0';5
a[5]='/0'6

字符数组比较大小

  两个字符数组左对齐,从左到右比较ASCII码

fgets

  可以存储空格

  fgets ( 变量,存储数量,读取地(stdin) )

字符数组函数

格式功能
strcat(a,b)将b接到a后面,返回a的值
strncat(a,b,长度n)将b前n个字符接到a后面,返回a的值
strcpy(a,b)用b内容覆盖a内容,返回新a的值
strncpy(a,b,长度n)将b前n个字符覆盖到a,返回新a的值
strcmp(a,b)比较a和b的大小,比较结果:
如果a > b,返回一个正整数
如果a = b,返回0
如果a < b,返回一个负整数
strncmp(a,b,n)比较a和b的前n个字符,比较结构:
如果a > b,返回一个正整数
如果a = b,返回0
如果a < b,返回一个负整数
strlen()计算字符数组的长度,结束符’/0 ‘不算在长度之内

结构体

  是由一组同从属的数据组成
  在一个结构中声明不同的数据类型
  相同结构的结构体变量是可以相互赋值
  # 结构体类型名不能和结构体变量名重名

struct 结构体类型名{
	成员表;
}变量名/变量数组;

结构体数组

struct xxx{
	xxx;
	xxx;
	xxx;
}a[110];
struct node{
	xxx;
	xxx;
	xxx;
};
node a[110];

遍历

struct xxx{
	aaa;
	bbb;
	ccc;
}a[110];
int main(){
	for(int i=1;i<=m;i++){
		cin>>a[i].aaa>>a[i].bbb>>a[i].ccc;
	}
	return 0;
} 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值