接上文
之前介绍的都是独立的if选择结构,其实if语句也可以嵌套,也就是在一个if中嵌套另一个if/if-else语句,这个嵌套的if语句可以放在if块中,也可以放在else块中,那就要看具体的业务是怎么确定的。看下面这个程序示例:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool{
char c;
NSLog(@"Please input a single character:");
scanf("%c",&c);
if((c>='a' && c<='z') || (c>='A' && c<='Z')){
if(c>='A' && c<='Z'){
NSLog(@"It's an alphabetic character in upper case.");
}else{
NSLog(@"It's an alphabetic character in lower case.");
}
}else if(c>='0' && c<='9'){
NSLog(@"It's a digit.");
}else{
NSLog(@"It's a special character.");
}
}
return 0;
}
编译运行后,我们得到如下结果:
说明我们嵌套的if判断对大小写字母起作用了。下面来看一个综合示例,也就是对我们之前Calsulator类进行扩展:
int main(int argc, const char * argv[])
{
@autoreleasepool {
double val1,val2;
char operator;
Calculator *calc = [Calculator new];
NSLog(@"Pleae input your expression:");
scanf("%lf %c %lf",&val1,&operator,&val2);
[calc setAccmulator:val1];
if(operator=='+'){
[calc add:val2];
}else if(operator=='-'){
[calc subtract:val2];
}else if(operator=='*'){
[calc multiply:val2];
}else if(operator=='/'){
if(val2==0){
NSLog(@"Division by zero!");
}else{
[calc divide:val2];
}
}else{
NSLog(@"Unknown operator!");
}
NSLog(@"%.2f",calc.accmulator);
}
return 0;
}
只需修改主函数,而类的定义和实现都不用修改,下面编译运行,我们得到如下结果:
可以看到我们的程序已经对各种情况的判断都做到了。这里最佳的写法是将除法的实现方法修改而最好不要在测试的main方法中来判断,那么我们可以将divide方法修改为如下形式:
-(void) divide:(double)val
{
if(val!=0.0){
accmulator/=val;
}else{
NSLog(@"Division by zero!");
accmulator=NAN;
}
}
再次运行测试,我们可以看到如下效果:
选择结构的第二种语句是switch,这和其它编程语言也是一致的,在switch(...)中输入条件表达式,根据条件表达式的结果寻找对应的case语句来执行。这里要注意的是如果case块中没有break时,那么会顺序继续执行下一个case块。如果没有匹配的case块,那么我们可以使用default块来接收例外的情况。整体的switch语句可以看做是if-else if-else语句的变体。我们对上面的计算器类Calculator进行修改,改为switch的实现方式:
int main(int argc, const char * argv[])
{
@autoreleasepool {
double val1,val2;
char operator;
Calculator *calc = [Calculator new];
NSLog(@"Pleae input your expression:");
scanf("%lf %c %lf",&val1,&operator,&val2);
[calc setAccmulator:val1];
switch (operator) {
case '+':
[calc add:val2];
break;
case '-':
[calc subtract:val2];
break;
case '*':
[calc multiply:val2];
break;
case '/':
[calc divide:val2];
break;
default:
NSLog(@"Unknown operator!");
break;
}
NSLog(@"%.2f",calc.accmulator);
}
return 0;
}
下面运行程序,我们就看到了如下的结果:
为了说明break会结束case块的情况,我们可以在乘法部分加入一个小写的x作为运算符,代码修改如下:
case '*':
case 'x':
[calc multiply:val2];
break;
此时我们若输入*号,那么没有找到这个case块中的break,程序会顺序执行下一个case块,也就是说这种写法我们可以使用*和x来作为乘号的表示。
数学中有一个质数(素数)的概念,也就是如果一个数只能被1和它本身整除,那么这个数就是质数,从2开始的质数有2,3,5,7,11等。那么求质数的算法是:对于一个整数n来说,看它是否能被从2到n-1之间的所有整数整除,如果存在这样的整数能整除n,那么它就不是质数了;反之即为质数。由此我们得到如下的程序代码:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool{
int n, t, isPrime;
for(n = 2;n <= 100;n++){
isPrime=1;
for(t = 2;t < n;t++){
if(n%t==0){
isPrime=0;
}
}
if(isPrime!=0){
NSLog(@"%i",n);
}
}
}
return 0;
}
编译运行,我们得到如下结果:
说明我们的程序可以正确得到结果,回过头来看看代码,我们可以看出isPrime这个变量就是用于判断是否符合质数检测条件的。那么它的值非0即1,对于这种只有两种结果的变量通常用于是非判断,我们称这种变量为BOOLEAN(布尔)变量。在Java语言中,我们可以使用关键字boolean来声明布尔值,而且Java中的布尔值只能是true或false。而在C语言中非0就意味这满足条件,那么对于大于等于1的值都是成立条件。
在Objective-C中我们可以使用BOOL来声明布尔变量,而且用true或YES来表示成立条件,使用false或NO来表示反面,那么上面的程序我们可以写作:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool{
int n, t;
BOOL isPrime;
for(n = 2;n <= 100;n++){
isPrime=YES;
for(t = 2;t < n;t++){
if(n%t==0){
isPrime=NO;
}
}
if(isPrime!=0){
NSLog(@"%i",n);
}
}
}
return 0;
}
或者使用true/false,这种写法更为通用。
三目运算符是选择结构程序设计的最后一个重要概念,三目运算符也叫条件运算符。是通过两个符号?和:就可以表示if-else语句。语法为condition?exp1:exp2,当条件condition为true时,执行exp1,否则执行exp2。比如下面这个示例:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool{
int a, b, max;
NSLog(@"Please input 2 numbers:");
scanf("%i %i",&a,&b);
max=(a>b)?a:b;
NSLog(@"%i is greater",max);
}
return 0;
}
运行程序,我们得到如下输出:
可以看到三目运算符的作用了。对于下面这个运算exp1?exp2:exp3?exp4:exp5是如何进行的,只要记得三目运算符满足从右向左结合的原则,就是exp1?exp2:(exp3?exp4:exp5)就很好理解了。
接下文
- 大小: 94.9 KB
- 大小: 92.8 KB
- 大小: 73.4 KB
- 大小: 64.9 KB
- 大小: 158 KB
- 大小: 49 KB
分享到:
相关推荐
Objective-C是一种基于C语言的面向对象编程语言,它是苹果公司Mac OS X和iOS操作系统的主要开发语言。Objective-C的特性使其成为构建Cocoa框架应用程序的理想选择。以下是对Objective-C关键概念的详细解释: 1. **...
这篇“Objective-C学习笔记”旨在帮助初学者理解并掌握这种强大的编程工具。 一、Objective-C基础 1. 类与对象:Objective-C中的所有操作都是基于类的,类是对象的模板,而对象是类的实例。理解类和对象的概念是...
Objective-C 是一种面向对象的编程语言,起源于20世纪80年代,由Bard Cox发明,后来在NeXTSTEP操作系统中得到广泛应用。NeXT公司由Steve Jobs创立,并在1996年被苹果公司收购,Objective-C也随之成为苹果操作系统的...
根据给定的学习笔记,我们将从以下几个方面深入探讨Objective-C的基础语法: 1. **基本概念介绍**:包括类、对象、方法等基本概念。 2. **Objective-C核心类型**:如`NSString`、`NSArray`、`NSDictionary`。 3. **...
这份“Objective-C学习资料”包含了内置的学习笔记和各内容源码,是作者在近两个月的学习过程中整理出来的成果,旨在为初学者提供有价值的指导。 首先,让我们深入了解一下Objective-C的基本概念。Objective-C是在...
Objective-C中的打印输出主要通过`NSLog`函数完成,其用法类似于C语言的`printf`函数,但是使用`@`符号作为字符串的前缀。 ```objective-c NSLog(@"Hello, World!"); ``` ##### 2. 变量与运算 Objective-C支持多种...
4. 学习笔记:博主或其他学习者的总结和心得,有助于理解和记忆。 总之,掌握Objective-C是成为Mac和iOS开发者的基石。通过这个入门资源包,你可以系统地学习Objective-C,逐步建立起面向对象编程的思维,并熟悉...
### Objective-C基础教程第二版:OC入门基础教程 #### 一、Objective-C简介与环境搭建 **Objective-C**是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能,并且是开发iOS应用的主要语言之一。尽管...
Objective-C是一种简单的...Objective-C通过提供类定义,方法以及属性的语法,还有其他可以提高类的动态扩展能力的结构等,扩展了标准的ANSI C语言。类的语法和设计主要是基于Smalltalk,最早的面向对象编程语言之一。
这篇学习笔记主要涉及了Objective-C的基础知识,包括对象创建、类的结构、文件导入、实例变量、接口与实现、内存管理和属性。 1. **对象创建**: - `string`方法创建的字符串对象是自动释放的,意味着系统会在适当...
Objective-C是在C语言基础上扩展的,因此它保留了C语言的所有特性,如变量、函数、控制结构等。它的主要扩展是增加了消息传递机制和类的概念,这使得它成为一种面向对象的语言。消息传递是Objective-C的核心,通过向...
Objective-C 是苹果平台下开发 iOS 和 macOS 应用的主要编程语言之一,虽然 Swift 已经成为新宠,但Objective-C 的重要性仍然不可忽视,尤其是因为许多现有的类库和框架仍由 Objective-C 编写。以下是一份关于...
学习 Objective-C,不仅要掌握语法,还要理解其运行时系统和苹果提供的框架,如 Foundation 框架,这些都对于开发 iOS 和 macOS 应用至关重要。在实践中,不断编写代码和调试将是深化理解的最佳途径。
```objective-c -(BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } ``` - **解析**:当用户在一个文本框中输入并点击键盘上的“返回”键时,会调用...
- **目标:** 通过这个过程熟悉iOS开发环境,包括Xcode IDE、Swift或Objective-C语言等。 **2.2 移植到iPad** - **理解API差异:** 虽然许多API在iPhone和iPad上相同,但也有部分特定于某一平台的功能。 - **重新...
2. **类与对象**:Objective-C基于C语言,增加了类的概念。类是对象的蓝图,而对象是类的实例。定义类时,需要指定其属性(成员变量)和方法(函数)。 3. **类别(Category)**:Objective-C允许为已存在的类添加...
根据提供的文件信息,我们可以整理出一系列关于Objective-C的基础知识点,主要涵盖了语法结构、变量类型、内存管理、类与对象操作等方面。以下是对这些知识点的详细解释: ### 1. 类的基本结构 - **声明...
4. 兼容Objective-C:Swift允许开发者在同一个项目中同时使用Objective-C和Swift编写的代码,方便了从Objective-C语言向Swift的过渡。 知识点三:Swift基础结构 Swift的基础结构包含了多种数据类型,包括但不限于:...
【基于C语言的学习笔记(附代码)】 C语言是一种强大的、高效的编程语言,广泛应用于操作系统、嵌入式系统以及各种软件开发。这份学习笔记涵盖了C语言的基础、高级、系统和工具四个部分,旨在帮助读者全面理解和...