前言
?? 铁子们大家好,欢迎大家来到出小月的博客里,今天给大家带来的是【C语言】关于函数的知识,这可是很重要的东西哦? 希望大家看完我这篇文章都能够“涨芝士”,感觉小月写的还不错的话,记得👍🏻点赞加关注 😘鼓励一下博主哦,不然下次可找不到我啦??
作者介绍
?? 作者的gitee:出小月; ?? 作者的主页:出小月的《程序员历险记》 ??专栏:《C语言》,《数据结构初阶》 😊希望大家都能够:好好学习,天天编程???
一、函数的链式访问
什么是链式访问呢??就是把一个函数的返回值作为另一个函数的参数。。。哦,好像明白了,接下来咱们来看几个例子🤗🤗
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
这个结果是什么呢??? 为什么呢??? 这里咱们应该先了解一下printf函数,这个函数的返回值是整形,就是它的字符个数。
二、用函数实现"二分查找"
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少.
思路:如果我想在一个数组中找一个数,用left记录第一个数的下标值,用right记录最后一个值的位置。我先找到这个数组的中间值(下标为:mid=【left+right】/2) ,如果这个中间值小于目标值,就把left置为mid+1;如果中间值大于目标值就把right置为mid-1;
下面就是查找的过程啦😁?? 下面是代码🤗🤗🤗
#include<stdio.h>
int 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;
else
return 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("找不到");
else
printf("找到了,下标是%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);
Print(num);
return 0;
}
2、求字符串的长度
求字符串的的长度可以用一个函数strlen,所以我们写这个函数就是模拟strlen函数
如果可以用临时变量的话,可以这样写
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "xiaoyue";
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);
else
return 0;
}
int main()
{
char arr[] = "xiaoyue";
int len = my_strlen(arr);
printf("%d\n", len);
return 0;
}
总结
😍😍😍今天的分享就到这里了,感觉小月写的还不错的话,记得双击加关注哦,如果有问题的话,可以私信小月哦???
|