二維數組在概念上是二維的,但在內存中是連續存放的;換句話說,二維數組的各個元素是相互挨著的,彼此之間沒有縫隙。那么,如何在線性內存中存放二維數組呢?有兩種方式:
按行排列, 即放完一行之后再放入第二行;
按列排列, 即放完一列之后再放入第二列。
【案例描述】
按下圖將數字矩陣化輸出。要求:輸入數字,輸出該數字的矩陣表示。輸入的數字不是[0,9]上的整數時,需重新輸入。
【案例分析】
001:即左側二個方格為空,右側一個方格非空。標記為“0”狀態。
010:只有中間方格非空,標記為“1”狀態。
100:只有左側方格非空,標記為“2”狀態。
101:只有中間方格為空,標記為“3”狀態。
111:三個方格均非空,標記為“4”狀態。
用一個數組保存各狀態的顯示字符:
char a[5][7]={" ●"," ● ","● ","● ●","●●●"};
其中a[k]對應狀態k的字符串。k=0,1,2,3,4。
注意:字符“●”顯示時會占2個字符位,故在數組a中,一個空位需要輸出2個空格。
十個數字各行顯示的字符串用狀態記錄,得到以下數組:
char b[10][5]={{4,3,3,3,4},{1,1,1,1,1},{4,0,4,2,4}, {4,0,4,0,4},{3,3,4,0,0},{4,2,4,0,4},{4,2,4,3,4}, {4,0,0,0,0},{4,3,4,3,4},{4,3,4,0,4}};
那么,數字k第i行應顯示的字符串就是a[b[k][i]]。
【參考代碼】
#include<stdio.h>
main()
{ char i,k,a[5][7]={" ●"," ● ","● ","● ●","●●●"};
char b[10][5]={{4,3,3,3,4},{1,1,1,1,1},{4,0,4,2,4},
{4,0,4,0,4},{3,3,4,0,0},{4,2,4,0,4},{4,2,4,3,4},
{4,0,0,0,0},{4,3,4,3,4},{4,3,4,0,4}};
while(1)
{ setbuf(stdin,NULL);
scanf("%d",&k);
if(k>=0&&k<=9)break;
}
for(i=0;i<5;i++)printf("%s\n",a[b[k][i]]);
}