王道 C語言教程 Week1 2. 列印如下圖形:

Beaud Duan發表於2020-12-22

在這裡插入圖片描述
參考答案:

//其實就是很簡單的圖形輸出問題的解法,這裡仍然使用迴圈

#include<stdio.h>
#include<stdlib.h>

#define N 5
#define M 13

//簡化程式設計,避免在for迴圈裡套for迴圈
void printf1(int i);
void printf2(int i);
void printf3(int i);

int main() {
	int i;
	for (i = 1; i <= N; i++)
		printf1(i);
	for (i = N - 1; i >= 1; i--)
		printf1(i);
	printf("\n");
	for (i = 1; i <= N; i++)
		printf2(i);
	for (i = N - 1; i >= 1; i--)
		printf2(i);
	printf("\n");
	for (i = 1; i <= M; i++)
		printf3(i);
	printf("\n");
	system("pause");
	return 0;
}

void printf1(int i) {
	int j;
	for (j = 1; j <= N - i; j++)
		putchar(' ');
	for (j = 1; j <= 2 * i - 1; j++) {
		if (j % 2) putchar('*');
		else putchar(' ');
	}
	printf("\n");
}

void printf2(int i) {
	int j;
	for (j = 1; j <= N - i; j++)
		putchar(' ');
	for (j = 1; j <= 2 * i - 1; j++) {
		if (j == 1 || j == 2 * i - 1) putchar('*');
		else putchar(' ');
	}
	printf("\n");
}

void printf3(int i) {
	int j;
	if (i <= 3) {
		for (j = 1; j <= N - 1 - i; j++)
			putchar(' ');
		for (j = 1; j <= M + 2 * (i - 1); j++) {
			if ((j <= 2 * i + 1 || j > M - 3) && (j % 2 != 0)) putchar('*');
			else putchar(' ');
		}
		putchar('\n');
	}
	else {
		for (j = 1; j <= i - 4; j++)
			putchar(' ');
		for (j = 1; j <= 19 - 2 * (i - 4); j++) {
			if (j % 2) putchar('*');
			else putchar(' ');
		}
		printf("\n");
	}
}

/*
    *
   * *
  * * *
 * * * *
* * * * *
 * * * *
  * * *
   * *
    *

    *
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
    *

   * *       * *
  * * *     * * *
 * * * *   * * * *
* * * * * * * * * *
 * * * * * * * * *
  * * * * * * * *
   * * * * * * *
    * * * * * *
     * * * * *
      * * * *
       * * *
        * *
         *
*/

相關文章