帮助进行简单的C编程练习

时间:2010-11-30 05:56:16

标签: c

我是C编程新手,编程练习有点困难,我相信对于那些了解C的人来说这很简单,不幸的是你必须遵守练习规则。

这是练习:

  

让程序请求用户   输入一个大写字母。使用嵌套   循环以产生金字塔图案   像这样:

    A 

   ABA

  ABCBA

 ABCDCBA

ABCDEDCBA
     

模式应该扩展到   输入的字符。例如,   先前的模式将来自一个   输入值E.提示:使用外部   循环来处理行。使用三个   连续的内循环,一个要处理   空间,一个用于印刷字母   按升序排列,一个用于   按降序打印字母。

所以我做到了这一点:

#include <stdio.h>

int main(void) {

 int rows;
 int spaces;

 char asc;
 char desc;
 char input;

 printf("Please enter an uppercase letter: ");
 scanf("%c", &input);

 for (rows = 'A'; rows <= input; rows++) {
  for (spaces = input; spaces > rows; spaces--) {
   printf(" ");
  }
  for (asc = 'A'; asc <= rows; asc++) {
   printf("%c", asc);
  }
  for (desc = asc - 2; desc >= rows; desc--) {
   printf("%c", desc);
  }
  printf("\n");
 }
 return 0;
}

2 个答案:

答案 0 :(得分:5)

你非常接近:

for (desc = asc - 2; desc >= 'A'; desc--) {

请注意,在第二个内循环后,ascrows + 1。然后,您正在将desc初始化为rows - 1。您应该能够看到>= rows错误的原因,并且不会导致迭代。

正确的条件只是>= 'A'

答案 1 :(得分:-1)

#include <stdio.h>
#include <string.h>
#define ROW 6

int main() {

  char let = '\0', ch;
  int row;

  scanf("%c", &let);
  for (row = 0; row <= ROW; row++) {
    for (ch = let; let > (ch + row); --ch) {
      for (ch = let; let < (ch + row); ++ch) {
        printf("%c", ch);
      }
      // ch = let;
      printf("\n");
    }
  }
  return 0;
}

任何评论或更正都将受到高度赞赏..我也是新人          //学习者;)