【问题标题】:How to approach this exercise? (C)如何进行这项练习? (C)
【发布时间】:2011-06-10 14:49:30
【问题描述】:

“有一个程序要求用户输入一个大写字母。使用嵌套循环产生这样的金字塔模式:

    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--;
    }
}

但是,我觉得我试图让它正确地向后迭代时碰了壁。我知道它应该只是几个基本循环,但我很好,真的被卡住了。我敢肯定这很容易......我想我已经看了太久了。想法?

【问题讨论】:

  • 首先,如果要对字符使用文字值,请使用字符文字。 'A'65 清晰得多。但这对算法完全没有帮助。
  • “ABCCDCDA”中的形态波动是由什么规则造成的?
  • 我认为ABCDCDA 应该是ABCDCBA
  • 我认为这只是作者的一个错字 - 它应该是 ABCDCBA

标签: c


【解决方案1】:

离你这么近,只需要吸一口气,你就会看到。

当你打印出你的角色时,必须在这部分之后完成

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

否则它不会落在字符串的末尾。您需要的是另一个循环,该循环从打印的最后一个字符下方的字符开始。它应该打印一个字符并递减该字符,直到它打印出“A”字符。

因为这是家庭作业,所以在告诉你具体细节之前,我会给你一个编写循环的机会。

【讨论】:

  • 是的,这就是我搞乱各种循环的地方,目前我被困在错误的行顺序上打印正确的字符哈哈。
  • 好吧,确保在打印换行符 \n 之前打印“相同”行的字符。
  • 知道了。 :) ./成就感
【解决方案2】:

可能有一些方法可以重写此代码以使其更清晰,但根据您所拥有的,这样的事情可能会在您当前的 while 循环之后立即工作。

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

不过,我确实建议您尝试重构您的代码以使其更清晰。正如我在评论中建议的那样,从使用字符文字而不是原始整数开始。

【讨论】:

  • 我在问完这个问题后确实写了那个循环并且它有效(好吧,我在它之前添加了一个 ch2--; 因为我得到了重复的字符但是......它有效!:D
【解决方案3】:

您可以向下和向上迭代:

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

【讨论】:

    【解决方案4】:

    试试这个:

    #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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 2013-01-13
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多