在螢幕上用“*”顯示0~360度的三角函式cos(x)和sin(x)曲線
阿新 • • 發佈:2019-01-28
如果在程式中使用陣列,這個問題十分簡單。但若規定不能使用陣列,問題就變得不容易了。
關鍵在於餘弦曲線在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;
}