while语句本身语法很简单,此处列举它的几个应用实例。
1、关于逆向输出一个数字(例如输入1234输出4321)的一个很好的点子
int main() {
int a = 0;
scanf("%d", &a);
while (a > 0) {
printf("%d", a % 10);
a /= 10;
}
return 0;
}
利用取余数得到数字最后一位,然后除以10把数字右移一位,以此往复知道取完(此时数字a<0)
2、关于定量打印字符,如命令打印几个*就打印几个。原理是利用while语句,每打印一次减1,直到<0,跳出循环。
int main() {
int a = 0;
printf("输入\n");
scanf("%d", &a);
while (a-->0)
printf("*" );
return 0;
}
升级版:交替打印+号与-号,使得他们的总数是我输入的数字
这个代码我写得不够好,因为使用了goto且没有用上while(理论上是可以的)。但对我来说这也是无奈之举,因为我再打印+或-前都需要进行判断,这就不得不使用if
int main() {
int a = 0;
printf("input:\n");
scanf("%d", &a);
here:
if (a > 0) {
printf("+");
a--;
if (a > 0) { printf("-"); a--; goto here; }
}
return 0;
}
再升级版:指定输入数字的个数,再依次输入这么多个数,然后计算和与平均
int main() {
int a = 0,i = 1;
int sum = 0, tam = 0;
printf("how many integer do you want to input: \n");
scanf("%d", &a);
while (i<= a) {
printf("No.%d\n", i);
scanf("%d", &tam);
sum += tam;
i += 1;
}
printf("sum is %d, average is %f\n", sum, (double)sum / a);
return 0;
}
综观这几个代码,对于有些任务,乍一看需要创建未知个变量(例如最后一个输入指定的个数的数字),又或者要打印未知个个数的字符,而这些都可以用while语句通过另一种方式实现,就是再设一个变量,每循环一次减1,直到完成指定次数。有时这也对思维提出了挑战,比如第一个逆向输出数字的例子。