C语言关于空心字母等腰梯形输出问题。
假如输入4A的话,输出的结果如下:DEFGCHBIABCDEFGHIJ这是我写的:#include<stdio.h>voidmain(){intn,i,j;charc;s...
假如输入4 A的话,输出的结果如下:
DEFG
C H
B I
ABCDEFGHIJ
这是我写的:
#include <stdio.h>
void main()
{
int n,i,j;
char c;
scanf("%d %c",&n,&c);
for(i=1;i<=n;i++)
{
for(j=1;j<=2*n+i-3;j++)
if(j==n-i+1||j>n-i+1&&(i==1||i==n))
{
if(i==n)
{
if(c+j-1<='Z'&&c+j-1>='A')
{
printf("%c",c+j-1);
}
else
{
printf("%c",c-26+j-1);
}
}
if(j==n-i+1&&i!=1&&i!=n)
{
if(c+n-i<='Z'&&c+n-i>='A')
{
printf("%c",c+n-i);
}
else
{
printf("%c",c-26+n-i);
}
}
if(j==n+i+2&&i!=1&&i!=n)
{
if(c+2*n+2-1-n+i<='Z'&&c+2*n+2-1-n+i>='A')
{
printf("%c",c+2*n+2-1-n+i);
}
else
printf("%c",c+2*n+2-1-n+i-26);
}
if(i==1)
{
if(c+n-1+j-n+i-1<='Z'&&c+n-1+j-n+i-1>='A')
{
printf("%c",c+n-1+j-n+i-1);
}
else
printf("%c",c+n-1+j-n+i-1-26);
}
}
//printf("*");
else
printf(" ");
printf("*\n");
}
}
我先写的星号输出,结果每一行的最后一个改不过来了。。。。。。。。。
而且要求到Z以后下一个字母从A开始。。
只能输入A~Z的大写字母,数字代表梯形的高和两个腰。。。。
谢谢O(∩_∩)O~。。。
饥渴的初学者。。。 展开
DEFG
C H
B I
ABCDEFGHIJ
这是我写的:
#include <stdio.h>
void main()
{
int n,i,j;
char c;
scanf("%d %c",&n,&c);
for(i=1;i<=n;i++)
{
for(j=1;j<=2*n+i-3;j++)
if(j==n-i+1||j>n-i+1&&(i==1||i==n))
{
if(i==n)
{
if(c+j-1<='Z'&&c+j-1>='A')
{
printf("%c",c+j-1);
}
else
{
printf("%c",c-26+j-1);
}
}
if(j==n-i+1&&i!=1&&i!=n)
{
if(c+n-i<='Z'&&c+n-i>='A')
{
printf("%c",c+n-i);
}
else
{
printf("%c",c-26+n-i);
}
}
if(j==n+i+2&&i!=1&&i!=n)
{
if(c+2*n+2-1-n+i<='Z'&&c+2*n+2-1-n+i>='A')
{
printf("%c",c+2*n+2-1-n+i);
}
else
printf("%c",c+2*n+2-1-n+i-26);
}
if(i==1)
{
if(c+n-1+j-n+i-1<='Z'&&c+n-1+j-n+i-1>='A')
{
printf("%c",c+n-1+j-n+i-1);
}
else
printf("%c",c+n-1+j-n+i-1-26);
}
}
//printf("*");
else
printf(" ");
printf("*\n");
}
}
我先写的星号输出,结果每一行的最后一个改不过来了。。。。。。。。。
而且要求到Z以后下一个字母从A开始。。
只能输入A~Z的大写字母,数字代表梯形的高和两个腰。。。。
谢谢O(∩_∩)O~。。。
饥渴的初学者。。。 展开
1个回答
展开全部
最后一行改下就好了啊。
printf("%c\n",c+i*2);
另外,你可以把所有关于输出字符的地方都改下,变成你的那个(整体)%26,这样就能循环输出字母了。
追问
那大于Z的问题怎么办( ⊙ o ⊙ )。。。O(∩_∩)O谢谢 !!!!
追答
好吧。稍微思考了下。你按我这个写得了。
#include<stdio.h>
char oPut(char c,int i)
{
if(c>='A'&&c<='Z')
c=(c-'A'+i)%26+'A';
return c;
}
int main()
{
char c,t;
int n,i,j;
printf("输入高和左下角的起始字母(大写,参数之间用空格间隔)\n");
scanf("%d %c",&n,&c);
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)printf(" ");
for(j=n-1-i;j<2*n-1+i;j++)
{
t=c;
if(i>0&&i<n-1)
{
if(j==n-1-i||j==2*n-2+i);
else
t=' ';
}
printf("%c",oPut(t,j));
}
printf("\n");
}
return 0;
}
顺便一提,别写特别大的数字,要不然一行显示不开超难看的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询