【发布时间】:2016-02-18 06:03:33
【问题描述】:
我正在尝试用 C 语言编写一个程序,将二维数组(特别是矩阵)转换为一维数组。例如,如果我们有一个 L 行 C 列的矩阵,它应该变成单行 newL=L*C。因此,如果矩阵有 3 行 4 列,则新数组的大小为 3*4=12。
矩阵应该变成这样:
1 2
--> 1 2 3 4
3 4
我现在面临的问题是如何将矩阵分配给数组,而不需要随机值或重复值。
我关心的代码是这样的:
for(k=1;k<=t;k++)
{
for(i=1;i<=l;i++)
{
for(j=1;j<=c;j++)
{
v[k]=m[i][j];
}
}
}
k,i 和 j 是矩阵(二维数组)和数组的计数器。其中两个; i 和 j 是矩阵的计数器,k 是数组的计数器。请注意,它们中的每一个都从 1 开始并达到它的大小,在这个大小中,我将使用 2 行和 2 列作为矩阵,因此数组的大小为 4(2*2)。
- l 是数组中的行数。
- c 是数组中的列数。
- t 是数组的大小。 t=l*c
执行代码给了我这个作为回报:
1 2
--> 4 4 4 4
3 4
简单地说,这段代码总是将矩阵的最后一个值提供给数组。因此,如果我将矩阵中的 4 替换为 5,则数组将有 5 5 5 5。
编辑:
这是了解我想要做什么的完整代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c,i,j,l,k,t;
printf("Donner le nombres des lignes: ");
scanf("%d",&l);
printf("Donner le nombres des colonnes: ");
scanf("%d",&c);
int m[l][c];
t=l*c;
int v[t];
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
printf("Donner m[%d][%d]: ",i+1,j+1);
scanf("%d",&m[i][j]);
}
}
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
printf("%d\t",m[i][j]);
}
printf("\n");
}
printf("\n\n\n\n");
for(k=1;k<=t;k++)
{
for(i=1;i<=l;i++)
{
for(j=1;j<=c;j++)
{
v[k]=m[i][j];
}
}
}
for(k=0;k<t;k++)
{
printf("%d\t",v[k]);
}
system("pause");
}
谢谢大家的帮助,我找到了正确的方法。
【问题讨论】:
-
不要使用容易与数字混淆的字母!在这里,我假设您的意思是字母
l(小写“ell”)。 -
@Olaf 这是一个坏习惯。你昨天告诉我的,我现在还在用。对不起。是的,我的意思是小写 L 和 l。
-
尽快摆脱那个霍比特人 - 嗯习惯。你保存的时间越长,它就会变得越难。也摆脱来自
1的索引数组。大多数编程语言使用从零开始的数组索引。其他任何事情都只会混淆并可能阻止编译器优化程序。 -
不要编辑说你找到了正确的方法!将其中一个答案标记为正确,或者如果您找到了更好的方法,请添加您自己的答案!
-
@Ben 感谢您的提示,已完成。
标签: c arrays matrix multidimensional-array dimensions