任務3:(函數的嵌套)編制一個三角函數表,要求在main()函數中調用show_sin_table(min_angle, max_angle),顯示角度值為min_angle到max_angle之間的所有角度(間隔為1度)的正弦值。要求不能用數學庫函數,将任務2中的mysin函數拷貝到這個程式中,用于計算sin值。例如show_sin_table(0, 90)可以顯示出所有0到90度的正弦值。為取得更好的效果,可以考慮像英尺到米的轉換一樣,以速查表格的形式給出結果。
實驗目的:學會使用自定義函數解決實際問題,學會函數的嵌套調用
實驗内容:編制一個三角函數表
/* 程式頭部注釋開始
* 程式的版權和版本聲明部分
* Copyright (c) 2011, 煙台大學計算機學院學生
* All rights reserved.
* 檔案名稱: sintable.cpp
* 作 者: 賀利堅
* 完成日期: 2011 年 11 月 22 日
* 版本 号: v1.0
* 對任務及求解方法的描述部分
* 輸入描述:無
* 問題描述:編制一個三角函數表,要求在main()函數中調用show_sin_table(min_angle, max_angle),顯示角度值為min_angle到max_angle之間的所有角度(間隔為1度)的正弦值。要求不能用數學庫函數,将任務2中的mysin函數拷貝到這個程式中,用于計算sin值。例如show_sin_table(0, 90)可以顯示出所有0到90度的正弦值。為取得更好的效果,可以考慮像英尺到米的轉換一樣,以速查表格的形式給出結果。
* 程式輸出:三角函數表
* 程式頭部的注釋結束(此處也删除了斜杠)
*/
#include <iostream>
#include <iomanip>
using namespace std;
double mysin(double);
double myabs(double);
void show_sin_table(int, int);
const double pi=3.1415926;
int main( )
{
show_sin_table(0, 90);
system("PAUSE");
return 0;
}
//下面定義show_sin_table()函數
void show_sin_table(int iFromAngle, int iToAngle)
{
int x;
cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(3);
for(x=0; x<3;x++)
cout<<setw(8)<<" 角度x"<<setw(8)<< " sin(x)";
cout<<"\n";
for(x=iFromAngle;x<=iToAngle; x++)
{
cout<<setw(8)<<x<<setw(8)<<mysin(x*pi/180);
if (x%3==0)cout<<"\n";
}
}
//下面定義mysin函數
double mysin(double x)
{
double sum=x,x_pow=x,item;
int n=1,fact=1,sign=1; //定義變量時賦初值,已經将第一項考慮到累加和sum中
do
{
fact=fact*(n+1)*(n+2); //fact用于表示階乘,在公式中作分母
x_pow*=x*x; //x_pow是分子中用于表示階乘,在公式中作分母
sign=-sign; //确定即将要累加的這一項的符号
item =x_pow/fact*sign; //計算出要累加的項
sum+=item; //将該項累加上去
n+=2;
}while(myabs(item)>1e-5);
return sum;
}
//下面定義myabs函數
double myabs(double x)
{
return ((x>=0)?x:-x);
}
運作結果:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CWJhXb4ADO3MDNzIzMx8FMvwVOvwlMxETMwIzLcRnbl1GajFGd0F2LcRXZu5ibkN3YukGavw1LcpDc0RHaiojIsJye.gif)
經驗積累:
1. 有了任務2,這個任務不難完成
2. 嵌套調用函數,真不錯。這是在編制大程式時常用的手段。
上機感言: