C 实例教学-基础知识(2)

2008-02-23 05:34:17来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

2.3 计算e的值和求素数
e是自然对数的底,他和π相同是数学中最常用的无理数常量。其近似值的计算公式为:
e=1 1/1! 1/2! 1/3! ... 1/(n-1)! r
当n充分大时,这个公式能够计算任意精度e的近似值。为了确保误差r<ε,只需1/(n-1)! ( > r) <ε
程式代码如下:
// program 2_4.cpp
#include<iostream.h>
void main()
{
const double eps=0.1e-10;
int n=1;
float e=1.0,r=1.0;
do // 开始do循环。循环条件由后面的while中的表达式值确定。
{
e =r;
n ;
r/=n;
}
while(r>eps);
cout<<"The approximate Value of natural logarithm base is: ";
cout<<e<<endl;
}
程式运行结果如下:
The approximate Value of natural logarithm base is: 2.71828

说明:
上面这个程式中使用了do循环,他是循环控制中的一种。循环控制条件放在后面的while表达式中。
-----------------------------------------
下面的程式用来求出1000以内的全部素数。
// program 2_5.cpp
#include<iostream.h>
void main()
{
const int m=1000;
int i,j,isprime;
for(i=2;i<=m;i ) // 这里用到了for循环控制语句。for循环语句有三个表达式
{ // 第一个表达式赋给变量初值,第二个表达式为循环控制条件,
// 第三个表达式为循环变量改变其值
isprime=1;
for(j=i-1;j>1;j--)
if(i%j==0)isprime=0;
if(isprime)cout<<i<<',';
if(i0==0)cout<<endl;
}
}

说明:
1)当m值比较大时,这个程式计算量是比较大的,事实上这是用来求出小于m的任何素数的最简单也是最笨的算法。
一种办法是作下面的改进:
把 for(j=i-1;j>1;j--)改为:
int i1=int(sqrt(i));
for(j=i1;j>1;j--)
为了确定整数i是不是素数,无需用2,3,。。。,i-1来除他,只需用2,3,。。。,sqrt(i)试除就能够了。
这里sqrt(i)是标准函数,功能是计算平方根,而int()则是把浮点值围 化为整型值。
另一种算法是埃拉脱散(Eratosthenes)筛法,将在以后介绍。

--------------------------------------------------------------------------------------

3.1 统计学生成绩
已知n个学生的注册号和成绩,计算他们的平均成绩,并列出成绩最好的前t名学生的注册号和分数。
程式代码如下:
// program 3_1.cpp
#include<iostream.h>
void main()
{
const int n=3;
const int t=n;
int index[n]; // 存放注册号
float score[n]; // 存放成绩
for(int i=0;i<n;i )
cin>>index[i]>>score[i]; // 从键盘输入数据
float sum=0;
for(i=0;i<n;i )
sum =score[i]; // 计算分数总和
cout.precision(2); // 配置输出精度
cout<<endl<<"Average score:"<<sum/n;
cout.width(28); // 输出精度
cout<<endl<<" register number score";
for(i=0;i<t;i ) // 选取前t名分数最高的学生,输出其注册号和成绩
{
float s=score[i];
int j1=i;
for(int j=i 1;j<n;j )
if(s<score[j])
{
s=score[j];
j1=j;
}
if(j1>i)
{
score[j1]=score[i];
score[i]=s;
j=index[j1];
index[j1]=index[i];
index[i]=j;
}
cout.width(4); // 输出序号,注册号和分数
cout<<endl<<i 1;
cout.width(11); // 配置宽度
cout<<index[i];
cout.width(16);
cout.precision(2); // 配置输出精度
cout<<score[i];
}
cout<<endl;
}
程式运行结果如下:



说明 :
cout.precision(2)是个函数调用语句,函数名是precision。cout说明此函数是个标准类的一个标准对象cout的函数。所“标准”,即他们所涉及的流(stream)类和对象cout都是由系统已义好了的。其说明能够在头文档iostream.h中找到。函数precision需要一个int型参数,该参数指出在后面输出的浮点数的精度取到小数点后的多少位。
cout.width()是另一个函数的用法。width决定了其后数据输出的宽度。

-----------------------------------------------------------------------------------

3.2 输出三角函数表
输出人0~90度之间每隔15度的正弦、余弦、正切函数值。
程式代码如下:
// program 3_2.cpp
#include<iostream.h>
#include<math.h>
void main()
{
const float pai=3.1416f;
const int interval=15;
cout.width(10);
cout<<"Angle x";
cout.width(10);
cout<<"sin(x)";
cout.width(10);
cout<<"cos(x)";
cout.width(10);
cout<<"tan(x)";
float arc;
cout.precision(4);
for(int doa=0;doa<=90;doa =interval)
{
arc=pai*doa/180;
cout<<endl;
cout.width(10);
cout<<doa;
cout.width(10);
cout<<sin(arc);
cout.width(10);
cout<<cos(arc);
cout.width(10);
if(doa==90) cout<<"-";
else cout<<tan(arc);
}
cout<<endl;
}

程式运行结果如下:


说明:
1)本程式中使用了系统提供的标准库函数sin(),cos(),tan(),他们都在头文档math.h中说明。因此在3行包含了此文档。
2)由于当doa=90时,其正切函数趋于无穷大,故对他有特别的处理,否则如按正弦、余弦相同输出,当doa变到90时,运行将可能溢出或打印一个超界的大数。

--------------------------------------------------------------------

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 实例教学-基础知识(3)

下一篇: C 实例教学-基础知识(1)