目录
前言:
选择结构:
while:
for:
do...while:
结束语:
前言:
在前面小编与大家一起学习了分支语句中的选择结构,接下来就和小编一起来学习分支语句中的循环结构吧!
选择结构:
选择结构主要分为三种:while,do...while,for。
while:
语法结构:
while (表达式) 循环语句;
简单的一个while的代码如下所示:
#includeint main() { while (1) printf("hehen"); return 0; }//该代码会使得代码结果进入一个死循环中
使用while循环在屏幕上打印1~10代码如下所示:
#includeint main() { int i = 1;//初始化 while (i <= 10)//判断部分 { printf("%d ", i); i++;//调整部分 } return 0; }
代码结果截图如下所示:
在while中break用于永久的终止循环:
代码如下所示:
#includeint main() { int i = 1; while (i <= 10) { if (i == 5) break; printf("%d ", i); i++; } return 0; }
结果如下截图所示:
在while中continue的作用是跳过本次循环continue后面的代码,直接进入判断部分看是否进行下一次循环。
代码如下所示:
#includeint main() { int i = 1; while (i <= 10) { if (i == 5) continue;//使得程序进入死循环 printf("%d", i);//当i == 5的时候直接跳过下面两条返回到上面while的判断部分 i++; } }
结果如下截图所示:
while循环的小练习:
在屏幕上获取一个字符之后,再在屏幕上把这个字符给打印出来。
具体代码如下所示:
#includeint 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 #includeint 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码值存储的,故返回的是整形。
代码如下所示:
#includeint main() { int ch = 0; while ((ch = getchar()) != EOF) { if (ch < '0' || ch > '9') continue; putchar(ch); } return 0; }
结果如下截图所示:
for:
语法结构:
其中初始化只执行一次
打印1~10代码如下所示:
#includeint main() { int i = 0; for (i = 1; i <= 10; i++) { printf("%d ", i); } return 0; }
结果如下图所示:
for中的break也是终止循环
代码如下所示:
#includeint main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) break; printf("%dn", i); } return 0; }
结果截图如下所示:
for中的break跳过本次循环
代码如下所示:
#includeint main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) continue;//当i==5的时候跳过下面的代码进行下一次循环 printf("%dn", i); } return 0; }
结果截图如下所示:
for中的continue和while中的continue的区别:
for中的continue跳到了调整部分,不会使得代码死循环。
while中的continue可能会跳过调整部分使得代码陷入死循环。
在for中调整部分可以放在大括号内代码如下所示:
#includeint main() { int i = 0; for (i = 1; i <= 10; ) { printf("%dn", i); i++; } return 0; }
结果如下截图所示:
建议:
1.不可在for循环体内修改循环变量,防止for失去控制。
代码如下所示:
#includeint main() { int i = 0; for (i = 1; i <= 10; i++) { printf("%dn", i); i = 5;//改变循环变量 } return 0; }
结果如下截图所示
2.建议for语句的循环控制变量的语句采用“前闭后开区间”的写法。
代码如下所示:
#includeint main() { int arr[10] = { 0 }; int i = 0; for (i = 0; i < 10; i++)//前闭后开 { printf("%dn", arr[i]); } return 0; }
结果截图如下所示:
在for中初始化、判断、调整部分均可以省略。
判断部分省略后,恒为真值会导致死循环,具体代码如下所示:
#includeint main() { //判断部分的省略,判断部分恒为真 for (;;) { printf("hehen"); } return 0; }
结果截图如下所示:
注意判断部分是“=”还是“==”
“=”为赋值号 “==”才是判断号
代码如下所示:
#includeint main() { int i = 0; int k = 0; for (i = 0, k = 0; k = 0; i++, k++) k++; printf("%dn", k); return 0; }
该代码的执行次数为0次
do...while:
语法结构:
do
循环语句;
while (表达式)
while和do...while的区别:
while是先判断再执行而do...while是先执行再判断。
打印1~10代码如下所示:
#includeint main() { int i = 1; do { printf("%d ", i); i++; } while (i <= 10); return 0; }
结果如下截图所示:
do...while中的break:
代码如下所示:
#includeint main() { int i = 1; do { if (i == 5) break; printf("%d ", i); i++; } while (i <= 10); return 0; }
结果截图如下所示:
do...while中的continue:
具体代码如下所示:
#includeint main() { int i = 1; do { if (i == 5) break; printf("%d ", i); i++; } while (i <= 10); return 0; }
结果如下截图所示:
这与while中的continue一致。
do...while的特点是:代码至少执行一次。
结束语:
这次的分享就到这里啦!我们这次主要和大家一起学习了分支语句中的循环结构,下一次小编将针对于这次的学习进行一次习题练习,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)



