c语言二维数组变成一维数组的通项公式

c语言二维数组变成一维数组的通项公式,速求

二维数组用两次循环,将其赋值到一维数组就够了。

举个例子,二维数组a[N][M],一维数组b[]

编写主函数部分:

int i,j,k=0;

for(i=0;i<N;i++)

for(j=0;j<M;j++)

b[k++]=a[i][j];

扩展资料:

反之一维转二维

#include <stdio.h>

#include <stdlib.h>

#define ROW 3 

#define COL 2

int main(int argc, char *argv[])

{

int arr1D[]  = {1,2,3,4,5,6};

int arr2D[ROW][COL];

int i,j;

//一维维整型数组转换为二维整型数组

for(i=0;i<ROW;i++)

{

for(j=0;j<2;j++)

{

arr2D[i][j]=arr1D[i*COL+j];

}

}

//二维整型数组打印显示 

for(i=0;i<ROW;i++)

{

for(j=0;j<COL;j++)

{

printf("%d  ", arr2D[i][j]);  

}

printf("\n");    

}

system("pause");

return 0;

}



温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-02

二维数组就是一维数组 直接循环就行 例如 a[3][4] 可以直接用*p指向 然后 p++ 只要不超过3x4就行

#include <stdio.h>
#define N 3
#define M 4
int main(){
    int a[N][M]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},i,j,*p;
    p=(int *)a;//将二维数组a变成一维数组p
    for(i=0;i<N;i++){
        for(j=0;j<M;printf("%3d",a[i][j++]));//用数组名a仍然按二维数组操作
        printf("\n");
    }
    printf("\n");
    for(j=M*N,i=0;i<j;printf("%3d",p[i++]));//用p则按一维数组操作
    printf("\n");
    return 0;
}

本回答被网友采纳
第2个回答  2015-11-12
这个很简单,因为二维数组就是一位数组的指针顺序,比如c[3][4],他的第7个元素恰好就是按顺序排的一维数组的第七个,所以可以简单的用指针首地址加上N来表示第N个数字,这个N是可以超过4的,直接用。只要补超过3*4-1就行。本回答被网友采纳
第3个回答  2017-08-05

相似回答