C语言 打印字母等腰三角形 A-Z
#include
int main()
{
int n,i,j,k,m,s=0,q=0;
char a,b,c;
scanf("%d %c",&n,&a);
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
printf(" ");
}
for(k=0;k<=i-1;k++)
{
b=a+i+k-1;
while(b>=91)
{
b=b-26;
s++;
}
printf("%c",b); printf(" ");
}
for(m=1;m<=i-1;m++)
{
c=b-m;
while(c<65)
{
c+=26;
q++;
}
printf("%c",c);
}
printf("\n");
}
return 0;
}
不知道为什么会在K之后出现乱码,无论输入是什么都是在这个位置出错
乱码的原因为代码15行b=a+i+k-1;的值可能会为128超出b(char)的范围-128到127,导致符号位变化产生负值。
解决方法可以将b定义为int类型。
修改后的代码如下
(看题目预览好像字母间不需要空格,就把字母间空格也删掉了)
#include<stdio.h>
int main()
{
int n,i,j,k,m,s=0,q=0,b;
char a,c;
scanf("%d %c",&n,&a);
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
printf(" ");
}
for(k=0;k<=i-1;k++)
{
b=a+i+k-1; // 原来b为char类型,若值超过128则会将符号位置成1,使得整体值变为负值
while(b>=91)
{
b=b-26;
s++;
}
printf("%c",b);
}
for(m=1;m<=i-1;m++)
{
c=b-m;
while(c<65)
{
c+=26;
q++;
}
printf("%c",c);
}
printf("\n");
}
return 0;
}
运行截图