C语言学习|打印对称字母金字塔

Posted 智造之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学习|打印对称字母金字塔相关的知识,希望对你有一定的参考价值。

C 语言学习,用 C 语言打印字母对称金字塔。

这次想用malloc的动态方式实现,把需要打印的每一行放在一个字符串数组里面。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{
 int n = 10// 打印的行数

 char *stars = (char *)malloc(2 * n * sizeof(*stars));
 memset(stars, ' '2 * n * sizeof(*stars) - 1);
 stars[2 * n - 1] = '\0';

 char *starsRow = (char *)malloc(2 * n * sizeof(*stars) * n);

 char midChar = 'A';
 for (int i = 0; i < n; i++) {
  stars[((strlen(stars) + 1) / 2) - 1] = midChar;
  // 前一个字符是后一个字符的ASCII码减1 或 后一个字符是前一个字符的ASCII码减1
  for (int j = 1; j <= i; j++) {
   stars[(((strlen(stars) + 1) / 2) - 1) - j] = stars[(((strlen(stars) + 1) / 2) - 1) - j + 1] - 1;
   stars[(((strlen(stars) + 1) / 2) - 1) + j] = stars[(((strlen(stars) + 1) / 2) - 1) + j - 1] - 1;
  }
  midChar++;  // ASCII码加1

  memcpy(starsRow + (strlen(stars) + 1) * i, stars, strlen(stars) + 1);
 }
 for (int i = 0; i < n; i++){
  printf("%s\n", starsRow + (strlen(stars) + 1) * i); // 字符串遇见‘\0’会自动结束
 }
 for (int i = n -2; i >= 0; i--) {
  printf("%s\n", starsRow + (strlen(stars) + 1) * i);
 }

 free(stars);
 stars = NULL;
 free(starsRow);
 starsRow = NULL;

 return 0;
}

输出:

         A
        ABA
       ABCBA
      ABCDCBA
     ABCDEDCBA
    ABCDEFEDCBA
   ABCDEFGFEDCBA
  ABCDEFGHGFEDCBA
 ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
 ABCDEFGHIHGFEDCBA
  ABCDEFGHGFEDCBA
   ABCDEFGFEDCBA
    ABCDEFEDCBA
     ABCDEDCBA
      ABCDCBA
       ABCBA
        ABA
         A


以上是关于C语言学习|打印对称字母金字塔的主要内容,如果未能解决你的问题,请参考以下文章

C语言实验——打印金字塔

C语言打印金字塔 1 123 12345 1234567

用C语言for循环设计字母金字塔,并输出对应的大小写字母,还有ns流程图,拜托,。

打印升序降序字母金字塔

怎么用java打印金字塔

C语言:怎样输入一个字母,输出下一个字母