九州志 发表于 2022-5-7 16:12

C语言-新手的作业,头发已经掉了一半了,大佬帮忙看看

本帖最后由 九州志 于 2022-5-7 16:23 编辑

自己看书自学太难了,还没入门就觉得开始掉发了,这么简单的一个练习题,我居然搞了2小时、、、、、
大佬们别喷,帮忙指点下,现在这代码是能跑对题目了。。。。



打印这样的图形,要根据用户输入的字母来决定。例如,上面的图形是
在用户输入E后的打印结果。
提示:用外层循环处理行,每行使用3个内层循环,分别处理空格、以升序打印字母、以降序打印字母。


#include <stdio.h>
int main()
{
      //先列出26个字符数组
      int A;
      int a;
      int b='A';
      int k = 0;
      for (a= 0; a < 26; a++,k++)
      {
                A = b++;
      }
      //根据用户的输入,倒推前面个数(打印的行数)
      char d;
      int c;
      printf("请输入一个大写字母:\n");
      scanf("%c", &d);
         
      while (d < 'A' || d>'Z')
      {
                printf("输入的内容不是一个大写字母,请重新输入:\n");
                scanf("%cgetchar();", &d);
      }
      printf("\n");
      c = d - (65-2);//为什么要减2不知道,debug试出来的。。。。。
      //开始循环打印
      int i,j,p;
      for (i=1; i < c; i++)
      {
                for (j = 0,k=0; j < i-1; j++,k++)
                {
                        printf("%c",A);
                }
                for (p = 0; p < i;p++,k--)
                {
                        printf("%c", A);
                }
      printf("\n\n");
      }
      return 0;
}

shuaier 发表于 2022-5-7 17:08

{:1_921:}霸王洗发液程序员不错的选择!

快乐的小跳蛙 发表于 2022-5-7 17:21

减2是因为你循环是从1开始循环的少循环一次
c的值是你的循环次数也就是输入字母的值减去'A'的值
如果循环从0开始循环可以将上方计算循环次数的代码修改为
c = d - ‘A’ + 1;    //c等于循环次数

花边下丶情未央 发表于 2022-5-7 17:21

你是想问 如果输入A就输出一行,E的话就五行是吗?

云在天 发表于 2022-5-7 17:33

int main()
{

    char ch = 'E';
    int height = ch - 'A' + 1;
    for(int i = 1; i <= height;i++)
    {
      for(int j = 0; j < i;j++)
      {
            char output = 'A' + j;
            cout<<output;
      }
      for(int k = i - 1; k>0;k--)
      {
            char output = 'A' + k - 1;
            cout<<output;
      }   
      cout<<endl;
    }
    return 0;
}

其实你可以看成两部分,一部分就是顺序输出
1
12
123
1234
12345
另一部分是倒叙输出并往下移动一行
1
21
321
4321
这两个组合起来就是
1
121
12321
1234321
123454321

endriver 发表于 2022-5-7 17:56

这种循环嵌套就是挺绕的。一般赋个小值跟上跑一圈,基本上就明白是个什么过程了。

hackerbob 发表于 2022-5-7 17:58

兄弟,再这么下去,是要秃顶的节奏呀

dbisee 发表于 2022-5-7 19:01

只学过简单的C,但是感觉是不是不用把26个字母列出来啊
#include <stdio.h>
int main()
{
      char d;
      int c;
      printf("请输入一个大写字母:\n");
      scanf("%c", &d);
         
      while (d < 'A' || d>'Z')
      {
            printf("输入的内容不是一个大写字母,请重新输入:\n");
            scanf("%cgetchar();", &d);
      }
      printf("\n");
      c = d - 65+2;
      //开始循环打印
      for (int i=1; i < c; i++)
      {
                        int j=0;
                        for (; j < i; j++)
                        {
                                printf("%c",'A'+j);
                        }
                        j--;
                        while(j>0)
                        {
                                j--;
                                printf("%c",'A'+j);
                        }
                        printf("\n\n");
      }
      return 0;
}

kk159 发表于 2022-5-7 19:17

无聊写了下~

only998 发表于 2022-5-7 20:16

本帖最后由 only998 于 2022-5-7 20:18 编辑


int val = 0;
        while (val < 'A' || val > 'Z') {
                printf("请输入大写字母:\n");
                val = _getch();
        }

        printf("---> %c\n", val);
        //直到显示的最大值达到val
        int maxshow = 'A';
        while (maxshow <= val) {
                int step = 1;
                for (int out = 'A'; out <= maxshow; out++) printf("%c", out);
                for (int out = maxshow - 1; out >= 'A'; out--) printf("%c", out);
                printf("\n\n");
                maxshow++;
        }


页: [1] 2 3
查看完整版本: C语言-新手的作业,头发已经掉了一半了,大佬帮忙看看