while循环
C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。
while 语句的语法结构和 if 语句⾮常相似。
if 和 while的对⽐
1 if(表达式)
2 语句;
3
4
5 while(表达式)
6 语句;//如果循环体想包含更多的语句,可以加上⼤括号
1 //代码1
2 #include <stdio.h>
3
4 int main()
5 {
6 if(1)
7 printf("hehe\n"); //if后边条件满⾜,打印⼀次hehe
8 return 0;
9 }
1 //代码2
2 #include <stdio.h>
3
4 int main()
5 {
6 while(1)
7 printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe
8 return 0;
9
while语句的执⾏流程
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语
句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
while 循环的实践
1 #include <stdio.h>
2 int main()
3 {
4 int i = 1;
5 while(i<=10)
6 {
7 printf("%d ", i);
8 i = i+1;
9 }
10 return 0;
11 }
练习
输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5
题⽬解析
1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如:
n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。
1 #include <stdio.h>
2
3 int main()
4 {
5 int n = 0;
6 scanf("%d", &n);
7 while(n)
8 {
9 printf("%d ", n%10);
10 n /= 10;
11 }
12 return 0;
13 }
for循环
语法形式
1 for(表达式1; 表达式2; 表达式3)
2 语句;//如果循环体想包含更多的语句,可以加上⼤括号
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整
for循环的执⾏流程
⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果
==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式
3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继
续。
整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。
for循环的实践
1 #include <stdio.h>
2 int main()
3 {
4 int i = 0;
5 for(i=1; i<=10; i++)
6 {
7 printf("%d ", i);
8 }
9 return 0;
10 }


for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部
分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。
练习
1 #include <stdio.h>
2 int main()
3 {
4 int i = 0;
5 int sum = 0;
6 for(i=1; i<=100; i++)
7 {
8 if(i % 3 == 0)
9 sum += i;
10 }
11 printf("%d\n", sum);
12 return 0;
13 }
14 //⼩ 的优化
15 //如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
16 #include <stdio.h>
17 int main()
18 {
19 int i = 0;
20 int sum = 0;
21 for(i=3; i<=100; i+=3)
22 {
23sum += i;
24 }
25 printf("%d\n", sum);
26 return 0;
27 }