Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Vẽ hình kim cương bằng dấu sao (*) trong C

Mô tả bài toán

Viết chương trình C in ra màn hình hình kim cương (diamond) bằng các dấu sao (*), sử dụng lồng vòng lặp for.

Logic vẽ hình kim cương

Hình kim cương gồm 2 phần: nửa trên (đỉnh nhọn xuống giữa) và nửa dưới (từ giữa xuống đỉnh nhọn).

1. Nửa trên của kim cương

for (j = 1; j <= rows; j++) {
    // In khoảng trắng bên trái
    for (i = 1; i <= rows - j; i++)
        printf(" ");
    
    // In dấu sao
    for (i = 1; i <= 2*j - 1; i++)
        printf("*");
    
    printf("\n");
}

2. Nửa dưới của kim cương

for (j = 1; j <= rows - 1; j++) {
    // In khoảng trắng bên trái (tăng dần)
    for (i = 1; i <= j; i++)
        printf(" ");
    
    // In dấu sao (giảm dần)
    for (i = 1; i <= 2*(rows - j) - 1; i++)
        printf("*");
    
    printf("\n");
}

Chương trình hoàn chỉnh

#include <stdio.h>

int main() {
    int rows, i, j;
    
    printf("Nhap so hang: ");
    scanf("%d", &rows);
    
    // Nửa trên
    for (j = 1; j <= rows; j++) {
        for (i = 1; i <= rows - j; i++)
            printf(" ");
        for (i = 1; i <= 2*j - 1; i++)
            printf("*");
        printf("\n");
    }
    
    // Nửa dưới
    for (j = 1; j <= rows - 1; j++) {
        for (i = 1; i <= j; i++)
            printf(" ");
        for (i = 1; i <= 2*(rows - j) - 1; i++)
            printf("*");
        printf("\n");
    }
    
    return 0;
}

Kết quả (rows = 5)

Nhap so hang: 5
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

Giải thích công thức

  • Khoảng trắng nửa trên: rows - j (giảm dần từ rows-1 về 0)
  • Số sao nửa trên: 2*j - 1 (1, 3, 5, 7, 9... - dãy số lẻ)
  • Khoảng trắng nửa dưới: j (tăng dần từ 1 đến rows-1)
  • Số sao nửa dưới: 2*(rows-j) - 1 (giảm dần: 7, 5, 3, 1)

Chương trình này minh họa tư duy chia bài toán thành các phần nhỏ và sử dụng lồng vòng lặp để kiểm soát vị trí in ký tự.