循环结构:
求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;
}