如何在C中向后打印由数组表示的矩阵列?

如何在C中向后打印由数组表示的矩阵列?,c,file,matrix,C,File,Matrix,我正在编写一个程序,从输入文件中提取矩阵,如下所示。其中第一行表示矩阵的参数-行、列,0表示更改奇数列,1表示更改偶数列 5 5 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 现在,我必须使用奇数clomuns(例如:7 4 1)并将其向后打印,这样它就会像这样(1 4 7),如果我有3x3矩阵,它会像这样: 1 2 3 4 5 6 7 8 9 向后打印奇数列的输出矩阵 7 2 9 4 5 6 1 8

我正在编写一个程序,从输入文件中提取矩阵,如下所示。其中第一行表示矩阵的参数-行、列,0表示更改奇数列,1表示更改偶数列

5 5 0
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
现在,我必须使用奇数clomuns(例如:7 4 1)并将其向后打印,这样它就会像这样(1 4 7),如果我有3x3矩阵,它会像这样:

1 2 3
4 5 6
7 8 9
向后打印奇数列的输出矩阵

7 2 9
4 5 6
1 8 3
这是我目前掌握的代码

int r = 0, c = 0, odds = 0,n = 0,i,j;
FILE *fp,*fp2;
fp = fopen(argv[1],"r");
fp2 = fopen(argv[2],"w");
if(!fp){
    printf("file doesnt exist\n");
}
if(!fp2){
    printf("file doesnt exist\n");
}
fscanf(fp,"%d %d %d", &r, &c, &odds);
n = r *c;
int* matrix= (int*)malloc(r*c* sizeof(int));

for(int i = 0; i < n; i++)
{
    fscanf(fp,"%d",&matrix[i]);
}

if(odds == 0){
for(int i = 0; i < n; i++){

    if(i%2==0){
    matrix[i] = i;
    }
}
}else if(odds == 1){
   for(int i = 0; i < n; i++){

    if(i%2!=0){
    matrix[i] =  ;
    }
} 
}




for(i = 0;i < n; i++)
{    
        if(i % s == 0 ){
        fprintf(fp2,"\n");
        }
        fprintf(fp2,"%d ",matrix[i]);



}
    fclose(fp);
    fclose(fp2);
return 0;
好的,我刚刚了解了地图索引,所以现在数组中的每个位置都表示为矩阵[j+(I*r)],例如上面3x3矩阵中的第一个位置是这样的:矩阵[1+(0*3)],第四个位置是矩阵[1+(1*3)],等等

所以现在我的问题是如何索引列中的相反位置

代码更新:

for(int i = 0; i < r; i++){

    for(int j = 1; j < c; j++){
        if(i%2!=0){
            matrix[j+i*r] = ....;
    }

}
}
for(int i=0;i
在这两种情况下,您都希望用矩阵中更高的元素替换矩阵[i]

n n
1 2 3
4 5 6
7 8 9
在这个替换奇数值的示例中,应切换1和7。两个指数的差异为6。然而,这取决于矩阵尺寸。一般公式是:

n^2 - n - r*(2n) + i
其中r是您所在的行。由于您正在翻转矩阵,因此只需执行(n-n%2)/2行

下面是一些需要澄清的python代码

for i in range(0,int((matrixdim-matrixdim%2)/2)*matrixdim):     
    if ((i-r)%2) == 0:
        temp = matrix[i]
        matrix[i] = matrix[matrixdim*matrixdim - matrixdim - r*2*matrixdim + i]
        matrix[matrixdim*matrixdim - matrixdim - r*2*matrixdim + i] = temp

    if ((i+1)%matrixdim) == 0:
        r += 1
使用i,j表示法

for i in range(0,int((matrixdim-matrixdim%2)/2)):
    for j in range(0, matrixdim):
        pos = j + matrixdim*i
        temp = matrix[pos]

        if j%2 == even:
            matrix[pos] = matrix[matrixdim*matrixdim - matrixdim - i*2*matrixdim + pos]
            matrix[matrixdim*matrixdim - matrixdim - i*2*matrixdim + pos] = temp 

在这两种情况下,您都希望用矩阵中更高的元素替换矩阵[i]

n n
1 2 3
4 5 6
7 8 9
在这个替换奇数值的示例中,应切换1和7。两个指数的差异为6。然而,这取决于矩阵尺寸。一般公式是:

n^2 - n - r*(2n) + i
其中r是您所在的行。由于您正在翻转矩阵,因此只需执行(n-n%2)/2行

下面是一些需要澄清的python代码

for i in range(0,int((matrixdim-matrixdim%2)/2)*matrixdim):     
    if ((i-r)%2) == 0:
        temp = matrix[i]
        matrix[i] = matrix[matrixdim*matrixdim - matrixdim - r*2*matrixdim + i]
        matrix[matrixdim*matrixdim - matrixdim - r*2*matrixdim + i] = temp

    if ((i+1)%matrixdim) == 0:
        r += 1
使用i,j表示法

for i in range(0,int((matrixdim-matrixdim%2)/2)):
    for j in range(0, matrixdim):
        pos = j + matrixdim*i
        temp = matrix[pos]

        if j%2 == even:
            matrix[pos] = matrix[matrixdim*matrixdim - matrixdim - i*2*matrixdim + pos]
            matrix[matrixdim*matrixdim - matrixdim - i*2*matrixdim + pos] = temp 

请发布你的程序。“反向打印”输出是如何构造的?为什么只有
1
7
3
9
切换?尺寸为4x4的矩阵上的外观如何?5x5?3x9?欢迎使用堆栈溢出。请阅读,采取,阅读,以及。最后,请学习如何创建一个您自己的尝试,并向我们展示,以及您与它有什么问题的描述。请张贴您的程序。“反向打印”输出是如何构造的?为什么只有
1
7
3
9
切换?尺寸为4x4的矩阵上的外观如何?5x5?3x9?欢迎使用堆栈溢出。请阅读,采取,阅读,以及。最后,请学习如何创建一个您自己的尝试,并向我们展示,以及您有什么问题的描述。但我仍然很好奇,在索引的情况下,第n个元素的实际位置将是矩阵[j+(n*I)]。编辑原始答案以包括I,j表示法但我仍然好奇,在索引的情况下,第n个元素的实际位置将是矩阵[j+(n*I)]。编辑原始答案以包括I,j表示法