趣味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. 我的程序运行图片

 

图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;
}

 

 

posted @ 2015-02-02 16:21  龙格泽月  阅读(434)  评论(0编辑  收藏  举报