C语言03-函数(下)

举报
芒果_Mango 发表于 2022/01/31 10:55:48 2022/01/31
【摘要】 最近,想复习一下C语言,所以笔者将会在掘金每天更新一篇关于C语言的文章! 各位初学C语言的大一新生,以及想要复习C语言/C++知识的不要错过哦! 夯实基础,慢下来就是快! 4.写一个函数判断是不是闰年闰年:能被4整除&&不能被100整除 ||能被400整除摘自百度百科闰年是历法中的名词,分为普通闰年和世纪闰年。闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期...

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

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

闰年:能被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
int is_leap_year(int year)
{
    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    {
        return 1;
    }
    else
        return 0;
}
//巨秀的写法
int is_leap_year(int year)
{
    return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
}

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

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

//二分法
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:因为函数要改变参数的值,所以要传地址过去

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:传值-接收返回值

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.函数的链式访问

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

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.如何导入静态库

导入静态库:#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


今天就先到这吧~感谢你能看到这里!希望对你有所帮助!欢迎老铁们点个关注订阅这个专题! 同时欢迎大佬们批评指正!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。