第四章函数--函数初体验项目5拓展2输出三角函数表v2.0
2013-08-05 14:59
405 查看
上机内容:接上一项目拓展1输出三角函数表v1.0,进行改进:可以实现输出任意角到任意角(100度以内)的正弦函数值(角度值由行号*10+列号确定)
上机目的:利用函数编程
我的程序:
运行结果:
![](https://img-blog.csdn.net/20130805145758781?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamllanVuX3d1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
心得体会:
1.当输入不合法时,利用do...while循环可以很方便的进行重新输入
2.合理利用多重for循环实现表格的输出,输出是注意分两部分处理:第一部分,处理第一行的输出,包括表头的输出;第二部分处理第二行以后的输出,
本例中需要输出最小角min_angle到最大角max_angle之间的角度的sin值,这就需要再分三部分处理:
(1)处理小于最小值的角,其sin值不输出(利用输出空格代替)
(2)处理大于最大角的角,其sin值亦不需要输出(此时利用空语句什么也不做即可)
(3)调用show_sin_table函数正常输出最小角min_angle到最大角max_angle之间的角度的sin值,注意每行输出10个sin值后要换行.
上机目的:利用函数编程
我的程序:
//version2.0 输出任意角到任意角(100度以内)的正弦函数值(角度值由行号*10+列号确定) /* * 程序的版权和版本声明部分: * Copyright (c) 2013, 青岛农业大学理信学院 * All rights reserved. * 文件名称:输出三角函数表.cpp * 作 者:幻影行者 * 完成日期:2013 年 8 月 4 日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分: * 输入描述:略 * 问题描述:要求在main()函数中调用show_sin_table(min_angle, max_angle), 显示角度值为min_angle到max_angle之间的所有角度(间隔为1度)的正弦值。 要求不能用数学库函数,自定义mysin函数用于计算sin值。 例如show_sin_table(0, 90)可以显示出所有0到90度的正弦值。 为取得更好的效果,可以考虑像英尺到米的转换一样,以速查表格的形式给出结果。 * 程序输出:输出三角函数表 * 问题分析:略 * 算法设计:略 */ #include<iostream> #include<iomanip> using namespace std; const double pi=3.141592653; //常变量 double myabs(double); //函数声明部分,自定义求绝对值函数,用于判断循环结束条件,设置类型为double,因需要设置精度小于0.00001时结束累加 double mysin(double); //自定义sin函数 double mycos(double); //自定义cos函数 double factorial(double); //自定义求阶乘的函数 void show_sin_table(int,int); //自定义输出三角函数表的函数 int main() { double minAngle,maxAngle; //角度的最小值和最大值 cout<<"please enter the minimum angle and the maximum angle: "<<endl; do { cin>>minAngle>>maxAngle; if(minAngle>maxAngle) { cout<<"input error! please ensure the angle you input is between minimum and maximum."<<endl; cout<<"continue to input:"<<endl; } }while(maxAngle<minAngle); //输错处理:确保从小角到大角进行输出 cout<<"The table is:"<<endl; show_sin_table(minAngle,maxAngle); return 0; } //自定义输出三角函数表的函数 void show_sin_table(int min_angle,int max_angle) { int i,j,k,m; cout<<"sinx"<<'\t'; //第一行输出:先输出表头 for(m=0;m<=9;++m) //再输出表头后面的内容 { cout<<m<<'\t'; } cout<<endl; //自第二行以后的输出 for(i=0;i<=(max_angle/10);++i) //角度值由(行号i*10+列号j)确定 { cout<<i<<'\t'; for(j=0;j<=9;++j) { double d=i*10+j; //由行号列号确定角度值 cout.precision(4); //设置精度 if(0<=d&&d<min_angle) //小于最小角min_angle的角的sin值不输出 { cout<<" "<<"\t"; //输出空格,确保小于最小角min_angle的角的sin值不输出 if((j+1)==10) //输入10个值后换行 cout<<endl; } else if((i==(max_angle/10))&&(j>(max_angle%10))) //只输入所求最大角max_angle以内的角的sin值 { //什么也不做,确保不再输出大于最大角度max_angle的sin值 } else //其他情况下正常输出 { cout<<mysin(d*pi/180)<<"\t"; if((j+1)==10) //输入10个值后换行 cout<<endl; } if(d>max_angle) //若角度大于所输入的最大角度max_angle,则不再输出,换行 { cout<<endl; } } } } //自定义sin函数 double mysin(double x) { int k=1,sign=-1; // sign用于控制每一项前面的符号,为方便计算,从第二项开始,故sign初值为-1,k=1 double sum=x,item; //sum代表函数值,从第二项开始,sum初值为x,item代表每一项的值 double n=x,d; // n代表分子(numerator),d代表分母(denominator) do { n*=(x*x); //每一项的分子中,x的幂都相应地比它前一项多2 d=factorial(2*k+1); //调用factorial函数求阶乘,每一项的分母中都是奇数的阶乘 item=sign*(n/d); //计算每一项的值,并累加到sum中 sum+=item; sign=-sign; // 实现加一项减一项 ++k; }while(myabs(item)>1e-5); //思维误区:易写成myabs(item)<1e-5,正确理解,“当最后一项的绝对值小于0.00001时,累加结束” return sum; } //自定义cos函数 double mycos(double x) { int k=1,sign=-1; double sum=1,item; //相比于mysin函数,这里sum初值为1 double n=1,d; //这里n=1 do { n*=(x*x); d=factorial(2*k); //每一项的分母中都是偶数的阶乘 item=sign*(n/d); sum+=item; sign=-sign; ++k; }while(myabs(item)>1e-5); return sum; } //自定义求绝对值的函数 double myabs(double a) { //return((a>=0)?a:-a); if(a>=0) return a; else return -a; } //自定义求阶乘的函数 double factorial(double a) { double sum=1; for(int i=1;i<=a;++i) sum*=i; return sum; }
运行结果:
心得体会:
1.当输入不合法时,利用do...while循环可以很方便的进行重新输入
2.合理利用多重for循环实现表格的输出,输出是注意分两部分处理:第一部分,处理第一行的输出,包括表头的输出;第二部分处理第二行以后的输出,
本例中需要输出最小角min_angle到最大角max_angle之间的角度的sin值,这就需要再分三部分处理:
(1)处理小于最小值的角,其sin值不输出(利用输出空格代替)
(2)处理大于最大角的角,其sin值亦不需要输出(此时利用空语句什么也不做即可)
(3)调用show_sin_table函数正常输出最小角min_angle到最大角max_angle之间的角度的sin值,注意每行输出10个sin值后要换行.
相关文章推荐
- 第四章函数--函数初体验项目5拓展1输出三角函数表v1.0
- 第四章函数--函数初体验项目1求四数的最大公约数
- 第四章函数--函数初体验项目4求组合数
- 第四章函数--函数初体验项目5太乐(泰勒)了
- 第四章函数--函数初体验项目2用函数解决素数回文数问题
- 第四章函数--函数初体验项目2-1用函数解决素数回文数问题(改进)
- 第四章函数--函数进阶(递归函数)项目2拓展求最大公约数
- 第四章函数--函数初体验项目3特殊三位数
- 第11周项目1 函数版星号图(3输出字母图)
- 提高篇第一讲项目6.4——编制函数输出1000以内的所有素数,回文数,回文素数,可逆素数
- 第11周项目6输出1-1000的所有素数、回文数、回文素数、可逆素数(调用三个函数实现输出目标数)
- 第十八周项目三(2):使用枚举类型设计函数,可以按指定的方式输出一个平面点的对称点
- 第七周 项目二:成员函数、友元函数、一般函数之区别(初体验)
- 第11周项目1-函数版星号图(3)输出字母三角形
- 第11周 项目1-2 运用函数的调用输出星图
- 项目4:调用函数输出10000以内的素数
- 第11周项目1.2用函数输出星号图
- 第11周函数的定义与调用项目1 调用函数输出星号图
- 第十四周拓展项目2—成绩处理函数版
- 第四章函数--函数进阶(递归函数)项目1Fibnacci序列