在ObJC中,有若干方法可以重复执行一系列代码,这些重复执行的功能称之为循环功能,它们由以下几部分构成:

  • for语句
  • while语句
  • do语句

举一个简单的例子,如果想求10以内所有整数之和:(代码如下)

只需要将十以内的整数进行相加运算就可以,甚至在大脑中进行运算就可以。但是如果是100以内的整数相加,那么大部分人都会感到头疼,这时候就可以通过一些特殊的方法来解决如下问题。

至此引入循环结构——计算机的基本属性之一就是它可以重复执行一组语句。这种循环能力让程序员能够开发出包含重复过程的简洁程序,这些过程能够以不同的方式执行成百上千的程序语句。ObJC中包含3种用于编写循环结构的程序语句。

------for语句

计算100以内所有整数之和。

打印结束后 结果为:5050.

从中我们可以看到,由于引用了for()循环语句,相当于计算机自动帮助我们叠加n的值,直到n<101(n=100),而计算机一边帮我们叠加n的值,一边帮我们计算sum的值。

那么sum的值是如何计算的呢。首先先解释for语句的一般格式:

  for(init_expression;loop_condition;loop_expression)

    program statement

圆括号中的三个表达式,建立了程序循环的“环境”。其后的program statement(要以分号结尾),可以是任何ObJC语句,但是必须是合法的。它们组成循环体。这条语句执行的次数由for语句中设置的参数决定。

for语句的第一部分标着init_expression用于再循环开始之前设置初始值;第二部分标着loop_condition用于指定继续执行循环所需的条件(只要满足既定的条件,那么程序就会继续执行),如果循环不在满足既定的条件,那么程序就会停止循环,跳出循环之后继续执行循环体外的程序(在上个代码中就会继续执行NSlog(@"SUM=%d",sum);)。到这,关于sum的值是如何计算的,应该已经非常明确了,

        (sum+=n)等价于(sum=sum+n),循环满足条件,n每次循环都会增加1(n++),那么每一次新的循环后等待求和的sum就等于上次循环得到的sum值加上新n值。

直到满足循环条件,循环结束。

总之,for语句将按以下步骤执行:

  • 先求初始表达式的值。这个表达式通常设置一个将在循环中使用的变量,对于某些初始值(例如0或1)来说,通常称为索引变量。
  • 求循环条件的值,这个表达式通常用于改变索引变量的值,最常见的情况是,将索引变量的值加1或减1。
  • 执行组成循环体的程序语句。
  • 求索引表达式的值。这个表达式通常用于改变所以变量的值,最常见的情况,就是将索引变量增加1或者减少1.
  • 返回步骤(2)。

代码:生成三角数表的程序

打印结果:

在上个代码中,前三个NSlog语句的目的仅仅是提供总标题和输出列的标题。在显示适当的标题后,程序将计算前10个三角数,在你计算1-n的和时,使用变量n记录当前的数字,使用变量sum存储n的三角数值。(最后一行没对齐,如果想对齐,可将最后的NSlog修改为:NSlog(@"%2i      %i",n,sum);)

键盘输入:如果我们不想计算前100个整数的和,改为计算前200,前500的整数之和,除了去代码中修改,还有一个更简单的方法,就是自己控制想要求多少以内的数的和,用键盘输入。

打印结果为:

本人输入的是59,那么计算机将计算1-59的和=1770。

那么问题又来了,如果我想要不断的计算不同的数,该怎么办?我们引入嵌套循环。

  在循环中,考虑到需要人为终止循环,否则将会一直无休止的循环下去,所以我添加了变量stop并设置初值为1,也就是说循环开始只循环一次,然后在循环中加入stop++,这样每次循环结束,都会开始新一轮循环直到你感到厌烦想要终止这一切,按照本人现在的水平,只能写出按0退出的程度,不过也大体上符合了人道主义精神(我十分相信,如果我不加终止,那么如果有人看到这个程序,并且尝试了那么肯定有那么一个执着的人相信循环会有尽头。。。)

言归正传,第一个for循环主要解决用户要计算多少个整数之和的问题,而第二个for循环解决这个整数的和是多少的问题。

