这个函数的作用就是把一个百分制成绩转换成等级制。转换的过程我已经在讲解分支结构的时候详细阐述了......
作者:边城狂人 来源:yesky 2007年10月30日
关键字: Linux
学会了 for 循环,虽然可以简化不少代码,但它似乎只能解决循环次数固定的情况。如果人数不固定,又该怎么办?比如规定如下:输入若干 0 至 100 的成绩,如果成绩不在此范围,则表式结束。请看例5,例6:
/* 例5 */
#include "grade.h"
#include
void main() {
int n;
printf("请输入成绩: ");
scanf("%d", &n);
while (grade(n) != 0) {
printf("等级为: %c", grade(n));
printf("请输入成绩: ");
scanf("%d", &n);
}
}
/* 例6 */
#include "grade.h"
#include
void main() {
int n;
do {
printf("请输入成绩: ");
scanf("%d", &n);
if (grade(n) != 0) {
printf("等级为: %c", grade(n));
}
} while (grade(n) != 0);
}
例5 和例6 分别使用了 while 循环和 do-while 循环结构。两种循环结构都是在 while 后的逻辑表达式为真时执行循环体,为假时结束循环。二者的不同在于:while 循环是先判断,再执行循环体;而 do-while 循环而是先执行循环体后再作判断。因此,使用 do-while 循环至少要执行一次循环体。至于循环的执行过程,就请读者自己分析了。
例6 中对于同一个 n,至少要执行两次 grade(n),大大降低了程序的效率。虽然可以用一个 char 型变量来解决这个问题,但我不想这样作。于是又有如下方式的改写:
/* 例7 */
#include "grade.h"
#include
void main() {
int n;
do {
printf("请输入成绩: ");
scanf("%d", &n);
if (grade(n) == 0) {
break;
}
printf("等级为: %c", grade(n));
} while (1);
}
例7 中 while 语句的逻辑表达示值始终是真(1),所以这个循环也就是一个死循环,必须在循环体中用 break 语句跳出。用一个 if 语句判断跳出的时机,这也是很好理解的,就不多说了。但是看看下面的例8,可能就不是那么明白了。
/* 例8 */
void main() {
int n;
do {
printf("请输入成绩: ");
scanf("%d", &n);
if (grade(n) == 0) {
continue;
}
printf("等级为: %c", grade(n));
} while (grade(n) != 0);
}
例8 的和例6 的区别主要就在于一个 continue 语句。这个语句可是循环结构所特有的,其作用与 break 语句相比,即有相似之处,也有相对之处。执行了 continue 语句之后,循环体中 continue 以下的语句将不再在这次循环中执行,但循环并不中断,而是开始下一次循环。
如例8 中,满足 grade(n) == 0 的条件后,执行 continue 语句。然后 printf 语句被跳过,直接到 while 语句判断是否结束循环,如果不满足结束循环的条件,那么将会要求输入下一个成绩。不过例8 中,只要能执行到 continue 语句,while 后的条件就一定为假,循环结束。例8 和例7 的区别就在于,例8 是正常结束,而例7 是被中断。
break 和 continue 两个语句在 C 语言的循环结构中有着举足轻重的作用。虽然使用巧妙的结构化程序手段可以避免使用这两个语句,但这两个语句的确能使程序结构更加简单明了。所以,只要能用上它们的地方,我极力推荐使用它们。