while循环

whileif有着相似的用法,但是当需要做很多次的判断时,会使用更高效率的while语句,与if不同的是,当条件满足判断时,不断重复循环体内的语句

while格式

循环体内一定要有改变条件判断的机会,否则会陷入死循环

  1. while

写法与if类似,条件满足就执行表达式的内容,条件不满足时就结束循环,所以当条件不满足时,while内的表达式一次都不会执行

1
2
3
while ( 条件判断 ){
表达式(循环体)
}
  1. do while

虽然看着与while很像,但区别在于do while会在进入循环时不做条件判断,而是在执行完表达式后再检查循环的条件是否满足,如论如何都会进行一次表达式的执行,如果满足则进行下一次循环,不满足时才会结束循环

1
2
3
do {
表达式(循环体)
}while (条件判断);

代码示例

  1. 取位数

如果我们输入一串正整数,当机器得到这串数字时,需要得出这串整数一共有多少位,如果使用if进行判断,那么代码会显得十分臃肿且繁琐,先看看用if是如何实现

if:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int main() {
int x;
int n = 0; // 定义整数x和n
scanf("%d",&x); // 用户输入值为x
n++; // n自加1,满足0的条件
x /= 10; // 让x数值减少一位
/*
* 判断
* 当x大于0时,使n的值加1,并减去x的个位数
* 直至x小于0时,才结束判断,并输出n的值*/
if ( x > 0){
n++;
x /= 10;
if ( x > 0){
n++;
x /= 10;
if ( x > 0){
n++;
x /= 10;
}
}
}
printf("%d\n",n);
return 0;
}

可以看到上述代码又啰嗦又麻烦,而且还只能计算到四位数,进而可以使用while来实现

while:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
* 循环判断
* 当x 大于 0时,使n的值加1
* 然后让x的值除以10(去掉个位数)
* 直到x不满足x>0这个判断,才会跳出while循环*/
#include <stdio.h>

int main() {
int x;
int n = 0;
scanf("%d",&x);
n++;
x /= 10;
while ( x > 0){
n++;
x /= 10;
}
printf("%d\n",n);
return 0;
}

do while:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
* 使用do-while语句来进行循环的一特点就是
* 无论如何都会执行一次循环体
* 所以即便用户输入的值是0,也可以正常计算出位数*/
#include <stdio.h>

int main() {
int x;
scanf("%d", &x);
int n = 0;
do{
x /= 10;
n++;
} while ( x > 0 );
printf("%d", n);
return 0;
}

通过举一反三,让负数也计算其位数的话只需要添加个if判断即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
* 判断x是否大于等于0
* 如果满足上列条件就进行循环
* 否则按负数来计算
* 将x的值变成正整数来继续完成循环体*/
#include <stdio.h>

int main() {
int x;
scanf("%d", &x);
int n = 0;
if ( x >= 0) {
do {
x /= 10;
n++;
} while ( x > 0 );
} else{
x += +x;
do {
x /= 10;
n ++;
}while ( x < 0 );
}
printf("%d", n);
return 0;
}
  1. Log2X

计算x是2的多少次方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* 定义变量x和ret
* 初始化ret为0
* 将x的值赋值给b
* 当x大于1时进入循环体
* 循环体内x的值为x除2,并让ret加1
* 当x不满足大于1时退出循环*/
#include <stdio.h>

int main() {
int x;
int ret = 0;
scanf("%d", &x);
int b = x ;
while ( x > 1){
x /= 2;
ret++;
}
printf("log2 of %d is %d", b, ret);
return 0;
}
  1. 倒计时

输出用户输入到0的所有整数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* 初始化coun的值
* 当count大于0时进入循环体
* 进入循环体后首先让count减1
* 而后输出count的值
* 当count不满足条件判断时结束循环*/
#include <stdio.h>

int main() {
int count = 0;
scanf("%d", &count);
while ( count > 0 ){
count--;
printf("%d\n", count);
}
printf("发射!");
return 0;
}

评论