该程序的其他位置都没有使用counter这个变量,它的作用仅仅是充当循环计数器,但是,因为它是一个变量,所以必须在程序中声明。

如果将该程序转变成我们都能看得懂的语言那么就是:

    一共循环运行5次!{

      让用户输入他想计算的整数,如果他不想输入了就按0退出。

      得到他输入的整数,并且计算出结果。

      将结果打印出来。

}

------while语句

while语句进一步扩展了ObJC语言中得循环功能指令系统。while语句经常使用的语句语法如下:

  while(expression)

    program statement

圆括号中得expression将被求值。如果表达式求值的结果为true,则执行随后的语句(program statement),执行完这条语句(或位于花括号中得一组语句之后),将再次对表达式求值,若果求值结果为true,将再次执行循环语句。直到表达式的最终求值结果为false时,循环终止,然后执行program statement之后的语句。

试着用while语句求1-100的整数和:

打印结果为5050。

从以上程序中会发现,使用for语句同样可以方便的完成该任务。事实上,for语句都可转换成等价的while语句,反之亦然。比如说,下面的这个for语句语法结构可以转换成while语句语法结构

   for(init_expression;loop_condition;loop_expression)

        program statement

改为while语句后:

init_expression;

  while(loop_condition){

    program statement

        loop_expression; 

        } 

来一个求两个数最大公约数(greatest common divisor)的代码:

不说明最大公约数(简称为gcd)是什么,只说明求出gcd的步骤:

  1. 首先我们需要两个非负整数:c 和 d。
  2. 若c=0,结束,即gcd=u。
  3. 计算temp=c%d,c=d,d=temp,并回到步骤2.

搞定,运行结果是如图所示。

继续来一个,写一个能够将输入的数倒过来分行输出的程序。

OK,成功。

------do语句

  上面介绍的两个循环语句(for and while)都是需要在循环开始前测试一组条件。因此,如果条件不满足,则可能永远都不会执行循环体。开发程序时,有时需要在循环结尾处(而不是在开始)处执行测试。自然而然,ObJC语言也提供了专门的语言结构用于处理这种情况,即do语句,该语句的语法如下:

do

  program statement

while (expression);


  do语句的执行过程为:首先,执行程序语句(program statement)。其次,求(expression)中得值,如果表达式的求之结果为true,循环将继续,并再次执行程序语句。只要表达式的计算结果始终为true,就将重复执行程序语句。当表达式求出的值为false时,循环将终止并以正常顺序执行程序中的下一条语句。

  do语句只是while语句的简单转置,它把循环条件放在循环的末尾,而不是放在开头。上文编写的把数翻转过来的程序,如果输入的为0,那么程序将永远不会执行循环语句,但是使用do循环语句代替while语句,至少可以让程序执行一次,从而保证在所有的情况下都至少显示一个数字。

  代码如下:

即使 你输入的是0,那么也会有一次输出,也就是说,运行此程序即使你不按常理出牌,循环也会为你做一次~。

-------break语句

  在循环过程中,有时候希望只要发生特定的条件(例如发生了错误条件或者遍历一列数据时查找到了)就立即退出循环。break语句就是实现这个目的的,只要执行break语句,程序将立即退出正在执行的循环,无论此循环是for  while or do。循环内break之后的语句将被跳过,并且该循环的执行也将终止,而转去执行循环外的其他语句。

  如果在一组嵌套循环中执行break语句,仅会退出执行break语句的最内层循环。

  break语句的格式仅是在关键字break之后添加一个分号,形式如下:

  break;

------continue语句

  continue语句和break语句类似,但它并不会使循环结束。执行continue语句时,循环会跳过该语句之后直到循环结尾处之间的所有语句。除此之外,循环将和平常一样执行。

  continue通常用来根据某个条件绕过循环中的一组语句,除此之外,循环会继续执行。continue语句的格式如下:

  continue;

 

转载于:https://www.cnblogs.com/xuZzz/p/4275693.html

