前言
❤️ 铁子们大家好,欢迎大家来到出小月的博客里,今天给大家带来的是【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;}
总结
今天的分享就到这里了,感觉小月写的还不错的话,记得双击加关注哦,如果有问题的话,可以私信小月哦❗❗❗