用C语言编写程序,将下列一个二维矩阵实现其串行化,即转变成一维向量。

按照箭头的方向进行串行化,求C源代码和相应解释。多谢了!
在线等,求高手求解!

第1个回答  2014-08-19
#include<stdio.h>
#define N 3
main()
{
int onedim[N*N];
int twodim[N][N]={ 1 , 3 , 5 ,
                       9 , 7 , 6 ,
                       10, 11, 13}; //二维数组初始化
int i , j , k = 0 ;
for ( i = 0 ; i < N ; i++)
{
//根据行判断循环方向 偶数行从前向后 奇数行从后向前
if ( i % 2 == 0) //偶数行
{
for (j =0 ; j < N ; j++)
{
onedim[k++] = twodim[i][j];
}

else //奇数行
{
for(j = N - 1 ; j>=0 ; j--)
{
onedim[k++] = twodim[i][j];
}
}
}
for ( k = 0 ; k < N*N; k++) //输出一维数组
{
printf("%d " ,onedim[k]);
}
}

第2个回答  2014-08-19
#include <stdio.h>
#include <stdlib.h>

// 将数组pLine逆序
void Revert(int* pLine, int nLen)
{
int i = 0;
int t = 0;

while(i<nLen/2)
{
t = pLine[i];
pLine[i] = pLine[nLen-1-i];
pLine[nLen-1-i] = t;
i++;
}
}

void SerializeMatrix(int pMat[1][10], int nRow, int nCol)
{
int i = 0;

// 串行化只需要将奇数行逆序即可
for (i=1; i<nRow; i+=2)
{
Revert(pMat[i], nCol);
}
}

int main()
{

int pnMat[6][10] = {0};
int i = 0;
int j = 0;

srand(8);
for (i=0; i<6; i++)
{
for (j=0; j<10; j++)
{
pnMat[i][j] = rand()%20;
printf("%02d ", pnMat[i][j]);
}
printf("\n");
}

SerializeMatrix(pnMat, 6, 10);

printf("串行化后:\n");
for (i=0; i<6; i++)
{
for (j=0; j<10; j++)
{
printf("%02d ", pnMat[i][j]);
}
printf("\n");
}

return 0;
}

第3个回答  推荐于2016-11-07
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void main(void){
int a[3][3]={{1,3,5},{6,7,9},{10,11,13}},*b,i;
b=(int *)a;
for(i=0;i<9;printf("%d ",b[i++]));
printf("\n");
}追问

很高效的代码,弱弱的问一句, b=(int *)a;这是什么意思?

追答

把二维数组的首地址a强制为int *型地址(即一维数组的地址)赋给指针b,b就成了一维数组的打针了。

本回答被提问者采纳
第4个回答  2014-08-19
#include<stdio.h>
int main()
{
int i,j,m,n,a[10][10],b[100];
scanf("%d%d",&m,&n);//m行n列
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);//录入元素
for(i=j=1;i<=m&&j<=n;)
{
printf("%d ",a[i][j]);
if(i%2==0)//偶数行倒序
{
if(j==1)
i++;
else
j--;
}
else
{
if(j==n)
i++;
else
j++;
}
}
return 0;
}
第5个回答  2014-08-19
#include<stdio.h>
int main()
{
int a[3][3]={1,3,5,
9,7,6,

10,11,13};
int tmp;
int i,j;
tmp=a[1][0];
a[1][0]=a[1][2];
a[1][2]=tmp;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%d,",a[i][j]);
printf("\n");

}追问

多谢了!

相似回答