计算机程序设计C++ MOOC(第6周编程作业)

本博客内容为中国大学生MOOC国家精品课程《计算机程序设计C++》作业记录,仅供参考,观者忌照搬照抄,欢迎交流批评指正!

(注:由于本人学习时,前八周的作业提交时间已过,因此这八周的作业代码只在自己的编译器上测试运行通过,在课程网站上还未测试,于下学期开课时,再另行测试,如您发现有明显错误,可留言评论)

##第6周编程作业

本周作业内容为递归函数,内联函数与重载函数

  1. 递归猴子摘桃
    计算机程序设计C++ MOOC(第6周编程作业)
#include<iostream>

using namespace std;

int monkeyandPeak(int k, int n)//k是最后一天剩下的桃子个数,此例取1,n是天数
{
	if (n == 2)return (k + 1) * 2;
	int sum;
	sum = (monkeyandPeak(k, n - 1) + 1) * 2;
	return sum;
}

int main()
{
	int n;
	cin >> n;
	cout << monkeyandPeak(1, n);
	return 0;
}
  1. 编写内联函数求矩形的面积和周长
    计算机程序设计C++ MOOC(第6周编程作业)
#include<iostream>

using namespace std;

inline int Area(int a, int b)
{
	return a*b;
}

inline int Perimeter(int a, int b)
{
	return a + a + b + b;
}

int main()
{
	int l, w;
	cin >> l >> w;
	cout << Area(l, w)<<endl;
	cout << Perimeter(l, w) << endl;
	return 0;
}
  1. 编写重载函数显示字符串
    计算机程序设计C++ MOOC(第6周编程作业)
#include<iostream>
#include<string>

using namespace std;

void print_spaced(char a[])
{
	int n = 0,i;
	while (a[n] != '\0')
	{
		n++;
	}
	for (i = 0; i < n - 1; i++)
	{
		cout << a[i] << ' ';
	}
	cout << a[i];
}

void print_spaced(string a)
{
	int n = 0, i;
	while (a[n] != '\0')
	{
		n++;
	}
	for (i = 0; i < n - 1; i++)
	{
		cout << a[i] << ' ';
	}
	cout << a[i];
}

int main()
{
	char a[100];
	string b;
	cin >> a >> b;
	print_spaced(a);cout << endl;
	print_spaced(b);
	return 0;
}
  1. 排序函数重载
    计算机程序设计C++ MOOC(第6周编程作业)
    计算机程序设计C++ MOOC(第6周编程作业)
#include<iostream>

using namespace std;

void sort(int &a, int &b)
{
	if (a > b) return;
	int temp = a;
	a = b;
	b = temp;
	return;	
}

void sort(int &a, int &b, int &c)
{
	sort(a, b);
	sort(b, c);
	sort(a, b);
	return;
}

void sort(int &a, int &b, int &c, int &d)
{
	sort(a, b, c);
	sort(b, c, d);
	sort(a, b);
	return;
}

void sort(int a[], int n)
{
	if (n == 1) return;
	if (n == 2)
	{
		sort(a[0], a[1]); return;
	}
	sort(a, n - 1);
	sort(a[n - 2], a[n - 1]);
	sort(a, n - 1);
	return;
}

void print(int a[], int n)
{
	int i;
	for (i = 0; i < n - 1; i++)
	{
		cout << a[i]<<' ';
	}
	cout << a[i];
}

int main()
{
	int a, b, c, d;
	int data[100];
	int k, n, i;
	cin >> k;
	switch (k)
	{
	case 1:
		cin >> a >> b;
		sort(a, b);
		cout << a << " " << b << endl;
		break;
	case 2:
		cin >> a >> b >> c;
		sort(a, b, c);
		cout << a << " " << b << " " << c << endl;
		break;
	case 3:
		cin >> a >> b >> c >> d;
		sort(a, b, c, d);
		cout << a << " " << b << " " << c << " " << d << endl;
		break;
	case 4:
		cin >> n;
		for (i = 0; i<n; i++)
		{
			cin >> data[i];
		}
		sort(data, n);
		print(data, n);
		break;
	}
	return 0;
}
  1. 编写递归函数来使字符串逆序
    计算机程序设计C++ MOOC(第6周编程作业)
#include<iostream>

using namespace std;

void reverse(char &a, char &b)
{
	char temp;
	temp = a;
	a = b;
	b = temp;
	return;
}

void reverse(char a[], int n)
{
	if (n == 2) 
	{
		reverse(a[0], a[1]); return;
	}
	reverse(a, n - 1);
	char temp = a[n-1];
	int i;
	for (i = n-1; i >0; i--)
	{
		a[i] = a[i-1];
	}
	a[0] = temp;
	return;
}

int main()
{
	char a[100];
	int n=0;
	cin.getline(a,100);
	while (a[n] != '\0')
	{
		n++;
	}
	reverse(a, n);
	for (int i = 0; i < n; i++)
	{
		cout << a[i];
	}
	return 0;
}

以上为第6周编程作业。