object-C控制语句相关推荐

  1. java object转list_这份Java开发规范,让你100%受益!

    今天跟大家分享下Java开发规范的知识. 基于阿里巴巴JAVA开发规范整理: https://github.com/alibaba/p3c 1 命名风格 [强制]类名使用 UpperCamelCase ...

  2. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  3. 【CyberSecurityLearning 45】PHP基础+变量、运算符、流程控制语句

    目录 PHP概述 PHP运行环境安装 Web原理简述 PHP 基本语法 特点: 指令分隔符 [;] 注释(和C语言类似) 简单的PHP语句 PHP语法错误: 变量 变量的声明 初始化 赋值 [=] 引 ...

  4. JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  5. javascript基本语法(输入输出语句,变量常量,数据类型,运算符,流程控制语句,数组,函数)

    javascript javascript介绍 JavaScript 是一种客户端脚本语言.运行在客户端浏览器中,每一个浏览器都具备解析 JavaScript 的引擎. 脚本语言:不需要编译,就可以被 ...

  6. javascript Control flow(控制语句)

    Conditional statements(控制语句) if-else if (condition) {statement_1; } else {statement_2; } if (conditi ...

  7. scala几种循环判断语句_Scala循环控制语句– while,while和for循环

    scala几种循环判断语句 In software programming, certain situations may arise where we need to execute a block ...

  8. Python学习笔记五:控制语句

    Python学习笔记五:控制语句 Pycharm 开发环境的下载安装配置_项目管理 控制语句 Pycharm 开发环境的使用 Pycharm 下载和安装 激活和选择不同UI 风格 创建项目和初始化配置 ...

  9. python--第四章 python流程控制语句

    一.流程控制语句简介 Python 代码执行时是按照自上而下顺序执行的通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次流程控制语句可以分为两大类:条件判断语句,循环语句 二.条 ...

  10. 前端学习笔记之流程控制语句和数组(六)

    流程控制语句 if语句的基本使用 if语句是最简单的条件语句,也称选择语句.它通常结合else一起使用,表示如果--就--否则--. if (测试条件) {// 语句块1// 当测试条件为真,则执行这 ...

最新文章

  1. 数据结构的映像方法(关系的机内表示)
  2. c语言实现椭圆曲线算法,椭圆曲线加密算法的C语言设计和实现
  3. Nginx+Tomcat 负载均衡集群方案
  4. 一台机器同时启动两个tomcat
  5. Longest Common Prefix
  6. 华为手机所有图标变黑_华为官博科普手机状态栏小图标含义,总共分为4大类...
  7. C#中ToString()格式大全(转)
  8. 区块链数字广告项目-【DadxChain】
  9. UCINET 社会网络分析工具
  10. SAP Spartacus UI Duplicated keys has been found in the config of i18n chunks
  11. 字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到
  12. Python精通-Python集合操作详解
  13. php小论坛开发总结,PHP开发 小型论坛教程之添加论坛-2
  14. JAVA——根据QQ群号得到idkey以及QQ群加群链接[网页版本]解决方案
  15. 行业研究的结构化分析方法:【PEST分析】实战案例
  16. PoE供电概述:PoE交换机是如何进行供电的?
  17. 重新定义RPA,重塑智能生产力 | 云扩科技RPA论坛成功举办
  18. 蓝桥杯试题 基础练习 矩形面积交 BASIC-18 JAVA
  19. PTA 清点代码库 (25 分)
  20. 找女朋友2109(快排)

热门文章

  1. mybatis-generator一些注意点 2021-04-21
  2. eslint是什么_为什么eslint没有 no-magic-string?
  3. python编译器_11 个最佳的 Python 编译器和解释器
  4. 使用pagehelper踩的坑PageHelper cannot be cast
  5. mybatis 鉴别其_MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询
  6. switch php 比大小,PHP 基础:比较、If、Switch
  7. spark写出分布式的训练算法_Spark0.9分布式运行MLlib的线性回归算法
  8. android ffmpeg 优点_在Android中使用FFmpeg(android studio环境)
  9. 均方根误差有没有单位_装载机电子秤的功能特点以及误差的解决办法
  10. oracle11g 查看表,oracle11g查看,添加表空间