首先找出上尖三角形的空格和*之間的規律,利用for循環的嵌套來輸出上尖三角形,if是用來判斷是否輸出到最后一個*號,如果是就換行。
int n = 4; for(int i = 1 ; i <= n ; i++){ for(int j = n - i ; j > 0 ; j-- ){ // n - 1 為每一行需要輸出的空格數量 printf(" "); } for(int x = 1 ; x <= 1+(2*(i-1)) ; x++) //1+(2*(i-1)) 為每一行需要輸出的*數量 { printf("*"); if(x == 1+(2*(i-1))) //判斷是否輸出到最后一個 * 如果是就換行 { printf("\n"); } } }
然后再補齊下半部分三角,需要注意的是上面的三角形是n = 4 行,但是下部分只需要三行
for(int x = 1 ; x < n ; x++){ for(int j = 1 ; j <= x ; j++){ printf(" "); } for(int y = 1+(n - x -1)*2 ; y > 0; y--){ printf("*"); if(y-1 == 0) { printf("\n"); } } }
到這里為止,我們已經打印好了實心的菱形,行數為n*2 -1 行。接下來只需要把實心挖空就可以輸出空心菱形。
int n = 4; for(int i = 1 ; i <= n ; i++){ for(int j = n - i ; j > 0 ; j-- ){ printf(" "); } for(int x = 1 ; x <= 1+(2*(i-1)) ; x++) { if(1 == x || x == 1+(2*(i-1))) { printf("*"); }else{ printf(" "); } if(x == 1+(2*(i-1))) { printf("\n"); } } } for(int x = 1 ; x < n ; x++){ for(int j = 1 ; j <= x ; j++){ printf(" "); } for(int y = 1+(n - x -1)*2 ; y > 0; y--){ if(y == 1+(n - x -1)*2 || y-1 == 0) { printf("*"); }else{ printf(" "); } if(y-1 == 0) { printf("\n"); } } }
這段代碼和上面的區別就在於 輸出*的for循環中加入了一個來if判斷 ,if輸出第一個*和最后一個*的時候按照 *來輸出,如果是其他位置不輸出*而是輸出空格“ ”,這樣就達到了挖空的目的
