
7.6 do...while()循环语句
do...while()语句的语法是:

这个语句与while()...循环语句只有一个区别,就在于statement_body是在continuation_expression求值之前得到执行的。如果continuation_expres-sion是true,那么继续执行下一轮循环;如果是false,那么循环就结束。请注意,do...while()语句本身需要以分号结尾。如果第一轮循环就让continuation_expression取到false值,那么statement_body这一部分只会执行一次。
现在回到高斯求和问题。刚才我们已经解释了do...while()与while()...之间的区别。具体到这个例子来看,这两种写法之间还是稍有不同。
下面这个sumNviaDoWhile()函数写在gauss_loop.c程序文件里面,它的代码是:

请注意,由于这个循环的循环体包含多行代码,因此需要用一对花括号把这些代码括起来,让它们形成一个代码块,不然编译器会报错。
与前面两种循环一样,用do...while()循环来解决高斯求和问题时,我们也可以把函数的参数N本身当成计数器使用,并按照从大到小的顺序计算。
下面这个sumNviaDoWhile2()函数写在gauss_loop2.c程序文件里面,它的代码是:

在继续往下讲之前,我们应该先把已经写过的函数测试一遍,为此,我们需要把这些函数所在的两个程序文件(也就是gauss_loop.c与gauss_loop2.c文件)补充完整。
gauss_loop.c程序的main()函数是这样的:

请你创建一份名为gauss_loops.c的文件,并把main()函数以及早前提到的那三个sum函数录入该文件。然后用cc gauss_loops.c -o gauss_loops命令编译程序,最后运行该程序。你应该会看到类似下面这样的输出信息。

从这张截图可以看出,用三种不同的循环语句所实现的这三个函数都能计算出1~100的所有整数之和,并得出跟早前的gauss_bruteforce程序相同的结果。
gauss_loop2.c程序的主体部分是:


请创建gauss_loops2.c文件,把main()函数与早前的三个sumXXX2函数录入该文件。然后用cc gauss_loops2.c -o gauss_loops2命令编译程序,最后运行该程序。你应该会看到类似下面这样的输出信息。

从这张截图可以看出,这三个采用不同的循环语句所实现的函数都能够计算出1~100的所有整数之和,并且能够得出跟以前相同的结果。