c++程序设计——实验7

实验7

1. 对两个无序的数组(其中数组a长度为n,数组b长度m),采用选择法(或起泡法)分别将这两个数组转为有序(元素值从小到大有序)。要求:a和b数组长度及其元素均由键盘获取。

2. 将以上任务1构建的两个有序的数组a和b,进行有序合并,即将这两个数组进行合并的过程中其数据始终保持有序。(提示:数据结构:三个一维数组a,b,c将a[ia]和b[ib]比较,谁小就把谁放入c[ic](c数组用于存放合并后的数据),谁放入了c[ic]中谁的下标就加1,同时ic(c中当前存放数据的下标)加1,如下图所示。)


 3. 计算以上任务2中c数组元素的平均值,并删除c中所有低于平均值的那些元素。

#include <iostream>
using namespace std;
int main()
{
	//int a[100],b[100];
	//a[100] = {0};提示,不能这样初始化,应该采用下面的方式
	//b[100] = {0};
	int a[100] = {0},b[100] = {0};
	
	int n1,n2,t;
	cout << "请输入数组a的个数:";
	cin >> n1;
	cout << "请依次输入" << n1 << "个整数:"<< endl;
	for( int i = 0; i < n1; i++ )
	{
		cin >> a[i];
	}
	cout << "对数组a进行排序……" << endl;
	/********************************选择法排序*****************************
	思路:	a[i]与后面的元素a[j](即a[i+1],a[i+2],……,a[n1-1])进行比较,如果
			a[i]大于a[j],则交换。须n1-1次循环,每次循环须判断n1-i-1次。第0次
			循环后,a[0]为数组a的最小值,第1次循环后,a[1]仅小于a[0],大于其
			它元素。第n1-1次循环后,a[n1-1]为最大值。最终完成从小到大的排序。 
	************************************************************************/
	//方式1:
	for( int i = 0; i < n1-1; i++ )		//须n1-1次循环
		for( int j = i+1; j < n1; j++)	//每次循环须判断n1-i-1次
		{
			if( a[i] > a[j] )			//a[i]大于a[j],则交换
			{
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
	//方式2:
	//for(int i = 0; i < n1-1; i++)		//须n1-1次循环
	//{
	//	int min = i;
	//	for(int j = i+1; j < n1; ++j)	//每次循环须判断n1-i-1次
	//	{
	//		if( a[min] > a[j])			//a[min]大于a[j],则a[j]为最小值
	//			min = j;
	//	}
	//	t = a[min];
	//	a[min] = a[i];
	//	a[i] = t;
	//}
	/*******************************冒泡法排序******************************
	思路:	相邻的两个元素进行比较,如果前者大于后者,则交换,这样较大的元素
			就会向后移动,较小的元素向前移动。第0次循环,须两两比较m-1次,结果
			a[m-1]为数组a的最大值。第1次循环,须两两比较m-2次,结果a[m-2]仅小
			于a[m-1],大于其它元素。第i次循环,须两两比较m-1-i次。第m-1次循环后,
			a[0]为最小值。最终完成从小到大的排序。              
	************************************************************************/
	//冒泡法:
	//for( int i = 0; i < n1-1; i++ )		//须n1-1次循环
	//	for( int j = 0; j < n1-i-1; j++)		//每次循环须判断n1-i-1次
	//	{
	//		if( a[j] > a[j+1] )				//a[j]大于a[j+1],则交换
	//		{
	//			t = a[j];
	//			a[j] = a[j+1];
	//			a[j+1] = t;
	//		}
	//	}
	//测试用
	//for( int i = 0; i < n1; i++ )
	//{
	//	cout << a[i] << ' ';
	//}
	//cout << endl;

	/******************************************************/
	cout << "请输入数组b的个数:";
	cin >> n2;
	cout << "请依次输入" << n2 << "个整数:"<< endl;
	for( int i = 0; i < n2; i++ )
	{
		cin >> b[i];
	}
	cout << "对数组b进行排序……" << endl;
	for( int i = 0; i < n2; i++ )
		for( int j = i+1; j < n2; j++)
		{
			if( b[i] >b[j] )
			{
				t = b[i];
				b[i] = b[j];
				b[j] = t;
			}
		}

	/******************第二题**************/

	int c[100];
	int i = 0, j = 0, k = 0;
	int n3 = 0;//记录数组c的个数
	while( i < n1 && j < n2 )
	{
		if( a[i] < b[j] )
		{
			c[k++] = a[i++];
		}
		else if( a[i] == b[j] )
		{
			c[k++] = a[i++];
			c[k++] = b[j++];
		}
		else
		{
			c[k++] = b[j++];
		}
	}
	while( n1 > i && n2 == j )
	{
		c[k++] = a[i++];
	}
	while( n2 > j && n1 == i )
	{
		c[k++] = b[j++];
	}
	n3 = k;
	cout << "对数组a和数组b进行组合,得数组c为:" << endl;
	//检查结果
	for( k = 0; k < n3; k++ )
		cout << c[k] << ' ';
	cout << endl;
	/******************第三题**************/

	 int sum = 0;//sum记录数组c所有元素的和,及平均值
	 int n4 = 0;//n4记录新数组c的个数
	 for( k = 0; k < n3; k++ )
		sum += c[k];//求和
	sum /= n3;//求均值
	cout << "数组c平均数:" << sum << endl;
	cout << "对数组c进行筛选……" << endl;
	for( k = 0; k < n3; k++ )
	{
		if( c[k] >= sum )
		{
			n4 = n3 - k;
			break;
		}			
	}

	for( int m=0; k < n3; k++,m++)
	{
		c[m] = c[k];
	}
	cout << "数组c筛选后为:" << endl;
	for( int k = 0; k < n4; k++)
	{
		cout << c[k] << ' ';
	}
	cout << endl;
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值