例题一:有一对兔子,从出生后第3个月起每个月都出生一对兔子。小兔子长到第3个月后每个月又生出一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?
可以从表格看出兔子繁殖的规律:
可以看到每个月的兔子总数依次为:1,1,2,3,5,8,13......这就是Fibonacci数列。
先来看程序:
这个程序是要输出40个月的兔子数,这里截图只截了部分。至于怎么得来的,赋值什么的就不讲了。这个程序虽然是正确的,但这个算法并非最好的,而且输出每个月占一行,篇幅太大,不可取。
可以改进一下:
这回输出看起来舒服点了。这里的for循环每次输出两个月的数据,故只需要循环20次即可。if语句的作用是使输出4个数后换行。i是循环变量,当i为偶数时换行,由于每次循环要输出两个数(f1,f2),因此i为偶数时意味着输出4个数,执行换行。
换个例子:
想说的是对于for的嵌套问题,是先执行内循环,内循环退出再返回去执行外循环,然后再进行内循环。
①i=1 ( j=3 m=m*(j*i)=3)
(j=2 m=m*(j*i)=6)
(j=1 m=m*(j*i)=6*1=6)
②i=2 (i*j>3) 退出内循环;
③i=3 (j=3时(i*j>3) )退出内循环;
所以结果才为6,这个最好时像高中做流程题一样,一项一项写出来验证。
这里提到了break了,那就顺便再说一下break和continue。
先编写一个程序:
好,我们来加一个break:
好,原来i==3&&j==1为真时就跳出内循环了,不管什么i==3&&j==2为假为真什么的情况。再看看换成continue怎样:
看来是缺了一个没输出,这里要注意了,是第3行第1个数据3没有输出,从第3行第2个数据6开始输出,由于没有执行“printf("%dt",i*j)”后面4个数据向左移动了一个位置。其实break我也是看了好几个例题才看懂的。
接下来就是看数组了。