如何在C中向后打印由数组表示的矩阵列?
我正在编写一个程序,从输入文件中提取矩阵,如下所示。其中第一行表示矩阵的参数-行、列,0表示更改奇数列,1表示更改偶数列如何在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
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表示法