前言:
在C语言编程中,循环语句和循环分支语句是非常重要的概念。它们为程序提供了重复执行特定代码块的能力,使得程序能够更加灵活和高效地处理各种情况。本文将详细介绍C语言中的循环语句(包括while、do-while和for循环)以及循环分支语句(包括break和continue语句),并提供示例来更好地理解这些概念
循环语句
1.【while循环】
循环条件是一个布尔表达式。只要循环条件为真,循环体就会一直执行。当循环条件为假时,循环终止,程序将继续执行循环之后的代码。
<while循环语法>
while (循环条件) {
// 循环体
}
<while循环的执行流程>
- 首先,将循环变量初始化
- 在对循环条件进行判断
- 如果循环条件为真,则执行循环体内的代码块,然后再次判断循环条件的真假
- 如果循环条件为假,则跳出循环,继续执行循环之后的代码
<while循环的示例>
下面是一个利用while循环打印1到10的和的示例:
#include <stdio.h>
int main()
{
int i = 1; // 初始化计数器变量
while (i <= 10) // 循环条件:i小于等于10
{
printf("%d\n", i); // 打印当前计数器变量的值
i++; // 更新计数器变量,以便最终满足循环条件
}
return 0;
}
在这个示例中,初始化了一个计数器变量i,并使用while循环来打印1到10的数字。循环条件是i小于等于10,只要这个条件为真,循环体就会一直执行。在循环体内部,我们首先打印当前的计数器变量i的值,然后递增i的值。当i的值递增到11时,循环条件不再满足,循环终止。最终,我们将会得到输出结果为1到10的数字序列
2.do-while循环
<do-while循环语法>
do {
// 循环体
} while (循环条件);
与while循环不同的是,do-while循环会先执行一次循环体,然后再检查循环条件。这确保循环体至少会被执行一次。
<do-while循环的执行流程>
- 首先执行循环体中的操作
- 检查条件。如果条件为真,继续执行循环体中的操作,直到条件变为假为止。
- 当循环条件为假,则跳出循环,继续执行循环之后的代码
<do-while循环的示例>
以下是一个使用do-while循环的简单示例,该示例将打印1到10的数字:
#include <stdio.h>
int main()
{
int i = 1; // 初始化计数器变量
do
{
printf("%d\n", i); // 打印当前计数器变量的值
i++; // 更新计数器变量
} while (i <= 10); // 循环条件:i小于等于10
return 0;
}
在这个示例中,使用do-while循环来打印1到10的数字。首先,我们初始化了一个计数器变量i。然后,do-while循环首先执行循环体内的操作(打印当前的计数器变量i的值),然后检查循环条件(i小于等于10)。只要这个条件为真,循环就会继续执行。当i的值递增到11时,循环条件不再满足,循环终止。因此,即使条件一开始就为假,do-while循环也会至少执行一次循环体中的操作,输出结果为1到10的数字序列。
3. for循环
<for循环语法>
for (初始化表达式; 循环条件; 更新表达式) {
// 循环体
}
在这个语法中,初始化表达式用于初始化循环变量,循环条件是一个布尔表达式,更新表达式用于更新循环变量。
<for循环的执行流程>
- 执行初始化表达式
- 检查循环条件,如果为真,则执行循环体,然后执行更新表达式,再次检查循环条件
- 如果循环条件为假,则退出循环
<for循环的示例>
以下是一个使用for循环的简单示例,该示例将打印1到10的数字:
#include <stdio.h>
int main()
{
for (int i = 1; i <= 10; i++)
{
printf("%d\n", i); // 打印当前计数器变量的值
}
return 0;
}
在这个示例中,使用for循环来打印1到10的数字。for循环的结构包括三个部分:初始化表达式(int i = 1),循环条件(i <= 10),以及更新表达式(i++)。循环首先执行初始化表达式,然后检查循环条件。只要循环条件为真,就执行循环体内的操作(打印当前的计数器变量i的值),然后执行更新表达式。当循环条件不再满足时,循环终止。因此,for循环也能够打印出1到10的数字序列
循环分支语句
1. break语句
break语句用于立即终止循环,并跳出循环体。它通常用于在满足某个条件时提前结束循环。
当在不同类型的循环中使用break
语句时,其作用略有不同。下面是在不同类型的循环中使用break
语句的示例:
在for循环中使用
#include <stdio.h>
int main()
{
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
break; // 当i等于5时跳出循环
}
printf("%d\n", i);
}
return 0;
}
在这个示例中,当i
的值等于5时,break
语句会导致程序跳出循环,因此只会打印出1到4的数字
在while循环中使用
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
break; // 当i等于5时跳出循环
}
printf("%d\n", i);
i++;
}
return 0;
}
在这个示例中,当i
的值等于5时,break
语句会导致程序跳出循环,因此只会打印出1到4的数字
在do-while循环中使用
#include <stdio.h>
int main()
{
int i = 1;
do {
if (i == 5)
{
break; // 当i等于5时跳出循环
}
printf("%d\n", i);
i++;
} while (i <= 10);
return 0;
}
在这个示例中,当i
的值等于5时,break
语句会导致程序跳出循环,因此只会打印出1到4的数字
2. continue语句
continue语句用于立即跳过当前循环中剩余的代码,直接进入下一次循环。它通常用于在某些条件下跳过部分循环代码的执行。
当在不同类型的循环中使用continue
语句时,其作用略有不同。下面是在不同类型的循环中使用continue
语句的示例,并对它们进行说明:
在for循环中使用
#include <stdio.h>
int main()
{
for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
continue; // 当i等于3时跳过本次循环
}
printf("%d\n", i);
}
return 0;
}
在这个示例中,当i
的值等于3时,continue
语句会导致程序跳过本次循环的剩余部分,因此不会打印出3,而是打印出1、2、4和5
在while循环中使用
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 5)
{
if (i == 3)
{
i++; // 需要在continue语句之前增加i的值,以避免无限循环
continue; // 当i等于3时跳过本次循环
}
printf("%d\n", i);
i++;
}
return 0;
}
在这个示例中,当i
的值等于3时,continue
语句会导致程序跳过本次循环的剩余部分,因此不会打印出3,而是打印出1、2、4和5
在do-while循环中使用
#include <stdio.h>
int main()
{
int i = 1;
do {
if (i == 3)
{
i++; // 需要在continue语句之前增加i的值,以避免无限循环
continue; // 当i等于3时跳过本次循环
}
printf("%d\n", i);
i++;
} while (i <= 5);
return 0;
}
在这个示例中,当i
的值等于3时,continue
语句会导致程序跳过本次循环的剩余部分,因此不会打印出3,而是打印出1、2、4和5
总结:猜数字游戏
利用循环写一个简单的猜数字小游戏:
第一种方法:
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
// 定义猜数字游戏的函数
void youxi()
{
// 生成1到100之间的随机数作为要猜的数字
int r = rand() % 100 + 1;
printf("请输入你所猜测的数字->");
// 循环,让玩家猜数字,直到猜中为止
while (1)
{
int b;
scanf("%d", &b);
if (r > b)
{
printf("牢底,太小气\n"); // 提示玩家猜的数字太小
}
else if (r < b)
{
printf("牢底,太豪了\n"); // 提示玩家猜的数字太大
}
else
{
printf("牢底,有实力的\n"); // 猜中数字,游戏结束
break;
}
}
}
// 显示游戏主菜单的函数
void mianban()
{
printf("********************\n");
printf("******1.开始按1*****\n");
printf("******2.结束按0*****\n");
printf("********************\n");
}
// 主函数
int main()
{
int a = 0;
srand((unsigned int)time(NULL)); // 用当前时间初始化随机数种子
do
{
next: // 设置标签,用于goto语句
nexy: // 设置标签,用于goto语句
mianban(); // 显示游戏菜单
scanf("%d", &a); // 接收用户输入的选择
switch (a)
{
case 1:
printf("猜数字游戏开始->\n");
youxi(); // 调用猜数字游戏函数
goto nexy; // 返回菜单
break;
case 0:
printf("退出游戏\n"); // 提示退出游戏
break;
default:
printf("输入错误,请重新输入\n"); // 提示输入错误
goto next; // 返回菜单
}
break;
} while (a != 0); // 当用户选择0时退出游戏
return 0;
}
第二种:
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
// 定义猜数字游戏的函数
void youxi()
{
// 生成1到100之间的随机数作为要猜的数字
int r = rand() % 100 + 1;
printf("请输入你所猜测的数字->");
// 循环,让玩家猜数字,直到猜中为止
while (1)
{
int b;
scanf("%d", &b);
if (r > b)
{
printf("牢底,太小气\n"); // 提示玩家猜的数字太小
}
else if (r < b)
{
printf("牢底,太豪了\n"); // 提示玩家猜的数字太大
}
else
{
printf("牢底,有实力的\n"); // 猜中数字,游戏结束
break;
}
}
}
// 主函数
int main()
{
int a = 0;
srand((unsigned int)time(NULL)); // 用当前时间初始化随机数种子
for (;;)
{
printf("********************\n");
printf("******1.开始按1*****\n");
printf("******2.结束按0*****\n");
printf("********************\n");
scanf("%d", &a); // 接收用户输入的选择
if (a == 1)
{
printf("猜数字游戏开始->\n");
youxi(); // 调用猜数字游戏函数
}
else if (a == 0)
{
printf("退出游戏\n"); // 提示退出游戏
break;
}
else
{
printf("输入错误,请重新输入\n"); // 提示输入错误
}
}
return 0;
}
-
#include<time.h>
和#include<stdlib.h>
:这两行是包含标准C库中的头文件,分别用于时间函数和随机数函数。 -
void youxi()
函数:这是定义的一个函数,用于实现猜数字的游戏逻辑。在函数内部,使用rand()
函数生成一个1到100之间的随机数作为要猜的数字。然后使用while
循环来让玩家猜数字,根据玩家猜的数字和随机数的大小关系,输出不同的提示信息,直到猜中为止。 -
void mianban()
函数:这是定义的另一个函数,用于显示游戏的主菜单。在函数内部,打印出游戏菜单的选项。 -
int main()
函数:这是程序的入口函数。在这个函数中,首先通过srand((unsigned int)time(NULL));
来初始化随机数种子,以确保每次运行程序时生成的随机数不同。 -
使用
do-while
循环,不断显示游戏菜单并根据用户的选择来执行相应的操作。当用户选择1时,调用youxi()
函数开始猜数字游戏;当用户选择0时,退出游戏;如果用户输入其他数字,则提示输入错误,并重新显示菜单。 -
goto
语句:在代码中使用了goto
语句来实现用户输入错误时的重新输入,这种用法在实际的程序开发中并不常见,一般建议使用循环结构来代替goto
语句。