在讲解嵌套调用和链式访问之前先来看几道练习题:
1:写一个函数可以判断一个数是不是素数。
2. 写一个函数判断一年是不是闰年。
3. 写一个函数,实现一个整形有序数组的二分查找。
4. 写一个函数,每调用一次这个函数,就会将 num 的值增加1。
5.嵌套调用和链式访问
1:写一个函数可以判断一个数是不是素数。
首先,我们在写代码之前,我们要知道,素数到底是什么?
指的是“大于1的整数中,只能被1和这个数本身整除的数”。
以下就是100—200的素数集合代码:
#include <stdio.h>
#include <math.h >
int is_prime(int n)
{
//2->n-1 之间的数字
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;
int count = 0;
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
if (is_prime(i) == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
2. 写一个函数判断一年是不是闰年。
用函数表示1000年到2000年的闰年:
#include <stdio.h>
int is_leap_year(int x)
{
if( ( x % 4 == 0 && x % 100 != 0) || (x % 400 == 0) )
{
return 1;
}
return 0;
//或者可以这样写
// return ( ( x % 4 == 0 && x % 100 != 0) || (x % 400 == 0) )
}
int main ()
{
int y = 0 ;
int count = 0;
for (y = 1000; y <= 2000; y++)
{
if (is_leap_year(y) == 1)
{
count++;
printf("%d ",y);
}
}
printf("\n count = %d\n",count);
return 0;
}
3. 写一个函数,实现一个整形有序数组的二分查找。
#include <stdio.h>
int binary_search(int a[], int k, int s)
{
int left = 0;
int right = s - 1;
while (left<=right)
{
int mid = (left + right) / 2;
if (a[mid] > k)
{
right = mid - 1;
}
else if (a[mid] < k)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;//找不到了
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int key = 7;
//找到了就返回找到的位置的下标
//找不到返回-1
//数组arr传参,实际传递的不是数组的本身
//仅仅传过去了数组首元素的地址
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(arr, key, sz);
if (-1 == ret)
{
printf("找不到\n");
}
else
{
printf("找到了,下标是:%d\n", ret);
}
return 0;
}
4. 写一个函数,每调用一次这个函数,就会将 num 的值增加1。
运用了指针的一点小知识:代码如下。
#include <stdio.h>
void Add(int *p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf("%d\n",num);
Add(&num);
printf("%d\n",num);
Add(&num);
printf("%d\n",num);
}
5.嵌套调用和链式访问
5.1嵌套调用
函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。
举个例子:
void test3()
{
printf("hehe\n");
}
int test2()
{
test3();
return 0;
}
int main()
{
test2();
return 0;
}
从以上的代码中我们可以看到,在主函数里面,调用了test2函数,然后再运行test2函数的同时又调用了test3函数,这便是函数的嵌套调用。
5.2链式访问
把一个函数的返回值作为另外一个函数的参数。
举几个例子:
#include <stdio.h>
{
int len = strlen("abc");
printf("%d\n",len);
//链式访问
printf("%d\n",strlen("abc"))
}
strlen("abc") 的返回值作为printf函数的一个参数。
char arr1[20]={0};
char arr2[]="bit";
printf("%s\n",strcpy(arr1,arr2));
strcpy(arr1,arr2) 的返回值本身就是arr1。
printf("%d",printf("%d",printf("%d",43)));
这个函数本身运行出来的结果就是“4321”。
原因是:printf函数的返回值是打印在屏幕上字符的个数