学习笔记四

       跟着鹏哥学编程,拿一个好offer。今天开始学习函数部分。鹏哥说写函数的原则是模块化,函数的功能要单一化,才能使得函数的可移植性好。写函数要先写出如何使用函数,再去用算法实现函数的功能,这样写出的代码就不会逻辑混乱。

1.用函数实现之前写过的二分查找。

       在binary_search(arr[],int k,int sz)中只实现对数组特定元素的查找,没有其他任何功能,这才是一个移植性好的函数该有的。

#include <stdio.h>
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int k = 9;
	int sz = sizeof(arr) / sizeof(arr[0]);		//求元素个数
	int binary_search(int arr[], int k, int sz);//函数声明
	int ret = binary_search(arr,k,sz);			//定义变量ret接收函数binary_search()返回值
	if (ret)
	{
		printf("找到了,下标是:%d", ret);
	}
	else
	{
		printf("没找到。\n");
	}
}
//用函数实现二分查找
//找到后返回元素下标,没找到返回-1
int binary_search(int arr[],int k,int sz)
{
	int left = 0;            //左下标
    int right = sz - 1;      //右下标
//左下标小于右下标,则说明左右下标之间有元素,可继续查找
	while (left <= right)
	{
		int mid = (left + right) / 2;    //找到数组中间元素的下标
		if (arr[mid] > k)       //说明要查找的元素在中间元素的左边
		{
			right = mid - 1;    //改变右下标
		}
		else if (arr[mid] < k)  //说明要查找的元素在中间元素的右边
		{
			left = mid + 1;     //改变左下标
		}
		else
		{
			return mid;        //中间元素即为要查找的元素,返回中间元素的下标
		}
	}
	return -1;
}

2.输出1000-2023年间所有闰年,用函数实现。

       函数is_leap_year(int y)来判断实参传递过去的是否是闰年?若是,则返回该年份;若不是,则返回-1;在主函数中用变量year来接收函数返回值,若year=-1,则continue,跳过后面代码,继续循环;若否,则输出;

#include <stdio.h>
int is_leap_year(int y)
{
	if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
		return y;
	else
		return -1;
}

int main()
{
	//输出1000-2023年之间所有的闰年,用函数实现
	int ret = 0; int year = 0;
	for (ret = 1000; ret <= 2023; ret++)
	{
		year = is_leap_year(ret);
		if (year == -1)
		{
			continue;
		}
		else
		{
			printf("%d  ",year);
		}
	}
	return 0;
}

3.输出0-100之间的所有素数,用函数实现

#include <stdio.h>
#include <math.h>
//试除法实现素数查找
int prime_number(int pn)
{
	int i = 0;
	for (i = 2; i <= sqrt(pn); i++)
	{
		if (pn % i == 0)
		{
			return -1;
		}
	}
	return pn;
}

int main()
{
	int pn = 0;
	for (pn = 1; pn <= 100; pn++)
	{
		int ret = prime_number(pn);
		if (ret == -1)
		{
			continue;
		}
		else
		{
			printf("%d ", ret);
		}
	}
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值