信奥竞赛

系列

剑指信奥 | C 语言之不知疲倦的小机器

计算机最擅长的事情

要知道,计算机从上个世纪中期发明以来,还不到一百年的时间,就使得我们生活的这个世界产生了翻天覆地的变化。

计算机带来的第三次数字化革命让整个人类的生活较之以往的数千年发生彻底了的改变。

日常生活已经离不开计算机

很难想象,如果突然有一天我们失去了计算机,这个世界会变成什么样子...

那么,为什么计算机能够在如此大的尺度上改变我们的生活呢,想必它肯定有不为寻常的过人之处,今天我们就来展现其中的一点。

不知疲倦的小机器

人类和机器最大的区别就在于,人类是普通的生命体,日出而作,日落而息。

机器则不同,它在需要的情况下可以持续不停的工作,计算机较人类而言,最大的优势也正在于此。

我们来看一个小小的例子:

把 1 到 5 这个五个数字相乘,结果是多少?
                

这道题太简单了吧,用不上十秒钟,心算就能得到结果:120。

如果用 C 语言能不能算出结果呢?

当然可以,我们用这样的一段程序来实现,这里含有我们没接触过的内容,一会我们会详细讲解:

#include <stdio.h>
int main() {
    int n = 5;
    int p = 1;
    for (int i = 1; i <= n; i++) {
        p = p * i;
    }
    printf("%d", p);
}
                

把这段程序编写运行一下,很快,我们也得到了同样的结果。

计算机也不过如此嘛... 别急,我们稍微改一下题目,同样的连乘,如果是 1 乘到 10 呢?

数字多了 5 个,心算可能就有点吃力了,没关系,我们还会笔算,过了一分钟,我们也得到了结果:3628800,一个上百万的数字,但还算不难。

计算机怎么做?

把 n 改为 10 就可以了:

#include <stdio.h>
int main() {
    int n = 10;
    int p = 1;
    for (int i = 1; i <= n; i++) {
        p = p * i;
    }
    printf("%d", p);
}
                

几乎与上次一样,又是很快,也得到了同样的结果,但是我们的速度好像和计算机相比有点不一样了...

继续,算一下 1 到 15 的连乘?笔算也开始吃力了...

算着算着,心情逐渐烦躁:

算了,用 C 语言来吧,把 n 改成 15:

#include <stdio.h>
int main() {
    int n = 15;
    int p = 1;
    for (int i = 1; i <= n; i++) {
        p = p * i;
    }
    printf("%d", p);
}
                

几乎又是一瞬间,结果就得到了:2004310016,二十多亿的一个巨大的数字!

这时候我们不得不叹服 ——

厉害了!我的小机器 ...

强大的循环

我们终于发现了机器强于人类的一个方面:速度快,不会累!

那是不是人类就没有优势了?当然不是了,毕竟程序是由我们写出来的,机器只是在执行而已。

那未来机器会全面超越人类吗?这又是另外一个很大的话题了...

现在,我们来分析一下今天用到的这份代码,这里存在着一个非常有用的程序控制结构 —— 循环。

循环是计算机科学运算领域的用语,也是一种常见的控制流程。

循环是一段在程序中只出现一次,但可能会连续运行多次的代码。

Wikipedia

不难理解,循环就是在满足一定条件的情况下,重复的执行一段代码很多次,直到条件不在满足时,退出循环。

而我们上面的代码就是使用 C 语言的 for 循环实现的,for 循环语句各部分的含义如下:

  1. for for 循环结构开始
  2. for (int i = 0;) 循环的初始值
  3. for (int i = 0; i < n;) 循环要满足的条件
  4. for (int i = 0; i < n; n++) 循环变量的变化方式
  5. for ... {} 这个 for 循环所重复执行的一个代码片段

可能一开始大家对这个结构还是有点晕,但只要多做练习,for 循环结构还是比较容易理解的。

通俗的说就是程序在某一处开始不停的跑圈,若干圈后结束这个过程,开始接续向前走:

循环的开始与结束

一般来说,循环总是要结束的,但在某些特别情况下,循环会一直执行:

#include <stdio.h>
int main() {
    for (;;) {
        printf("该循环会永远执行下去!\n");
    }
}
                

这段代码就是一个无限循环,记得按 Ctrl + C 结束哦~

C 语言中,除了 for 循环外还有 while 循环和 do while 循环。for 循环和 while 循环通常可以相互转换,看一下用 while 循环实现的连乘:

#include <stdio.h>
int main() {
    int n = 15;
    int p = 1;
    int i = 1;
    while (i <= n) {
        p = p * i;
        i++;
    }
    printf("%d", p);
}
                

结果依然和 for 循环是一样的。

比较一下,看看 while 循环和 for 循环在结构上有哪些不同的地方?

今天的学习就要结束了,在这个特殊的漫长的假期中,希望同学们利用好这段时间,完成自己一个小小的突破!

日积月累

  • for for 循环
  • while while 循环

武汉加油,中国加油