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

题目:

绘制金字塔(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");
}
}
为什么运行的时候乱码了?
求大神赐教。

c

10个回答

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");
}

该程序是我修改的,测试过了,

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

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

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

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

只会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();//换行
    }

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

k是int 用d%

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!