【问题标题】:Alphabet Triangle in CC中的字母三角形
【发布时间】:2021-01-31 17:53:12
【问题描述】:

我已经挣扎了几个小时,仍然无法弄清楚这个问题。 以下是我从网上找到的答案:

int main(){  
  int ch=65;    
    int i,j,k,m;    
  system("cls");  
    for(i=1;i<=5;i++)    
    {    
        for(j=5;j>=i;j--)    
            printf(" ");    
        for(k=1;k<=i;k++)    
            printf("%c",ch++);    
            ch--;    
        for(m=1;m<i;m++)    
            printf("%c",--ch);    
        printf("\n");    
        ch=65;    
    }    
return 0;  
}  

下面是我尝试做同样事情的代码:

int main(void){
  char ch;
  int i, j, k, m;
  printf("Please Enter a capital character: ");
  while(scanf("%c", &ch) == 1){
    for (i = 0; i < (ch - 'A' + 1); i++)
    { 
      for (j = (ch - 'A' + 1); j > i; j--)
        printf(" ");
      for (k = 'A'; k < ch; ++k)
        printf("%c", ch);
      for (m = ch; m > 'A'; m--)
        printf("%c", m);
      printf("\n");
    }
    printf("Try another one(q to quit): ");
  }
  return 0;
}

我想让程序更具交互性,但答案很奇怪,我应该修改什么才能使其正常工作? 编写同样的程序有什么更好的主意吗?

答案应该是:

     A
    ABA
   ABCBA
  ABCDCBA
 ABCDEDCBA

我的代码:

   CCCB
  CCCB
 CCCB

谢谢!

【问题讨论】:

    标签: c loops char


    【解决方案1】:

    你的函数无缘无故很复杂。

    void print(int rows)
    {
        for(int row = 1; row <= rows;row++)
        {
            int ch;
            for(int space = row; space < rows; space++) printf(" ");
            for(ch = 0; ch < row; ch++) printf("%c", 'A' + ch);
            while(--ch) printf("%c", 'A' + ch - 1);
            printf("\n");
        }
    }
    
    void printTpLetter(char ch)
    {
        print(ch - 'A' + 1);
    }
    
    int main(void)
    {
        printTpLetter('E');
        print(3);
    }
    

    https://godbolt.org/z/b7nhfo

    1. 为此类任务使用函数。
    2. 尝试写泛型函数

    【讨论】:

    • 谢谢!,我确实按照你说的修改了我的代码,现在逻辑更加清晰了。我试图将所有任务组合在一起,结果我的程序变得非常复杂。
    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多