2011-06-10 66 views
3

「有一個程序請求用戶輸入一個大寫字母使用嵌套循環,以產生這樣的金字塔圖案:。如何進行此練習? (C)

A 

    ABA 

    ABCBA 

ABCDCBA 

ABCDEDCBA 

圖案應延伸到字符輸入。例如,前述模式將由輸入值E產生。「

到目前爲止,我已經做了好幾個小時,並通過拼音與迭代前鋒的時候,我發現了「金字塔」的字母正確格式:

#include <stdio.h> 
int main(void) 
{ 
    char ch = 0; 
    char ch2 = 0; 
    int rows = 0; 
    printf("Enter a character: "); 
    scanf("%c", &ch); 
    rows = ch - 64; 
    while(rows > 0) 
    { 
     int spaces; 
     for(spaces = rows-1; spaces > 0; spaces--) 
     { 
      printf(" "); 
     } 
     ch2 = 65; 
     while(ch2 < (ch-(rows-2))) 
     { 
      printf("%c", ch2); 
      ch2++; 
     } 

     printf("\n"); 
     rows--; 
    } 
} 

然而,我感覺好像我碰到了一堵磚牆,試圖讓它正確地向後迭代。我知道應該只是一些基本的循環,但我很好,真的卡住了。我相信這很容易......我想我只是看了太久。想法?

+2

首先,如果你要使用文字值的字符,使用字符常量。 「A」比「65」更清晰。但是這並不能幫助你完成算法。 – JAB 2011-06-10 14:54:31

+0

「ABCDCDA」模式波動的原因是什麼? – 2011-06-10 14:54:42

+0

我認爲'ABCDCDA'應該是'ABCDCBA' – Downvoter 2011-06-10 14:55:28

回答

1

你太親密了,你只需要屏息一下,你就會看到它。

當你打印出你的性格,它有這部分

while(ch2 < (ch-(rows-2))) 
    { 
     printf("%c", ch2); 
     ch2++; 
    } 

後進行,否則將不屬於字符串的結尾。你需要的是另一個循環,從打印的最後一個字符下面的字符開始。它應該打印一個字符並減少該字符,直到它打印出'A'字符。

由於這是作業,我會給你一個機會寫出該循環,然後告訴你確切的細節。

+0

是的,這就是我用各種循環搞亂的地方,此刻我被卡住了有正確的字符打印錯誤的順序線路哈哈。 – Anonymous 2011-06-10 15:03:32

+0

那麼,在打印換行符\ n之前,請確保您打印「相同」行的字符。 – 2011-06-10 15:07:36

+0

明白了。 :)。/成就感 – Anonymous 2011-06-10 15:38:55

1

有些方法可能可以重寫這些代碼以使其更清晰,但是基於您擁有的東西,像這樣的東西可能會在您當前的while循環後正常工作。

while (ch2 > 'A') 
{ 
    ch2--; 
    printf("%c", ch2); 
} 

雖然我建議嘗試重構你的代碼,使其更加清晰。正如我在評論中所建議的,首先使用字符文字而不是原始整數。

+0

我問這個問題後,我真的寫了這個循環,它工作(嗯,我上了一個ch2 - ;在它之前,因爲我得到重複的字符,但是...它的工作!:D – Anonymous 2011-06-10 15:06:36

0

可以遍歷下跌和上漲:

while(ch2 >= 'A') 
{ 
    printf("%c", ch2);   
    ch2--;   
} 
0

試試這個:

所有的
#include <stdio.h> 

int main (int argc, const char * argv[]) 
{ 
    char ch; 

    printf("Enter a character: "); 
    scanf("%c", &ch); 
    if(ch<'A' || ch>'Z'){ 
     printf("Character must be between 'A' and 'Z'\n"); 
     return 1; 
    } 

    for(int rows = ch - 'A'; rows >= 0; rows--) 
    { 
     char ch2; 
     for(int spaces = rows; spaces > 0; spaces--) 
      printf(" "); 

     for(ch2='A'; ch2 < (ch-(rows-1)); ch2++) 
      printf("%c", ch2); 

     for(ch2=ch2-2;ch2>='A';ch2--) 
      printf("%c", ch2); 

     printf("\n"); 
    } 
    return 0; 
}