在第一个C语言入门专栏当中,我只是简单的介绍了一下函数的概念,函数可以比作是一个工厂。
今天我们在C语言初级这个专栏当中进一步的了解一下函数的相关概念。
目录
1. 函数是什么
2. C语言中函数的分类
1.库函数
实际操作:
将arr2中包含的数据改一下:
这样通过调试我们就知道arr1中的\0调试过来了。
实际操作:
举个例子:
我们发现传参后a,b的值并没有交换,所以这个代码肯定纯在bug:
我们来看看指针:
因此我们可以利用指针来传地址,通过形参来找到实参来实现对实参两个数的交换:
另外一种写法:
变量
表达式
函数
下面是一些练习:
1.代码:
#include<stdio.h>
#include<math.h>
//写一个函数来判断一个数是不是素数?
//is_prime();
//返回1 表示是素数
//返回0 表示不是素数
int is_prime(int n)
{//不能被2~n-1所整除
//不能被~sqrt(n)所整除
int j = 0;
for (j = 2; j <= sqrt(n); j++)
{
if (n % j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
//产生100~200的数字
int i = 0;
for (i = 100; i <= 200; i++)
{
if (is_prime(i) == 1)
{
printf("%d ", i);
}
}
return 0;
}
2.代码:
3.代码:
int binary_search(int arr[], int k, int sz)
{
int left = 0;
int right = sz - 1;
while (left<=right)
{
int mid = left + (right - left) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
if (arr[mid] > k)
{
right = mid - 1;
}
if (arr[mid] == k)
{
return mid;
}
}
return -1;
}
//写一个函数实现有序数组的二分法查找
int main()
{
//创建一个有序数组
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int k = 0;//查找k
scanf("%d", &k);
int ret = binary_search(arr, k, sz);//数组名 目标数字 数组长度
if (ret == -1)
{
printf("找不到");
}
else
printf("找到了,下标是:%d", ret);
return 0;
}
错误案例:
4.代码:
5. 函数调用
函数可以嵌套调用,但是不能嵌套定义。
函数的链式访问:将一个参数的返回值作为另一个函数的参数
7. 函数的声明和定义
函数声明:
1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。
2.函数的声明一般出现在函数的使用之前。要满足先声明后使用。
3.函数的声明一般要放在头文件中的。
函数定义:
函数的定义是指函数的具体实现,交待函数的功能实现。
静态库的调用:
递归过程:
//编写函数不允许创建临时变量,求字符串的长度
我们先创建临时变量的代码:
临时变量count
递归:
递归与迭代
n的阶乘
斐波那契数列