基本数据类型的范围
整型 int -2^31~(2^31-1) -2e9~(2e9)
long long -2^63~(2^63-1)-9e18~(9e18)
浮点型 float -2^128~2^128 实际精度6~7位
double -2^1024~2^1024 实际精度15~16位
字符型 char -128~127 -128~127
布尔型 bool 0(false) or 1(true) 0(false) or 1(true)
位运算符
位运算符优先级极低(小于算术运算符,小于比较运算符)所以使用时要注意加括号
INF
因为int的上限是2^31-1,INF=(1<<31)-1 或 0x3fffffff
scanf
除了%c外,scanf对其他格式的输入输出是以空白符(即 空格、Tab)为结束判断标志的
字符数组%s读入的时候是以空格跟换行为读入结束的标志
double
double类型的变量,输出格式为%f,在scanf中是%lf
%0md
当变量不足m位时,将在前面补足足够数量的0而不是空格
%.mf
使浮点数保留m位小数输出,此时使用“四舍六入五成双”,许多题目要求浮点数的输出保留xx位小数就是用这个格式进行输出
4舍6入5成双”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进.
round(double x)
在math.h里面,用于将double类型变量x进行四舍五入,返回类型也是double型,需要进行取整
数组
如果数组大小较大(大概1e6级别),则需要将其定义在主函数外面,否则会使程序异常退出,原因是函数内部申请的局部变量来自系统栈,允许申请的空间较小;而函数外部申请的全局变量来自静态存储区,允许申请的空间较大
memset
memset(数组名,值,sizeof(数组名));
按字节赋值,其头文件是string.h
如果要对数组赋其他数字,需要用fill函数
sscanf sprintf
均在头文件stdio.h下
sscanf将字符数组中的内容以%d的格式写入到n中(从左至右)
#include<stdio.h>
int main()
{
char str[100]="123";
int n;
sscanf(str,"%d",&n);
printf("%d",n);
return 0;
}
123
--------------------------------
Process exited after 0.1849 seconds with return value 0
sprintf是把n以%d的格式写到字符数组中(从左至右)
#include<stdio.h>
int main()
{
char str[100];
int n=123;
sprintf(str,"%d",n);
printf("%s",str);
return 0;
}
123
--------------------------------
Process exited after 0.1848 seconds with return value 0
引用 (C++)
对引用变量的操作就是对原变量的操作
只需要在函数的参数类型的后面加个&就可以了
#include<stdio.h>
void change(int &x);
int main()
{
int x=123;
change(x);
printf("%d",x);
return 0;
}
void change(int &x)
{
x=1;
}
1
--------------------------------
Process exited after 0.1152 seconds with return value 0
详解:
点击打开链接http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html
点击打开链接http://blog.csdn.net/webscaler/article/details/6577429
点击打开链接http://blog.csdn.net/xiao__tian__/article/details/51814617
浮点数的比较
因为浮点数有时会损失精度,所以如果一个数a落在了[b-eps,b+eps]的区间中时,就应当判断a==b成立
经验表明eps取1e-8是一个合适的数字
#include<math.h>
const double eps=1e-8;
#define Equ(a,b) (fabs((a)-(b))<(eps))
π
π=arccos(-1)
#include<stdio.h>
#include<math.h>
int main()
{
printf("%f",acos(-1.0));
return 0;
}
3.141593
--------------------------------
Process exited after 0.08363 seconds with return value 0
多点测试
while(scanf("%d",&n)!=EOF)
{
}
while(scanf("%s",str)!=EOF)
{
}
while(gets(str)!=NULL)
{
}
while(n--) //n组测试样例
{
}
在多组测试中,每一次的循环都要重置一下变量和数组,否则在下一组数据来临的时候变量和数组就不是初始状态了,重置数组一般使用memset函数或fill函数
摘自《算法笔记》胡凡 曾磊 主编