Objective-C学习笔记六:选择结构二
来源:互联网 发布:陈奕迅歌词 知乎 编辑:程序博客网 时间:2024/06/09 21:36
之前介绍的都是独立的if选择结构,其实if语句也可以嵌套,也就是在一个if中嵌套另一个if/if-else语句,这个嵌套的if语句可以放在if块中,也可以放在else块中,那就要看具体的业务是怎么确定的。看下面这个程序示例:
编译运行后,我们得到如下结果:
说明我们嵌套的if判断对大小写字母起作用了。下面来看一个综合示例,也就是对我们之前Calsulator类进行扩展:
只需修改主函数,而类的定义和实现都不用修改,下面编译运行,我们得到如下结果:
可以看到我们的程序已经对各种情况的判断都做到了。这里最佳的写法是将除法的实现方法修改而最好不要在测试的main方法中来判断,那么我们可以将divide方法修改为如下形式:
再次运行测试,我们可以看到如下效果:
选择结构的第二种语句是switch,这和其它编程语言也是一致的,在switch(...)中输入条件表达式,根据条件表达式的结果寻找对应的case语句来执行。这里要注意的是如果case块中没有break时,那么会顺序继续执行下一个case块。如果没有匹配的case块,那么我们可以使用default块来接收例外的情况。整体的switch语句可以看做是if-else if-else语句的变体。我们对上面的计算器类Calculator进行修改,改为switch的实现方式:
下面运行程序,我们就看到了如下的结果:
为了说明break会结束case块的情况,我们可以在乘法部分加入一个小写的x作为运算符,代码修改如下:
此时我们若输入*号,那么没有找到这个case块中的break,程序会顺序执行下一个case块,也就是说这种写法我们可以使用*和x来作为乘号的表示。
数学中有一个质数(素数)的概念,也就是如果一个数只能被1和它本身整除,那么这个数就是质数,从2开始的质数有2,3,5,7,11等。那么求质数的算法是:对于一个整数n来说,看它是否能被从2到n-1之间的所有整数整除,如果存在这样的整数能整除n,那么它就不是质数了;反之即为质数。由此我们得到如下的程序代码:
编译运行,我们得到如下结果:
说明我们的程序可以正确得到结果,回过头来看看代码,我们可以看出isPrime这个变量就是用于判断是否符合质数检测条件的。那么它的值非0即1,对于这种只有两种结果的变量通常用于是非判断,我们称这种变量为BOOLEAN(布尔)变量。在Java语言中,我们可以使用关键字boolean来声明布尔值,而且Java中的布尔值只能是true或false。而在C语言中非0就意味这满足条件,那么对于大于等于1的值都是成立条件。
在Objective-C中我们可以使用BOOL来声明布尔变量,而且用true或YES来表示成立条件,使用false或NO来表示反面,那么上面的程序我们可以写作:
或者使用true/false,这种写法更为通用。
三目运算符是选择结构程序设计的最后一个重要概念,三目运算符也叫条件运算符。是通过两个符号?和:就可以表示if-else语句。语法为condition?exp1:exp2,当条件condition为true时,执行exp1,否则执行exp2。比如下面这个示例:
运行程序,我们得到如下输出:
可以看到三目运算符的作用了。对于下面这个运算exp1?exp2:exp3?exp4:exp5是如何进行的,只要记得三目运算符满足从右向左结合的原则,就是exp1?exp2:(exp3?exp4:exp5)就很好理解了。
- #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)就很好理解了。
0 0
- Objective-C学习笔记六:选择结构二
- Objective-C 学习笔记 6 选择结构
- Objective-C学习笔记(五)-选择结构
- Objective-C学习笔记五:选择结构一
- Objective C学习笔记(六)
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第六章 选择结构
- Objective-c 学习笔记(二)
- Objective C学习笔记(二)
- Objective-C 学习笔记二
- Objective-C 2.0 学习笔记四(循环结构和选择结构)
- Objective C2.0学习(六 选择结构)
- Objective C2.0学习(六 选择结构)
- Objective-C学习笔记(六)-类
- Objective-C学习笔记 循环结构
- Objective-C 学习笔记 5 循环结构
- Objective-C学习笔记四:循环结构
- IOS之Objective-C学习笔记(二)
- Objective-C学习笔记(二)-HelloWorld
- HDU3338 Kakuro Extension 网络流 isap
- QRcode二维码 参数介绍
- rtsp 服务器
- HDFS和MapReduce 架构分析----阿冬专栏
- LDA(Latent Dirichlet Allocation)主题模型算法
- Objective-C学习笔记六:选择结构二
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第十节:描边效果处理
- 生成模型与判别模型
- U3D 控制台输出
- 面试题20:顺时针打印矩形
- 设计一种算法,展示两人之间的“连接关系”或“社交路径”
- Linux串口编程教程(二)——终端IO介绍
- java的indexOf(String.indexOf 方法)
- CSU 1607: Do You Have The Template?(基于边权的树链剖分的完善模板)