本周继续深入学习了for循环、while/do-while循环等内容
首先还是简单地介绍下这两个内容
1. for循环
C语言常用的几大循环结构之一,主要形式为:
for (表达式1;表达式2;表达式3){ 循环体语句; }
其中表达式1作为起始条件,表达式2作为判断下一次循环是否进行的条件,表达式3作为执行完一次循环体语句后执行的语句。有了以上条件后,一个for循环结构就诞生了,但也不一定要完全具备以上条件才能执行for循环。比如其中的三个表达式均可视情况省略,写成形如for ( ; ; ) 的格式,但要注意在循环体语句中加入判断循环停止的语句,以免陷入死循环,使得程序运行超时。
2. while/do-while循环
也是C语言常用的循环结构,同时可以与上述的for循环结构等价,等价后的主要形式为:
表达式1; while (表达式2){ 循环体语句; 表达式3; }
表达式1; do{ 循环体语句; 表达式3; }while(表达式2);
其中while和do-while循环区别在于 while循环先判断表达式2是否成立再决定是否执行循环,而do-while循环先执行一遍循环体语句再判断表达式2来决定是否执行下一次循环,简言之,while循环若判断条件不成立可直接跳过不执行循环,do-while循环至少执行一次循环。
光盯着理论知识死记硬背可不行,必须通过题目实践来加强我们对这些知识的掌握
于是我们一起来完成下面这道题
斐波那契数列:形如f(n) = f(n-1) + f(n-2)的数列,规定第一、二项均为1。
输入在一行中给出一个整数N(1≤N≤46)。
输出前N个斐波那契数,每个数占11位,每行输出5个。如果最后一行输出的个数不到5个,也需要换行。
如果N小于1
,则输出"Invalid.
"
分析:
定义所有需要用到的变量并初始化(前两个数a和b均初始化为1,计数变量count初始化为2),输入整数n,先判断n是否小于1,若是则输出"Invalid.
",否则再对n=1和n=2两个特例分别输出处理;
处理完特例后,进入n>=3情况下的处理步骤,先按题目要求的占11位格式输出前两个数;
接着进入for循环,将前两个数(a和b)的和赋给 t ,按格式要求输出 t ,然后将b的值赋给a, 将 t 的值赋给b, 同时将计数变量count加一,这里的计数变量count表示本行输出到第几个数;
每次循环末尾均判断本行是否输出到第五个数,即count是否等于5,若是则输出换行符,并将count初始化为0;
当for循环的判断条件i > n时,即已经输出了n个斐波那契数,循环终止。
最后return 0,程序运行结束。
代码:
#include <stdio.h> int main() { int n, count = 2, a = 1, b = 1, t, i; scanf("%d", &n); if (n < 1) printf("Invalid.\n"); else if (n == 1) printf("%11d", a); else if (n == 2) printf("%11d%11d", a, b); else { printf("%11d%11d", a, b); for (i=3; i<=n; i++) { t = a + b; a = b; b = t; printf("%11d", t); count++; if (count == 5){ printf("\n"); count = 0; } } } return 0; }
运行测试:
输入0,运行结果:
输入1,运行结果:
输入2,运行结果:
输入13,运行结果:
输入46,运行结果:
我取了几个特殊值测试各个条件下代码的运行结果,经过上面的测试后,程序基本没什么问题,本题圆满完结。
很高兴能用自己学到的知识亲手解决遇到的问题,这也更加坚定了我学习C语言的信心,相信坚持学习下去,我会一步步走向成功的。
那么,本周学习总结就到这结束了。
:) END