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

[url=http://sarin.iteye.com/blog/1756872]接上文[/url]
和其它编程语言一样,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;
}

编译执行得到结果:

[img]http://dl.iteye.com/upload/attachment/0078/6462/174f9b46-30d2-38a6-878f-6f33745bea58.png[/img]

本程序首先定义了一个长度为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;
}

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

[img]http://dl.iteye.com/upload/attachment/0078/6464/0dac9c20-6dab-31ef-9d63-e18b75819ed2.png[/img]

那么说明我们的两层嵌套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;
}

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

[img]http://dl.iteye.com/upload/attachment/0078/6466/ad3e3418-62f3-3b31-b2ba-9d1e485ef7c2.png[/img]

这是一个正整数前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;
}

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

[img]http://dl.iteye.com/upload/attachment/0078/6468/0ee49b9c-e809-3281-bb5b-3f4bd90215c0.png[/img]

说明程序是没有问题的。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;
}

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

[img]http://dl.iteye.com/upload/attachment/0078/6470/32d47368-2b5d-30b7-81d6-d60602bc0ddd.png[/img]

程序很容易理解,我们将数字对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;
}

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

[img]http://dl.iteye.com/upload/attachment/0078/6472/adc35100-927b-3174-a608-26e7f003ed87.png[/img]

为什么是这样的结果,来解释一下,我们对循环变量i是否为3时做出判定,运用了break和continue。那么对于break,这表示终止所有循环,也就是循环退出了,所以看到第一个for循环输出3之后就没有了。而对于continue,相当于终止本次循环,也就是continue之后的语句不执行了,而整个循环并没有结束,还要继续执行,所以看到数组第四个元素4没有打印出来。通过这两个for循环就很好解释了break和continue的使用。
不过,不要轻易使用break和continue,它们会使得程序很难理解。
[url=http://sarin.iteye.com/blog/1758593]接下文[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值