C++练习题及解析

1 .建立一个类 MOVE ,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平

 

均值的元素放到数组的右边。
具体要求如下:
1 )私有数据成员
       float array[20] :一维整型数组。
      int n :数组中元素的个数。
2 )公有成员函数
      MOVE(float b[],int m) :构造函数,初始化成员数据。
      void average() :输出平均值,并将数组中的元素按要求重新放置。
      void print() :输出一维数组。  

3)在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。

源代码:

法一:

#include<iostream>
using namespace std;
class MOVE {
	float array[20];
	int n;
public:
	MOVE(float b[], int m) 
	{
		n = m;
		for (int i = 0; i < m; i++) 
			array[i] = b[i];

	}
	void average()
	{
		float s = 0;
		for (int i = 0; i < n; i++) 
			s = s + array[i];
		s = 1.0 * s / n;
		cout << "平均数为:s = " << s << endl;
		float c[20];
		for (int i = 0; i < n; i++)
			c[i] = array[i];
		int j = 0;
		for (int i = 0, j = 0; i < n; i++) {
			if (c[i] < s)
			{
				array[j] = c[i];
				j++;
			}
		}
		int k = n - 1;
		for (int i = 0; i < n; i++)
		{
			if (c[i] > s)
			{
				array[k] = c[i];
				k--;
			}
		}
		
	}
	void print() 
	{
		for (int i = 0; i < n; i++) 
			cout << array[i] << '\t';
	}


};
int main()
{
	float b[] = { 1.2,3.4,2.4,5.6,8.7,3.1,4.6,6.8 ,5.5 };
	int m = 9;
	MOVE move(b, m);
	move.average();
	move.print();
	return 0;
}

法二:(双指针相对而行) 

#include<iostream>
using namespace std;
class MOVE {
	float array[20];
	int n;
public:
	MOVE(float b[], int m) 
	{
		n = m;
		for (int i = 0; i < m; i++) 
			array[i] = b[i];

	}
	void average()
	{
		float s = 0;
		for (int i = 0; i < n; i++) 
			s = s + array[i];
		s = 1.0 * s / n;
		cout << "平均数为:s = " << s << endl;
		int i = 0; 
		int j = n - 1;
		while (i < j)
		{
			while (array[i] <= s)
				i++;
			while (array[j] >= s)
				j--;
			if (i < j)
			{
				int t = array[i];
				array[i] = array[j];
				array[j] = t;
			}
			else
				break;
		}
		
	}
	void print() 
	{
		for (int i = 0; i < n; i++) 
			cout << array[i] << '\t';
	}


};
int main()
{
	float b[] = { 1.2,3.4,2.4,5.6,8.7,3.1,4.6,6.8 ,5.5 };
	int m = 9;
	MOVE move(b, m);
	move.average();
	move.print();
	return 0;
}

源代码:

#include<iostream>
using namespace std;
class SP
{
	int n, k;
public:
	SP(int n1, int k1)
	{
		n = n1;
		k = k1;
	}
	int power(int m, int n)
	{
		int t = m;
		for (int i = 1; i < n; i++)
			t = t * m;
		return t;
	}
	int fun()
	{
		int S = power(1, k);
		for(int i=2;i<n+1;i++)
			S = S + power(i, k);
		return S;
	}
	void show()
	{
		cout << "n项k次和为" << fun();
	}
};
int main()
{
	int n = 8, k = 5;
	SP s(n, k);
	s.fun();
	s.show();
	return 0;
}

3.建立一个类 MOVE,将数组中最大元素的值与最小元素的值互换。

具体要求如下:

1)私有数据成员

      int *array:一维整型数组。

      int n:数组中元素的个数。

2)公有成员函数

      MOVE(int b[],int m):构造函数,初始化成员数据。

      void exchange():输出平均值,并将数组中的元素按要求重新放置。

      void print():输出一维数组。

      ~MOVE():析构函数。

3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。

源代码:

#include<iostream>
using namespace std;
class MOVE
{
	int* array;
	int n;//数组中元素个数
public:
	MOVE(int b[], int m)
	{
		array = b;
		n = m;
	}
	void exchange()
	{
		double s = 0;
		for (int i = 0; i < n; i++)
			s = s + *(array + i);
		s = 1.0 * s / n;
		cout << "该数组的平均数为" << s << endl;
		int k = 0;//最小值位置
		int j = 0;//最大值位置
		for (int i = 1; i < n; i++)
		{
			if (*(array + k) < *(array + i))
				k = i;
			if (*(array + j) > *(array + i))
				j = i;
		}
		int t = *(array + k);
		*(array + k) = *(array + j);
		*(array + j) = t;
	}

	void print()
	{
		for (int i = 0; i < n; i++)
			cout << *(array + i) << '\t';
	}
	~MOVE()
	{
		delete[]array;
	}
};
int main()
{
	int b[] = { 21,65,43,87,12,84,44,97,32,55 };
	int m = 10;
	MOVE items(b,m);
	items.exchange();
	items.print();
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值