目录
前言:
在前面小编与大家一起学习了分支语句中的选择结构,接下来就和小编一起来学习分支语句中的循环结构吧!
选择结构:
选择结构主要分为三种:while,do...while,for。
while:
语法结构:
while (表达式)
循环语句;
简单的一个while的代码如下所示:
#include<stdio.h>
int main() {
while (1)
printf("hehe\n");
return 0;
}//该代码会使得代码结果进入一个死循环中
使用while循环在屏幕上打印1~10代码如下所示:
#include<stdio.h>
int main() {
int i = 1;//初始化
while (i <= 10)//判断部分
{
printf("%d ", i);
i++;//调整部分
}
return 0;
}
代码结果截图如下所示:
在while中break用于永久的终止循环:
代码如下所示:
#include<stdio.h>
int main() {
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ", i);
i++;
}
return 0;
}
结果如下截图所示:
在while中continue的作用是跳过本次循环continue后面的代码,直接进入判断部分看是否进行下一次循环。
代码如下所示:
#include<stdio.h>
int main() {
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;//使得程序进入死循环
printf("%d", i);//当i == 5的时候直接跳过下面两条返回到上面while的判断部分
i++;
}
}
结果如下截图所示:
while循环的小练习:
在屏幕上获取一个字符之后,再在屏幕上把这个字符给打印出来。
具体代码如下所示:
#include<stdio.h>
int main() {
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
//ctrl+z退出循环
}
其中getchar是获取一个字符,putchar是输出一个字符。
如果getchar获取字符失败则返回的是EOF。
其中EOF文件结束的标志(end of file)相当于-1
代码结截图如下所示:
如果要退出程序则需要输入ctrl+z即可。
那么我们来思考一下getchar是如何获取这个字符的呢?
其实getchar是通过电脑中的缓冲区来获取字符的,键盘在输入字符后将它们存储在缓冲区中,然后getchar通过缓冲区在来读取字符,一次只读取一个字符。
先读取A在读取\n。
示例代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);//数组名即地址
printf("请确认密码(Y/N):>");
//清理缓冲区
//getchar();//处理'\n'
//清理缓冲区中的多个字符
int tmp = 0;
while ((tmp = getchar()) != '\n')
{
;
}
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("不成功\n");
}
return 0;
}
结果如下截图所示:
其中我们要在确定密码的时候清理缓冲区,否则getchar会直接在缓冲区中拿到“\n”,直接返回不成功:
清理多个字符的缓冲区我们用的代码是:
int tmp = 0;
while ((tmp = getchar()) != '\n')
{
;
}
注意:getchar的返回值是整形, 它读取虽然是字符,但是字符是以ASCII码值存储的,故返回的是整形。
代码如下所示:
#include<stdio.h>
int main() {
int ch = 0;
while ((ch = getchar()) != EOF)
{
if (ch < '0' || ch > '9')
continue;
putchar(ch);
}
return 0;
}
结果如下截图所示:
for:
语法结构:
其中初始化只执行一次
打印1~10代码如下所示:
#include<stdio.h>
int main() {
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
结果如下图所示:
for中的break也是终止循环
代码如下所示:
#include<stdio.h>
int main() {
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d\n", i);
}
return 0;
}
结果截图如下所示:
for中的break跳过本次循环
代码如下所示:
#include<stdio.h>
int main() {
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;//当i==5的时候跳过下面的代码进行下一次循环
printf("%d\n", i);
}
return 0;
}
结果截图如下所示:
for中的continue和while中的continue的区别:
for中的continue跳到了调整部分,不会使得代码死循环。
while中的continue可能会跳过调整部分使得代码陷入死循环。
在for中调整部分可以放在大括号内代码如下所示:
#include<stdio.h>
int main() {
int i = 0;
for (i = 1; i <= 10; )
{
printf("%d\n", i);
i++;
}
return 0;
}
结果如下截图所示:
建议:
1.不可在for循环体内修改循环变量,防止for失去控制。
代码如下所示:
#include<stdio.h>
int main() {
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d\n", i);
i = 5;//改变循环变量
}
return 0;
}
结果如下截图所示
2.建议for语句的循环控制变量的语句采用“前闭后开区间”的写法。
代码如下所示:
#include<stdio.h>
int main() {
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)//前闭后开
{
printf("%d\n", arr[i]);
}
return 0;
}
结果截图如下所示:
在for中初始化、判断、调整部分均可以省略。
判断部分省略后,恒为真值会导致死循环,具体代码如下所示:
#include<stdio.h>
int main() {
//判断部分的省略,判断部分恒为真
for (;;)
{
printf("hehe\n");
}
return 0;
}
结果截图如下所示:
注意判断部分是“=”还是“==”
“=”为赋值号 “==”才是判断号
代码如下所示:
#include<stdio.h>
int main() {
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
k++;
printf("%d\n", k);
return 0;
}
该代码的执行次数为0次
do...while:
语法结构:
do
循环语句;
while (表达式)
while和do...while的区别:
while是先判断再执行而do...while是先执行再判断。
打印1~10代码如下所示:
#include<stdio.h>
int main() {
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
结果如下截图所示:
do...while中的break:
代码如下所示:
#include<stdio.h>
int main() {
int i = 1;
do
{
if (i == 5)
break;
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
结果截图如下所示:
do...while中的continue:
具体代码如下所示:
#include<stdio.h>
int main() {
int i = 1;
do
{
if (i == 5)
break;
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
结果如下截图所示:
这与while中的continue一致。
do...while的特点是:代码至少执行一次。
结束语:
这次的分享就到这里啦!我们这次主要和大家一起学习了分支语句中的循环结构,下一次小编将针对于这次的学习进行一次习题练习,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)