我能“C”——提取函数的精髓(下)

前言😘

🎡挑战两星期连更的第四天,今天要分享的是C语言里面的重要成员——函数。废话不多说直接开肝!

如果文章对你有所帮助的话记得给小叶一个三连hhh,大家的三连就是我前进的最大动力hhh来骗赞了。

1.函数的嵌套调用和链式访问👀

函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。
  1. 嵌套调用👻

#include <stdio.h>
void new_line()
{
 printf("hehe\n");
}
void three_line()//分装了new_line()
{
    int i = 0;
 for(i=0; i<3; i++)//调用了3次new_line()
   {
        new_line();
   }
}
int main()//要打印产生效果就要主函数再来调用three_line()
{
 three_line();
 return 0;
}

注意:函数可以嵌套调用,但是不能嵌套定义。上图:

上面这个是正确的

这个就不对了,A函数里面定义了B函数,嵌套定义了,这是绝对不允许的

  1. 链式访问👻

啥是链式访问?上图!

打印4321,最里面的printf先打印43,因为printf返回类型是int,当成功运行时返回值是字符的个数,就如下图,先打印43,这是两个字符所以第二个printf打印2,同理2是一个字符,所以第三个printf打印的是1.所以连起来就是4321

注(空格也算一个字符)

链式访问:把一个函数的返回值作为另外一个函数的参数。
#include <stdio.h>
#include <string.h>
int main()
{
    char arr[20] = "hello";
 int ret = strlen(strcat(arr,"bit"));//这里介绍一下strlen函数
 printf("%d\n", ret);
 return 0;
}
#include <stdio.h>
int main()
{
    printf("%d", printf("%d", printf("%d", 43)));
    //结果是啥?
    //注:printf函数的返回值是打印在屏幕上字符的个数
    return 0;
}

2. 函数的声明和定义👀

函数的定义是指函数的具体实现,交待函数的功能实现。

test.h的内容

放置函数的声明

#ifndef __TEST_H__
#define __TEST_H__
//函数的声明
int Add(int x, int y);
#endif //__TEST_H__

test.c的内容

放置函数的实现

#include "test.h"
//函数Add的实现
int Add(int x, int y)
{
 return x+y;
}

肯定会有人问为什么不放在同一个函数里面?这么说吧可能我们现在接触的代码估计一次写最多几百行吧。但如果一个公司接个大项目可就不是这么少了肯定是要好多个程序员分工合作的。

3.函数递归👀

1. 什么是递归?👻

最简单的递归,main自己调用了自己

程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接
调用自身的
一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,
递归策略
只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

刚刚那个代码运行:一直死循环打印hehe最终停下来了

死循环打印最终停了下来,错误在于栈溢出

递归执行时,main递归一次就要向栈区申请一定空间,但是上面代码一直死循环就一直向栈区申请空间直到把栈区消耗完就会报错。

递归的主要思考方式在于:把大事化小

2 .递归的两个必要条件👻

存在限制条件,当满足这个限制条件的时候,递归便不再继续。
每次递归调用之后越来越接近这个限制条件

3.练习1👻

接受一个整型值(无符号),按照顺序打印它的每一位。
例如:
输入:1234,输出 1 2 3 4

逻辑图:

递归

递——>递推

归——>回归

输入1234 函数开始递归中的“递”,刚开始n=1234,经过Print(n/10)推递得到了n=123以此类推,最后得到了n=1,此时n=1不满足if(n>9),“递”就停止了。然后开始“归",第一次”归“

中n=1,经过n%10得到 1,所以屏幕上打印的第一个是1 的二次的”归“是n=12,经过n%10得到2所以屏幕上打印的第二个就是2,以此类推最终屏幕上打印会是1 2 3 4

4.练习2👻

编写函数不允许创建临时变量,求字符串的长度。

4.递归与迭代

1.练习1👻

求n的阶乘(不考虑溢出)

另外的方法:递归思想

int factorial(int n)
{
 if(n <= 1)
 return 1;
 else
 return n * factorial(n-1);
}

逻辑图如下:递推+回归 = 递归

2.练习2👻

求第n个斐波那契数。(不考虑溢出)

什么是斐波那契数:

就是前两个数相加等于后面的那个数

如果你输入一个很大的数,程序会运行很慢,因为数太大了,效率低

所以上迭代的方法:

输入50的时候瞬间完成了计算,但是结果错误,因为数太大溢出了,没有记错的话整型的最大值是21亿多

完结撒花🌺

这是今天的一些关于函数的一些知识分享,希望能够帮助到大家!有不足的地方也希望家人们给小叶一些建议撒😘

前两天体测累死鼠鼠了😹

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值