常见错误总结

    xiaoxiao2025-02-12  17

    本文主要是对自己的一些常用但模糊的知识点和常犯错误总结,这些错误很简单但比较容易忽略,在解题或比赛时出现这种错误实在不值得,只要在用这些东西的时候多考虑一下是否合适就能避免此类问题。


    H. 对于手误不可避免,在写程序多注意,不要要求过快,只要保证写的逻辑和代码不出现问题即可,如果真的出现错误了,不要急,确保一边检查出来,平常写程序时尽量模块化,这样不仅思路清晰而且出现错误方便检查,确定错误区间范围,对于对各种解题方法技巧方面注意的问题在具体题目之中进行提示。


    A. memset(str ,’s’, sizeof(str) ) :

    作用:字符串赋值函数,对于[str,str+n)的地址区间内每一字节均赋值为’s’ ; 2.常见应用: int a[N] : memset( a, 0, sizeof(a)) 对数组清0 ; int head[N] : memset( head , -1 , sizeof(head)) ; int dis[N] : memset( dis , 0x3f, sizeof(dis) ) 对数组元素全部初始化为INF: 0x3f3f3f3f 约1e9 (满足无穷+无穷=无穷,无穷+常量=无穷) 对于未知上界的INF : 0x7fffffff 一般不用(不要用,int型最大值 不满足上述条件) 用它不如写循环初始化 3.常用于对结构体初始化0(如果结构体中有数组,那么就不适用了); #include<cstdio> #include<cstring> using namespace std; const int MAXN=10; struct Node{ int x; int y; }coo[MAXN]; int main() { Node a; a.x=a.y=1; printf("%d %d\n",a.x,a.y); memset(&a,0,sizeof(struct Node));//不能写成sizeof(&a) 那样就只是a.x的地址区间 //&a是首地址 sizeof()是地址大小 占多少字节 printf("%d %d\n",a.x,a.y);//不过共用体的内存地址是一样的 int i=0; for(i=0;i<MAXN;++i) coo[i].x=coo[i].y=i; memset(coo,0,sizeof(struct Node)*MAXN);//如果用&coo会怎样 &coo就代表数组首元素地址 for(i=0;i<MAXN;++i) printf("%d %d\n",coo[i].x,coo[i].y); return 0; }

    详细讲解:http://blog.csdn.net/waitfor_/article/details/8211854 http://www.cnblogs.com/handsomecui/p/4723949.ht1·


    B. 浮点型精度问题:

    输出结果是浮点型的可能需要输出 ans+eps (一般用1e-8,对与数据变化范围较大的应该根据题意来具体判断);浮点型的数没有绝对的相等 只有近似 如 a -b< eps => a = b , 二分时用过 ;

    详细讲解:http://blog.csdn.net/waitfor_/article/details/8035773

    转载请注明原文地址: https://ju.6miu.com/read-1296356.html
    最新回复(0)