趣味C程序100.1 .1 绘制余弦曲线

说明:1.本问题来源于《C语言经典、趣味、实用程序设计编程百例精解》,所有程序为本人自己编写。与原程序不同之处作有标记。

        2.本系列所有程序均使用codeblocks编译,操作系统为Windows XP。

问题:在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线(不使用数组)

分析:如果在程序中使用数组,这个问题十分简单。但若规定不能使用数组,问题就变得不容易了。关键在于余弦曲线在0~360度的区间内,一行中 要显示两个点,而对于控制台程序来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回上一行。为了获得本问题所要求的图形,就必须在一行中一次输出两个“*”。

#include <stdio.h>

#include <stdlib.h>

#include <math.h>



int main(void)

{

    int radian; //10倍弧度

    double y;  //y为y轴,值为-1到+1,步长为0.1;

    int x; //用62列值代表x轴;62来源于2Pi*10约等于2*3.1*10;



    //用反余弦值求x更加方便

    for(y=1; y>=-1; y-=0.1)

    {

        radian=acos(y)*10;



        for(x=0;x<=62;x++)

        {

            if((x==radian)||(x==(62-radian))) //反余弦函数值域[0,pi],左右对称

                printf("*");

            else

                printf(" ");

        }

        printf("\n");



        /*

        书中的方法

        for(x=1; x<radian; x++)

            printf(" ");

        printf("*");

        for(; x<62-radian; x++)

            printf(" ");

        printf("*\n");

        */

    }



    return 0;

}

图1. 我的程序运行图片

 

趣味C程序100.1 .1 绘制余弦曲线

图2. 书中程序运行图片

 

附加:这里尝试了下用数组写这个程序。

#include <stdio.h>

#include <stdlib.h>

#include <math.h>



int main(void)

{

    char cosMap[21][62];

    int x, m;

    double y; //y轴,值为-1到+1,步长为0.1;



    for(m=0; m<21; m++)

        for(x=0; x<62; x++)

            cosMap[m][x] = ' ';



    for(y=1; y>=-1; y-=0.1)

    {

        x=(int)(acos(y)*10);

        m=(int)(y*10)+10;

        cosMap[20-m][x] = '*';

        cosMap[20-m][62-x] = '*';

    }



    for(m=0; m<21; m++)

    {

        for(x=0; x<62; x++)

        {

            printf("%c", cosMap[m][x]);

        }

        putchar('\n');

    }



    return 0;

}

 

 

你可能感兴趣的:(程序)