然而我们学C语言上面不能满足于网上所给的代码,否则将会失去核心竞争力。
#include <stdio.h>
int main(void)
{
int i,j;
for (i=0;i<7;i++)
for (j=0;j<7;j++)
{
if(3>i+j)
printf(" ");
else if(3==i+j)
printf("*");
else if(6==j)
printf("\n");
}
}
我尝试先将\n与*分离#include <stdio.h>但是我还想将大于号去掉以便于不用穿插这么多大于号小于号。
#include <stdio.h>
int main(void)
{
int i,j;
for (i=0;i<7;i++)
for (j=0;j<7;j++)
{
if(3!=i+j&&6!=j)
printf(" ");
else if(3==i+j)
printf("*");
else if(6==j)
printf("\n");
}
}
一切显得顺理成章,于是。
#include <stdio.h>
int main(void)
{
int i,j;
for (i=0;i<8;i++)
for (j=0;j<8;j++)
{
if(3!=i+j&&3!=j-i&&7!=j)
printf(" ");
else if(3==i+j)
printf("*");
else if(3==j-i) //在这我是防止j=6,i=3时下边一个输出下一行被覆盖,然而多出来一行一列,最后一个星号窝在角落
printf("*");
else if(7==j)
printf("\n");
}
}
这个多出来的很烦。
#include <stdio.h>
int main(void)
{
int i,j;
for (i=0;i<7;i++)
for (j=0;j<7;j++)
{
if(3!=i+j&&3!=j-i&&6!=j)
printf(" ");
else if(3==i+j)
printf("*");
else if(3==j-i)//事实上(3,6)这个位置已经被这条if所覆盖,下一条if也不会输出下一行了。
printf("*");
else if(6==j)
printf("\n");
}
}
这就顺眼多了。但是它不会输出下一行。
剩下来的两条线分别是j=i-3与i+j=9,同理,在输出空的条件上要加入3!=i-j与9!=i+j.重要的一点是(3,6)后面不输出下一行就打不出来了。
int i,j;
for (i=0;i<7;i++)
for (j=0;j<7;j++)
{
if(3!=i+j&&3!=j-i&&6!=j&&3!=i-j&&9!=i+j)
printf(" ");
else if (3==i+j)//菱形左上角
printf("*");
else if (3==j-i)//菱形右上角 打到3,6时不能输出下一行
printf("*");
else if (3==i-j)//菱形左下角
printf("*");
else if (9==i+j)//菱形右下角
printf("*");
else if(6==j)
printf("\n");
}
}这逼样能见人?????也许当时父母生我的时候就是做错了一个姿势/(ㄒoㄒ)/~~
这个问题是出在(3,6)上的,只需将(3,6)这个点提出来,并在其他语句之前执行(3,6)这个点时的操作就行了。
这是成品
这是改变顺序后的代码(不用提出(3,6))点。
#include <stdio.h>
int main(void)
{
int i,j;
for (i=0;i<7;i++)
for (j=0;j<8;j++)
{
if(3!=i+j&&3!=j-i&&7!=j&&3!=i-j&&9!=i+j)
printf(" ");
else if(7==j)
printf("\n");
else if (3==i+j)//菱形左上角
printf("*");
else if (3==j-i)//菱形右上角
printf("*");
else if (3==i-j)//菱形左下角
printf("*");
else if (9==i+j)//菱形右下角
printf("*");
}
}