函数相关练习

目录

 

一:判断100-200内所有的素数

        1️⃣素数定义

        2️⃣具体代码

        3️⃣运行结果

二:判断1000-2000内所有的闰年

        1️⃣解题思路 

        2️⃣具体代码

        3️⃣运行结果

三:写一个函数实现一个整形有序数组的二分查找

        1️⃣解题思路

        2️⃣具体代码

        3️⃣运行结果

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

        1️⃣具体代码

        2️⃣运行结果

 五:接受一个整数值(无符号),按顺序打印它的每一位

        1️⃣具体代码

        2️⃣代码分析

        3️⃣运行结果

 六:编写函数不允许创建临时变量,求字符串的长度。

        1️⃣具体代码

        2️⃣代码分析

        3️⃣运行结果

 七:求n的阶乘(不考虑溢出)

        1️⃣具体代码

        2️⃣运行结果

 八:求第n个斐波那契数(不考虑溢出)

        1️⃣斐波那契数定义

        2️⃣具体代码

        3️⃣运行结果


🥑🍓Let's go🍓🥑

一:判断100-200内所有的素数

        1️⃣素数定义

        素数又叫质数(prime number),有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

        2️⃣具体代码

#include <stdio.h>
#include  <math.h>
int is_prime(int i)
{
	int j = 0;
	for (j = 2; j <= sqrt(i); j++)
	{
		if (i % j == 0)
			return 0;
	}
	return 1;
}


int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		if (1 == is_prime(i))
		{
			count++;
			printf("%d\n", i);
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}

        3️⃣运行结果

二:判断1000-2000内所有的闰年

        1️⃣解题思路 

        年份是4的倍数,且不是100的倍数,为闰年。年份是400的倍数为闰年。归结起来就是通常说的:四年一闰;百年不闰,四百年再闰。

        2️⃣具体代码

int is_prime(int i)
{
	if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0))
	{
		return 1;
	}
	else
		return 0;
}
#include  <stdio.h>
int main()
{
	int i = 0;
	int count = 0;
	for (i = 1000; i <= 2000; i++)
	{
		int m=is_prime(i);
		if (1 == m)
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount=%d", count);
	return 0;
}

        3️⃣运行结果

三:写一个函数实现一个整形有序数组的二分查找

        1️⃣解题思路

         2️⃣具体代码

int Research(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;
}
#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int k = 0;
	scanf("%d", &k);
	int ret = Research(arr, k, sz);
	//找到了就返回下标,找不到就返回-1
	if (-1 == ret)
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标为:%d", ret);
	}
	return 0;
}

        3️⃣运行结果

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

          1️⃣具体代码

#include <stdio.h>
int ADD(int n)
{
	return n + 1;
}
int main()
{
	int num = 0;
	num = ADD(num);
	printf("%d\n", num);
	num = ADD(num);
	printf("%d\n", num);
	num = ADD(num);
	printf("%d\n", num);
	return 0;
}

        2️⃣运行结果

 五:接受一个整数值(无符号),按顺序打印它的每一位

        1️⃣具体代码

例如:1234
打印结果为:1 2 3 4
void Print(int n)
{
	if (n > 9)//存在判断条件,使n的值无限变小
	{
		Print(n / 10);
	}
	printf("%d ", n % 10);
}
#include <stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	Print(n);
	return 0;
}

        2️⃣代码分析

        3️⃣运行结果

 六:编写函数不允许创建临时变量,求字符串的长度。

        1️⃣具体代码

int my_strlen(char* ps)
{
	if (*ps != '\0')
	{
		return 1 + my_strlen(ps + 1);
	}
	else
	{
		return 0;
	}
}
#include <stdio.h>
int main()
{
	char ch[10] = "abcdef";
	int ret = my_strlen(ch);
	printf("%d\n", ret);
	return 0;
}

        2️⃣代码分析

        3️⃣运行结果

 七:求n的阶乘(不考虑溢出)

        1️⃣具体代码

int Fac(int n)
{
	if (n <= 1)
	{
		return 1;
	}
	else
	{
		return n * Fac(n - 1);
	}
}
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fac(n);
	printf("%d", ret);
	return 0;
}

        2️⃣运行结果

 八:求第n个斐波那契数(不考虑溢出)

        1️⃣斐波那契数定义

序列的前两个数字分别是1和1,每一个连续的数字都是前两个数字的和

例如:1 1 2 3 5 8 13 21...

        2️⃣具体代码

方法1:
int Fib(int n)
{
	if (n <= 2)
	{
		return 1;
	}
	else
	{
		return Fib(n - 1) + Fib(n - 2);
	}
}
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d", ret);
	return 0;
	//利用这种方法计算时间较长
}
方法2:迭代地方法:
int Fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (n >= 3)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return  c;
}
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d", ret);
	return 0;
}

        3️⃣运行结果

  🌈🌈文章结束☀️☀️ 

这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值