【发布时间】:2018-04-23 19:54:28
【问题描述】:
所以我从一个充满零的矩阵开始,我定义了一个名为 Point 的结构,一个点具有我想要添加的值和添加该值的索引。例如,如果我添加的第一个元素是 3.4,它的索引是 1,下一个是 2,依此类推。
typedef struct
{
int index;
double value;
}Point;
void adds(int line, int column, double value, Point matrix [100] [100] ){
static int c = 1;
matrix[line][column].value = value;
matrix[line][column].index = c;
c++;
}
我有向我想要的行和列添加值的结构和方法,我已经测试过并且值的索引在我添加它们时是正确的。我有一种方法,应该按索引的新月顺序打印值
void list(Point matrix [100][100]){
int i, j, c;
if(zeros(matrix) == 0)
printf(" empty matrix\n");
for(i = 0; i < 100; i++){
for(j = 0; j < 100; j++){
for(c = 1; c <= nelem(matrix); c++){
if( matrix[i][j].index == c)
printf("[%d;%d] = %0.3lf\n", i, j, matrix[i][j].value);
}
}
}
}
我不知道为什么,但这会按行和列的顺序而不是按索引顺序打印值,我不知道出了什么问题,谁能帮我找出来?
【问题讨论】:
-
提示 1:您最里面的
for循环(在c上)除了减慢程序速度之外什么也没做。提示2:当你交换内循环和外循环的嵌套时,你会首先发现你的程序需要很长时间才能运行,然后输出是正确的。您确实需要一种不同的数据结构,您可以使用众所周知的排序算法轻松按索引进行排序。 -
@TypeIA 我还是 C 的新手,如果是一个项目,我们甚至不应该使用指针。如果我把最里面的
for作为外循环,输出是否正确? -
我不可能这么说,因为您还没有发布您的完整代码(请参阅minimal reproducible example),但看起来确实如此。你为什么不试试呢?您可以使用调试器来单步调试代码并查看发生了什么——这是一个绝对不可或缺的工具,您应该尽快学会使用它。祝你好运!