`
sarin
  • 浏览: 1756832 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
E3b14d1f-4cc5-37dd-b820-b6af951740bc
Spring数据库访问系列...
浏览量:173650
C2083dc5-6474-39e2-993e-263652d27795
Android学习笔记
浏览量:368109
5f40a095-b33c-3e8e-8891-606fcf3b8d27
iBatis开发详解
浏览量:189254
B272a31d-e7bd-3eff-8cc4-c0624ee75fee
Objective-C学习...
浏览量:99826
社区版块
存档分类
最新评论

Objective-C学习笔记四:循环结构

阅读更多
    接上文
        和其它编程语言一样,Objective-C也提供循环结构的语法,包括for循环,while循环和do-while循环。循环的本质就是重复一定的次数来执行某语句,一般应用循化结构基本就是累加或者遍历对象以便操作。
    说到循环,就不能不提数组,因为数组的操作就是伴随这循环的,那么我们来看下面的这个程序:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int intArray[20];
        int i;
        for(i=0;i<20;i++){
            intArray[i]=i;
        }
        for(i=19;i>=0;i--){
            NSLog(@"%i ",intArray[i]);
        }
    }
    return 0;
}

    编译执行得到结果:



    本程序首先定义了一个长度为20的整型数组,之后运用循环进行值的填充,填充完毕再次运用循环进行值的遍历,只不过长度为20的数组最大下表是19,这个就没什么可多说的了。
    嵌套的for循环,主要用于多层次数组或集合的遍历。比如两层嵌套的for循环主要用于遍历二维数组,比如下面这个程序:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int intArray[2][3]={{1,2,3},{4,5,6}};
        int i,j;
        for(i=0;i<2;i++){
            for(j=0;j<3;j++){
                NSLog(@"%i",intArray[i][j]);
            }
            NSLog(@"------");
        }
        NSLog(@"---End---");
    }
    return 0;
}

    编译运行之后,我们得到如下输出:



    那么说明我们的两层嵌套for循环可以实现对二维数组的遍历。同理,多维数组只需加入更深层次的循环即可实现遍历。
    下面来看一下键盘输入的例子,和C语言类似,Objective-C提供scanf函数来实现键盘输入,看下面的示例:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int i, number, sum;

        NSLog(@"Please input the maximum number: ");
        scanf("%i",&number);

        for(i=1;i<=number;i++){
            sum+=i;
        } 

        NSLog(@"The sum from 1,2....%i is %i",number,sum);
    }
    return 0;
}

    编译运行后得到如下结果:



    这是一个正整数前n项和的循环累加示例,我们从键盘敲入一个数字,那么程序可以累加计算出从1到这个正整数的和。此例仅为演示键盘输入函数scanf的应用,求解前n项和请使用高斯公式:(1+n)*n/2,效率要比循环高很多。这里多说一句,我们现在是学习Objective-C编程语言的,而不是iphone应用程序,所以我们可以使用scanf和NSLog来输入和输出,如果是开发iphone应用程序,则根本不用这两样东西。
    当然,scanf函数可以接受其它类型的数据类型,比如浮点数和字符等,那么使用%f,%c等来接收即可复制给对应的变量,这里不再多说。
    对于for循环来说,可以有如下形式的变体,比如for(i=0, j=0;j<10;i++),这里的循环变量初始值我们设置了两个。再比如(i=0, j=10;i<10;i++,j--),这个里面我们对循环变量表达式的值进行了不同的设定。当然还有对循环变量初始条件设为空,比如for(;j<100;j++),此时只要循环变量j已经赋值便可以使用这种形式,只是分号不可少。我们仍然可以使用在for循环中定义循环变量的做法,比如for(int i=0;i<10;i++)的写法,这个i就是该for循环的局部变量了,离开for循环就无法访问。
    第二种循环是while循环,我们结合一个数学示例来说明,计算两个数的最大公约数,算法很简单:计算变量1模变量2的结果作为中间变量,变量2赋值给变量1,中间变量赋值给变量2,如果此时变量2等于0,则结束,最大公约数就是变量1;否则执行上述步骤。那么很容易想到循环的实现,结合while循环的语法,我们得到如下程序:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool{
        unsigned int i,j,temp;

        NSLog(@"Please input 2 positive integers:");

        scanf("%u%u",&i,&j);

        while(j!=0){
            temp=i%j;
            i=j;
            j=temp;
        }

        NSLog(@"The greatest common divisor is %u",i);
    }
    return 0;
}

    编译运行,我们得到如下结果:



    说明程序是没有问题的。while循环的语法就没什么可多说的了,它和其它编程语言都是一样的。
    最后一种循环结构就是do-while循环了,它是while循环的一个变体形式,其本质都是一样的,我们通过一个示例来说明,下面这个程序是将输入的一个数字倒序输出:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int number,temp;

        NSLog(@"Input a number:");
        scanf("%i",&number);

        do{
            temp=number%10;
            NSLog(@"%i",temp);
            number/=10;
        }while(number!=0);
    }
    return 0;
}

    编译运行该程序,我们得到如下结果:



    程序很容易理解,我们将数字对10求模,就会得到末位数,那么这就是倒序的第一个数字,然后数字除以10,因为是整数除以整数,所以小数部分舍去,那么数位就会少一位,然后重复运算即可,循环的退出条件是数字为0的时候,那么对于do-while循环的循环条件判断就是number!=0,最后我们就得到了想要的结果。
    在循环语句中还有两点是需要我们注意的,就是break语句和continue语句的使用,通过下面的这个示例,我们很容易理解这两个语句:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int intArray[]={1,2,3,4,5,6};

        for(int i=0;i<6;i++){
            if(i==3){
               break;
            }
            NSLog(@"%i",intArray[i]);
        }
        NSLog(@"------");
        for(int i=0;i<6;i++){
            if(i==3){
               continue;
            }
            NSLog(@"%i",intArray[i]);
        }
    }
    return 0;
}

    首先编译运行,来看下效果:



    为什么是这样的结果,来解释一下,我们对循环变量i是否为3时做出判定,运用了break和continue。那么对于break,这表示终止所有循环,也就是循环退出了,所以看到第一个for循环输出3之后就没有了。而对于continue,相当于终止本次循环,也就是continue之后的语句不执行了,而整个循环并没有结束,还要继续执行,所以看到数组第四个元素4没有打印出来。通过这两个for循环就很好解释了break和continue的使用。
    不过,不要轻易使用break和continue,它们会使得程序很难理解。
    接下文
  • 大小: 79.8 KB
  • 大小: 68 KB
  • 大小: 42.4 KB
  • 大小: 43.2 KB
  • 大小: 62.7 KB
  • 大小: 67.8 KB
2
3
分享到:
评论

相关推荐

    Objective-C基础教程第二版

    **Objective-C**是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能,并且是开发iOS应用的主要语言之一。尽管Swift已经成为苹果官方推荐的新一代编程语言,但Objective-C仍然拥有大量的代码库和丰富...

    从C++到Objective C的学习之路

    从C++过渡到Objective C的学习之旅是一条富有挑战的道路,但同时也充满了机遇。以下是一些关键的知识点,将帮助你理解这两个语言之间的异同以及如何有效地进行转换。 1. **面向对象编程基础**:C++和Objective C都...

    传智博客-学习iOS前言 PPT

    Objective-C是C语言的超集,加入了面向对象特性,如消息传递机制。熟悉它的基础概念,如类别、协议和代理模式,将有助于你更好地理解和使用这些库。 接下来,你需要熟悉iOS的开发环境Xcode。Xcode是Apple官方的集成...

    个人C语言知识点笔记总结-pdf版

    程序的控制结构包括顺序结构、选择结构(如if-else和switch语句)和循环结构(如while、do-while和for循环),这些结构控制着程序的执行流程。 数组是处理批量数据的工具,一维数组和二维数组分别用于线性数据和...

    day01-Java入门

    - **Objective-C**:在C语言基础上增加了面向对象特性,主要应用于Apple的iOS和Mac OS X系统开发。 - **Python**:作为一种解释型、面向对象的脚本语言,Python以其简洁的语法和强大的库支持在数据处理、Web开发和...

    iOS 学习C语言部分,代码和笔记,超详细

    尽管Objective-C和Swift是主要的编程语言,但C语言作为它们的底层支持,理解C语言的基本概念和技术对于深入学习iOS开发至关重要。这个压缩包“iOS 学习C语言部分,代码和笔记,超详细”显然是一个非常全面的学习资源...

    AS4AS学习笔记

    8. **进阶主题**:如使用AppleScriptObjC与Objective-C进行桥接,或者创建独立的AppleScript应用程序。 通过深入学习"AS4AS学习笔记",你可以掌握AppleScript的高级技巧,提升你在Mac环境下的自动化能力,从而大大...

    IOS 菜鸟笔记 之 项目 一 ( 源码 )

    3. **Swift/Objective-C 语法**:学习编程基础,如变量声明、条件语句、循环、函数和类的定义。 4. **事件处理**:理解如何处理用户的触摸事件(如 UIButton 的点击事件),以及代理和通知机制。 5. **MVC 模式**...

    iOSDevelopmentTips:iOS开发笔记

    本笔记将深入探讨Objective-C在iOS开发中的关键知识点和实用技巧。 一、Objective-C基础 1. 对象和消息传递:Objective-C的核心是面向对象,其对象通过发送消息来执行操作。理解`+[class]`(类方法)和`-[instance...

    Swift学习笔记之逻辑分支与循环体

    在这篇Swift学习笔记中,我们将深入探讨if/switch语句以及for和while循环。 1. **if语句**: 在Swift中,if语句的使用方式与Objective-C有所不同。首先,Swift的if语句后面不需要加括号,条件必须是明确的Bool类型...

    linux学习笔记

    Linux学习笔记涵盖了许多核心概念,包括GCC编译器、VI编辑器、Makefile构建工具以及shell脚本编程,这些都是Linux系统管理和开发中的基础且至关重要的技能。以下是对这些主题的详细阐述: 1. **GCC(GNU Compiler ...

    C语言精华ppt课件.ppt

    C语言的出现使得Unix操作系统得以迅速普及,同时也催生了后续许多其他高级语言,如C++、Objective-C、C#等。 2. C语言的发展 随着C语言的成功,其影响力不断扩大。1988年,美国国家标准协会(ANSI)制定了C语言的...

    Archive.zip

    学习Python,你需要理解其基础语法,如变量、数据类型(包括列表、元组、字典和集合)、控制结构(if语句、for循环、while循环)以及函数定义。Python还支持面向对象编程,包括类和对象的概念。此外,Python有丰富的...

    swift学习文档(笔记)

    它结合了C和Objective-C的优点,同时去除了C的一些兼容性限制,使编程更加安全、简洁和有趣。Swift的语法强调类型安全,允许自动类型推断,使得代码更易读、易维护。 在Swift中,变量使用`var`关键字定义,常量使用...

    MAD107

    它融合了现代编程语言的思想,同时也吸取了Objective-C的动态系统特性,使得开发过程更为简洁和安全。 【描述】虽然描述中只给出了"MAD107"这四个字符,但我们可以推测这可能是一个课程编号或者项目代号,专门针对...

    HWS:我的Swift黑客练习书

    它的设计目标是结合Objective-C的动态能力与C和Python的简洁性,同时提高安全性,降低错误的可能性。 在Swift中,语法清晰、类型安全是其重要特点。例如,变量声明时必须指定类型,这样可以在编译阶段捕获很多潜在...

Global site tag (gtag.js) - Google Analytics