问题
代码
解析
目录
问题
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子的规律为数列 (为斐波那契数列)
兔子繁殖的规律 | 月数 | 小兔子 | 中兔子 | 老兔子 | 兔子总数 |
1 | 1 | 0 | 0 | 1 | |
2 | 0 | 1 | 0 | 1 | |
3 | 1 | 0 | 1 | 2 | |
4 | 1 | 1 | 1 | 3 | |
5 | 2 | 1 | 2 | 5 | |
6 | 3 | 2 | 3 | 8 | |
... | ... | ... | ... | ... |
C语言代码:
#include<stdio.h>
int main()
{
printf("请输入一个月份\n");
int i,m,a=1,b=1,c;
scanf("%d",&m);
if(m==1)
printf("第1月份的兔子对数为%d对",a);
else if(m==2)
printf("第2月份的兔子对数为%d对",b);
else if (m>=3)
{
for(i=3;i<=m;i++)
{
c=a+b;
a=b;
b=c;
}
printf("第%d月份的兔子对数为%d对",m,c); }
return 0;
}
运行结果为:
请输入一个月份
代入数据验证:
请输入一个月份
2
第2月份的兔子对数为1对
--------------------------------
Process exited after 3.572 seconds with return value 0
请按任意键继续. . .
请输入一个月份
7
第7月份的兔子对数为13对
--------------------------------
Process exited after 3.215 seconds with return value 0
请按任意键继续. . .
解析
斐波那契数列的特点为从第三位开始每一位都是前两位的和,该程序的运行主要为:
for(i=3;i<=m;i++)
{
c=a+b;
a=b;
b=c;
}
利用for循环将第前两位的和赋给第三位并以此类推;
for语句的一般格式为for(表达式1;表达式2;表达式3)
注意for语句的要求:
表达式1一般为赋值表达式,给循环变量赋初值;
表达式2一般为关系表达式或逻辑表达式,作为循环控制条件;
表达式3一般为赋值表达式,给循环控制变量增量或减量。
表达式之间用;隔开。