C语言中的循环语句
约 1454 个字 310 行代码 预计阅读时间 9 分钟
while循环
基本结构
基本语法
表达式为执行循环的判断条件,当表达式为真(不为0)时,执行while
循环内的语句,表达式为假时,不执行while
。并且属于先判断后执行的循环
例如:
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #include <stdio.h>
int main()
{
int i = 0;
while(i < 10)
{
printf("%d ", i);
i++;//最后i的值将为10,但是循环中打印i只会打印到9
}
printf("\n");
printf("%d", i);
return 0;
}
输出结果:
0 1 2 3 4 5 6 7 8 9
10
|
在上面的代码中,i=0
,小于10执行while
循环打印i的值,执行完打印语句后,执行i++
更新i
的值,防止死循环。
总结:
- 在
while
循环中,int i = 0;
语句执行初始化 - 在
while
循环中,i < 10
表达式作为判断 - 在
while
循环中,i++
用于更新i
的值,防止死循环 - 在
while
循环中,循环体语句总是比判断条件少执行一次
while循环与自增操作结合置于判断条件内
C |
---|
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
28
29
30 | #define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
//while循环与自增操作结合置于判断条件内
int i = 0;
while (i++ < 10)
{
printf("%d ", i);//i++先使用后+1,即先比较,比较完之后+1,循环体内语句从1开始打印,一直打印到10,并且循环结束之后i值为11
}
putchar('\n');
printf("%d\n", i);
int j = 0;
while (++j < 10)
{
printf("%d ", j);//j++先+1再使用,即先+1,再比较,循环体内语句从1开始打印,一直打印到9,并且循环结束之后j值为10
}
putchar('\n');
printf("%d\n", j);
return 0;
}
输出结果:
1 2 3 4 5 6 7 8 9 10
11
1 2 3 4 5 6 7 8 9
10
|
for循环
基本结构
C |
---|
| for(初始化表达式;判断表达式;更新表达式)
{
//语句
}
|
基本语法
第二个表达式为执行循环的判断表达式,当判断表达式为真时,执行for
循环;当表达式为假时,不执行for
循环
例如:
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i < 10; i++)
{
printf("%d ", i);
}
return 0;
}
输出结果:
1 2 3 4 5 6 7 8 9
|
在上面的代码中,i=0
,小于10执行for
循环打印i
的值,执行完打印语句后,执行i++
更新i
的值,防止死循环。
总结:
for
循环中,第一个表达式用于循环变量的初始化 for
循环中,第二个表达式用于循环结束条件的判断 for
循环中,第三个表达式用于更新循环变量 for
循环中,循环变量初始化语句一整个循环执行一次 for
循环中,更新循环变量语句在for
循环中执行在for
循环体语句后 for
循环中,如果循环结束条件部分什么也不写表示条件恒成立
for循环与while循环比较
for
循环比while
循环更集中,将循环变量的初始化、循环结束条件的判断和循环变量的更新放在了一个语句中
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | //while循环
int i = 0;//创建循环变量
while(i < 10/*判断条件*/)
{
printf("%d ", i);
i++;//循环变量自增
}
//for循环
int i = 0;//创建循环变量
for(i = 0; i < 10/*判断条件*/; i++/*循环变量自增*/)
{
printf("%d ", i);
}
|
do-while循环
基本结构
基本语法
在进入判断之前,首先会先执行一次循环体,再执行循环判断语句,循环判断为真,执行循环体内语句,循环判断为假,不执行循环体内语句
例如:
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
}while(i < 10);
return 0;
}
输出结果:
1 2 3 4 5 6 7 8 9
|
上面的代码中,首先会在判断之前执行一次循环体,然后再执行循环判断语句,首先打印一遍1,再循环打印2—9的数字。每一次循环中,i++
语句用于更新循环变量i
,而int i = 1;
语句用于创建循环变量i
。
do-while循环与自增操作结合置于判断条件内
C |
---|
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
28
29 | #define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 0;
do
{
printf("%d ", i);
} while (i++ < 10);//i++,先使用后+1,即先判断再+1,故循环从0开始打印,一直打印到10,循环结束i为11
putchar('\n');
printf("%d\n", i);
int j = 0;
do
{
printf("%d ", j);
} while (++j < 10);//++j,先+1再使用,即先+1再判断,故循环从0开始打印,一直打印到9,循环结束j为10
putchar('\n');
printf("%d\n", j);
return 0;
}
输出结果:
0 1 2 3 4 5 6 7 8 9 10
11
0 1 2 3 4 5 6 7 8 9
10
|
循环中的break与continue
循环中break和continue中的作用
break
:永久终止循环,直接跳出当前循环,再执行当前循环以外的语句
continue
:跳过本次循环中continue
后面的代码
while中的break与continue
break
在while
循环中,break
用于跳出当前循环,并执行while
循环以外的语句
例如:
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
{
break;
}
printf("%d ", i);
i++;
}
printf("结束");
return 0;
}
|
在上面的代码中,当i
等于5时,if
表达式为真,执行if
语句中的break
,跳出当前的while
循环,不再执行循环体内的printf
语句与更新循环变量i
语句,而执行循环体外的printf
语句。
嵌套while循环中的break
在嵌套while
循环中,break
会跳出包括break
语句的一层循环
例如:
C |
---|
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
28
29
30
31
32
33
34
35
36
37 | #include <stdio.h>
int main()
{
int i = 0;
while(i <= 10)
{
int n = 0;
printf("i = %d ", i);
while(n <= 6)
{
if(i == 5)
{
break;
}
printf("n = %d ", n);
n++;
}
printf("\n");
i++;
}
printf("结束");
return 0;
}
输出结果:
i = 0 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 1 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 2 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 3 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 4 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 5
i = 6 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 7 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 8 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 9 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
i = 10 n = 0 n = 1 n = 2 n = 3 n = 4 n = 5 n = 6
|
当i
为5
时不打印n
的值,即跳出了内层while
循环执行外层while
循环中的语句。
continue
在while
循环中,continue
用于跳过当前循环中continue
后面的语句,但是注意,如果更新循环变量语句在cotinue
后面会造成死循环
例如:
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
{
continue;
}
printf("%d ", i);
i++;
}
return 0;
}
|
在上面的代码中,当i
等于5时执行continue
语句,跳过当前循环中的printf
语句和更新循环变量语句i++
,并执行循环判断表达式,此时由于i
中的值始终为5,导致循环判断表达式始终为真,进而导致进入死循环,所以在while
语句中需要用continue
语句的时候需要注意更新循环变量语句需要在continue
语句前面。
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
i++;//更新循环变量语句需要在continue语句前面
if(i == 5)
{
continue;
}
printf("%d ", i);
}
return 0;
}
输出结果:
2 3 4 6 7 8 9 10 11
|
for循环中的break与continue
break
for
循环中的break
语句与while
循环中的break
语句作用效果一样。
嵌套for循环中的break
嵌套for
循环中的break
语句与嵌套while
循环中的break
语句作用效果一样
continue
由于for
循环中的更新循环变量表达式在for
表达式内,而不是在循环体内,所以for
循环中的continue
语句效果和while
循环中的continue
语句会有一些差异
例如:
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
if(i == 5)
{
continue;
}
printf("%d ", i);
}
printf("结束");
return 0;
}
|
与while
循环不同,上面的代码并没有进入死循环,而是打印了除5以外的1-10的数字。
由于更新循环变量表达式i++
在for
循环表达式中,而不是在循环体内,所以执行continue
语句后会执行更新循环变量表达式i++
,从而不会造成死循环。
do-while循环中的break与continue
break
do-while
循环中的break
语句与while
循环中的break
语句作用效果一样。
continue
do-while
循环中的continue
语句与while
循环中的continue
语句作用效果一样。
goto语句
作用
goto
语句可以实现在同一个函数内跳转到设置好的标记处
例如:
C |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #include <stdio.h>
int main()
{
printf("Hello");
goto next;
printf("my");
next:
printf("world");
return 0;
}
|
在上面的代码中,先执行printf
语句,接下来遇到goto
语句,标记为next
,跳到并执行next
标记下的printf
语句,整个过程中不执行printf("my");
,在多层循环中,若想一次性跳出所有循环可以用goto
循环
循环体内的变量可否访问
while循环
C |
---|
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
28 | //while循环中的变量
#include <stdio.h>
int main()
{
int i = 0;//属于main函数中的变量,整个main函数中均可以使用
while (i <= 10)
{
int n = 0;
printf("%d ", i);
printf("\n");
while (n < 10)
{
int j = 0;//定义在内层循环的变量
printf("n = %d ", n);
printf("i = %d", i);
}
printf("\n");
//printf("j = %d ", j);
//j变量是在内层循环中定义的变量,外层循环中无法访问
}
printf("i = %d ", i);
/*n与j变量是在循环中定义的变量,在循环体外无法访问*/
//printf("n = %d ", n);
//printf("j = %d ", j);
return 0;
}
|
for循环
C |
---|
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 | #define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 0;//属于main函数中的变量,整个main函数中均可以使用
for (i = 1; i <= 10; i++)
{
printf("i = %d ", i);
for (int n = 0; n <= 10; n++)//定义在循环表达式的变量
{
int j = 0;//定义在内层循环的变量
printf("n = %d", n);
printf("i = %d", i);
}
//printf("n = %d", n);变量n虽然是在循环表达式中定义的变量,但是仍然无法在内层外访问
}
printf("i = %d", i);
/*n变量和j变量定义在循环内部,在循环外无法访问*/
//printf("n = %d", n);
//printf("j = %d", j);
return 0;
}
|
do-while循环
与while
循环相同