C primer plus 第六版 第六章 第五題 程式設計練習答案

Aeron-A發表於2018-10-17

Github地址:φ(>ω<*) 這裡這裡。

#include<stdio.h>
int main(void)
{
	int i = 0;  // Create for loop.
	int j = 0;  // Same with last one.
	int l = 0;  // Same with last one.
	int m = 0;  // Save value.

	char n = '\n';
	char a = 'A';
	char get = 0;

	printf("Please input capital letter:");
	scanf("%c", &get);
	putchar(n);

	m = get - a;

	for(i = 0; i < m; i++)
	{
		for(j = m; j > i; j--)
		{
			putchar(n);
		}
		for( l = 0, a = 'A'; l <= i; l++)
		{
			printf("%c", a++);
		}
		for (l = 0; l < i; a--)
		{
			printf("%c", a);
		}

	}

	return 0;
}

#include<stdio.h>
int main(void)
{
    int i = 0;  // Create for loop.
    int j = 0;  // Same with last one.
    int l = 0;  // Same with last one.
    int m = 0;  // Save value.

    char n = '\n';
    char a = 'A';
    char get = 0;

    printf("Please input capital letter:");
    scanf("%c", &get);
    putchar(n);

    m = get - a;

    for(i = 0; i < m; i++)
    {
        for(j = m; j > i; j--)
        {
            putchar(n);
        }
        for( l = 0, a = 'A'; l <= i; l++)
        {
            printf("%c", a++);
        }
        for (l = 0; l < i; a--)
        {
            printf("%c", a);
        }

    }

    return 0;
}

/*
虛擬碼:
   首先建立三個變數控制三個迴圈。
   建立一個int變數儲存行數。
   建立一個Char變數來儲存目標A。
   在scanf使用者輸入字母,大寫。
   
   首先是一個大迴圈,結束點為一行升降序處理完畢。
   initialize 先初始化i; 
   test 即為行數控制,將使用者輸入減去目標A即可得到金字塔行數;
   update 部分則更新i,增加行數。

   內部小迴圈1 
   initialize 初始化j等於行數m。
   test 本迴圈輸出空格,將j與當前輸出行數相比,即可控制空格數量。
   update 更新j自減。

   內部小迴圈2
   initialize 初始化 l, a = ‘A’
   test 將l與i比較,行數即為控制輸出 A 往後的字母數量。
   update 更新l , 輸出 A 之後的字母,。

   內部小迴圈3
   initialize 初始化l
   test 跟迴圈2一樣,將l與行數(i)比較,差則為倒序輸出字母次數,也是A的自減次數。
   update A 自減 , 將A和A往後的已輸出字母,倒序輸出。
*/

相關文章