基础知识(1)

来源:互联网 发布:淘宝网家居小饰品 编辑:程序博客网 时间:2024/06/11 03:09

基本数据类型的范围

整型 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函数


摘自《算法笔记》胡凡 曾磊 主编