我把以下的程式
1、 if(course[i][j] !=0)==> 執行出來13堂課
改成
2、 if(course[j][i] !=0)==> 執行出來16堂課
我想問的是,為何我改個i跟j而已,會有這麼大的差別,問題是,我的陣列內,不等於0的確實有13堂課啊,那第2項改了i跟j後,多了那三堂課到底是怎麼來的的呢??
************
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int course[6][5]={0,2,0,2,0, //課程定義
1,4,1,4,1,
5,0,5,0,5,
0,0,0,0,0,
3,0,3,0,3,
0,0,0,0,0};
int sum; //課程總數
int i,j;
sum=0;
for(i=0;i<6;i++)
for(j=0;j<5;j++)
if(course[i][j] !=0)
sum++;
printf("課程總數:%d \n",sum);
system("PAUSE");
return 0;
}
其實你把course[j][i]依序列出來,就會知道答案了。
舉例來說,print course[3][4]為0,
course[3][5]理論上應該沒有值,但你把它印出來卻是3,
代表它去讀course[4][0]的值,這就是二維陣列的特性。
把所有組數列印出來:
1,0=1
2,0=5
4,0=3
0,1=2
1,1=4
1,2=1
2,2=5
4,2=3
0,3=2
1,3=4
1,4=1
2,4=5
4,4=3
0,5=1
1,5=5
3,5=3
課程總數:16
你可以看到最後多出來三組數字,
0,5 位址同等於 1,0
1,5 位址同等於 2,0
3,5 位址同等於 4,0
就像 iversonjimmy 大說的一樣