C语言叨逼叨之一些注意事项
自五月中旬本菜鸡进行转专业补课:计算导论与程序设计(C语言)这门课已经有三个月了,虽然算法还没钻研多深,不过结合一些经验总结一些注意事项,估计没有兄贵看吧2333.
1.do-while和while的使用,比如在你逐个输入字符,直到#出现为止
2.sizeof来获取数据类型所占的字节数,比如int类型在不同机器下所占的字节就不一样,虽然大部分都是4个字节
比如哈,看看ptr=(int*)malloc(n*sizeof(int)),这个sizeof(int)就最好别被4代替,目的也是为了提高代码移植性
3.很重要的一点,==和=分别是什么,经常刷oj笔误就会出这个问题,你还不容易看出来
4.接着上面那条,判断整型数据和浮点型不都用==,判断浮点型用abs(差)和0.00001这种比较
5.小心溢出,越界,其实现在内存已经不值钱了(误)
6.scanf()输入数据格式与格式控制串需要一致
7.这个地方,我被机考坑了好几次,但是考试的时候都没长记性,哎:
看下面这一部分代码:
printf(“输入你的年龄”);scanf(“%d”,&age);printf(“age is %d\n”,age);
printf(“输入你的性别”);scanf(“%c”,&sex);printf(“sex is %c\n”,sex);
当你输入18,然后开开心心按下回车的时候,其实,你这个回车会被%c给读进去,所以有时候这一类的问题经常有bug,这时候我们就需要在第一行末尾加一句getchar()来将缓冲区的回车符号读入,避免被%c读进去
当然,你也可以用fflush(stdin)用于清空键盘输入缓冲区。
8.记住,字符串是以\0结尾的,做一些oj题记住这一点,否则会产生越界访问。
9.记得使用指针的时候,一旦有了malloc(某个空间),使用完毕后,一定要把指针free掉,并把这个指针置为NULL,否则每次执行一次程序,就会丢失一块内存,导致内存泄漏
10.多个源文件、头文件的时候得注意一些细节,比如你可能需要宏定义锁
11.C语言中的math.h头文件中有对数函数,原型为:
1.double log(double x) 求的是lnx(log(e)(x))
2.double log10(double x) 求log(10)(x)
求一般的话,假如以a为底的b的对数(log(a)(b)),利用换底公式转化为lg(b)/lg(a)或ln(b)/ln(a) 进行求解
12.二进制换十进制递归方法,n==0/1返回n本身,否则返回n%10+convert(n/10)*2
13.有时候用对数解决问题会非常的骚,节省很多代码量,比如在求一个数的二进制表示有多少位,方法很多,但是。。
14.闰年的判断:(year%4==0&&year%100!=0)||year%400==0,并非四年就一闰
15.文件用完就fclose了吧。
先写这么多。