当前位置: 代码迷 >> C语言 >> 输出金字塔字母的问题求教
  详细解决方案

输出金字塔字母的问题求教

热度:457   发布时间:2007-12-28 09:38:12.0
输出金字塔字母的问题求教
/*我是新手,学习到循环这一章,做课后的编程习题,遇到些困难,请高手指点一下。论坛里也有金字塔的贴,不过情形不大一样。
要求:比如输入字母E,形成金字塔排列。
    A
   ABA
  ABCBA
ABCDCBA
ABCDEDCBA
需要用到一个外部循环控制行,三个内部循环,一个控制空格,一个控制字母升序输出,一个控制字母降序输出。
升序的没问题,降序要怎么写?我很久弄不好。注意:因为只学到循环一章,后面的分支跳转if等语句都不能用。只能用while或for语句。*/
#include<stdio.h>
#define totle 65   //字母A的ASC码值
int main(void)
{
        int line;
        char letter,ch,fh,rh;
        printf("请输入一个大写字母:\n");
        scanf("%c",&letter);
        for(line=0;line<=(letter-totle);line++)
        {
            for(ch='A';ch<=('A'+line);ch++)           //升序输出字母
            printf("%c",ch);
            for(fh=0;fh<line;fh++)       //降序这个我知道写的不对,重复执行了。
            {
                for(rh=totle+line-1;rh-totle>=0;rh--)
                printf("%c",rh);
        }
           printf("\n");
        }
        getch();
        return 0;
    }
/*因为要搞懂降序输出,空格循环还没写。*/
搜索更多相关的解决方案: 金字塔  字母  输出  

----------------解决方案--------------------------------------------------------
把你的改了下!现在可以实现了!
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int line,i;
    char letter,ch;
    printf("请输入一个大写字母:");
    scanf("%c",&letter);
    for(line=0;line<=letter-'A';line++)
    {
        for(i=0;i<letter-'A'-line;i++)
            printf(" ");
        for(ch='A';ch<=('A'+line);ch++)           //升序输出字母
            printf("%c",ch);
        ch-=2;
        while(ch!='A'-1)
            printf("%c",ch--);
        printf("\n");
    }
    system("pause");
    return 0;
}
----------------解决方案--------------------------------------------------------
非常感谢,我会好好研究一下你写的程序。
看似很简单,可是我脑子就是转不过弯来。
----------------解决方案--------------------------------------------------------
2楼不是用tc编的吧
----------------解决方案--------------------------------------------------------
用的dev c++,所以用了system("pause");暂停!
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define totle 65   //字母A的ASC码值
int main(void)
{
        int line;
        char letter,ch;
        int j;
        printf("请输入一个大写字母:");
        scanf("%c",&letter);
        for(line=0;line<=letter-totle;line++)
       {
           j=line;
            for(int i=0;i<letter-'A'-line;i++)
            printf(" ");

            for(ch='A'+abs(j);ch<=('A'+line);)           //升序输出字母
     {  
           printf("%c",ch);
           j  =j-1;
          ch='A'+abs(j);
          }
            printf("\n");
        }
         for(line=letter-totle-1;line>=0;line--)
        {  
          j=line;
         for(int i=0;i<letter-'A'-line;i++)
          printf(" ");
          for(ch='A'+abs(j);ch<=('A'+line);)           //降序输出字母
     {  
             printf("%c",ch);
             j=j-1;
             ch='A'+abs(j);
         }
             printf("\n");
         }
        getch();
        return 0;
    }
这样也可以了
----------------解决方案--------------------------------------------------------
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(){
    int m,n,i,j;
    do scanf("%c",&n);while(!isalpha(n));
    n=toupper(n)-'A';m=(n<<1)+1;
    for(i=0;i<=n;i++,putchar('\n'))
        for(j=0;j<m;j++)
            putchar(abs(i-n)+abs(j-n)>n?' ':'A'+i-abs(j-n));
    system("pause");
}
我的答案。

[[italic] 本帖最后由 StarWing83 于 2007-12-28 13:43 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
你得代码很简练
----------------解决方案--------------------------------------------------------
回复 7# 的帖子
<stdlib.h>
<ctype.h>
这两个头文件我还没学到。
----------------解决方案--------------------------------------------------------
stdlib.h这个其实是为了那个system,暂停用的,
ctype.h是为了那个isalpha,就是判断输入是不是字符
还有一个abs,这个应该知道吧?
----------------解决方案--------------------------------------------------------
  相关解决方案