类型转化
在学习的编程语言中都涉及到了类型的转换。其中有隐式转换,也有强制转换。转换规则如下:
可以简化理解为:
强制转换优先级要高于加减乘除。
从下向上转化是隐式转化,自动完成。
从上向下需要强制转化 例如: (double) sum
错误处理
C语言中不提供对错误处理的直接支持,但是作为一种编程语言,它以返回值的形式允许访问底层数据。在发生错误时,大多数的C或UNIX函数调用返回 1 或 NULL , 同时会设置一个错误代码 errno , 该错误代码是全局变量,表示函数调用发生错误。再 errno.h 头文件中可以找到各种错误代码。
因此通过检查返回值,然后根据返回值决定采取哪种方式。开发人员应该在程序初始化的时候将 errno 设置为0,这是一个良好的编程习惯,0 代表程序没有错误。
C提供了 perror()
,strerror()
函数可以显示与 errno 相关的文本消息。
perror()
函数显示传给它的字符串,后跟一个冒号,一个空格,和当前 errno 值得文本表示形式strerror()
函数返回一个指针,指向当前 errno 值的文本表达式。- 同时需要注意应该使用 stderr 文件流输出所有错误
在错误测试时出现有问题,在错误的情况下程序无法像教程一样出现,因此贴上菜鸟教程的内容。
递归
有一定的基础,因此对递归的理解比较容易。但是还是学习到了一些知识。
- 每调用一个函数就会使用一层栈,而递归多次调用函数,因此会使用多层栈,容易造成暴空间。
- 递归,一层一层调用一层一层返回,会使用更多的时间。
- 能使用递推算法就最好不要用递归算法。尽管递归的代码会更加的简洁。
- 搜索与回溯算法,广度优先搜索算法,分治(二分) 都用到了递归。
阶乘递归方法:
#include <stdio.h>
double factorial(unsigned int i)
{
if(i <= 1)
{
return 1;
}
return i * factorial(i - 1);
}
int main()
{
int i = 15;
printf("%d 的阶乘为 %f\n", i, factorial(i));
return 0;
}
斐波那契数列
#include <stdio.h>
int fibonaci(int i)
{
if(i == 0)
{
return 0;
}
if(i == 1)
{
return 1;
}
return fibonaci(i-1) + fibonaci(i-2);
}
int main()
{
int i;
for (i = 0; i < 10; i++)
{
printf("%d\t\n", fibonaci(i));
}
return 0;
}