循环结构 程序举例

循环结构:
求n!
求1!+2!+3!+……+n!
求数列和
求cosx的近似值

求n!

输入n
使用for循环 for( i=1;i<=n;i++) // i 是计数器变量
用fac来接收 n!
输出 n!

#include <stdio.h>
int main (void)
{
	int i,n;
	float fac;
	printf("请输入正整数n:\n");
	scanf("%d",&n);
	fac=1;               \\记得给fac初始化!!
	for (i=1;i<=n;i++)   \\注意不要在后面加分号!
	{
		fac*=i;
	}
	printf("n!=%f",fac);
	return 0;
}

求1!+2!+3!+……+n!

用s接收 1!+2!+3!+……+n! 并将s初始化为0
用 变量a来接收 1! , 2!, 3!,……n!
循环次数已定,为n
使用for循环 for(i=1;1<=n;i++)
循环体 a * =i;s+=a;

#include <stdio.h>
int main (void)
{
	int i,n;
	float a=1,s=0;           \\给a和s初始化
	printf("请输入正整数n:\n");
	scanf("%d",&n);          \\不要丢取地址符!
	for (i=1;i<=n;i++)        
	{
		a*=i;
		s+=a;
	}
	printf("s=%f",s);
	return 0;
}

求数列和
计算数列1/2,-2/3,3/4,-4/5……的前20项和。

首先,循环数已知为20,以变量i作为计数器
确定for 循环 for(i=1;i<=20;i++)
观察分子分母以及符号的规律。
分子:当i=1时,分子为1;当i=2时,分子为2……分子数值一直与i相同。用a来接收分子的值,可以将变量i的值直接赋值给a。
分母:分母的值为分子的值加1。用变量b来接收分母的值,即b=i+1
符号:第一项为正,第二项为负。即奇数项为正,偶数项为负。后一项的符号与前一项的符号相反。用变量c来进行符号的转换。

#include <stdio.h>
int main (void)
{
	int i,c;
	float a,b,s;
	s=0;
	c=-1;
	for (i=1;i<=20;i++)
	{
		a=i;
		b=i+1;
		c*=-1;
		s+=a/b*c;
	}
	printf("s=%f\n",s);
	return 0;
}

求数列和
计算数列1/2,-2/3,3/5,-5/8,8/13……的前20项和。

分析如上题目。
循环次数已定,为20.
使用for循环,用变量i作为计数器。 即 for(i=1;i<=20;i++)
分子与i相同
分母:第一项为2,第二项为3,第三项为5,第四项为8……即分母为前两项之和。必要条件:必须知道第一项分母和第二项分母的值。
符号后一项的符号与前一项的符号相反

#include <stdio.h>
int main (void)
{
	int i,f;    \\i只是计数器的作用;f只在1-1之间变换。
	float s,a,b,c,x;   
	a=2;b=3;   \\处理前两项。分别为第一项和第二项分母。
	s=1./2.-2./3.;  \\前两项需要直接存到s中,后面根据前两项的规律进行递推。
	                 \\注意!!!不能写成1/2 -2/3 否则运算结果为0!
	f=1;
	for (i=3;i<=20;i++)   \\计数器从3开始即可
	{
		c=a+b;     \\引入变量c是为了分母的递推
		a=b;b=c;
		x=i/c*f;  \\将后面每一项存到变量x中
		f*=-1;
		s+=x;
	}
	printf("s=%f",s);
	return 0;
}	

求cosx的近似值
cosx=1-x^2/2!+x ^4/4!+x ^6/6!……

分析:
未知x,需要输入x;
一共加到多少项,未知。(即循环次数未知)但是当某一项小于等于10^-6 时,就会停止循环 (循环的条件)
每一项的表示:
分子:x^2 , x ^4 , x ^6, ……后面每一项都是前一项加2
分母:2! 4! 6! …… 后面每一项的阶乘都是前一项加2
循环变量i 设其初始值为2,使循环趋于结束的部分:i=i+2
符号:后一项的符号与前一项相反

#include <stdio.h>
#include <math.h>  \\下面用到 pow函数
int main (void)
{
	int i,f;     
	double x,cosx,a,b,c;  \\ pow函数 pow(x,y),要求x,y必须是double型数据
	printf("请输入x的值:\n");
	scanf("%lf",&x);    
	b=1;   \\用变量b来接收分母
	f=1;    \\控制符号变化
	cosx=1;   \\使变量x初始化
	c=1;    \\ 这里给c赋值只是为了for循环中,满足循环条件!
	for (i=2;c>=1e-6;i=i+2)
	{
		a=pow(x,i);
		b*=i*(i-1);
		f*=-1;
		c=a/b;     \\c恒正,为了判断循环条件时方便(可以不使用绝对值函数)
		cosx+=c*f;    \\注意不要忘了符号
	}
	printf("cosx的近似值为:%lf\n",cosx);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

釉色清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值