• 循环
  • 循环三要素
    • 死循环
    • 可控循环
    • 可控循环的三要素
  • while “当”型循环
    • 语法结构及流程
    • 解析
    • 代码演示
  • do while“直到”型循环
    • 语法及流程
    • 解析
    • 代码演示
  • while/do while 综合案例
    • do while 代码演示
    • while 代码演示
  • do while 的争议
  • for “列表”型循环
    • 语法结构及流程
    • 解析
    • 代码演示
    • for(;;)是 for 吗?
    • for 与逗号表达式
  • 循环的嵌套
    • 嵌套的语法格式
    • 循环嵌套while 版
    • 循环嵌套do while 版
    • 循环嵌套for 版
  • 循环建议
    • 先外后内的循环嵌套写法
    • 半开半闭区间写法
  • 嵌套的优化
  • 循环小结

循环

需要多次重复执行一个或多个任务的问题考虑使用循环来解决。

三大循环样式不一样,但是本质是一样的。

循环三要素

死循环

#include <stdio.h>
#include <windows.h>
int main()
{while (1) {printf("xxxxxxxxxxxxx\n");Sleep(1000);}return 0;
}

运行结果为:

可控循环

#include <stdio.h>
#include <windows.h>
int main()
{int i = 10;           //循环变量初始化while (i > 0)       //循环终止条件{printf("xxxxxxxxxx\n");Sleep(1000);i--;          //有使循环趋于结束的语句}return 0;
}

运行结果为:

打印十次之后就会跳出循环。

可控循环的三要素

循环三要素:
循环变量初始化, 循环变量的变化(趋向终止条件), 循环终止条件。
要做到可控三个条件缺一不可。

while “当”型循环

只有条件为真,才可能向下执行。有可能一次都不执行

语法结构及流程

while (表达式)
{
语句;
}

解析

