【C语言】自定义函数的练习

【C语言】自定义函数的练习,第1张

1. 打印100-200之间的素数并计数

素数或质数(prime number)是指在大于1的自然数中,除了1和它本身以外不再有其他的因数自然数。

#include 
#include 

int is_prime(int n)
{
	int j = 0;
	//m=a*b,a和b中一定至少有一个数<=√m
	//sqrt()函数是一个数学库函数,表示开平方,头文件是math.h
	for (j = 2; j <= sqrt(n); j++)//用2-sqrt(n)之间的数去试除n
	{
		if (n % j == 0)//n能被j整除
		{
			return 0;//不是素数返回0
		}
	}
	return 1;//是素数返回1
}
或者使用布尔类型
//#include //该头文件定义了布尔类型
//bool is_prime(int n)
//{
//	int j = 0;
//	for (j = 2; j <= sqrt(n); j++)
//	{
//		if (n % j == 0)
//		{
//			return false;//不是素数返回false
//		}
//	}
//	return true;//是素数返回true
//}

int main()
{
	int i = 0;
	int count = 0;
	for (i = 101; i <= 200; i+=2)	//大于2的偶数都不是素数,所以可以从101开始判断,并且每次调整加2
	{
		if (is_prime(i))
		{
			printf("%d ", i);
            //结果为101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
			count++;//计数
		}
	}
	printf("\ncount = %d\n", count);//count = 21

	return 0;
}
2. 打印1000-2000之间的闰年并计数

闰年(Leap Year)判断标准:能被4整除且不能被100整除,或能被400整除。

#include 

int is_leap_year(int y)
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
		return 1;//是闰年返回1
	else
		return 0;//不是闰年返回0
}

int main()
{
	int year = 0;
	int count = 0;
	for (year = 1000; year <= 2000; year++)
	{
		if (is_leap_year(year))
		{
			printf("%d ", year);
			count++;
		}
	}
	printf("\ncount = %d\n", count);//count = 243

	return 0;
}
3. 写一个函数,实现一个整形有序数组的二分查找

二分查找,也称折半查找(Binary Search)。

#include 

int binary_search(int arr[], int k, int sz)
	int left = 0;
	int right = sz - 1;

	while (left <= right)
	{
		int mid = left + (right - left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			return mid;//找到了返回下标
		}
	}
	return -1;//找不到返回-1,不能返回0因为找到了返回的下标可能是0
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = binary_search(arr, k, sz);
	if (ret == -1)
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是:%d\n", ret);
	}

	return 0;
}
//结果为:找到了,下标是:6

int sz = sizeof(arr) / sizeof(arr[0]);不能放在binary_search函数内。数组传参实际上传递的是数组首元素的地址,而不是整个数组,所以不能在函数内部计算一个函数参数部分的数组的元素个数。形参arr看上去是数组,本质是指针变量。

4. 写一个函数,每调用一次这个函数,就会将num 的值增加1
//使用传址调用
#include 

void Add(int* p)
{
	(*p)++;
}

int main()
{
	int num = 0;
	Add(&num);
	printf("%d\n", num);//1
	Add(&num);
	printf("%d\n", num);//2
	Add(&num);
	printf("%d\n", num);//3
	Add(&num);
	printf("%d\n", num);//4
	return 0;
}
//使用传值调用
#include 

int Add(int n)
{
	return ++n;
}

int main()
{
	int num = 0;
	num = Add(num);
	printf("%d\n", num);//1
	num = Add(num);
	printf("%d\n", num);//2
	num = Add(num);
	printf("%d\n", num);//3
	num = Add(num);
	printf("%d\n", num);//4
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/799206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存