C++设计一个程序,用一维数组描述一个数据集合(包含10个整数),采用指针方式完成数组元素的三种操作

设计一个程序,用一维数组描述一个数据集合(包含10个整数),采用指针方式完成数组元素的三种操作:
(1)求数组中各元素的平均值;(2)按升序排列数组中的各元素;(3)将一维数组升序排列的数据元素,一维数组原数据元素保存到一个新的2行10列二维数组中,并分行输出该二维数组元素值。
求解。
1、编制出相应程序,用子函数调用形式(分别定义计算平均值、升序排列和二维数组数据处理三个功能子函数)实现每一功能

#include <iostream>
using namespace std;

int array2[10][10];
int array[10] = {8,3,2,9,7,6,5,1,4,10};
int sum = 0;
int *p2 = array2[0];

void getAverage(int array[]){
for(int* p = array,*pend = array+10,i=0; p!=pend; ++p,++i){
sum += *p;
*(p2+0*10+i) = *p;
}
double average = (double)sum/10;
cout<<"平均值为:"<<average<<endl;
}

void sortArr(int array[]){
for(int i = 1; i<=10; i++){
for(int *p = array, *pend = array+10; p!=pend-i; ++p){
int a = *p;
int b = *(p+1);
if(a>b){
*(p+1)=a;
*p=b;
}
}
}
cout<<"升序排列:";
for(int* p = array,*pend = array+10,i = 0; p!=pend; ++p,++i){
cout<<*p<<" ";
*(p2+1*10+i) = *p;
}
cout<<endl;
}

void printArr2(int array2[][10]){
cout<<"二维数组为:"<<endl;
p2 = array2[0];
for(int *pend2 = array2[0]+20; p2!=pend2; ++p2){
cout<<*p2<<" ";
if(p2 == array2[0]+9){
cout<<endl;
}
}
cout<<endl;
}

int main(){

getAverage(array);
sortArr(array);
printArr2(array2);

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-28
既然是C++实现还是用面向对象的方法写比较好。
//main.cpp
#include <iostream>
#include "myarray.h"

using namespace std;

int main()
{
int a[10] = {4,7,9,3,1,2,5,6,8,0};
MyArray myArray(a, 10);
myArray.getAVG();//求平均值
myArray.ascendingSort();//升序排列
myArray.saveTo2dimensionalArray();//存到2维数组

return 0;
}
//myarray.h
#ifndef MYARRAY_H
#define MYARRAY_H
class MyArray
{
public:
MyArray(int *tmpArray, int arraySize);
~MyArray();
//下面三个成员函数分别实现了你要的三个功能
void getAVG();
void ascendingSort();
void saveTo2dimensionalArray();

private:
void initAscArray();
void printArray(int *tmpArray);

int m_size;
int *m_array;
int *m_ascArray;
};
#endif // MYARRAY_H
//myarray.cpp
#include "myarray.h"
#include <iostream>
using namespace std;

MyArray::MyArray(int *tmpArray, int arraySize)
{
m_array = tmpArray;
m_size = arraySize;
m_ascArray = new int[m_size];
initAscArray();
}

MyArray::~MyArray()
{
delete m_array;
delete m_ascArray;
}

void MyArray::initAscArray()
{
for (int i = 0; i < m_size; i++)
{
m_ascArray[i] = m_array[i];
}
}
void MyArray::getAVG()
{
double sum = 0;
for (int i = 0; i < m_size; i++)
{
sum += m_array[i];
}
cout<< sum/m_size <<endl;
}

void MyArray::ascendingSort()
{
for (int i = 0; i < m_size; i++)
{
for (int j = i+1; j < m_size; j++)
{
if (m_ascArray[i] > m_ascArray[j])
{
m_ascArray[i] += m_ascArray[j];
m_ascArray[j] = m_ascArray[i] - m_ascArray[j];
m_ascArray[i] -= m_ascArray[j];
}
}
}
printArray(m_ascArray);
}

void MyArray::printArray(int *tmpArray)
{
for (int i = 0; i < m_size; i++)
{
cout<< tmpArray[i] << " ";
}
cout << endl;
}

void MyArray::saveTo2dimensionalArray()
{
int a[2][m_size];
for (int i = 0; i < m_size; i++)
{
a[0][i] = m_ascArray[i];
a[1][i] = m_array[i];
}
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < m_size; j++)
{
cout<< a[i][j] << " ";
}
cout<< endl;
}
}
第2个回答  2012-05-28
#if 1
//设计一个程序,用一维数组描述一个数据集合(包含10个整数),采用指针方式完成数组元素的三种操作:
//1)求数组中各元素的平均值;
//2)按升序排列数组中的各元素;
//3)将一维数组升序排列的数据元素,一维数组原数据元素保存到一个新的2行10列二维数组中,并分行输出该二维数组元素值。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
void createArr(int * arr,int size);/* 创建一个随机数组 */
void printArr(int * arr,int size);/* 打印数组 */
void sortArr(int * arr,int size);/* 冒泡算法对数组进行排序 */

int main(void)
{
int arr[SIZE];
int arr2[2][SIZE];

createArr(arr,SIZE);
//将未排序的数据放入arr2的第二行
for (int i=0;i<SIZE;i++)
{
arr2[1][i]=arr[i];
}
//进行排序
sortArr(arr,SIZE);
//将排序后的数据放入arr2的第一行
for (int j=0;j<SIZE;j++)
{
arr2[0][j]=arr[j];
}
//分别打印两行
printArr(arr2[0],SIZE);
printArr(arr2[1],SIZE);

return 0;
}

void createArr( int * arr,int size )
{
int i,j,temp,f=0;
srand((unsigned int)time(0));//真随机数
for (i=0;i<size;)
{
f = 0;//代表不重复
temp = rand()%100;
for (j=0;j<i;j++)
{
if(temp==arr[j])
{
f=1;//发现重复
break;
}
}
if(!f)
{
arr[i] = temp;
i++;
}

}
}

void printArr( int * arr,int size )
{
printf("arr = [");
for (int i=0;i<size-1;i++)
{
printf("%d,",arr[i]);
}
printf("%d]\n",arr[size-1]);
}

void sortArr( int * arr,int size )
{
while(true){
int count = 0;
int i;
for(i=size-1;i>0;i--){
int flag = arr[i]<arr[i-1];
if(flag){
int temp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = temp;
count ++;
}
}
if(count==0){//如果交换次数为0则排序完毕
break;
}
}
}
#endif本回答被网友采纳
相似回答