第35节 迭代法解题

一.求Fibonacci数列前40个数

求Fibonacci数列前40个数:1 1 2 3 5 8 13 21 34 ...
#include <stdio.h>
int main()
{
    
    
	long f1, f2, fn;
	int i;
	f1 = f2 = 1;
	printf("%-12ld\t%-12ld\t", f1, f2);
	for (i = 3; i <= 40; ++i)//可改成i=2,i<=39输出完全对齐;
	{
    
    
		fn = f1 + f2;//等于前两个数之和;
		f1 = f2;     //第二个数变成下一个数的数一;
		f2 = fn;     //新得的数变成下一个数的数二;
		if (i % 5 == 0) printf("\n"); //i是5的整数时,换行;
		printf("%-12ld\t", fn);//%-12ld表示输出12位左对齐;
	}
}

二.求1!+2!+3!+…+20!

#include <stdio.h>
int main()
{
    
    
	int i,f=1,sum=0;
	for (i = 1; i <= 20; ++i)
	{
    
    
		f *= i;  //迭代计算阶乘
		sum += f;
	}
	printf("%d\n", sum);
}

三.求级数公式(精确到小数点后5位)

#include <stdio.h>
#include <math.h>
int main()
{
    
    
	double x, sum = 1, term = 1,i=1;
	scanf_s("%lf", &x);
	while (fabs(term)>=1e-5)//fabs()取绝对值;
	{
    
    
		term = term * (-1) * x * x / ((2 * i) * (2 * i - 1));
		//找出递增规律,利用迭代计算
		sum = sum + term;
		++i;
	}
	printf("%f\n", sum);
}

四.实践项目
【项目1:另类求和】
求 Sn=a+aa+aaa+…+aa…a之值,其中 a是一个数字。
例如2+22+222+2222( 此时a=2,n=4),a和n均由键盘输入。

#include <stdio.h>
int main()
{
    
    
	int a, n, i = 1, Sn = 0, Tn = 0;
	printf("请输入 a 和 n 的值:\n");
	scanf_s("%d %d", &a, &n);
	while (i <= n)
	{
    
    
		Tn = Tn * 10 + a;
		Sn = Sn+Tn;
		++i;
	}
	printf("a+aa+aaa+...=%d\n", Sn);
	return 0;
}

【项目2:反弹的皮球】
一球从的100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?

#include <stdio.h>
int main()
{
    
    
	float sn = 100.0, hn = sn/2;
	int n;
	for (n = 2; n <= 10; ++n)
	{
    
    
		sn = sn + hn * 2;
		hn = hn / 2;
	}
	printf("第10次落地时经过: %g 米\n", sn);
	printf("第10次落地时反弹: %g 米\n", hn);
}

【项目3:Bessel函数】
Bessel函数Jn(X)有以下的递推关系:
在这里插入图片描述
编写程序,利用递推关系,由任意的n和x≠0求Jn(X)。

 #include <stdio.h>
#include <math.h>
int main()
{
    
    
	double jn=0, j0, j1, x;
	int n, i;
	const double PI = 3.1415926;
	scanf_s("%d %lf", &n, &x);
	j0 = sin(x * PI / 180) / x;
	j1 = sin(x * PI / 180) / (x * x) - cos(x * PI / 180) / x;
	for (i = 2; i <= n; i++)
	{
    
    
		jn = (2 * (double)i - 1) * j1 - j0;//公式中为i+1项值,转换为第i项值;
		j0 = j1;
		j1 = jn;
	}
	printf("%f\n", jn);
}

【项目4:贪财的富翁】
一个大富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱,第二天我仍给你十万元,你给我两分钱,第三天我仍给你十万元,你给我四分钱,…,你每天给我的钱是前一天的两倍,直到满一个月(30天),大富翁很高兴,欣然接受了这个契约。请编程序,输出每日的交易记录。

#include <stdio.h>
int main()
{
    
    
	double a = 0.005, b = 100000, suma = 0, sumb = 0;
	for (int i = 1; i <= 30; ++i)
	{
    
    
		a = a * 2;
		suma = suma + a;
		sumb = sumb + 100000;
		printf("第%02d天 大富翁支出%10.2f元,累计支出%10.2f\n\n", i, a, suma);
		printf("第%02d天 陌生人支出%10.2f元,累计支出%10.2f\n", i, b, sumb);
	}
}

【项目5:在北京买房】
现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定净赚40万。输出未来10年的房价和工程师存款金额

#include <stdio.h>
int main()
{
    
    
	double 房价 = 200/1.1, 存款 = -40;
	int i;
	for (i = 1; i <= 10;++i )
	{
    
    
		房价 = 房价 * 1.1;
		存款 = 存款 + 40;
		printf("第%02d年 房价:%.2f万元 ,存款: %.2f万元\n", i, 房价, 存款);
	}
}

猜你喜欢

转载自blog.csdn.net/m0_51439429/article/details/115256395