C语言初阶:函数调用的练习

目录

1.写一个函数可以判断一个数是不是素数(只能1和他本身整除的数)

非函数的写法::

函数的写法:

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

非函数的写法:

函数的写法:

3.写一个函数,实现一个有序数组的二分查找

非函数的写法:

函数的写法:

4.写一个函数,每调用一次这个函数,就会将num的值增加1

5.补充知识:布尔类型


1.写一个函数可以判断一个数是不是素数(只能1和他本身整除的数)

非函数的写法::

#include

int main()
{
	int i = 0;
	for (i = 101;i <= 200;i+=2)
	{
		//判断i是不是素数
		//是素数就打印
		//拿2~i-1之间的数字去试除
		int flag = 1;//flag是1,表示为素数
		int j = 0;
		for (j = 2;j <= sqrt(i);j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
			
		}
		if (flag==1)
			{
			printf("%d ", i);
			}
		
	}
	return 0;
}

函数的写法:

我们这里引入一个库函数sqrt(m),这个库函数的意思是开方,例如:sqrt(4)= 2。素数是不能开方的我们就利用这个性质,去找素数

#include
#include//sqrt(m)的头文件

//我们就规定不是素数就返回0,0为假,不打印
int is_prime(int n)
{
	int j = 0;
	for (j = 2;j <= sqrt(n);j++)
	{
		if (n % j == 0)
		{
			return 0;
		}
	}
}
int main()
{
	int i = 0;
	int count = 0;//这个是计数。计一共有几个素数
	for (i = 101;i <= 200;i += 2)
	{
		if (is_prime(i))
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

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

闰年判断的规则:
1.能被4整除,并且不能被100整除是闰年
2.能被400整除是闰年

非函数的写法:

#include

//打印1000年到2000之间的闰年
int main()
{
	int year = 0;
	for (year = 1000;year <= 2000;year++)
	{
		if (((year %4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
		{
			printf("%d ", year);
		}
	}
	return 0;
}

函数的写法:

#include

//我们规定是闰年返回1,不是闰年返回0
int is_leap_year(y)
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int year = 0;
	for (year = 1000;year <= 2000;year++)
	{
		if (is_leap_year(year))
		{
			printf("%d ", year);
		}
	}
	return 0;
}

3.写一个函数,实现一个有序数组的二分查找

非函数的写法我们在循环练习里面已经演示过了。为了方便大家,预览,我们在打一遍。

非函数的写法:

#include

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if(arr[mid] > k)
		{
			right = mid - 1;
		}
		else {
			printf("找到了,下标是:%d\n", mid);
			break;
		}
		if (left > right)
		{
			printf("找不到\n");
		}
	}
	return 0;
}

函数的写法:

这里我们函数不返回0给主函数的原因是数组的下标是以0开始的,会冲突,导致无法达到想要的效果

#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;
}

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

4.写一个函数,每调用一次这个函数,就会将num的值增加1

#include

void Add(int* p)//这里我们就用到了传址调用,形参可以直接改变实参的值
//void表示不返回,值回主函数,所以这里我们也不用加return
{
	(*p)++;
}
int main()
{
	int num = 0;
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	return 0;
}

​

5.补充知识:布尔类型

C语言内置的类型:

char

short

int

long

float

double

C99中引入了布尔类型:bool用来表示真假的,如果只想要表示真假时就用bool

#include 
#include 

bool is_prime(int n)
{
	int j = 0;
	for (j = 2;j <= sqrt(n);j++)
	{
		if (n % j == 0)
		{
			return false;//假
		}
	}
    return true;//真
}
int main()
{
	int i = 0;
	for (i = 101;i <= 200;i += 2)
	{
		if (is_prime(i))
		{
			printf("%d ", i);
			count++;
		}
	}
	return 0;
}

你可能感兴趣的:(C语言,c语言,C语言基础知识,适用于新手小白)