3种基本的程序流:顺序、循环、分支
3种循环程序流:while、do while、for
伪代码(pseudocode):一种用简单的英语表示程序的方法,与计算机语言的形式相对应;伪代码有助于设计程序的逻辑
while循环的一般形式:
while(expression)
statement
statement可以是一个带有分号的简单语句,也可以是花括号和其中的复合语句
如果expression为真(非零),就执行一次statement部分,然后再次判断expression,在expression变为假之前重复该判断和执行的循环,每次循环被称为一次迭代
一、while循环的终止
当构造一个while循环时,循环中必须包含能改变判断表达式的值使表达式的值最终为假,否则循环永远不会终止
例外:嵌入式开发中main函数中的while()循环实际上是一个死循环,是为了让程序一致运行而专门设计的
二、while循环何时终止
只有在计算判断条件的值时才决定是终止循环还是继续循环
示例代码:
#include <stdio.h>
int main(void)
{
int num = 10;
while(num < 11)
{
printf("the num is %d \n", num);
num++; // num变为11,但是程序不会退出,而是继续执行完本次循环
printf("the new num is %d \n", num);
}
return 0;
}
运行结果:
在循环中,即使进入循环的判断条件变得不满足,程序也不会马上退出,而是会执行完本次循环,在执行下一次判断时,才退出循环
三、while循环是使用入口条件的有条件循环
循环体中语句的执行需要依赖于判断表达式中的条件
在进入循环体之前必须满足该条件
只有位于判断条件之后的单个语句(简单语句或复合语句)才是循环的部分,不要忘了复合语句前后的花括号
while语句本身在语法上算作一个单独的语句,即使其使用了复合语句
常犯错误1:
#include<stdio.h>
int main(void)
{
int i = 0;
while(i < 10)
function();
i++; // 程序将一直在while循环中,永远不会执行到该行
return 0;
}
常犯错误2:一个单独的分号也算是一个语句(空语句)
#include <stdio.h>
int main(void)
{
int i = 0;
while(i++ < 10); // 相当于循环内是空语句
function(); // 该行语句只会被执行一次
return 0;
}
为了防止空语句不被留意,建议放在单独的一行中,使开发者在阅读程序时更容易看到空语句:
while(i++ < 10)
; // null statement
当所有的工作都在判断过程中实现,会有意使用带有空语句的while语句,再比如:
// 只要scanf()读入一个整数,就返回1
// while中的判断条件满足,循环就会继续
while(scanf("%d", &num) == 1)
;