C语言--各种循环详解(超详细)

2025-10-25 14:41:45 528

一.为什么要学习C语言循环呢?

在C语言之中,运用好循环语句就是拥有了一个强大的武器,它可以帮助你完成许多工作.

有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

二.循环语句都有哪些呢?

if-else for switch -case do-while while 这些都是很常见的,我们可以运用它们做很多事情!

除了这些还有 goto语句 continue;

三.接下来正文开始

1.if--else的使用与介绍

可以简单理解为

if(关系表达式){

语句体1;

}

else{

语句体2;

}

简单理解为 -> if 如果(你喜欢C语言)------(你可以做某事)

else 否则---->(你可以做某事)

用来做一个判断:

我们做一个例子,用来理解;

以下实例判断用户输入的整数是奇数还是偶数.

#include

int main()

{

int number;

printf("请输入一个整数: ");

scanf("%d", &number);

// 判断这个数除以 2 的余数

if(number % 2 == 0)

printf("%d 是偶数。", number);

else

printf("%d 是奇数。", number);

return 0;

}

在这里if--else的作用就是用来做一个判断,如果number % 2 == 0成立,那么他就是偶数,反之则是奇数.

1.2在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。

if...else if...(else)语句:

⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码

#include

int main()

{

int num = 0;

scanf("%d", &num);

if(num == 0)

printf("输⼊的数字是0\n");

else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构

printf("输⼊的数字是正数\n");

else

printf("输⼊的数字是负数\n");

return 0;

}

通过if--else的连用来构成判断 ;

除了这些,我们还要注意一些问题-->如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

2.switch的使用与介绍

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。

switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重

的 else if 改成更易⽤、可读性更好的形式。

我们可以理解为:

switch(表达式)

{

case 常量表达式1:语句1;

case 常量表达式2:语句2;

...

default:语句n+1;

}

意思是先计算表达式的值,再逐个和 case 后的常量表达式比较,若不等则继续往下比较,若一直不等,则执行 default 后的语句;若等于某一个常量表达式,则从这个表达式后的语句开始执行,并执行后面所有 case 后的语句。

与 if 语句的不同:if 语句中若判断为真则只执行这个判断后的语句,执行完就跳出 if 语句,不会执行其他 if 语句;而 switch 语句不会在执行判断为真后的语句之后跳出循环,而是继续执行后面所有 case 语句。在每一 case 语句之后增加 break 语句,使每一次执行之后均可跳出 switch 语句,从而避免输出不应有的结果。

同样我们来举一个例子:

#include

int main ()

{

/* 局部变量定义 */

char grade = 'B';

//这里可以用scanf来输入

switch(grade)

{

case 'A' :

printf("很棒!\n" );

break;

case 'B' :

case 'C' :

printf("做得好\n" );

break;

case 'D' :

printf("您通过了\n" );

break;

case 'F' :

printf("最好再试一下\n" );

break;

default :

printf("无效的成绩\n" );

}

printf("您的成绩是 %c\n", grade );

return 0;

}

以上的代码通过字符来进行选择:

我们也可以使用数字来判别:

输⼊⼀个1~7的数字,打印对应的星期⼏?

#include

int main()

{

int day = 0;

scanf("%d", &day);

switch(day)

{

case 1:

printf("星期⼀\n");

break;

case 2:

printf("星期⼆\n");

break;

case 3:

printf("星期三\n");

break;

case 4:

printf("星期四\n");

break;

case 5:

printf("星期五\n");

break;

case 6:

printf("星期六\n");

break;

case 7:

printf("星期天\n");

break;

}

return 0;

}

switch 语句必须遵循下面的规则:

switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?

其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。不过我们通常是把 default ⼦句放在最后处理的。

3.while 的使用与介绍

C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。

C 语言中 while 循环的语法:

while(condition)

{

statement(s);

}

在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。

condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。

接下来我们举一例子:

练习:在屏幕上打印1~10的值?

参考代码:

#include

int main()

{

int i = 1;

while(i<=10)

{

printf("%d ", i);

i = i+1;

}

return 0;

}

通过代码的实现我们可以清楚的了解while的语法,还有一些细节需要我们去注意;

while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

1、程序先判断A是否为真,如果为真则执行循环体B

2、当执行完循环体后再回到第1步

3、当表达式A为假时结束循环

