库函数
1.标准库和头文件
C语言的国际标准ANSI C规定了一些常用的的函数标准被称为标准库,那不同的编译器厂商根据ANSI提供的C语言标准就给出了一系列函数的实现叫做库函数
根据不同的功能划分出不同的库函数,都在不同的头文件中进行声明;
库函数相关头文件:库函数头文件网页
实践:
#include <stdio.h>
#include <math.h>
int main()
{
double d = 16.0;
double r = sqrt(d);
printf("%lf\n", r);
return 0;
}
函数的语法形式:
自定义函数和库函数是一样的
//形式如下:
ret_type fun_name(形参)
{
//函数体
}
//ret_type是函数返回类型
//fun_name是函数名
//()括号内是形参
//{}内是函数体
形参和实参
在函数的使用过程中,把函数的参数分为实参和形参
看一段代码
1 #include <stdio.h>
2 int Add (int x,int y)
3 {
4 return x + y;
5 }
6 int main() {
7 int n1 = 0;
8 int n2 = 0;
9 scanf("%d%d", &n1, &n2);
10 int r = Add(n1, n2);//函数调用
11 printf("%d\n", r);
12 }
- 实参
2~5行是函数的定义,有了这个Add函数后,第10行调用Add函数传递给Add函数的参数n1和n2,称为 实参 - 形参
函数名Add后的x,y称为形式参数
形参的由来:
如果只是定义了Add函数,而不去调用的话,Add函数的参数x,y只是形式上存在的,不会像内存申请空间,所以叫形式参数形参只有在函数被调用时存放实参传递的值时才向内存申请空间,这个过程叫做形参的实例化。
我们可以调试上述代码发现:x,y的地址和n1, n2的地址不同所以可以说形参是实参的一份临时拷贝
return语句:
- return后边可以是一个数值也可以是表达式,如果是表达式先执行表达式返回表达式的结果。
- return后也可以什么都没有,直接写return;但是这种写法适合函数返回类型是void的情况。
- return返回的值和函数的返回类型不一致的话,系统会自动将返回的值隐式转换成函数的返回类型。
- return执行后,函数就彻底返回,不执行后面的代码。
- 如果函数中存在if等分支的语句,就要保证每种情况下都有return的返回值,否则会出现编译错误。
嵌套调用
顾名思义就是函数之间的嵌套调用,与嵌套循环类似,这里就不过多说明.
代码形式如下:
int is_leap_year(int y)
{
if(((y%4==0)&&(y%100!=0))||(y%400==0))
return 1;
else
return 0;
}
int get_days_of_month(int y, int m)
{
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day = days[m];
if (is_leap_year(y) && m == 2)
day += 1;
return day;
}
链式访问
链式访问就i是将一个函数的返回值作为另一个函数的参数向链条一样将函数穿起来的就是函数的链式访问。
代码形式如下:
#include <stdio.h>
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
/*printf函数返回的是打印在屏幕上的字符的个数。
上⾯的例⼦中,我们就第⼀个printf打印的是第⼆个printf的返回值,第⼆个printf打印的是第三个
printf的返回值。
第三个printf打印43,在屏幕上打印2个字符,再返回2
第⼆个printf打印2,在屏幕上打印1个字符,再放回1
第⼀个printf打印1
所以屏幕上最终打印:4321*/