谓我心忧 发表于 2014-2-22 11:57:25

循环的一个课后题,求解答

这种模式的题一直都不会,期待大家帮我写一下源码,题目不难,如下:

让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:
               A
               ABA
             ABCBA
         ABCDCDA
      ABCDEDCABA
这种图案要求扩展到用户输入的字符。例如,前面的图案是在输入E时需要产生的。
题目里还有提示,也发上来:使用一个外部循环来处理行, 在每一行中使用三个内部循环, 一个处理空格, 一个升序打印字母,一个降序打印字母。

最近有点卡在这里了,急需谁来点拨一二,不胜感激。

牡丹花下死做鬼 发表于 2014-2-22 11:57:26

#include <stdio.h>

intmain()
{
        int i,j,k,l,m,q,i2;
        char t;
        printf("请输入一个大写字母:");
        scanf("%c",&t);
        i = t - 'A'+1;
        if(i<0 || i>26)
        {
                printf("输入有误!\n");
                return 0;
        }
        else
        {
                i2=i*2-1;
                q = (i2-1)/2;
                for(j = 0;j<i;j++)
                {
                        k = q - j;
                       
                        for(l = 0;l<k;++l)
                        {
                                printf(" ");
                        }
                       
                        for(l = 0;l<=j;++l)
                        {
                                printf("%c",65+l);
                        }
                       
                        m = l-2;

                        for(l = m;l>=0;--l)
                        {
                                printf("%c",65+l);
                        }

                        printf("\n");
                }
        }

        return 0;
}

swsm 发表于 2014-2-22 13:10:46

本帖最后由 swsm 于 2014-2-22 13:13 编辑

#include <stdio.h>

intmain()
{
      int i,j,k,l;      //循环所用的计数
      int cj;      //用户输入的字符与A字符的差距

      char zifu;                //用户输入的字符所存放之处
      
      printf("\n");
      printf("*****************************************************************");
      printf("\n");
      printf("用户输入一个字符,然后打印出该字符到'A'字符(包括两者字符),排列成金字塔状况的程序");

      printf("         注意:用户输入的字符要在'A'字符之后或就是'A' !!!!");
      printf("\n");
      printf("****************************************************************");
      printf("\n");
      printf("请输入一个字符: ");
      scanf("%c",&zifu);
      
      cj=zifu-'A';      //求出差距
      if(cj<0)                //判断用户输入的字符是否比'A'大
      {
                printf("用户输入的字符比'A'小!!!");
                printf("\n");
                return 0;
      }

      for(i=0;i<cj+1;i++)
      {
                for(j=0;j<cj-i;j++)                        //解决空格
                        printf(" ");               
                              
                for(k=0;k<i+1;k++)                        //解决升序
                        printf("%c",'A'+k);

                for(l=0;l<i;l++)                        //解决降序
                        printf("%c",'A'+k-l-2);

                printf("\n");
               



      }
      
}
//注释写的很详细,有问题再沟通!(差距指的是ascii码表)

牡丹花下死做鬼 发表于 2014-2-22 15:51:06

不好意思啊代码很乱 O(∩_∩)O~ 作业做了一半临时写的 O(∩_∩)O~ 有不懂得可以追问

machimilk 发表于 2014-2-22 23:08:50

本帖最后由 machimilk 于 2014-2-22 23:10 编辑


#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{      
      char charKey;
      printf("请输入一个大写字母\"A--Z\":\n");
      scanf("%c",&charKey);
    int Pos=charKey-'A';//算出输入字符和A的差距以决定循环次数
    for (int i=0;i<=Pos;i++)//循环的行数决定了
    {
                for (int j=0;j<Pos*2+1;j++)//决定每行循环次数
                {
                        if (j<Pos-i||j>Pos+i)//如果不在要打印的范围就打印空格
                        {
                              printf(" ");
                        }
                        else
                        {
                              if (j<=Pos)//判断升序打印
                              {
                               printf("%c",'A'+j+i-Pos);
                                 }else//降序打印
                              {
                   printf("%c",'A'+Pos+i-j);
                              }
                        }
                }
                printf("\n");
    }
    system("pause");
      return(0);
}

页: [1]
查看完整版本: 循环的一个课后题,求解答