c++中将二维数组元素变换为逆向存放的实现代码
DB伟 人气:11、例如,原始二维数组为,逆向存放后变为。试建立一个类REVARR,完成上述工作。
具体要求如下:
(1)私有数据成员
int a[M][N]:初始化时存放原始二维数组,最终存放逆向存放后的二维数组。
(2)公有成员函数
REVARR(int x[M][N]):构造函数,用形参x初始化数据成员a。
void reverse():按题目要求处理二维数组。
void print():按二维数组方式输出a数组值。
(3)在主函数中完成对该类的测试。在程序的开头,定义符号常数M和N的值分别为3和4,表示数组的行数和列数。在主函数中定义数组int data[M][N],其初值如上。定义一个REVARR类的对象arr,并用数组data初始化该对象的成员a,输出原数组值,然后调用成员函数逆序存放二维数组,最后输出逆序后的二维数组。
#include "stdafx.h" #include<iostream> #define M 3 #define N 4 using namespace std; class REVARR { public: REVARR(int x[M][N]);//:构造函数,用形参x初始化数据成员a。 void reverse();//:按题目要求处理二维数组。 void print();//:按二维数组方式输出a数组值。 private: int a[M][N];//:初始化时存放原始二维数组,最终存放逆向存放后的二维数组。 }; REVARR::REVARR(int x[M][N]) { int i,j; for(i=0;i<M;i++) { for(j=0;j<N;j++) { a[i][j]=x[i][j]; } } } void REVARR::reverse() { int t,i,j; for(i=0;i<M-1;i++) { for(j=0;j<N;j++) { t = a[i][j]; a[i][j] = a[M-i-1][N-j-1]; a[M-i-1][N-j-1] = t; } } } void REVARR::print() { int i,j; cout<<"转换后\n"; for(i=0;i<M;i++) { for(j=0;j<N;j++) { cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl; } int main() { int data[M][N]; int i,j; cout <<"请输入3行4列数:\n"; for(i=0;i<M;i++) { for(j=0;j<N;j++) { cin>>data[i][j]; } } REVARR arr(data); arr.reverse(); arr.print(); system("pause"); return 0; }
2、编程:设计一个reverse()函数,实现数组元素逆序存放。在主函数中输入n个整数,调用reverse()函数将它们逆序存放,最后输出逆序后的结果
利用指针
#include<stdio.h> void reverse(int *a,int n) { int i,j,m,t; m=(n-1)/2; for(i=0;i<=m;i++) {j=n-i-1; t=*(a+i); *(a+i)=*(a+j); *(a+j)=t; } } int main() { int n,i,b[10]; printf("请输入n的个数:"); scanf("%d",&n); printf("请输入%d个整数:",n); for(i=0;i<n;i++) scanf("%d",&b[i]); reverse(b,n); printf("%d个数组逆序后的结果:\n",n); for(i=0;i<n;i++) printf("%d\t",b[i]); printf("\n"); return 0; }
加载全部内容