C语言03-函数(下)

「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战

最近,想复习一下C语言,所以笔者将会在掘金每天更新一篇关于C语言的文章! 各位初学C语言的大一新生,以及想要复习C语言/C++知识的不要错过哦! 夯实基础,慢下来就是快!

4.写一个函数判断是不是闰年

1
c复制代码闰年:能被4整除&&不能被100整除 ||能被400整除

摘自百度百科
闰年是历法中的名词,分为普通闰年和世纪闰年。

闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天(1月~12月分别为31天、29天、31天、30天、31天、30天、31天、31天、30天、31天、30天、31天)。

凡阳历中有闰日(2月29日)的年份,闰余(岁余置闰。阴历每年与回归年相比所差的时日)。

注意闰年(公历中的名词)和闰月(农历中的名词)并没有直接的关联,公历只分闰年和平年,平年有365天,闰年有366天(2月中多一天);平年中也可能有闰月(如2017年是平年,农历有闰月,闰六月)。


1
2
3
4
5
6
7
8
9
10
c复制代码//方法1
int is_leap_year(int year)
{
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return 1;
}
else
return 0;
}
1
2
3
4
5
c复制代码//巨秀的写法
int is_leap_year(int year)
{
return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
}

5.实现一个整形有序数组的二分查找

二分查找法的前提:数组是有序的
每次可以缩减一遍的区间,是一个高效的算法!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
c复制代码//二分法
int BinarySearch(int* arr, int sz,int k)
{
int right = sz - 1; //右下标
int left = 0; //左下标
while (left <= right)
{
int mid = (right + left) >> 1; //中间值
//mid = (right + left)/2
if (arr[mid] > k)
{
right = mid - 1; //右下标 变成中间值-1位置
}
else if (arr[mid] < k)
{
left = mid + 1; //左下标 变成中间值+1位置
}
else
return mid;
}
return -1; //找不到
}
int main()
{
int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
int k = 7; //要找的数字
int ret = BinarySearch(arr, sz,k);
if (ret != -1)
{
printf("找到了,下标为:%d\n", ret);
}
else
{
printf("找不到\n");
}
return 0;
}

TDD:

TDD:在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行


返回参数为void型:

若函数返回类型为void :则最后可以不写return 或者写成 return;


6.每调用一次这个函数,num的值就增加一次

写法1:因为函数要改变参数的值,所以要传地址过去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
c复制代码void Add(int* p)
{
(*p)++;
//也可写成
// *p++ 后置++,先使用p再++ 相当于(*p)++
return;
}
int main()
{
int num = 0;
printf("num的值为:%d\n", num);
Add(&num);
printf("num的值为:%d\n", num);
Add(&num);
printf("num的值为:%d\n", num);
return 0;
}

写法2:传值-接收返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
c复制代码int Add(int n )
{
return n+1;
}
int main()
{
int num = 0;
printf("num的值为:%d\n", num); //0
num = Add(num);
printf("num的值为:%d\n", num); //1
num = Add(num);
printf("num的值为:%d\n", num); //2
return 0;
}

3.函数的链式访问

链式访问:把一个函数的返回值作为另一个函数的参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
c复制代码int main()
{
int len = strlen("abc");
printf("%d\n",len); //3
//链式访问
printf("%d\n",strlen("abc")); //3

char arr1[20] = "xxxxxx";
char arr2[20] = "abc";
printf("%s\n",strcpy(arr1,arr2)); //abc

printf("%d",printf("%d",printf("%d",43))); //4321
//printf返回的值为打印字符的个数
return 0;
}

1.分块写文件


分块去写的好处:1.多人协作 2.封装和隐藏


2.如何导入静态库

1
2
c复制代码导入静态库:#pragma comment(lib,”add.lib”)  
此时静态库的名字为add.lib

将add.c和add.h 在debug文件中可以找到add.lib文件


3.防止头文件重复包含

//方法1:
#pragma once

//方法2:
#ifdef .h文件的文件名
#define .h文件的文件名
最后结尾加上#endif

#ifdef Add.h
#define Add.h
#endif


今天就先到这吧~感谢你能看到这里!希望对你有所帮助!欢迎老铁们点个关注订阅这个专题! 同时欢迎大佬们批评指正!

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%