C/C++常见知识补充
常见的测评结果
1.答案正确(Accepted , AC)
2.编译错误(Compile Error , CE)
3.答案错误(Wrong Answer ,WA)
4.运行超时(Time Limit Exceeded , TLE)
5.运行错误(Runtime Error , RE)
运行错误 可能的原因:
1.非法访问内存,数组越界,指针乱指
2.除数为0,模数为0(注意检查特殊数据)
3.递归时层数过深
6.内存超限(Memory Limit Exceeded , MLE)
7.格式错误(Presentation Error ,PE)
一般是在输出的末尾有多余的空格、换行等,注意检查
8.输出超限(Output Limit Exceeded , OLE)
一般是由输出了大量调试信息或者特殊数据导致的死循环输出造成的
C/C++知识补充
1.输入输出(scanf、printf、cin、cout)
scanf和printf用于输入输出,速度比使用cin、cout快得多。所以当输入或者输出的数据量很大的时候使用scanf和printf。一般情况下不要同时在一个程序中使用cout和printf,有时会出错。
2.符号常量和const常量
1.符号常量通俗的将就是“替换”,用一个标识符代替常量,又称为“宏定义”或者替换。程序在运行时,先进行替换然后进行编译。末尾无分号。
//格式如下
#define 标识符 常量
//例如
#define pi 3.14
//使用#define还可以定义语句和片段
//例如
#define ADD(a,b) ((a)+(b))
2.使用const定义常量
//格式如下
const 数据类型 变量名=常量;
//例如
const double pi=3.14;
一般情况推荐使用const定义常量,因为#define的方式值进行单纯的替换,替换之后的语义可能与自己理解的语义不相符,所以一般情况下需要加很多括号,使用起来不如const方便。
3.位运算
<< 左移
>> 右移
& 按位与
| 按位或
^ 按位异或
~ 按位取反
4.scanf、printf占位符格式
int %d
long long %lld
float %f
double %lf
char %c
字符串(char数组) %s
5.typedef功能和使用
作用:给复杂的数据类型起一个别名,使用时用别名代替原来的写法
//例如
typedef long long LL; //给long long 类型起一个别名LL
//定义一个结构体时也常用typedef
//例如
typedef struct node{
int a;
struct node *next;
}Node,*LNode;
6.math.h中常用函数
1.fabs(double x) 求绝对值
2.floor(double x) 和 cell(double x) 用于向上取整和向下取整,返回值为double类型
3.pow(double a,double b) 求ab,其中a,b都是double类型
4.sqrt(double x) ,求算数平方根
5.log(double x) ,求以自然对数为底的对数
当求以其他数为底数的对数时,
需要用到换底公式:loga(b)=loge(b) / loge(a)
//例如求 log 5(25)
ans=log(25)/log(5);
cout<<ans<<endl;
6.sin(double x),cos(double x),tan(double x)
asin(double x),acos(double x),atan(double x)
7.round(double x) ,求x的四舍五入后的整数值,返回类型也是double类型
备注:文章内容参考《算法笔记》(胡凡 曾磊 主编) 机械工业出版社