算法笔记学习(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中空间一般够用,所以常常采用空间换时间的策略。
上一篇: jenkins部署在阿里云上,邮件发送失败问题解决方法。
下一篇: leetcode