我的C++程序作业题(4)

123 阅读2分钟

题目1

题目

将一组数据从大到小排列后输出,要求显示每个元素及它们在原数组中的下标。

作答

这题使用冒泡降序就可以了,for循环输出。

冒泡顾名思义就是先把一个数据排出来放到数组尾部,接着从头再来放在倒数第二位……代码见下:

#include<iostream>

using namespace std;

int main()
{
	int a[10] = { 3,2,5,7,2,8,5,2,6,7 };
	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9-i; j++)
		{
			if (a[j] < a[j + 1])
			{
				int temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < 10; i++)
		cout << "a[" << i << "] = " << a[i] << endl;
}

题目2

题目

输入一个表示星期几的数,然后输出相应的英文单词。要求:使用指针数组实现。

作答

先使用一个字符数组将周一到周日的英文进行存储,然后我们定义一个指针数组令它指向开始时的字符数组,根据用户输入的数字,我们进行输出。这里有一个小知识点需要注意一下,字符数组名在输出时不输出地址,而是直接把这个字符串进行输出。好的,代码在下面供参考:

#include<iostream>

using namespace std;

int main()
{
	char day[][10] = { "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday" };
	char* pday[7];
	for (int i = 0; i < 7; i++)
		pday[i] = day[i];
	int week;
	cout << "请用数字输入今天是星期几" << endl;
	cin >> week;
	while (week < 1 || week>7)
	{
		cout << "你输入错了,请重新输入" << endl;
		cin >> week;
	}
	cout << "Today is " << pday[week - 1] << "!!!" << endl;
}

题目3

题目

把两个升序排列的整型数组合并为一个升序数组。设计好算法,以得到较高的运行效率。

作答

我们首先需要先定义两个升序排列的整型数组、还需要一个足够大的数组用来存放合并后的整数,我们用i来记录a[]的下标,j来记录b[]的下标,依次比较a和b中的数据,将小的放在新数组里面同时该下标+1,当a或者b遍历结束,为了节约时间,我们可以直接将另一个数组剩余数据直接复制到新数组中去。

最后需要优化一下程序,也就是我们需要用变量来记录数组的大小,这样方便数组的数据更改。

下面代码供参考:

#include<iostream>

using namespace std;

int main()
{
	int a[] = { -3,1,3,5,7,9,10,11,12};
	int b[] = { 2,4,6,8,10,12};
	int sum = sizeof(a) / sizeof(int)+ sizeof(b) / sizeof(int);
	int my_new[100];
	int i, j;
	for (i = 0, j = 0; i != (sizeof(a)/sizeof(int)) && j != (sizeof(b) / sizeof(int)); )
	{
		if (a[i] < b[j])
			my_new[i + j] = a[i++];
		else
			my_new[i + j] = b[j++];
	}
	while (sum != i + j)
	{
		if (i == sizeof(a) / sizeof(int))
		{
			my_new[i + j] = b[j++];
			continue;
		}
		if (j == sizeof(b) / sizeof(int))
			my_new[i + j] = a[i++];
	}
	for (int temp = 0; temp < sum; temp++)
		cout << my_new[temp] << ' ';
}