老万 发表于 2010-11-13 08:51:07

对菱形作业的另一种解决办法

本帖最后由 老万 于 2010-11-13 08:53 编辑

由于菱形两条对角线相互垂直,故根据对角线的长度,设计如下程序:
main()
{
int i,a,b,j;                     //i,j为循环变量,a为菱形纵对角线长度,b为菱形横对角线长度
printf("Input two length(>10):");//输入菱形的两条对角线长度,长度大于10的话能看出效果
scanf("%d%d",&a,&b);

if((a%2)&&(b%2))   //判断长度是否是偶数
{
for(i=0;i<(b+1)/2;i++)
   {
    printf(" ");
   }
printf("*\n");            //打印最上边的*号

for(i=1;i<(a+1)/2;i++)    //打印菱形上部分
   {
    for(j=0;j<(int)((b+1)/2-i*b/a);j++)
       {
      printf(" ");
       }
    printf("*");         //打印菱形上部分左边的*
    for(j=0;j<(int)(2*i*b/a);j++)
       {
      printf(" ");
       }
    printf("*\n");         //打印菱形上部分右边的*

   }
for(i=1;i<(a+1)/2;i++)   //打印菱形下部分
   {
    for(j=0;j<(int)(i*b/a);j++)
       {
      printf(" ");
       }
    printf("*");            //打印菱形下部分左边的*

    for(j=0;j<(int)(b-2*i*b/a);j++)
       {
      printf(" ");
       }
    printf("*\n");          //打印菱形下部分左边的*


   }
for(i=0;i<(b+1)/2;i++)
   {
    printf(" ");
   }
printf("*\n");            //打印最下边的*号

}
else                        
{
for(i=0;i<b/2;i++)
   {
    printf(" ");
   }
printf("*\n");

for(i=1;i<a/2;i++)
   {
    for(j=0;j<(int)(b/2-i*b/a);j++)
       {
      printf(" ");
       }
    printf("*");
    for(j=0;j<(int)(2*i*b/a);j++)
       {
      printf(" ");
       }
    printf("*\n");

   }
for(i=1;i<a/2;i++)
   {
    for(j=0;j<(int)(i*b/a);j++)
       {
      printf(" ");
       }
    printf("*");

    for(j=0;j<(int)(b-2*i*b/a);j++)
       {
      printf(" ");
       }
    printf("*\n");


   }
for(i=0;i<b/2;i++)
   {
    printf(" ");
   }
printf("*\n");

}
}

jianshi 发表于 2010-11-17 15:45:32

这也是个思路,但是我个人感觉这样繁杂了点!
那你学习!

winmvp 发表于 2010-11-21 00:12:47

我也这思路但比你简单, *位置是 N+-行数
页: [1]
查看完整版本: 对菱形作业的另一种解决办法