在c中逐列遍历二维数组

在c中逐列遍历二维数组,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,请有人向我解释一下如何逐列遍历二维数组,即在到达列的末尾之前保持行不变? 谢谢 我正在写一个程序来计算一班学生的一些科目的分数。它计算每个学生获得的总分,以及每个科目的最高分数 我遇到的困难是计算每个科目的最低分数。这将需要向下迭代每一列,并仅在获得该列(主题)的最高分数后更改该行 守则(亦-): #包括 #包括 #定义最大值3 #定义MAX_SU 3 int main(){ 国际学生[MAX_ST][MAX_SU]; 整数总分[最高分]; printf(“\n\uuuuuuuuuuuuuuuu

请有人向我解释一下如何逐列遍历二维数组,即在到达列的末尾之前保持行不变? 谢谢

我正在写一个程序来计算一班学生的一些科目的分数。它计算每个学生获得的总分,以及每个科目的最高分数

我遇到的困难是计算每个科目的最低分数。这将需要向下迭代每一列,并仅在获得该列(主题)的最高分数后更改该行

守则(亦-):

#包括
#包括
#定义最大值3
#定义MAX_SU 3
int main(){
国际学生[MAX_ST][MAX_SU];
整数总分[最高分];
printf(“\n\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\n”按TAB键移动列);
printf(“\nRoll\u NO subject1 subject2 subject3\n”);
printf(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
对于(int i=0;i
#定义第5行
#定义第4列
int矩阵[行][列];
int r,c;
对于(c=0;c
通常您会这样做:

typedef void action_t (int*);

void traverse_matrix ( size_t col, 
                       size_t row, 
                       int matrix[col][row],
                       action_t* action )
{
  for(size_t x=0; x<col; x++)
  {
    for(size_t y=0; y<row; y++)
    {
      action(&matrix[x][y]);
    }
  }
}
typedef无效操作(int*);
空心导线矩阵(尺寸列),
大小排,
整数矩阵[col][row],
行动(行动)
{

对于(size_t x=0;x谢谢大家帮我解决这个问题

int highest_mark[MAX_SU];
int highest_student[MAX_SU];
int curr_sub;
for(int i  = 0; i < MAX_SU; i++)        
{

       highest_mark[i] = 0;
    for(int j = 0; j < MAX_ST; j++)
    {

            if(student[j][i] >  highest_mark[i])
            {
                highest_mark[i] = student[j][i];
                highest_student[i] = j+1;
                curr_sub = i+1;
            }

    }
     printf("the highest score subject %d is %d  by student %d\n", curr_sub, highest_mark[i],highest_student[i]);   
}
int最高分[MAX_SU];
int最高学生[MAX_SU];
国际货币基金组织;
对于(int i=0;i最高分数[i])
{
最高分[i]=学生[j][i];
最高学额学生[i]=j+1;
curr_sub=i+1;
}
}
printf(“科目%d的最高分数为%d,学生%d\n”,当前分数,最高分数[i],最高学生[i]);
}

不要发布指向代码的链接,链接可能会过时,使您的问题变得毫无价值。我们也不需要看到与问题和您遇到的问题无关的代码。相反,尝试在问题正文中创建一个并显示。您也可以这样做。至于您的问题,如果您有两个嵌套循环,则外部循环将覆盖
i
j
上的内部循环(这是很常见的),那么没有什么说明您需要使用
矩阵[i][j]
,您也可以使用
矩阵[j][i]
。请注意,循环将标记与
最高标记[i]
进行比较,但将新值分配给
最高标记[j]
谢谢大家的帮助。你把行和列弄混了。@SelçukCihan没有。如果你想将列定义为最内部或最外部的维度,完全取决于程序员。C不在乎,所有的
[[]
语法都告诉C要访问哪个存储单元。我认为(x,y)是比(y,x)更直观的坐标系,因为前者与形式数学兼容。
typedef void action_t (int*);

void traverse_matrix ( size_t col, 
                       size_t row, 
                       int matrix[col][row],
                       action_t* action )
{
  for(size_t x=0; x<col; x++)
  {
    for(size_t y=0; y<row; y++)
    {
      action(&matrix[x][y]);
    }
  }
}
int highest_mark[MAX_SU];
int highest_student[MAX_SU];
int curr_sub;
for(int i  = 0; i < MAX_SU; i++)        
{

       highest_mark[i] = 0;
    for(int j = 0; j < MAX_ST; j++)
    {

            if(student[j][i] >  highest_mark[i])
            {
                highest_mark[i] = student[j][i];
                highest_student[i] = j+1;
                curr_sub = i+1;
            }

    }
     printf("the highest score subject %d is %d  by student %d\n", curr_sub, highest_mark[i],highest_student[i]);   
}