亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網
    最全最豐富的資訊網站

    用循環(huán)打印菱形_C語言算法

     

      菱形打印

      打印菱形在控制臺的思路是,把菱形上下拆分,分兩段很接近的代碼來打印, 其實這樣代碼很不好看,并且不好閱讀 我們知道,要打印的圖案是這種:

      *

      ***

      *****

      ***

      *

      滿足上下對稱,左右對稱,那么,你能不能也弄一個二重循環(huán),同樣是對稱的? 很簡單,首先我們要拋開習慣性思維,for循環(huán)不一定要在0開始或者0結束 我們可以讓循環(huán)從 -c 到 c ,這樣不就輕松產生一個對稱的嗎?(只要取個絕對值) 我們把菱形的中心看成是坐標0,0,那么,會輸出星號的坐標,是 |x| + |y| <= c 的點。

     

      #include

      #define IABS(x) ( (x) >= 0 ? (x) : -(x) ) //定義一個計算絕對值的宏

      void print(int size) // size是這個菱形的半徑,直徑會是size * 2 + 1

      {

      int x, y;

      for (y = -size; y <= size; y++)

      { for (x = -size; x <= size; x++)

      { if ( IABS(x) + IABS(y) <= size ) //x和y各自的絕對值的和,即 |x| + |y| <= size

      putchar(‘*’);

      else putchar(‘ ‘);

      }

      putchar(‘n’);

      }

      }

      int main()

      { print(5); //輸出一個半徑為5的菱形 return 0;

      }

     

      如果我需要得到空心菱形呢?非常非常簡單,因為菱形邊界上的點,滿足的是|x| + |y| == c 所以,我們只要把那個if里的小于等于號,改成雙等于號 == 就可以了。

      再類似地,如果我不要*號,我要最外層是字母A,然后里一層是B這樣呢?

     

      即:

      A

      ABA

      ABCBA

      ABA

      A

     

      那么,我們只要在putchar那里做一個字符計算:

     

      void print(int size) // size是這個菱形的半徑,直徑會是size * 2 + 1

      { int x, y;

      for (y = -size; y <= size; y++)

      { for (x = -size; x <= size; x++)

      { if ( IABS(x) + IABS(y) <= size ) //x和y各自的絕對值的和,即 |x| + |y| <= size

      putchar( ‘A’ + (size – IABS(x) – IABS(y)) ); //留意這里的計算方法

      else putchar(‘ ‘);

      } putchar(‘n’);

      }

      }

     

      類似地,如果我們要打印的是X形:

      * *

      * *

      *

      * *

      * *

     

      同樣可以利用這個思路完成。

    贊(0)
    分享到: 更多 (0)
    網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號