函数的应用:判断素数;判断闰年;二分查找;

本文详细介绍了如何用C语言实现判断1-100内的素数数量、1000-2000年间的闰年统计以及二分查找算法的应用。通过示例展示了如何编写函数来实现这些功能并提供运行结果。
摘要由CSDN通过智能技术生成

一、判断1-100里的数那个是素数,并确定数目;

1.定义输入变量,输入所要判断的数值;

int n = 0;
	scanf("%d", &n);

2.数值进入函数,进行判断;

sushu(n);

3.开始判断,将数值与2到所输数值-1的数取模,如果全部不能整除,falg回增加到所判断的数值,则是素数;

void sushu(int x)//函数是为了一个特殊功能
{
	int k = 0;//注意变量初始化
	int cunt = 0;
	while (x <= 100)
	{
		int flag = 0;
		for (k = 2;k <= sqrt(x);k ++)
		{
			if (x % k == 0)
			{
				flag++;
				break;//直接跳出for循环;
			}
			else
			{

			}
		}
		if (flag != 1)
		{
			printf("%d是素数\n", x);
			cunt++;
		}
		x++;
	}
	printf("共%d个素数\n", cunt);
}

4.每打印一个素数,计数器加一;

if (x % k == 0)
			{
				flag++;
				break;//直接跳出for循环;

5.打印所有的素数和个数;

if (flag != 1)
		{
			printf("%d是素数\n", x);
			cunt++;
		}
		x++;
	}
	printf("共%d个素数\n", cunt);

6.完整代码;

void sushu(int x)//函数是为了一个特殊功能
{
	int k = 0;//注意变量初始化
	int cunt = 0;
	while (x <= 100)
	{
		int flag = 0;
		for (k = 2;k <= sqrt(x);k ++)
		{
			if (x % k == 0)
			{
				flag++;
				break;//直接跳出for循环;
			}
			else
			{

			}
		}
		if (flag != 1)
		{
			printf("%d是素数\n", x);
			cunt++;
		}
		x++;
	}
	printf("共%d个素数\n", cunt);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	sushu(n);
	return 0;

}

7.运行结果;

二、判断1000-2000的闰年,并打印出个数;

1.定义计数变量和年份变量;

int y = 0;
	int cunt = 0;

2.使用for循环得出1000-2000年份;

for (y = 1000;y <= 2000;y++)

3.将所输出的年份进入判断函数,是闰年则返回1,打印出年份,计数变量加1;


		if (1 == panduan(y))
		{
			printf("%d是闰年\n", y);
			cunt++;
		}
	}
	printf("共%d个闰年\n", cunt);

4.判断函数使用逻辑运算符来判断闰年的条件是否成立;

int panduan(int x)
{
	return (((0 == x % 4) && (0 != x % 100)) || (0 == x % 400));
}

5.完整代码;

int panduan(int x)
{
	return (((0 == x % 4) && (0 != x % 100)) || (0 == x % 400));
}
int main()//先写函数怎么应用,再去开发
{
	int y = 0;
	int cunt = 0;
	for (y = 1000;y <= 2000;y++)
	{
		if (1 == panduan(y))
		{
			printf("%d是闰年\n", y);
			cunt++;
		}
	}
	printf("共%d个闰年\n", cunt);
	return 0;
}

6.运行结果;

三、函数实现二分查找;

1.定义顺序数组;输入所要找的数;

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	//找到了返回下标;找不到返回-1;
	int k = 0;

2.算出最右边值的下标;

int sz = sizeof(arr) / sizeof(arr[0]);

3.进入二分函数,输入参数;

int back = erfen(arr,sz,k);

4.定义初始的left和right,mid;

int left = 0;
	int right = sz - 1;
	int mid = (left + right) / 2;

5.进入while循环,条件是left<=right,进行判断,并根据判断结果对left right的值进行调整;

while (left<=right)
	{
		/*int mid = (left + right) / 2;*///防止left+right过大导致溢出;
		int mid = left + (right-left)/ 2;
		if (k == arr[mid])
		{
			return mid;
		}
		else if (k > arr[mid])
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}
	}

6.找到或找不到都会返回值,根据返回值,打印相应内容;

if (-1 != back)
	{
		printf("下标是%d\n",back);
	}
	else
	{
		printf("找不到\n");
	}

7.完整代码;

int erfen(int* arr,int sz,int k)//函数里只能使用自己函数创建和外部传入的变量; 
{
	int left = 0;
	int right = sz - 1;
	int mid = (left + right) / 2;
	while (left<=right)
	{
		/*int mid = (left + right) / 2;*///防止left+right过大导致溢出;
		int mid = left + (right-left)/ 2;
		if (k == arr[mid])
		{
			return mid;
		}
		else if (k > arr[mid])
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}
	}
	return -1;//找不到就跳出循环,返回-1;
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	//找到了返回下标;找不到返回-1;
	int k = 0;
	scanf("%d", &k);
	int sz = sizeof(arr) / sizeof(arr[0]);

	int back = erfen(arr,sz,k);//穿了三个参数;
	if (-1 != back)
	{
		printf("下标是%d\n",back);
	}
	else
	{
		printf("找不到\n");
	}
	return 0;
}

8.输出结果;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值