函数-1:点此转入
目录
4.函数的嵌套调用和链式访问
4.1 嵌套调用
//嵌套调用
#include <stdio.h>
void one_line()
{
printf("hehe\n");
}
void three_line()
{
for (int i = 0; i < 3; i++)
one_line();
}
int main()
{
three_line();
return 0;
}
4.2 链式访问
//链式访问
#include <stdio.h>
#include <string.h>
int main()
{
char arr[100] = { 0 };
printf("%d\n", strlen(strcat(arr, "handsome ywx")));
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
5.函数的声明和定义
5.1 函数声明
- 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。
- 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
- 函数的声明一般要放在头文件中。
5.2 函数定义
函数定义是指函数的具体实现,交代函数的功能实现。
头文件add.h的内容
放置函数的声明
//函数的声明
int Add(int x, int y);
源文件add.c的内容
放置函数的实现
//函数Add的实现
int Add(int x, int y)
{
return x + y;
}
6.函数递归
6.1 什么是递归?
程序调用自身的编程技巧称为递归。
递归作为一种算法在程序设计语言中广泛使用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解。
递归策略
只需少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。
递归的主要思考方式在于:把大事化小
6.2 递归的两个必要条件
- 存在限制条件,当满足这个限制条件的时候,递归便不再继续。
- 每次递归调用之后越来越接近这个限制条件。
6.2.1 练习1:(画图讲解)
接受一个整形值(无符号),按照顺序打印它的每一位。
例如:
输入:1234,输出:1 2 3 4
//递归1
#include <stdio.h>
void get_each(int n)
{
if (n / 10 != 0)
{
get_each(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int n = 0;
scanf("%d", &n);
get_each(n);
return 0;
}
红色代表递推,蓝色代表回归。
这就是递归。
6.2.2 练习2:(画图讲解)
编写函数不允许创建临时变量,求字符串的长度。
//递归2
#include <stdio.h>
int my_strlen(char* pa)
{
if (*pa != '\0')
return 1 + my_strlen(pa + 1);
else
return 0;
}
int main()
{
char a[100] = { 0 };
gets(a);
int ret = my_strlen(a);
printf("%d", ret);
return 0;
}
红色代表递推,蓝色代表回归。
这就是递归。