1. 程式人生 > >在螢幕上用“*”顯示0~360度的三角函式cos(x)和sin(x)曲線

在螢幕上用“*”顯示0~360度的三角函式cos(x)和sin(x)曲線

如果在程式中使用陣列,這個問題十分簡單。但若規定不能使用陣列,問題就變得不容易了。
關鍵在於餘弦曲線在0~360度的區間內,一行中要顯示兩個點,而對一般的顯示器來說,只能按行輸出,即:輸出第一行資訊後,只能向下一行輸出,不能再返回到上一行。為了獲得本文要求的圖形就必須在一行中一次輸出兩個“*”。
為了同時得到餘弦函式cos(x)圖形在一行上的兩個點,考慮利用cos(x)的左右對稱性。將螢幕的行方向定義為x,列方向定義為y,則0~180度的圖形與180~360度的圖形是左右對稱的,若定義圖形的總寬度為62列,計算出x行0~180度時y點的座標m,那麼在同一行與之對稱的180~360度的y點的座標就應為62-m。程式中利用反餘弦函式acos計算座標(x,y)的對應關係。
C:

#include<stdio.h>
#include<math.h>
#define PI 3.1415926
int main()
{
    double y;;
    int x,m;
    for(y=1;y>=-1;y-=0.1)/*y為列方向,值從1到-1,步長為0.1*/
    {
        m=acos(y)*10;/*計算出y對應的弧度m,乘以10為圖形放大倍數*/
        for(x=1;x<m;x++)
        {
            printf(" ");
        }
        printf("*"
); /*控制列印左側的 * 號*/ for(;x<(PI*20-m);x++) { printf(" "); } printf("*\n");/*控制列印同一行中對稱的右側*號*/ } return 0; }

C++:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    const int PI=3.1415926;
    double y;
    int x,m;
    for
(y=1;y>=-1;y-=0.1)/*y為列方向,值從1到-1,步長為0.1*/ { m=acos(y)*10;/*計算出y對應的弧度m,乘以10為圖形放大倍數*/ for(x=1;x<m;x++) { cout<<" "; } cout<<"*";/*控制列印左側的 * 號*/ for(;x<(PI*20-m);x++) { cout<<" "; } cout<<"*\n";/*控制列印同一行中對稱的右側*號*/ } return 0; }

那麼如何實現用“*”顯示0~360度的sin(x)曲線?原理和繪製cos(x)相同。
C:

#include<stdio.h>
#include<math.h>
#define PI 3.1415926
int main()
{
    double y;
    int x,m;
    for(y=1;y>=0;y-=0.1)
    {
        m=asin(y)*10;
        for(x=1;x<m;x++)
        {
            printf(" ");
        }
        printf("*");
        for(;x<(PI*10-m);x++)
        {
            printf(" ");
        }
        printf("*\n");
    }
    for(;y>=-1;y-=0.1)
    {
        m=asin(y)*10; /*當y在-1到0之間取值時,m為負值,因為asin()預設在(-PI,PI),acos()預設在(0,2PI)*/
        for(x=1;x<(PI*10-m);x++)
        {
            printf(" ");
        }
        printf("*");
        for(;x<(PI*20+m);x++)
        {
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}