znevegiveup1
唐僧爱吃唐僧肉
2017-04-08 00:56
采纳率: 31.7%
浏览 1.6k
已采纳

求大神帮忙,高手赐教,小白感激不尽

题目:

绘制金字塔(4分)
题目内容:
要求用户从键盘输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:
    A
   ABA
  ABCBA
 ABCDCBA

程序运行结果示例1:
Please input a capital:
D↙
____A
ABA
__ABCBA
_ABCDCBA
程序运行结果示例2:
Please input a capital:
F↙
_
__A
_____ABA
____ABCBA
___ABCDCBA
__ABCDEDCBA
ABCDEFEDCBA
(说明:上面运行结果示例中,每行字母前面的下划线"
"代表屏幕上实际输出的是空格,最后一行前面有一个空格,倒数第二行有两个空格,以此类推。)

输入提示信息:"Please input a capital:\n"
输入格式: "%c"
输出格式:"%c"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
小白的程序:
#include
int main()
{
char m,n;
n='A';
int i,k;
printf("Please input a capital:\n");
scanf("%c",&m);
for(i=1;i<=(int)m-(int)n;i++)
{
for(k=(int)n;k<=(int)m-(int)n-i+1;k++)
{
printf(" ");
}
for(k=(int)n;k<=(int)n+i-1;k++)
{
printf("%c",k);
}
for(k=(int)n+i-2;k<=(int)n;k--)
{
printf("%c",k);
}
for(k=(int)n;k<=(int)m-(int)n-i+1;k++)
{
printf(" ");
}
printf("\n");
}
}
为什么运行的时候乱码了?
求大神赐教。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • StarRain2016
    星e雨 2017-04-08 05:40
    已采纳
    char m, n;
    n = 'A';   
    int i, k;
    printf("Please input a capital:\n");
    scanf_s("%c", &m);   
    for (i = 0; i <= (int)m - (int)n; i++)
    {
        for (k = i; k <= (int)m - (int)n; k++)
        {
            printf(" ");
        }
        for (k = 0; k < 2 * i + 1;k++)
        {
            if ((int)(n + k) <= (int)(n+i))
            {
                printf("%c", n + k);
            }
            else
            {
                printf("%c", n+2*i-k);
            }
    
        }
        for (k = i; k <= (int)m - (int)n; k++)
        {
            printf(" ");
        }
        printf("\n");
    }
    
    该程序是我修改的,测试过了,
    
    点赞 评论
  • jolindear
    jolindear 2017-04-08 01:04

    这个类似于杨辉三角,百度一下怎么实现的差不多

    点赞 评论
  • caozhy
    点赞 评论
  • u012701549
    kansot 2017-04-08 01:53

    你用字符数组把字符存下来,然后计算所存的字符个数,在用两层for循环,就完事,至于字母所放位置施主可随心所欲。

    点赞 评论
  • baidu_33403616
    再写三行 2017-04-08 02:13

    c语言还能乱码吗?是不是烫烫烫

    点赞 评论
  • cpp2017
    cpp2017 2017-04-08 02:57

    k是int 用d%

    点赞 评论
  • qq_38230478
    qq_38230478 2017-04-08 04:16

    类似杨辉三角,百度一下吧

    点赞 评论
  • StarRain2016
    星e雨 2017-04-08 05:08

    for(k=(int)n+i-2;k<=(int)n;k--) //你的i初始值是1,也就是k的初始值是64,而判断条件是k<=65,后面还是k--
    {
    printf("%c",k);
    }
    你没发现这是个死循环吗?只能等k溢出后才有可能跳出来,打印得都是ascll码表A之前的符号,看起来就像乱码

    点赞 评论
  • StarRain2016
    星e雨 2017-04-08 05:17

    你的程序存在严重的逻辑问题,那些子for循环,就是最前面最后面输出空格的,永远都进不去的。建议先认真了解一下for的运行机制,再写

    点赞 评论
  • xiaobingjinlin
    xiaobingjinlin 2017-04-08 05:45

    只会java,献丑了
    /**
    * A
    * ABA
    * ABCBA
    * ABCDCBA
    */
    String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//字母表
    String end = "Z";//截止字母
    int height = str.indexOf(end)+1;//高度
    for(int i=1;i<=height;i++) {//打印多少行
    for(int j=height-i;j>0;j--) {//打印行前的空格,公式为(行数-当前行)个
    System.out.print(" ");
    }

            for(int k=0; k<i;k++) {//打印正向字母,A到(当前行-1)位置的字母
                System.out.print(str.charAt(k));
            }
    
            for(int l=i-1; l>0;l--) {//打印反向字母,大于1行才需要打印反向字母,(当前行-1-1)位置的字母到A
                System.out.print(str.charAt(l-1));
            }
            System.out.println();//换行
        }
    
    点赞 评论

相关推荐