能否简单地讲清楚循环语句?
能否简单地讲清楚循环语句?
曾经听一位有名望的计算机专业老师跟我讲过一件事,他说他的历届学生在学习语言课程的时候,遇到循环语句,总是感觉比其他流程控制语句理解起来更为难一些。特别是一些女生,对循环语句的理解似乎更费劲。
循环语句真的那么难以理解吗?
我后来尝试过跟我的学生探讨这个问题,其实,如果他们不花点功夫刻意去领悟的话,确实会觉得相对没那么好理解。特别是如何熟练的使用他们,会更不容易一些。
于是,我从一个“会使用者”的的角色中跳出来,试图去体会初学者的感受,发现大家的反馈应该没错。我们说,学习计算机语言有利于训练我们的逻辑思维能力,其实这种训练,它主要就体现在学习、掌握和熟练运用流程控制语句上面,而循环语句在所有的流程控制语句中,的确更抽象一些,就像多维空间超出我们日常认知范围一样,理解一个循环语句,需要我们有更强的想象力。
但是,遗憾的是,学习和掌握它们却仍然没有什么捷径。应主题的要求,我们今天就系统地,且尽可能简洁地把循环语句讲清楚,以方便大家的理解和运用。
首先,我们要建立一个基本的认知:所有的循环语句,都是需要建立循环条件的。在条件成立的情况下,重复执行指定的代码块。
常用的循环语句有以下四种:
- while 语句
- do 语句
- for 语句
- foreach 语句
1、while 循环
根据while括号里的条件,判断是否执行循环体内的代码块。条件成立则继续执行,否则,终止循环。
//while循环语句的静态方法
static void WhileStatement(string[] x)
{
//定义一个循环计数器
int i = 0;
//根据条件判断,是否继续执行循环体内的代码块
while (i < x.Length)
{
Console.WriteLine(x[i]);
i++;
}
}
2、do 循环
同样是根据while括号里的条件,判断是否执行循环体内的代码块。条件成立则继续执行,否则,终止循环。
但是,它与while循环的显著差别是,do循环体里面的代码会被首先执行一次以后,才开始检查循环条件。
//do循环语句的静态方法
static void DoStatement(string[] x){
string s = '开始循环...';
int i = 0;
//do循环开始
do
{
Console.WriteLine(s);
s = x[i];
i++;
} while (!string.IsNullOrEmpty(s));
}
3、for 循环
for循环自定义完整的循环条件,包括循环计数器、计数器的自增长,以及计数器的基数范围。for循环因为是一个基于计数器的循环,所以它有时也称之为迭代器。
//for循环语句的静态方法
static void ForStatement(string[] args)
{
//for循环开始
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine(args[i]);
}
}
4、foreach 循环
foreach循环定义一个元素对象,这个元素对象的值将自动按索引顺序取值于一个序列类型。循环语句将执行到序列类型的最后一个索引,索引结束后循环终止。
//foreach循环语句的静态方法
static void ForEachStatement(string[] args)
{
//foreach循环开始
foreach (string s in args)
{
//s自动按索引顺序取值于数组args
Console.WriteLine(s);
}
}
break 语句:
break,负责终止一个循环语句。它通常放在一个条件判断语句中。
//演示break语句的静态方法
static void BreakStatement(string[] args)
{
int i=0;
//循环语句
while (true)
{
string s = args[i];
//如果条件成立则终止循环
if (string.IsNullOrEmpty(s)) {
break;
}
//打印输出
Console.WriteLine(s);
i++;
}
}
continue 语句:
continue,直接跳到下一轮循环。它通常也是放在一个条件判断语句中。
//continue语句的静态方法
static void ContinueStatement(string[] args)
{
//for循环
for (int i = 0; i < args.Length; i++)
{
//如果条件成立直接跳到下一轮循环
if (args[i].StartsWith("/")){
continue;
}
Console.WriteLine(args[i]);
}
}
好了,今天的问题就讲到这里,希望对你有帮助。
- silverlight中顺序/倒序异步加载多张图片
- MySQL数据库性能优化之三
- 谁说 Java 要过时?2017年Java 大事件一览及未来前瞻
- mongodb的用法
- silverlight中如何将string(字符串)写入Resource(资源)?
- Python练习环境搭建-引入预定义数据
- 振幅和成交量的关系
- silverlight中的几个冷门标记 {x:Null},d:DesignWidth,d:DesignHeight
- 用scikit-learn和pandas学习线性回归
- 自动驾驶玩出新花招,以后老司机们就要失业了
- silverlight.net官方网站图片切换源码
- 制作iis自动安装包
- 安装程序无法复制一个或多个文件。特定错误码是0x4b8。
- silverlight中"制作逐帧动画"/"播放gif"收集
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- shell 运算符; 判断中 if -a 与运算 -o或运算
- Linux crond 计划任务添加
- linux 环境下安装使用 git
- linux下禁止root ssh远程登录和添加允许新用户登录ssh
- Python 常见数据结构整理
- mapreduce的二次排序-分区分组
- GATK RNA-Seq Snps Indel 分析
- 【技术创作101训练营】腾讯云主机上部署 FRP+Teamviewer 穿透内网进行远程运维
- 图像处理笔记(7)---- OpenCV 绘制无填充矩形
- 图像处理笔记(8)---- OpenCV 获取追踪对象的HSV值
- (数据科学学习手札95)elyra——jupyter lab平台最强插件集
- Python 序列化/反序列化自定义类型
- Windows10下使用VS2017编译和使用yaml-cpp库
- CentOS7下编译yaml-cpp库
- SAP Spartacus CurrentProductService返回的null对象