问题描述
- 初学者的c语言问题,如图
-
#include <stdio.h> int main() { int i,j,k,ch,n; printf("请输入行数:"); scanf("%d",&n); for(i=1;i<n+1;i++) { for(k=1;k<n+1-i;k++) { printf(" "); } for(j=1,ch='A';j<=i;j++,ch++) { printf("%c",ch); } ch=ch-2; //关键 for(j=1;j<i;j++,ch--) { printf("%c",ch); } printf("n"); } for(i=1;i<n;i++) { for(k=1;k<=i;k++) { printf(" "); } for(j=n,ch='A';j>i;j--,ch++) { printf("%c",ch); } ch=ch-2; for(j=n;j>i;j--,ch--) { printf("%c",ch); } printf("n"); } }
为什么会出现右边的@啊
解决方案
下半部分有个地方多循环了一次,打印一行的后半部分应该比前半部分少循环一次(改的地方我标注在代码里了)
#include <stdio.h>
int main()
{
int i,j,k,ch,n;
printf("请输入行数:");
scanf("%d",&n);
for(i=1;i<n+1;i++)
{
for(k=1;k<n+1-i;k++)
{
printf(" ");
}
for(j=1,ch='A';j<=i;j++,ch++)
{
printf("%c",ch);
}
ch=ch-2; //关键
for(j=1;j<i;j++,ch--)
{
printf("%c",ch);
}
printf("n");
}
for(i=1;i<n;i++)
{
for(k=1;k<=i;k++)
{
printf(" ");
}
for(j=n,ch='A';j>i;j--,ch++)
{
printf("%c",ch);
}
ch=ch-2;
for(j=n;j>i;j--,ch--)//应该改成for(j=n;j-1>i;j--,ch--)
{
printf("%c",ch);
}
printf("n");
}
}
解决方案二:
for(j=n,ch='A';j>i-1;j--,ch++)
时间: 2024-10-27 22:09:29