欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-20 13:04:10
...

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中空间一般够用,所以常常采用空间换时间的策略。