趣味100道C语言程序题num nine

在屏幕上用“*”显示0°~360°的余弦函数cos(x)的曲线

分析思路:  余弦函数曲线在0°~360°的区间里,每一行是要显示两个“*”       ,所以必须两个点要同时得到,要考虑到该图形的左右对称性,将屏幕的行方向定义为x,列方向定义为y,区间0°~180°和180°~360°是左右对称的,两个点的y相同,定义图形的总宽度为62,求得左边一个点的x值为m(通过反余弦函数求),则改点对称的点的x值为62 - m。

例程如下:

#include 
#include 

int main()
{
    int x;
    int m;
    double y;

    for(y = 1;y >= -1;y = y - 0.1)
    {
        m = acos(y) * 10;
        for(x = 1;x < m;x++)
        {
            printf(" ");
        }
        printf("*");
        for(;x < 62 - m;x++)
        {
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}


调试结果为:

*                                                             *
   *                                                      *
     *                                                  *
      *                                                *
        *                                            *
         *                                          *
          *                                        *
           *                                      *
            *                                    *
             *                                  *
              *                                *
               *                              *
                *                            *
                 *                          *
                  *                        *
                   *                      *
                     *                  *
                      *                *
                       *              *
                         *          *
                              **
注意:要把y的数据类型定义为double,如果定义为int类型,则会出现死循环和下面的图形

    
                                
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *
              *                                *

同时,如果空格打印的时候是printf("");则会下面的错误:

**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**



思考拓展:用“*”显示0°~360°的余弦函数sin(x)的曲线

分析思路:sin(x)的图形可从x = 180°处划分开,左右两边又分别关于x = 90°和x = 270°对称

#include 
#include 

int main()
{
    int x;
    int m;
    double y;
    for(y = 1;y >= -1;y = y - 0.1)
    {
        if(y >= 0)
        {
            m = asin(y) * 10;

            for(x = 1;x < m; x++)
            {
                printf(" ");
            }
            printf("*");

            for(;x < 31 - m;x++)
            {
                printf(" ");
            }
            printf("*\n");
        }
        else
       {
            m = asin(y) * 10;

            for(x = 1;x < 31 - m;x++)
            {
                printf(" ");
            }
            printf("*");
            for(;x < 62 + m;x++)
            {
                printf(" ");
            }
            printf("*\n");
        }
    }
    return 0;
}

调试结果为:

 
             * *
          *         *
        *             *
      *                 *
     *                   *
    *                     *
   *                       *
  *                         *
 *                           *
*                             *
*                              *
                               *                             *
                                *                           *
                                 *                         *
                                  *                       *
                                   *                     *
                                    *                   *
                                     *                 *
                                       *             *
                                         *         *
                                             * *

在打印sin(x)图形时,因为没有留意到y在0到-1之间求得的m值是负值,所以在打印空格的时候取值范围就错误了,没有出来正确图像,而且在y的两种取值范围里都要在打印的语句里加'\n',进入下一行打印。




你可能感兴趣的:(趣味100道C语言程序题)