第6周编程作业

本文涵盖了一系列C++编程练习,包括使用递归解决猴子摘桃问题,编写内联函数计算矩形面积和周长,实现字符串间隔显示,重载排序函数以及递归字符串逆序。这些练习涉及递归、函数重载、内联函数等核心编程概念,旨在提升C++编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述:中国大学MOOC-西安交通大学-计算机程序设计(C++)-第6周编程作业

 

1、递归猴子摘桃(20分)

题目内容:

猴子摘桃:一天,一只猴子摘了若干桃子,当天吃掉一半,觉得不过瘾,又吃了一个;第二天将剩下的桃子吃掉一半又多吃了一个;…,每天将前一天剩下的桃子吃掉一半又多吃一个,直到第n天,发现只剩下一个桃子,问第一天它摘了多少桃子。

编写递归函数,计算第一天猴子摘的桃子的数量。在主函数中输入n,调用函数计算第一天摘的桃子的数量,在主函数中输出。

输入:剩下一只桃子的天数n,n>=1。

输出:第一天摘的桃子数量。

【提示】函数格式:int   monkeyandPeak(int k,int n),其中n是1只桃子的天数,k是求哪天的桃子数,返回是第k天的桃子数。主函数的调用格式:

     count= monkeyandPeak(1,n);  //第n天只剩1只桃,求第1天的桃子数

【注意】使用递归实现。

样例1输入:

10

样例1输出:

1534

时间限制:500ms内存限制:32000kb

#include<iostream>
using namespace std;

int monkeyandPeak(int k,int n);
int main()
{
	int count,n;
	cin>>n;
	count = monkeyandPeak(1,n);
	cout<<count<<endl;

}


int monkeyandPeak(int k,int n)
{
	if (n == 1)
	{
		return 1;
	}
	else
	{
		return 2*(monkeyandPeak(1,n-1)+1);
	}
}

2、编写内联函数求矩形的面积和周长(20分)

题目内容:

编写函数求矩形的面积和周长,由于算式非常简单,请使用内联函数方式编写,提高程序运行效率

输入格式:

矩形的长和宽,均为整数

输出格式:

矩形的面积和周长

输入样例:

3 5

输出样例:

15 16

时间限制:500ms内存限制:32000kb

#include<iostream>
using namespace std;
inline int area(int a,int b);
inline int girth(int a,int b);
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<area(a,b)<<endl;
	cout<<girth(a,b)<<endl;

}
inline int area(int a,int b)
{
	return a*b;
}
inline int girth(int a,int b)
{
	return (a+b)*2;
}

3、编写重载函数显示字符串(20分)

题目内容:

编写函数 print_spaced 显示字符串,要求显示出的字符串每个字母之间都有一个空格。要求编写两个同名函数,一个支持字符数组输入,另一个支持string类型输入。然后编写main函数测试这两个函数,第一个使用字符数组输入,第二个使用string类型输入。

输入格式:

两个字符串,长度不超过100,只包含英文大小写字母,不含其他字符。

输出格式:

经间隔空格处理后的两个字符串,两个字符串分居两行。注意字符串的最后一个字母后面没有空格。

输入样例:

news

final

输出样例:

n e w s

f i n a l

#include<iostream>
#include<cstring>
#include <string>
using namespace std;

void print_spaced(char a[]);
void print_spaced(string a);
int main()
{
	char a[100];
	string b;
	cin>>a>>b;
//	cout<<a<<endl;
	print_spaced(a);
	print_spaced(b);
	

}
void print_spaced(char a[])
{
	for (int i=0;i<strlen(a);i++)
	{
		if (i == strlen(a)-1)
		{
			cout<<a[i]<<endl;
		}
		else
		{
			cout<<a[i]<<" ";
		}
	}
} 

void print_spaced(string b)
{
	for (int i=0;i<b.size();i++)
	{
		if (i == b.size()-1)
		{
			cout<<b[i]<<endl;
		}
		else
		{
			cout<<b[i]<<" ";
		}
	}
}

4、排序函数重载(20分)

题目内容:

编写一组重载的排序函数,可以对两个整数、三个整数、四个整数、整数数组从大到小排序,函数名为sort,其中数组排序应使用递归的方法,另补充print函数,在一行显示排序后的数组元素。

主函数如下:

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;

}

输入格式:

请根据主程序自己分析。

输出格式:

排序后的数据,一行,从大到小,末尾没有空格。

输入样例:

4

10

22 15 20 16 3 27 14 64 108 10

输出样例:

108 64 27 22 20 16 15 14 10 3

请提交完整程序,包括给出的main()

时间限制:500ms内存限制:32000kb

#include<iostream>
using namespace std;
void sort(int &a, int &b);
void sort(int &a, int &b, int &c);
void sort(int &a, int &b, int &c, int &d);
void sort(int data[],int n);
void print(int data[],int n);

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;
		case 4:
			cin>>n;
			for (i = 0;i<n;i++)
			{
				cin>>data[i];
			}
			sort(data,n);
			print(data,n);
			break;
	}

}

void sort(int &a, int &b)  //引用传参方式,将实际更改a,b值,且这里的比较将直接使用a,b内存地址,影响a,b实际值 
{
	if (a<b)
	{
		int temp;
		temp = a;
		a = b;
		b = temp;
	}
}

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

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

void sort(int data[],int n)
{
	if (n == 1)
	{
		return;
	}
	else
	{
		for (int i=n-1;i>0;i--)
		{
		sort(data[i-1],data[i]);
		}
	}

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

5、编写递归函数来使字符串逆序(20分)

题目内容:

编写函数来使一个字符串逆序输出,要求必须用递归函数。

输入格式:

一个字符串,不会超过100个字符长,中间可能包含空格

输出格式:

该字符串的逆序

【注意】使用字符数组和递归实现。

输入样例:

Hello,everyone

输出样例:

enoyreve,olleH

时间限制:500ms内存限制:32000kb

#include <iostream>
using namespace std;
void revPrint(char *str)  //递归思路,找到字符串末尾,倒着往前走
{
	char *p = str;
	cout<<p<<endl;
	if(*p==0) return;
	revPrint(p+1);
	cout<<*p;
}
int main()
{
	char str[110];
	cin.getline(str,110);  //使用getline接收输入带空格的字符串
	revPrint(str);
	cout<<endl;
	return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值