while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环 循环体如包括有一个以上的语句,则必须用{}括起来, 组成复合语句。 应注意循环条件的选择以避免死循环。

4.do-while 的使用与介绍

在循环语句中 do while 语句的使⽤最少,它的语法如下:

C 语言中 do...while 循环的语法:

do

{

statement(s);

}while( condition );

请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳

出循环;

⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表

达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的

结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。

所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅

举个栗子:

#include

int main ()

{

/* 局部变量定义 */

int a = 10;

/* do 循环执行,在条件被测试之前至少执行一次 */

do

{

printf("a 的值: %d\n", a);

a = a + 1;

}while( a < 20 );

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

a 的值: 10

a 的值: 11

a 的值: 12

a 的值: 13

a 的值: 14

a 的值: 15

a 的值: 16

a 的值: 17

a 的值: 18

a 的值: 19

理解起来也是相对的简单;

5.for的使用与介绍

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

for(表达式1; 表达式2; 表达式3)

语句;

//如果循环体想包含更多的语句,可以加上⼤括号

#include

int main ()

{

/* for 循环执行 */

for( int a = 10; a < 20; a = a + 1 )

{

printf("a 的值: %d\n", a);//表达式4

}

return 0;

}

//在for循环内执行顺序是 表达式1,表达式2,表达式4,表达式3

在for循环内执行顺序是 表达式1,表达式2,表达式4,表达式3

for(表达式1;表达式2;表达式3)语句块;先执行"表达式1",并且程序只会执行①次"表达式1"。注:"表达式1"仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句!接着程序判断条件"表达式2"的结果是否为"真",为"真"时,程序就执行语句块的内容。注:"表达式2" 一般是一个关系表达式,决定了是否还要继续下次循环,称为"循环条件"。语句块执行完的话,接下来会执行"表达式3"! 注:"表达式3" 很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得"不成立"。然后重复 第二步骤 和 第三步骤,直到 "表达式2" 判断条件不成立就退出循环!

[for]语句最简单的应用形式也是最容易理解的形式如下 :

for(循环变量赋初值;循环条件;循环变量增量) 语句

循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值;循环条件是一个关系表达式,它用来决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后按什么方式变化;

举个栗子

计算1~100之间3的倍数的数字之和

#include

int main()

{

int i = 0;

int sum = 0;

for(i=1; i<=100; i++)

{

if(i % 3 == 0)

sum += i;

}

printf("%d\n", sum);

return 0;

}

//⼩⼩的优化

//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断

#include

int main()

{

int i = 0;

int sum = 0;

for(i=3; i<=100; i+=3)

{

sum += i;

}

printf("%d\n", sum);

return 0;

}

6.break的使用与介绍

C 语言中 break 语句有以下两种用法:

当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。它可用于终止 switch 语句中的一个 case。如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。

C 语言中 break 语句的语法:

break;

#include

int main ()

{

/* 局部变量定义 */

int a = 10;

/* while 循环执行 */

while( a < 20 )

{

printf("a 的值: %d\n", a);

a++;

if( a > 15)

{

/* 使用 break 语句终止循环 */

break;

}

}

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

a 的值: 10

a 的值: 11

a 的值: 12

a 的值: 13

a 的值: 14

a 的值: 15

7.continue的使用与介绍

C 语言中的 continue 语句有点像 break 语句。但它不是强制终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。

对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 while 和 do...while 循环,continue 语句重新执行条件判断语句。

C 语言中 continue 语句的语法:

continue;

#include

int main ()

{

/* 局部变量定义 */

int a = 10;

/* do 循环执行 */

do

{

if( a == 15)

{

/* 跳过迭代 */

a = a + 1;

continue;

}

printf("a 的值: %d\n", a);

a++;

}while( a < 20 );

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

a 的值: 10

a 的值: 11

a 的值: 12

a 的值: 13

a 的值: 14

a 的值: 16

a 的值: 17

a 的值: 18

a 的值: 19

8.goto语句的使用与介绍

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数

内跳转到设置好的标号处。

例如:

#include

int main()

{

printf("hehe\n");

goto next:

printf("haha\n");

next:

printf("跳过了haha的打印\n");

return 0;

}

goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出

使⽤ goto 就⾮常的⽅便了。

for(...)

{

for(...)

{

for(...)

{

if(disaster)

goto error;

}

error:

//...

本来 for 循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套

就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。