计算表达式的值,当值为真(非 0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。

代码演示

用 while 语句求 1~100 所有整数的和。
#include <stdio.h>
int main(void)
{
int i; int sum = 0;
i = 0;
while (i <= 100)
{
sum += i;
i++;
}
printf(“sum = %d\n”, sum);
return 0;
}
运行结果为:

do while“直到”型循环

直到条件为假,才终止循环。
do while循环至少执行一次。

语法及流程

do
{语句;
} while (表达式) ;

解析

它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。

代码演示

用 do-while 语句求 1~100 所有整数的和。

#include <stdio.h>
int main(void)
{int i; int sum = 0;i = 0;do{sum += i;i++;} while (i <= 100);printf("sum = %d\n", sum);return 0;
}

运行结果为:

while/do while 综合案例

while 与 dowhile 的区别
如下代码,表示求和,求输入 1 和 11 的比较。

do while 代码演示

#include <stdio.h>
int main()
{int sum = 0;int i;scanf_s("%d", &i);do{sum += i;i++;} while (i <= 10);printf("sum= %d\n", sum);return 0;
}

运行结果为:

while 代码演示

#include <stdio.h>
int main()
{int sum = 0;int i;scanf_s("%d", &i);while (i <= 10){sum += i;i++;}printf("sum= %d\n", sum);return 0;
}

运行结果为:

结论是,当输入 1 时两个运算的求和,是相等的,但是当输入 11 是,while 版本输出的 sum = 0。而 do while 版本输出的则是 11。

所以,do while 至少执行一次,而 while 可能一次都不执行。

do while 的争议

do while 特点是,循环体至少执行一次,这个是比较可怕的。在没有收到任何限制条件的情况下,就开始执行循环体。很可能会带来不可挽回的后果。比如,先格式化了你的 c 盘,然后再来问要不要格式化。

do while 曾一度提议废除,但是他在输入性检查方面还是有点用的。比如,输入 Y/y 设置标志位,退出,执行标志位操作,输入 N/n 直接退出,输入其它,循环输入。

代码演示:

#include <stdio.h>
int main(void)
{char select;do{printf("同意协议请输入 y/Y,不同意请输入n/N\n");scanf_s("%c", &select);getchar();if (select == 'n' || select == 'N')exit(-1);} while (!(select == 'y' || select == 'Y'));printf("next\n");return 0;
}

运行结果为:

只有输入y/Y,n/N才向下执行,否则继续循环

#include <stdio.h>
int main()
{int name;int passwd;do{printf("name:");scanf_s("%d", &name);printf("passwd:");scanf_s("%d", &passwd);} while (!(name == 10 && passwd == 20));printf("wellcome\n");return 0;
}

运行结果为:

直到输入合适的用户名和密码才能够进行下一步操作。

for “列表”型循环

语法结构及流程

 for( 表达式 1 ; 表达式 2 ; 表达式 3 ){语句;}

解析

1 、计算表达式 1 的值,通常为循环变量赋初值。

2 、计算表达式 2 ,的值,即判断循环条件是否为真,若值为真则执行循环体一次,
否则跳出循环。

3 、计算表达式 3 的值,这里通常写更新循环变量的赋值表达式,然后转回第 2步重复执行。

代码演示

用for循环求 1~100 所有整数的和。

#include <stdio.h>
int main(void)
{int i; int sum = 0;for (int i = 0; i <= 100; i++){sum += i;}printf("sum = %d\n", sum);return 0;
}

运行结果为:

for(;;)是 for 吗?

上面for循环仍然成立,等价于while(1)。
代码演示:

#include <stdio.h>
int main(void)
{for (;;)printf("xxxxxxxxxx\n");return 0;
}

运行结果为:

for 与逗号表达式

打印 10 的所有加法组和,格式如下:
10 = 1 + 9;
10 = 2 + 8;
10 = 3 + 7;
10 = 4 + 6;
10 = 5 + 5;
10 = 6 + 4;
10 = 7 + 3;
10 = 8 + 2;
10 = 9 + 1;

代码演示:

#include <stdio.h>
int main(void)
{int i; int j;for (i = 1, j = 10 - i; i < 10 && j>0; i++, j--){printf(" 10 = %d + %d\n", i, j);}return 0;
}

运行结果为:

循环的嵌套

一重循环解决线性的问题,而二重循环和三重循环就可以解决平面和立体的问题了。比如打印如下的图形:

******
******
******
****** **********

嵌套的语法格式

三种语法格式,是一种 嵌套的结构, 不可以交叉。三者都可以实现上述的功能,但是比较倾向于使用第三种,为什么呢,因为第三种,循环的初始化不在循环体外,循环变量的改变不在循环体内。整体呈现会更清晰简洁。

循环嵌套while 版

#include <stdio.h>
int main(void)
{int i = 0;while (i < 4){int j = 0;while (j < 6){printf("*");j++;}putchar(10);i++;}return 0;
}

运行结果为:

循环嵌套do while 版

#include <stdio.h>
int main(void)
{int i = 0;do {int j = 0;do{printf("*");j++;} while (j < 6);i++;putchar(10);} while (i < 4);return 0;
}

运行结果为:

循环嵌套for 版

#include <stdio.h>
int main(void)
{for (int i = 0; i < 4; i++){for (int j = 0; j < 6; j++){printf("*");}putchar(10);}return 0;
}

运行结果为:

循环建议

先外后内的循环嵌套写法

循环的嵌套,先写外重循环,外重循环的循环变量,可能作为内重循环的循环终止条件。

半开半闭区间写法

建议 for 语句的循环控制变量的取值采用“半开半闭区间”写法。 这样的作法,跟后面的数组下标,是完全吻合的。但,这并非绝对。

循环变量属于半开半闭区间

 for ( x=0; x<N; x++){}

循环变量属于闭区间

 for ( x=1; x<=N; x++){}

嵌套的优化

在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数。

低效率:长循环在最外层

for (row=0; row<100; row++)
{for ( col=0; col<5; col++ ){sum = sum + a[row][col];}
}

高效率:长循环在最内层

 for (col=0; col<5; col++ ){for (row=0; row<100; row++){sum = sum + a[row][col];}}

循环小结

一种循环可以解决的问题,使用另外两种同样可行,只是方便程度不同。

while 循环一般用于循环次数不定的情况,for 循环一般用于循环次数确定的情况(也可以用于循环次数不定的情况),do-while 循环一般用于至少需要执行一次的情况。

for 循环和 while 循环是先判断条件是否为真,再执行循环体,因此,可出现循环一次也不执行的情况;do-while 循环是先执行循环体,再判断条件是否为真,因此,循环体至少执行一次。

C语言程序流程设计之循环【程序流程设计】(13)相关推荐

  1. c语言菜单输入字母死循环,C语言循环菜单的设计--让程序一直运行

    让程序一直运行的秘密就是死循环,即: while(1){ // 要执行的操作 } 在加密解密软件中,要实现的功能有: 文件加密: 文件解密: 修改密码(为了防止其他人使用,程序设置了密码,必须输入密码 ...

  2. 关于python中程序流程结构-Python语言程序设计(第4章:程序结构设计)

    4.1 算法 [1]计算机程序可视为数据结构和算法的集成,这种集成体现为以下两方面的内容:数据是程序实现的基础:算法要依靠程序来完成功能. [2]算法的特点:有穷性:确定性:零个或多个输入:一个或多个 ...

  3. 凑钱系统C语言,C语言课程设计报告书凑钱程序.doc

    C语言课程设计报告书凑钱程序 西北师范大学知行学院 计算机与电子信息工程系 课程设计报告书 课程名称: C语言程序设计 专 业: 电子信息工程 课题名称: 凑钱程序 班 级: 13电本班 学 号: 2 ...

  4. 热电偶单片机代码c语言,基于单片机的热电偶发生器设计(含电路原理图,程序)...

    基于单片机的热电偶发生器设计(含电路原理图,程序)(课题申报表,任务书,开题报告,中期检查表,外文翻译,论文15000字,程序,答辩PPT) 摘 要 热电偶标准信号发生器为袖珍式键控现场检测仪表.其由 ...

  5. 骑士游历数组任意起点c语言,java课程设计骑士游历程序的开发

    <java课程设计骑士游历程序的开发>由会员分享,可在线阅读,更多相关<java课程设计骑士游历程序的开发(25页珍藏版)>请在人人文库网上搜索. 1.JAVA程序设计 课程设 ...

  6. 国二C语言文字选择程序选择,全国计算机等级考试二级C语言题型总结(二)——选择循环结构程序设计部分.doc...

    全国计算机等级考试二级C语言题型总结(二)--选择循环结构程序设计部分 C语言第二部分上机题型总结 选择结构部分: if结构题型总结 (案例1) 企业发放的奖金根据利润提成.利润(I)低于或等于10万 ...

  7. c语言循环程序设计教案,10 《C语言程序设计》教案 第三章 程序的控制结构(6)—循环结构 while和do while.doc...

    10 <C语言程序设计>教案 第三章 程序的控制结构(6)-循环结构 while和do while.doc C 语言程序设计课程教案表 授课题目 第三章 程序的控制结构 (6) 循环结构 ...

  8. 包括循环和分支的C语言程序,《C语言程序设计》分支和循环的C程序设计.ppt

    <C语言程序设计>分支和循环的C程序设计.ppt 第三章 分支和循环的C程序设计 问题 一元二次方程根求解算法描述 3.1 程序的基本结构 ⒊循环结构Repetition ⒋复合语句 Co ...

  9. 烟雾检测电路c语言程序,基于51单片机火灾报警器系统烟雾检测温度检测设计(原理图+程序仿真+论文)...

    课题题目基于单片机的火灾自动报警系统 课题的目的.意义以及和本课题有关的国内外现状分析:1.目的:本系统以单片机为主控单元,能够及时监测到系统故障和环境中有无火灾,火灾一旦发生将实现声光报警,并采取有 ...

  10. c语言模拟计算机指令流程图,家居分布式温度监测报警系统-传感器课程设计报告 带程序及仿真全套资料...

    资料包: 0.png (13.1 KB, 下载次数: 11) 2018-1-10 04:19 上传 传感器课程设计报告 课    题: 家居分布式温度监测报警系统班    级: 自152 姓    名 ...

最新文章

  1. 那些年我们踩到过的坑(二):3.1 版 MultiThreadedHttpConnectionManager 未releaseConnection导致应用服务器宕机...
  2. 特别企划 | 或许是史上最萌的产品经理改需求姿势(多图)
  3. vue2实践揭秘pdf_《Vue2实践揭秘》源码
  4. 47 FI配置-财务会计-固定资产-一般评估-定义资产分类中的折旧范围
  5. 带有.NET Core App的Identity Server 4
  6. Django----bootstrap导航栏的使用
  7. hdu 5154 Harry and Magical Computer
  8. 集成产品开发团队的组成
  9. “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
  10. SSH访问远程主机超时问题解决
  11. dirsearch命令组合参考
  12. socket套接字选项列表
  13. 如何用数据驱动的广告效果
  14. Attempt to read from field ‘android.os.VibrationEffect com.android.server.VibratorService$Vibration.
  15. Linux LTP (一)
  16. 计算机毕业设计ssm文档资料管理系统
  17. 千里之遥看樱花,“东湖·樱园”元宇宙
  18. linphone 智能带宽分配
  19. hackme inndy pwn onepunch writeup
  20. Kettle — 集群使用

热门文章

  1. Cryptohack-RSA writeups
  2. 【Flask】Flask-RESTful 风格编程
  3. python—操作MySQL查询表中数据
  4. 关于django—模型序列化器类详细内容
  5. [HOW TO]-ubuntu20.04 上安装jenkins
  6. ARMV8虚拟中断的介绍
  7. 查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径
  8. 【WEB安全】flask不出网回显方式
  9. 【安全技术】红队之windows信息收集思路
  10. 1.2操作系统的特征