一、作业内容
1. 求阶乘的和 ,1!+2!+3!+4!+…+n!, 其中 n 由键盘读取.
int main()
{
int n;
scanf ("%d",&n);
int sum=0;//和
int tmp=1;//当前项的值
for(int i=1;i<n;i++)
{
tmp*=i;
sum+=tmp;
}
printf("%d\n",sum);
return 0;
}
2. 一个球从 100m 高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第 10次落地时共经过多少米,第 10 次反弹多高。
int main()
{
//由于第一次下落和后面的有区别,故把第一次放在循环外
double sum=100;//总长度
double high=100/2;//反弹高度
for(int i=1;i<10;i++)
{
sum+=high*2;
high/=2;
}
printf("%.2f %.2f\n",sum,high);
return 0;
3. 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如, 6 的因子为 1,2,3 而 6=1+2+3,因此 6 是"完数"。编程序找出 1000 之内的所有完数 , 并输出。
int main()
{
for(int i=0;i<1000;i++)
{
int sum=0;//所有因子之和
for(int j=1;j<i;j++)//求当前因子和
{
if(i%j==0)//j是i的因子
sum+=j;
}
if(sum==i)
printf("%d是个完数\n",i);
return 0;
}
二、上课内容
求斐波那契 (Fibonacci) 数列的第 n 个数。这个数列有如下特点:第 1 、 2 两个数为 1 、 1 。从第 3 个数开始,该数是其前面两个数之和。即 1,1,2,3,5,8,13,21,......
int main()
{
int n;
scanf("%d",&n);
int f1=1;//第一项
int f2=1;//第二项
int f3=1;//当前项
for(int i=3;i<n;i++)
{
f3=f1+f2;
f1=f2;
f2=f3;
}
printf("%d\n",f3);
return 0;