C: 2D-Array二維陣列 2008年12月22日 宣告: #define MAXI 3 #define MAXJ 4 int A[3][4]; int B[3][4]={{5,6,7,8},{2,4,6,8},{1,3,5,7}}; int C[3][4]={5,6,7,8,2,4,6,8,1,3,5,7}; int D[3][4]={{5,6,7},{8,2,4},{6,8,1},{3,5,7}}; // 錯誤 A[0][0]=rand()%6+1; ... A[2][3]=rand()%100+1; ex1: int magic3[][]... 8 1 6 3 5 7 4 9 2 ex2: int magic4[][]... 3 10 15 6 13 8 1 12 2 11 14 7 16 5 4 9 輸入: for(i=0;i<3;i++){ for(j=0;j<4;j++){ scanf("%d",&A[i][j]); } } 輸出: for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d\t",A[i][j]); } printf("\n"); } 初始化init: int rowTL[3], colTL[4]; for(i=0;i<3;i++){ for(j=0;j<4;j++){ A[i][j]=0; } } for(i=0;i<3;i++) rowTL[i]=0; for(j=0;j<4;j++) colTL[j]=0; 行列小計sub-totals(row,column): num[i][j] j=0 j=1 j=2 j=3 rowTL[i] i=0 num[0][0] num[0][1] num[0][2] num[0][3] rowTL[0] i=1 num[1][0] num[1][1] num[1][2] num[1][3] rowTL[1] i=2 num[2][0] num[2][1] num[2][2] num[2][3] rowTL[2] colTL[j] colTL[0] colTL[1] colTL[2] colTL[3] TL i=0 rowTL[0] = num[0][0]+num[0][1]+num[0][2]+num[0][3]; i=1 rowTL[1] = num[1][0]+num[1][1]+num[1][2]+num[1][3]; i=2 rowTL[2] = num[2][0]+num[2][1]+num[2][2]+num[2][3]; j=0 colTL[0] = num[0][0]+num[1][0]+num[2][0]; j=1 colTL[1] = num[0][1]+num[1][1]+num[2][1]; j=2 colTL[2] = num[0][2]+num[1][2]+num[2][2]; j=3 colTL[3] = num[0][3]+num[1][3]+num[2][3]; for(i=0;i<3;i++){ for(j=0;j<4;j++) rowTL[i]+=A[i][j]; // 列 } for(i=0;i<3;i++){ for(j=0;j<4;j++) colTL[j]+=A[i][j]; // 行、欄 } 總和sum: sum=0; for(i=0;i<3;i++){ for(j=0;j<4;j++) sum += A[i][j]; } 總計count: count=0; for(i=0;i<30;i++) // 層數0-29 for(j=0;j<6;j++) // 單位0-5 if(B[i][j]<4) count++; // 少於4人 for(i=0;i<30;i++) // 層數0-29 for(j=0;j<6;j++) // 單位0-5 FloorAvg[i]+=B[i][j]; // 平均人數 for(i=0;i<30;i++) FloorAvg[i]/=6; 2D array(2): ----------- int A[5][6]; A[0][0]=10; A[4][5]=20; for(i=0;i<5;i++) for(j=0;j<6;j++) A[i][j]=i*j; index or subscript [i][j] 例: freq[i][j]| 1 2 3 4 5 6 rowTL[] rowMin[] rowMax[] ------------------------------ 1| 4 6 3 8 5 4 30 3 8 2| 6 3 7 8 5 4 3| 3 8 9 2 5 4 ------------------------------ colTL[]| colMin[]| colMax[]| 宣告: int freq[3][6], colTL, colMin, colMax[6], rowTL, rowMin, rowMax[3]; 輸入: scanf("%d",&freq[0][0]); scanf("%d",&freq[0][1]); scanf("%d",&freq[0][2]); ... scanf("%d",&freq[2][5]); 輸入: for(i=0;i<3;i++) for(j=0;j<6;j++) scanf("%d",&freq[i][j]); 輸出: for(i=0;i<3;i++){ for(j=0;j<6;j++) printf("%d\t",freq[i][j]); printf("\n"); } 小計(列): for(i=0;i<3;i++){ for(j=0;j<6;j++) rowTL[i] += freq[i][j]; 分析: i=0,j=0 rowTL[0] += freq[0][0]; ... i=2,j=5 rowTL[2] += freq[2][5]; 小計(欄): for(i=0;i<3;i++){ for(j=0;j<6;j++) colTL[j] += freq[i][j]; 分析: i=0,j=0 colTL[0] += freq[0][0]; ... i=2,j=5 colTL[5] += freq[2][5]; 最小值(第1欄): min=freq[0,1]; for(j=1;j<3;j++) if(freq[j][1]=86) grade[i]='A'; else if(studAvg[i]>=70) grade[i]='B'; else if(studAvg[i]>=50) grade[i]='C'; else if(studAvg[i]>=30) grade[i]='D'; else else grade[i]='E'; 等級統計: grade Total for(g='A';g<='E';g++) gradeTL[g]=0; for(i=0;i<40;i++){ g=grade[i]; gradeTL[g]++; }