【C/C++基础练习题】简单函数练习题

🍉内容专栏:【C/C++要打好基础啊】

🍉本文内容:简单函数使用练习题(复习之前写过的实验报告)

🍉本文作者:Melon西西

🍉发布时间 :2023.2.11


目录

1.给定某个年、月、日的值,计算出这一天属于该年的第几天,写出计算闰年的函数和计算日期的函数

2.编写函数判断一个数是否是“素数”。在主函数中调用该函数找出1000以内的所有素数,并按6个一行输出。

3.阶乘​编辑

4.用递归算法解决下面的 “兔子问题”:假定小兔子一个月就可以长成大兔子,而大兔子每个月都会生出一对小兔子。(即兔子从生后第三个月才会生小兔子。)如果年初养了一对小兔子,问到年底时将有多少对兔子?  (当然得假设兔子没有死亡而且严格按照上述规律长大与繁殖)。

5.编写一个程序,输入一个十进制数n,输出相应的二进制数或者八进制数,或者其他进制数。设计一个递归函数实现数制转换。整数n以及要转换为的进制(2、8、16或者其他)都由用户输入。


1.给定某个年、月、日的值,计算出这一天属于该年的第几天,写出计算闰年的函数和计算日期的函数

#include<iostream>
using namespace std;
int main()
{	
	int day = 0, yue=0,year = 0, sum = 0;
	int mounth[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	cin >> year >> yue >> day;
	int sumyue = 0;
	for (int i = 0;i < yue-1;i++)
	{
		sumyue += mounth[i];
	}
	if (yue > 2)
	{
		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
		{
			sumyue++;
		}
	}
	sum = sumyue + day;
	cout << "这一天是该年的第" << sum << "天" << endl;
	return 0;
}

2.编写函数判断一个数是否是“素数”。在主函数中调用该函数找出1000以内的所有素数,并按6个一行输出。

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int t = 1, count = 0;
	for (int i = 1; i < 1000; i++)
	{
		for (int j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				t = 0;
			}
		}
		if (t == 1)
		{
			cout << setw(3) << i << " ";
			count++;
			if (count % 6 == 0)
			{
				cout << "\n";
			}
		}
		t = 1;
	}
	return 0;
}

3.阶乘

 

 

#include<iostream>
using namespace std;
double n = 0, r = 0, t = 0;
double fact(double a)
{
	if (a == 1)
	{
		return  1;
	}
	else
	{
		return a * fact(a - 1);
		if (r == 0)
		{
			return 1;
		}
		else if (r == 1)
		{
			return n;
		}
	}
}
int main()
{	
	cout << "请输入n和r的值:" << endl;
	cin >> n >> r;
	t = n - r;
	if (n == 0 && r == 0)
	{
		cout << "程序结束" << endl;
	}
	else if (n < 1 || n < r)
	{
		cout << "Input Invalid!"<<endl;
	}
	else
	{
		double nn = fact(n);
		double rr = fact(r);
		double tt = fact(t);
		double aa=(rr * tt);
		double num = nn / aa;
		cout << fact(n)/fact(r)/fact(t) << endl;
	}
}
#include<iostream>
using namespace std;
double n = 0, r = 0, t = 0;
double fact(double a)
{
	int temp = 1;
	for (int i = 1;i <= a;i++)
	temp *= i;
	return temp;
}
int main()
{	
	cout << "请输入n和r的值:" << endl;
	cin >> n >> r;
	t = n - r;
	if (n == 0 && r == 0)
	{
		cout << "程序结束" << endl;
	}
	else if (n < 1 || n < r)
	{
		cout << "Input Invalid!"<<endl;
	}
	else
	{
		double nn = fact(n);
		double rr = fact(r);
		double tt = fact(t);
		double aa=(rr * tt);
		double num = nn / aa;
		cout << fact(n)/fact(r)/fact(t) << endl;
	}
}

4.用递归算法解决下面的 “兔子问题”:假定小兔子一个月就可以长成大兔子,而大兔子每个月都会生出一对小兔子。(即兔子从生后第三个月才会生小兔子。)如果年初养了一对小兔子,问到年底时将有多少对兔子?  (当然得假设兔子没有死亡而且严格按照上述规律长大与繁殖)。

#include<iostream>
using namespace std;
int rabbit(int n)
{
	if (n < 3)
	{
		return 1;
	}
	int fn = rabbit(n - 2) + rabbit(n - 1);
	{
		return fn;
	}
}

int main()
{
	int mouth = 12;
	rabbit(mouth);
	cout << "年底有" << rabbit(mouth)<<"对兔子";
		return 0;
}

5.编写一个程序,输入一个十进制数n,输出相应的二进制数或者八进制数,或者其他进制数。设计一个递归函数实现数制转换。整数n以及要转换为的进制(2、8、16或者其他)都由用户输入。

#include<iomanip>
#include<iostream>
using namespace std;
int zhihuan(int a, int b)
{
	string arr = "0123456789ABCDEF";
	if (a < b)
	{
		cout << arr[a];
	}
	else
	{
		zhihuan(a / b, b);
		cout << arr[a % b];
	}
	return 0;
}
int main()
{
	int n, m, num = 0;
	cout << "请输入一个十进制数n:";
	cin >> n;
	cout << "请输入想转化成的m进制数:";
	cin >> m; 
	cout << n << "转化成" << m << "进制数为:";
	zhihuan(n, m);
}

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
好的,以下是一些 C++ 中的递归函数练习题: 1. 编写一个递归函数,计算 n 的阶乘 ```cpp int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } ``` 2. 编写一个递归函数,计算斐波那契数列的第 n 项 ```cpp int fibonacci(int n) { if (n == 0 || n == 1) { return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } ``` 3. 编写一个递归函数,计算一个数字的二进制表示中 1 的个数 ```cpp int countOnes(int n) { if (n == 0) { return 0; } else { return (n % 2 == 1) + countOnes(n / 2); } } ``` 4. 编写一个递归函数,计算一个数字的反转 ```cpp int reverse(int n) { if (n < 10) { return n; } else { return (n % 10) * pow(10, floor(log10(n))) + reverse(n / 10); } } ``` 5. 编写一个递归函数,计算一个字符串的长度 ```cpp int stringLength(string str) { if (str == "") { return 0; } else { return 1 + stringLength(str.substr(1)); } } ``` 6. 编写一个递归函数,判断一个字符串是否是回文字符串 ```cpp bool isPalindrome(string str) { if (str.length() <= 1) { return true; } else if (str[0] != str[str.length() - 1]) { return false; } else { return isPalindrome(str.substr(1, str.length() - 2)); } } ``` 7. 编写一个递归函数,计算一个数组中所有元素的和 ```cpp int arraySum(int arr[], int size) { if (size == 0) { return 0; } else { return arr[0] + arraySum(arr + 1, size - 1); } } ``` 8. 编写一个递归函数,计算一个数组中所有元素的平均值 ```cpp double arrayAverage(int arr[], int size) { if (size == 0) { return 0; } else { return (arr[0] + (size - 1) * arrayAverage(arr + 1, size - 1)) / size; } } ``` 9. 编写一个递归函数,计算一个数组中的最大值 ```cpp int arrayMax(int arr[], int size) { if (size == 1) { return arr[0]; } else { return max(arr[0], arrayMax(arr + 1, size - 1)); } } ``` 10. 编写一个递归函数,计算一个数组中的最小值 ```cpp int arrayMin(int arr[], int size) { if (size == 1) { return arr[0]; } else { return min(arr[0], arrayMin(arr + 1, size - 1)); } } ``` 希望这些练习题能够帮助你练习 C++ 中的递归函数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值