飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5128|回复: 2

[C/C++] 对菱形作业的另一种解决办法

[复制链接]
  • TA的每日心情
    慵懒
    2015-10-9 11:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 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");

    }
    }
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-11-17 15:45:32 | 显示全部楼层
    这也是个思路,但是我个人感觉这样繁杂了点!
    那你学习!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-11-21 00:12:47 | 显示全部楼层
    我也这思路但比你简单, *位置是 N+-行数
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表