最新C++032循环控制结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

main( )
n
1/0
prime(n)
❖程序编码?
{ if ( m%n= =0 ) break; }
if (n>m/2) cout<<m<<‘\t’;
}
}
16
//方案二:main()、prime(n)
main( )
n
1/0
prime(n)
#Include <?> void main(void) { int m, n;
while ( fabs(x0-x1)>0.001 )
{ x0=x1; x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);
} cout<<“x=“<<x1<<endl; }
x1=x0-fx(x0)/fxd(x0);
double fx(double x)
{ fib1+fib2 →fib; fib2 →fib1; fib →fib2;}
fib即为所求。
int i,n; cout<<“n=?”;
如何输出1~12的fib数呢?
cin>>n; for( i=3; i<=n; i++ )
cout<<f1<<‘\t’<<f2;
{ fib = fib1+fib2;
如何判断f(x)与f(x1)同号: f(x)*f(x1)>0则同号,否则异号。
12
❖ 例:求2x3-4x2+3x-6=0 在(-10,10)之间的根。
#include <?>
void main(void) { double x1=-10,x2=10;
double f(double x);//函数声明
for( n=2; n<=k/2; n++ )
if ( k%n= =0 ) return 0; //return false
return 1;
// return true
main( )
x0
x
ndsolve(x0)
x0
f’(x0) x0
fx(x0)
f’(x0)
fxd(x0)
10
程序编码 ❖
(求2x3-4x2+3x-6=0 在1.5附近的根)
#include <iostream.h>
void main(void)
double fx(double x);//函数声明
{ double x0=1.5, x1=0; double fxd(double);
当型循环:
直到型循环?
非精确迭代
9
❖ 例:求2x3-4x2+3x-6=0 在1.5附近的根。
❖结构设计
方案一:main()
方案二:main(), fx(x), fxd(x)
main( )
x0
f’(x0) x0
f’(x0)
fx(x0)
fxd(x0)
方案三:main(), ndsolve(x), fx(x), fxd(x) (在函数与指针中讨论)
13
例4:求第n项Fibonacci数列
买1对兔,第3个月开始每月都生1对,1年几何?
❖ 算法设计
月份:1月2月 兔对:1 1
3月 2(1+1)
4月 3(2+1)
5月 5(3+2)
令:fib1=fib2=1 循环执行(按月计数 i:3~12):
{ fib1+fib2 →fib; fib2 →fib1; fib →fib2;}
C++032循环控制结构
3
4
5
6
7
8
例2:牛顿迭代法求方程f(x)=0在x0附近的解。
❖ 算法设计
y
f(x)
x*是需要求的精确解, 设x0是x*附近的近似解, 有:f ’(x0)=f(x0)/(x0-x1)
X*
0 x2 x1 x0 x
则:
x1= x0- f(x0) / f ’(x0) | x0-x1 | > ℇ? x1 → x0
while ( fabs(x1-x2)>0.001 )
{ x=(x1+x2)*0.5;
if ( f(x) * f(x1)>0 )
x1=x;
else
x2=x;
}
cout<<“x=“<<x<<endl;
}
double f(double x)
{ return ( 2*x*x*x-4*x*x+3x-6 ) ; }
❖ 算法设计
y
f(x1)、f(x2)符号相反,
则f(x)在(x1,x2)上至少有一个根x*。
取(x1,x2) 中点x=(x1-x2)/2, 如果f(x)与f(x1)同号,则x→x1 ;
x1 0
否则x→x2 ,|x1-x2|> ℇ?
f(x) x X*
x2
❖结构设计:main()或main() 、fx(x)
m%n=0 ?
ቤተ መጻሕፍቲ ባይዱ❖结构设计
//方案一:仅main()实现
#Include <?> void main(void) { int m, n;
方案一:仅main()实现 方案二:main()、prime(n)
for( m=100; m<=200; m++ ) { for( n=2; n<=m/2; n++ )
{ double y; y=2*x*x*x-4*x*x+3*x-6; return (y); }
double fxd(double x) { return ( 6*x*x-8*x+3 ); }
main( )
x0
f(x0) fx(x0)
f’(x0)
x0
fxd(x0)
11
例3:用二分法求f(x)=0在(x1,x2)上的解。
for( m=100; m<=200; m++ ) { if ( prime(m) ) cout<<m; }
}
int prime(int k); 或
int prime(int);
int prime( int k ) // bool prime( int k )
{ int n;
函数声明:扩展函数作用域!
fib1 = fib2; fib2 = fib; }
cout<<‘\t’<<fib<<endl;
cout<<endl<<“fib=”<<fib<<‘\n’;
cout<<endl; }
15
例5:找出100~200以内的全部素数。
如果m是素数,则m不能被任何数n整除(n=2~m/2)。
❖算法设计
循环执行(m=100~200) 循环执行(n=2~n/2)
fib即为所求。
❖ 结构设计:一个主函数实现
14
❖ 程序编码如下:
#include <iostream.h>或 #include <iostream> using namespace std; void main(void) { int fib1=1, fib2=1, fib;
令:fib1=fib2=1 循环执行(按月计数 i:3~12):
相关文档
最新文档