算法笔记学习(1)——一些简单易错的知识点

1.符号常量和const常量

符号常量为:#define

c++中推荐使用const常量

2.位运算

^表示位异或,即相同为0,不同为1

3.数组

将整个数组赋值为0:

int a[10]={0};
//或是
int a[10]={};

4.puts会自动输出一个换行符

5.空格的ASCII码是32

6.如果不是使用scanf的%s或是gets输入字符串(例如使用getchar)一定要在输入的最后加入一个'\0'

7.sscanf和sprintf


sscanf(str,"%d",&n);    //从左到右,将字符数组str中的内容以%d的形势下写到n中

sprintf(str,"%d",&n);    //从右到左,把n以%d的格式写到str字符数组中

8.函数

二维数组作为参数时,第一维不需要填写长度,第二维需要填写长度,如:

void change(int b[][5]){}

指针作为参数时候,若要交换指针中存放的地址(此时相当于传入一个地址变量,而不是指针),则要用二级指针才能改变,若要交换指针中存放的地址的内容(此时相当于一个指针),以及指针就可以改变。总之,该地址要用二级指针,改内容要用以及指针。

9.引用

注意:引用仅对变量作用,常量不可使用。

例如函数swap不可以穿入地址常量,如swap(&a,&b),应该先用指针变量p1和p2存放这两个地址。

指针的引用(即改变指针的指向)除了用二级指针还可以用引用:int* &a(把int*看成类似int的数据类型)

10.结构体

(1)结构体中不能定义自己本身,但可以定义自身类型的指针变量(如常用的next指针)

(2)使用构造函数初始化结构体

student(){}    //默认生成的构造函数
student(int _id,char _gender):id(_id),gender(_gender){}    //自己的构造函数

注意:一旦定义了自己的构造函数,默认构造函数就会被覆盖,就不能只定义不赋值。如:student st;这时候可以手动加上默认的构造函数。

11.浮点数的比较

简单的浮点数比较可以使用“==”,但是一旦经过复杂的运算之后,精读损失不能忽略,因此可以将比较操作写成宏定义。

const double eps=1e-8;    //误差
#define Equ(a,b) ((fabs((a)-(b)))<(eps))    //浮点数的等于比较
#define More(a,b) ((fabs(a)-(b))>(eps))       //浮点数的大于比较
#define Less(a,b) ((fabs(a)-(b))<(-eps))    //浮点数的小于比较
#define MoreEqu(a,b) ((fabs(a)-(b))>(-eps))    //浮点数的大于等于
#define LessEqu(a,b) ((fabs(a)-(b))<(eps))    //浮点数的小于等于

12.如何得到圆周率π

const double Pi=acos(-1.0);

13.关于OJ的一些常识

一般OJ系统一秒能承受的运算次数大概是10的7次方到10的8次方,此时若O(n²)的n的规模为1000是可以承受的。OJ中空间一般够用,所以常常采用空间换时间的策略。

猜你喜欢

转载自blog.csdn.net/weixin_40953222/article/details/81167594
今日推荐