前言

❤️ 铁子们大家好,欢迎大家来到出小月的博客里,今天给大家带来的是【C语言】关于函数的知识,这可是很重要的东西哦❗
希望大家看完我这篇文章都能够“涨芝士”,感觉小月写的还不错的话,记得点赞加关注鼓励一下博主哦,不然下次可找不到我啦❗❗

作者介绍

❤️ 作者的gitee:出小月;
❤️ 作者的主页:出小月的《程序员历险记》
❤️专栏:《C语言》,《数据结构初阶》
希望大家都能够:好好学习,天天编程❗❗❗

文章目录

  • 前言
    • 作者介绍
  • 一、函数的链式访问
  • 二、用函数实现”二分查找”
  • 三、函数的递归
      • 1、按照顺序打印一个整数的每一位
      • 2、求字符串的长度
  • 总结

一、函数的链式访问

什么是链式访问呢❓❓就是把一个函数的返回值作为另一个函数的参数。。。哦,好像明白了,接下来咱们来看几个例子

int main(){printf("%d", printf("%d", printf("%d", 43)));return 0;}

这个结果是什么呢❓❓❓

为什么呢❓❓❓
这里咱们应该先了解一下printf函数,这个函数的返回值是整形,就是它的字符个数。

二、用函数实现”二分查找”

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少.

思路:如果我想在一个数组中找一个数,用left记录第一个数的下标值,用right记录最后一个值的位置。我先找到这个数组的中间值(下标为:mid=【left+right】/2),如果这个中间值小于目标值,就把left置为mid+1;如果中间值大于目标值就把right置为mid-1

下面就是查找的过程啦❗❗




下面是代码

#includeint binary_search(int a[], int k, int size){int left = 0;int right = size - 1;while (left<=right){int mid = (left + right) / 2;if (a[mid] < k)left = mid + 1;else if (a[mid] > k)right = mid - 1;elsereturn mid;}return -1;}int main(){int a[] = {12,23,34,54,56,67,78};int k = 23;int pos = binary_search(a, k, sizeof(a) / sizeof(int));if (pos == -1)printf("找不到");elseprintf("找到了,下标是%d", pos);return 0;}

三、函数的递归

用一句话来解释递归再合适不过了✌️✌️,只需少量的程序就可描述解题过程中所需要的多次重复计算,大大地减少了程序的代码量

1、按照顺序打印一个整数的每一位

如果是逆序的话,很简单,一个while循环就搞定!

int main() {int a = 1234;while (a>0){int b =a % 10;a = a / 10;printf("%d ", b);}return 0;}


那如果是正序呢❓❓❓那我们就要用递归了。。。下面是过程

下面这是完整的代码

void Print(unsigned int n){if (n > 9){Print(n / 10);}printf("%d ", n % 10);}int main(){unsigned int num = 0;scanf("%u", &num);//写一个函数打印num的每一位Print(num);return 0;}

2、求字符串的长度

求字符串的的长度可以用一个函数strlen,所以我们写这个函数就是模拟strlen函数

如果可以用临时变量的话,可以这样写

int my_strlen(char* str){int count = 0;while (*str != '\0'){count++;str++;//字符指针+1,向后跳1个字符}return count;}int main(){char arr[] = "xiaoyue";//[b i t \0]//数组名其实是数组首元素的地址int len = my_strlen(arr);printf("%d\n", len);return 0;}

那如果不能用临时变量呢❓❓❓那我们就要用递归了。。。,下面是图解

int my_strlen(char* str){if (*str != '\0')return 1 + my_strlen(str + 1);elsereturn 0;}int main(){char arr[] = "xiaoyue";//[b i t \0]//数组名其实是数组首元素的地址int len = my_strlen(arr);printf("%d\n", len);return 0;}

总结

今天的分享就到这里了,感觉小月写的还不错的话,记得双击加关注哦,如果有问题的话,可以私信小月哦❗❗❗