本周继续深入学习了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(1N46)。

输出前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,运行结果:

C语言学习周总结002_c语言

 

 

 

输入1,运行结果:

C语言学习周总结002_c语言_02

 

 

输入2,运行结果:

C语言学习周总结002_for循环_03

 

 

输入13,运行结果:

C语言学习周总结002_斐波那契数_04

 

 

输入46,运行结果:

C语言学习周总结002_初始化_05

 

 

 我取了几个特殊值测试各个条件下代码的运行结果,经过上面的测试后,程序基本没什么问题,本题圆满完结。

 



 

很高兴能用自己学到的知识亲手解决遇到的问题,这也更加坚定了我学习C语言的信心,相信坚持学习下去,我会一步步走向成功的。

那么,本周学习总结就到这结束了。

:) END