此题解法,我将这个菱形放在了一个二维数组中,因为用二维数组可以界定X的边界,比较方便一点。 循环输出的时候,特别注意循环跳出的条件,你画个二维数组,体会一下里面的数学关系,多上机改改代码,呵呵。要特别注意 q 的用途哦。
#include
void main()
{
#define N 7 //定义二维数组的行和列
int i,j;
char a[N][N];
int q=N/2; //找到数组的中间列
char t,p; // 定义输出字符,t代表X,p代表Y
printf("qing shu ru X,Y:\n");
scanf("%c,%c",&t,&p); // 注意此处输入的时候,不要忘记“,”了哦
for(i=0;i for(j=0;j a[i][j]=' '; for(i=0;i { //为开始,向两边扩展,为了输出X ,注意i循环到q-1 a[i][q-i]=t; a[i][q+i]=t; for(j=(q-i+1);j<(q+i);j++ ) //以两边的X列为边界,输出Y a[i][j]=p; } for(i=q;i { a[i][q-(N-1-i)]=t; //仍然是从中间列开始向两边扩散,输出X a[i][q+(N-1-i)]=t; for(j=(q-(N-1-i)+1);j<(q+(N-1-i));j++ ) //从X边界开始从做到右输出Y a[i][j]=p; } for(i=0;i { {for(j=0;j printf("%c",a[i][j]);} printf("\n"); } } 我这里输出的是标准的菱形,中间的Y的个数和你给的不一样,如果你想要你的那种结果,只需要在输出Y的时候,将循环的边界再减一个,就可以了,不过图形是会变形,不会是菱形了。 上机运行的时候,把这些汉字清理了吧,要不可能编译出问题,好运~
字母的输出位置是不是对齐的?把原题目说清楚点?
#include
#include
#define ROW 3//这里的数值你可以改,自己试试就明白了
int main(void)
{
int i, j;
char X, Y;
printf("input X and Y:");
scanf("%c %c", &X, &Y);
for (i=-ROW; i<=ROW; i++)
{
for (j=0; j<=2*ROW-abs(i); j++)
{
if (abs(i) > j)
printf(" ");
else if ((abs(i) == j) || (2*ROW-abs(i) == j))
printf("%c", X);
else
printf("%c", Y);
}
printf("\n");
}
return 0;
}
题目是不是错了,你这个不是标准的菱形