3.4.1 while 语句
while 语句,也称 while 循环,是循环结构中的一员。它的使用格式为:
while(表达式) 语句
while 语句根据小括号内表达式的值来决定是否执行语句,当表达式的值为假时,循环结束,语句不会被执行;若表达式的值为真,则语句被执行,然后会再次去判断表达式的值,如此反复,直至表达式的值为假。这里的语句可以是单条语句,也可以是复合语句,由于语句在循环结构内,所以通常也将其称为循环体,其执行流程如图 3.5 所示。
图 3.5 while 语句的执行流程
下面用 while 语句来解决前面所提出的那个“棘手的”问题,代码如下:
主函数中第一行定义了 4 个 int 类型变量,其中变量 i 是为后面的 while 语句所使用的,变量 n 用于保存学生的数量,变量 score 用于保存用户所输入的成绩,变量 sum 用于保存总分,其中变量 sum 被初始化为 0。为什么非要对变量 sum 进行初始化的操作呢?答案一会揭晓。
然后通过 scanf 函数获取用户所输入的学生的数量,保存在变量 n 中,并根据学生数量使用 printf 函数打印一条提示用户输入相应数量成绩的信息。
注意在 while 语句之前,通过“i = n;”把变量 n 的值赋给了变量 i,因为我们要保存好学生数量,后面计算平均分时还需要用到它。即在 while 语句中我们操作和修改的只是变量 i,不会对变量 n 有影响。
在 while 语句被执行时,它首先会检查表达式“i––”的值,如果为真,就会执行循环体,如果为假,则会结束 while 语句的执行。循环体里有两条语句,第一条语句是通过 scanf 函数获取用户所输入的学生成绩,保存到变量 score 中;第二条语句是通过复合赋值运算符把刚刚读取到的学生成绩累加到变量 sum 中。在 sum 变量定义时必须对它进行初始化的操作,即让变量 sum 的初始值为 0,若不这样做的话,初始时 sum 变量的值未知,即使将学生的成绩都累加进去,最终计算出的总分也不会正确。
在 while 语句之后,通过总分除以学生数量得到平均分,赋给变量 aver。在这儿又见到了类型转换运算符,通过它将 int 提升为 float,目的是让运算的结果为拥有小数点的 float 类型。
下面我们就来实际运行一下程序,结果如下:
Please enter the number of students: 3 Please enter the scores of 3 students: 80 75 60 Total:215, Average:71.67
首先程序提示用户输入学生的数量,我们输入数字 3 并按下回车键,程序读取这个数字并保存到变量 n 中,然后根据变量 n 的值提示用户输入 3 个学生的成绩,接着把变量 n 的值赋给变量 i,并准备开始执行 while 语句。下面详细描述一下 while 语句被执行的整个过程:
① 表达式“i––”的值为 3(变量 i 的值变为 2 了),为真,执行循环体;
② 获取用户输入的 80,保存到变量 score 中;
③ 将变量 score 的值累加到变量 sum,此时 sum 的值为 80;
④ 表达式“i––”的值为 2(变量 i 的值变为 1 了),为真,执行循环体;
⑤ 获取用户输入的 75,保存到变量 score 中;
⑥ 将变量 score 的值累加到变量 sum,此时 sum 的值为 155;
⑦ 表达式“i––”的值为 1(变量 i 的值变为 0 了),为真,执行循环体;
⑧ 获取用户输入的 60,保存到变量 score 中;
⑨ 将变量 score 的值累加到变量 sum,此时 sum 的值为 215;
⑩ 表达式“i––”的值为 0(变量 i 的值变为–1 了),为假,结束 while 语句。
这里的表达式使用的是后缀自减运算符,要注意表达式的值和变量的值之间的区别,如果忘了,可回到运算符一节再温习一下。
前 3 次表达式的值都为真,所以循环体被执行了 3 回,每一回都会读取一个用户所输入的数字,保存到变量 score 中,然后再累加至变量 sum。第 4 次时,表达式的值变为假,于是 while 语句结束。所以正常情况下,使用 while 语句时,要能顺利地通过表达式来结束循环,不要让它变成一个无限循环状态。而对于如何通过表达式来结束循环,没有标准和统一的答案,可以根据自己的习惯来决定。例如我们把表达式换成“i”,而把自减的操作放到循环体里面完成,效果和原来也是一样的:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论