数学中经常见到函数,但是你真正了解C语言中的函数吗??
前言
1.函数是一个大型程序的部分代码,由一个或者多个语句块组成。它负责完成某项特定的任务,而且相较于其他代码,具备相对的独立性。
2.一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
提示:以下是本篇文章正文内容,下面案例可供参考
一、市面上关于C的网站?
1.cppreference.com 2.cplusplus 3.一个MSDN安装包
二、函数分类
1.库函数
函数如下:
1.IO函数
2.字符串操作函数
3.字符操作函数
4.内存操作函数
5.时间/日期函数
6.数学函数
7.其他库函数
2.自定义函数
如果库函数够用的话,那么要程序员干嘛?
所以更加重要的是自定义函数
自定义函数与库函数一样,有函数名有返回类型和函数参数。
但是不一样的是需要我们自己去设计。这给程序员一个很大的发挥空间去自定义函数。
这个swap函数运用了传值调用,必须传地址,要不然无法交换,swap函数运用指针的方式,进行传值。
#include <stdio.h>
//写一个函数,每次调用这个函数,则num便会加一
void add(int* p)
{
*p = *p + 1;
}
int main()
{
int num = 0;
add(&num);
printf("%d\n", num);
add(&num);
printf("%d\n", num);
add(&num);
printf("%d\n", num);
return 0;
}
3函数的嵌套调用
#include <stdio.h>
#include<string.h>
int main()
{
int len = strlen("abcdef");
printf("%d\n", len);
return 0;
}
调整为链式访问
链式访问:把一个函数的返回值做为另一个函数的参数。
#include <stdio.h>
#include <string.h>
int main()
{
int len = 0;
printf("%d\n", strlen("abcdef"));
return 0;
}
#include <stdio.h>
int main()
{
printf("%d", printf("%d", printf("%d", 43)));//43为两个字符,则最后一个的返回值为2所以输出2,2为一个字符则输出1,所以输出4321.
//注:printf的返回值为打印在屏幕上的字符个数
return 0;
}
4.函数的声明与定义
一.函数的声明
1.函数的声明:函数的声明一般出现在函数出现之前,一般满足先声明后使用
2.函数的声明一般放在头文件中
例如代码:
在这种情况下,编译器报错了,是由有编译器的编译顺序是从上往下进行的,在使用add函数之前必须进行声明或者定义才能使用。
修改方法1:在其前面添加函数声明
修改方法2:在使用add函数之前添加声明
二.函数的定义
函数的定义:
是指函数的具体实现,交代函数的功能实现。
头文件
头文件中放:函数的声明,函数的定义,头文件的包含。
5.函数的递归
一.什么是递归?
程序调用自身的编程技巧称为递归
递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。
他通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。
只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。
递归层次太深,会出现栈溢出的现象。
递归的主要思考方式在于:把大事花小。
二.递归的两个必要条件
1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。
最简单的递归函数:
#include <stdio.h>
int main()
{
printf("hehe\n");
main();
return 0;
}
递归实例:(输入一个1234,然后依次输出1 2 3 4 )
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void print (unsigned int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
scanf("%u", &num);
print(num);
return 0;
}