输入顶行字符和图形的高,输出如图所示图形。
例如顶行字符为 ' A ' ,图形的高为 5
A
B B
C C
D D
E E
D D
C C
B B
A
#include<stdio.h>
int main()
{
int m,n,i,j,a,b;
scanf("%c,%d",&j,&i);
for(m=1;m<=2*i-1;m++)
{
if(m<=i)
{
a=i-m,b=2*m-1;
}
else
{
a=m-i,b=4*i-2*m-1;
}
for(n=1;n<=a;n++)
{
printf(" ");
}
for(n=1;n<=b;n++)
{
if(m<=i)
{
if(n==m||n==2*i-m)
{
printf("%c",j);
}
else
{
printf(" ");
}
j++;
printf("\n");
}
else
{
if(n==m||n==2*i-m)
{
printf("%c",j);
}
else
{
printf(" ");
}
j--;
printf("\n");
}
}
}
return 0;
}
哪里出现了错位,请指正,谢谢
#include <stdio.h>
int main() {
int h;
char c;
scanf("%c,%d", &c, &h);
int i = 1, num = 0; //i记录我们在分析时指定的循环变量、num记录已经输出的行数
int flag = 0; //flag = 0 表示正在输出上半部分(包含最中间行)、否则表示正在输出下半部分
/* 循环输出 2h - 1 行 */
while (num < 2 * h - 1) {
/* 输出首尾两行的情况 */
if (i == 1) {
for (int j = 0; j < h - i; j++)
printf(" ");
printf("%c", c);
for (int j = 0; j < h - i; j++)
printf(" ");
printf("\n");
}
else {
for (int j = 0; j < h - i; j++)
printf(" ");
printf("%c", c);
for (int j = 0; j < 2 * i - 3; j++)
printf(" ");
printf("%c", c);
for (int j = 0; j < h - i; j++)
printf(" ");
printf("\n");
}
if (i >= h) //当已经输出了最中间的一行
flag = 1; //将flag设置为1
/* 在输出上半部分的时候 */
if (flag == 0) {
i++;
c++;
}
/* 在输出下半部分的时候 */
else {
i--;
c--;
}
num++; //累加行数
}
}