函数也叫子程序,C语⾔中的函数就是⼀个完成某项特定的任务的⼀⼩段代码。这段代码是有特殊的写法和调⽤⽅法的,而C语⾔的程序其实是由⽆数个⼩的函数组合⽽成的。可见函数重要性!!
函数的分类:
C语言中函数分为库函数(是现成的,可以直接使用)和自定义函数(是根据需要,用户自己设计和创造的)两种
函数的作用:
补充:C语言只规定了语法规则,并未提供库函数,而库函数是C语言编译器厂商根据C语言规定的库函数信息(名字,参数,返回类型,函数功能等)而创造的,因此不同的编译器库函数细节可能有差异,但是程序员使用时对此基本无感。
标准库:C语⾔的国际标准ANSI C规定了⼀些常⽤的函数的标准,被称为标准库
库函数:不同的编译器⼚商根据ANSI提供的C语⾔标准就给出了⼀系列函数的实现,这些函数就被称为库函数,库函数的也是函数
库函数作用:有了库函数,⼀些常⻅的功能就不需要程序员⾃⼰实现了,一定程度提升了效率;同时库函数的质量和执⾏效率上都更有保证
库函数头文件查找网站:
https://zh.cppreference.com/w/c/header
头文件包含情况;
例子1:
sqrt函数
double sqrt(double x);
功能:开平方根
头文件;#include
编程:
#include
#include
int main()
{
double i = 16.0;
double j = sqrt(i);//开平方
printf("%lf\n", j);
return 0;
}
形式如下;
#define _CRT_SECURE_NO_WARNINGS 1
#include
int Add(int a, int b)
{
return a + b;
}
int main()
{
int a = 0;
int b = 0;
//输入
scanf("%d %d", &a, &b);
//计算,完成2个整型变量的加法操作
//定义一个函数Add,实现加法
int ret=Add(a, b);
printf("%d %d %d\n", a,b,ret);
return 0;
}
注意;函数的参数部分需要交代清楚:参数个数,每个参数的类型是啥,形参的名字叫啥
实参(实际参数):
return语句使用时语法规则;
int test()
{
int i = 0;
scanf("%d", &i);
if (i % 2 == 1)
{
return 1;
}//此时就会显示不是所有路径都有返回值,出现考虑不周情况
}
注意;
如果函数的参数为0个时,此时可以参数类型写成为 void,void在这里表示函数没有参数,也不需要参数!!!如果不写成void,例如test(),此时在main函数中要用test函数时,test(),test(100)都会表示test函数中的函数体
例题三;
编程实现;
#define _CRT_SECURE_NO_WARNINGS 1
#include
//写⼀个函数对将⼀个整型数组的内容,全部置为-1,再写⼀个函数打印数组的内容
void set_arr(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = -1;
}
}
void print_arr(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
int sz = 0;//定义sz表示元素个数
sz = (sizeof(arr)) / (sizeof(arr[0]));
set_arr(arr, sz);//定义一个set_arr函数将arr[]中值转换为-1
print_arr(arr, sz);
return 0;
}
补充:
可变参数:如printf函数,scanf函数
int printf(const char* format...);
int scanf(const char* format...);
它们只有参数format固定,其余都是可变的,一个可变参数的函数可以分为两部分:固定参数和可选参数。一个可变参数至少要有一个固定参数,其声明与普通函数参数声明相同;而可选参数由于数目不定(>=0),声明时用"…"表示,两者共同构成可变参数函数的参数列表(简单介绍)
例题五;
#define _CRT_SECURE_NO_WARNINGS 1
//假设我们计算某年某⽉有多少天?
#include
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 arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int i = 0;
i = arr[m];
if (is_leap_year(y) && m == 2)
{
i++;
}
return i;
}
int main()
{
int y = 0;//定义year
int m = 0;//定义month
scanf("%d %d", &y, &m);
int d = 0;//定义day
d = get_days_of_month(y, m);
printf("%d\n", d);
return 0;
}
#include
#include
int main()
{
printf("%d\n", strlen("abcdef"));//链式访问
return 0;
}