常用算法一
一、计数、求和、求阶乘等简单算法
此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计
数、和、阶乘的变量的初值。
例:计算 直到最后一项的绝对值小于 1e-7 时为止。
分析:这道题使用递推方法来做。让多项式的每一项与一个变量 n 对应,n 的值依次为 1,3,5,7,...,
从多项式的前一项算后一项,只需将前一项乘一个因子:
(-x2)/((n-1)*n)
用 s 表示多项式的值,用 t 表示每一项的值,程序如下:
#include <math.h>
void main()
{ double s,t,x;
int n;
printf("please input x:");
scanf("%lf",&x);
t=x; n=1; s=x;
do
{ n=n+2;
t=-t*x*x/(n-1)/n; /* 计算通项 */
s=s+t; /* 累加求和 */
}while(fabs(t)>=1e-7); /* 当累加项的值大于 1e-7 继续循环 */
printf("sin(%f)=%lf",x,s);
}
二、求两自然数的最大公约数和最小公倍数
分析:
(方法-)用辗转相除法
(1)
对于已知两数
m
,
n
,使得
m>n
;
(2) m
除以
n
得余数
r
;
(3)
若
r=0
,则
n
为最大公约数结束;否则执行
(4)
;
(4)m
ç
n,n
ç
r,再重复执行(2)
例如:
设输入
m=28,n=20
循环 m n r
赋好初值时:28 20 8
第一次结束:20 8 4
第二次结束: 8 4 0
void main()
{ int n,m,nm,r,t;
printf("Enter m,n=?");
scanf("%d%d",&m,&n);
nm=n*m;
if (m<n)
{t=m; m=n; n=t;}
r=m%n;
while (r!= 0)
- 1 -
1
评论0