c语言问题,题目如下,解释其中有个语句为什么不能少。

找出3X4矩阵中每列的最小元素及其所在的行号,
答案如下:
#include "stdio.h"
void findmin(int a[ ][4],int ln[4])
{ int i,j,t;
for(i=0;i<4;i++) /* i作为列下标 */
{ t=0;
for(j=1;j<3;j++) /* 第i列中,第t行与第j行元素逐一比较 */
if(a[j][i]<a[t][i]) t=j; // t用来表示每次比较中小值元素所在的行号
ln[i]=t; } // 第i列中最小元素所在的行号赋予数组元素ln[i]
}
void main( )
{ int i,j;
int s[3][4]={{23,87,10,44},{91,66,24,5},{65,40,9,63}};
int lmin[4]; /* 存放每列最小元素所在的行号 */
findmin(s,lmin);
printf("min & line number:\n ");
for(i=0;i<4;i++)
{ j=lmin[i];//这里为什么一定要用到j,加入最后一句换成如下:
printf("%3d of line %d \n",s[j][i],j);
}
}

上面为什么一定要用到j,假如最后一句换成如下:
for(i=0;i<4;i++)
{ printf("%3d of line %d \n",s[j][i],lmin[i]);//这样把j省略掉就出错了。为什么?
}

j=lmin[i] 是赋值作用

printf("%3d of line %d \n",s[j][i],lmin[i]); 那这个s[j][i]里的j的值是多少?

如果你j要不用,就printf("%3d of line %d \n",s[lmin[i]][i],lmin[i]);
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-11
printf("%3d of line %d \n",s[j][i],lmin[i]);

你把s[j][i]里面的j也换了,试一下。
第2个回答  2013-07-11
1、认清楚此程序的目的
2、j没有初始化,所以直接用就出问题了
相似回答
大家正在搜