[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第六章 选择结构 课后题6-4&6-6&6-7

本篇讲解第六章的课后题,6-4,6,7。代码皆为本人原创,如果有不足之处,望各位指点。

课后题 6-4

题目: 
编写一个简单的打印计算器,允许用户输入以下形式的表达式

number operator
1
代码:

#import <Foundation/Foundation.h>


@interface Calculator : NSObject

//累加器方法

-(void) setAccumulator: (double) value;
-(void) clear;
-(double) accumulator;

//算术方法
-(void) add: (double) value;
-(void) subtract: (double) value;
-(void) multiply: (double) value;
-(void) divide: (double) value;

@end

@implementation Calculator
{
    double accumulator;
}

-(void) setAccumulator:(double)value
{
    accumulator = value;
}

-(void) clear
{
    accumulator =  0;
}

-(double) accumulator
{
    return accumulator;
}

-(void) add:(double)value
{
    accumulator += value;
}

-(void) subtract:(double)value
{
    accumulator -= value;
}

-(void) multiply:(double)value
{
    accumulator *= value;
}

-(void) divide:(double)value
{
    accumulator /= value;
}
@end


int main(int argc, const char * argv[])

{
    @autoreleasepool

    {        
        double value1;
        char operation;

        Calculator *deskCalc = [[Calculator alloc] init];

        NSLog(@"Begin Calculations");
        scanf(" %lf %c", &value1, &operation); //输入数字和字符


        if (operation == 'S') //START,开始计算

            [deskCalc setAccumulator: value1];
             NSLog(@" = %.2f", [deskCalc accumulator]);

          while (operation != 'E') //不输入'E'的前提下持续输入

          {
            scanf(" %lf %c", &value1, &operation);

            if (operation == 'S')
                 [deskCalc setAccumulator: value1];

            else if( operation == '+')
                 [deskCalc add: value1];

            else if (operation == '-')
                 [deskCalc subtract: value1];

            else if (operation == '*')
                 [deskCalc multiply: value1];

            else if (operation == '/')

                if (value1 != 0)

                 [deskCalc divide: value1];

                else
                    NSLog(@"The divider is zero");

            else if (operation != 'S' || operation != 'E' || operation != '+' || operation != '-' || operation != '*' || operation != '/') //输入错误操作字符

                 NSLog(@"Please enter the right operation");


            NSLog(@"=%.2f", [deskCalc accumulator]);

            if (operation == 'E') //EXIT,终止计算器
            break;
         }

        NSLog(@" = %.2f", [deskCalc accumulator]);
        NSLog(@"End of Calculation");        
    }    
    return 0;
}

课后题 6-6

题目: 
用英语字母正序显示输入数字的各个位的数字。如果输入324,则显示 
three 
two 
four

代码:


#import <Foundation/Foundation.h>

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

        int i, j, number_0,number, right_digit,counter_0,counter,ten,left_digit;

        counter = 0;
        NSLog(@"Enter your number:");
        scanf("%i", &number_0);
        number = number_0;


        NSLog(@"The reverse is:");
        while (number != 0)
        {

            right_digit = number % 10;
            number /= 10;
            counter_0++;

        }
            counter = counter_0; //保存位数

        for (i = 1; i <= counter_0 ; i++)
        {
            ten = 1;

            //10的j次幂
            for (j = 1; j <= counter-1 ; j++)
            {
                  ten = ten * 10;                
            }

            left_digit = number_0 / ten;

            switch (left_digit) {
                case 1:
                    NSLog(@"one");
                    break;

                case 2:
                    NSLog(@"two");
                    break;

                case 3:
                    NSLog(@"three");
                    break;

                case 4:
                    NSLog(@"four");
                    break;

                case 5:
                    NSLog(@"five");
                    break;

                case 6:
                    NSLog(@"six");
                    break;

                case 7:
                    NSLog(@"seven");
                    break;

                case 8:
                    NSLog(@"eight");
                    break;

                case 9:
                    NSLog(@"nine");
                    break;

                case 0:
                    NSLog(@"zero");
                    break;

                default:
                    break;
            }

            counter--;
            number_0 = number_0 - left_digit * ten;
        }
    }

    return 0;
}


课后题 6-7

题目: 
对于例题6-10的低效性的改进: 
1. 需要略过偶数查找素数。 
2. 若发现第一个整除的数,则立即判定是非素数(因为比较大的奇数,可以整除的数不止一个)。

代码:

#import <Foundation/Foundation.h>

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

        int p, d;
        BOOL isPrime; // isPrime, Boolean变量,判定是否是素数


        for ( p = 2; p <= 100 ; ++p) //查找100以内的素数
        {
            isPrime = YES;  //初始化isPrime

            if (p % 2 == 0) //判定是否是偶数
                continue;   //跳出此次循环。

            for (d = 2; d < p  && isPrime == NO ; ++d)

                if (p % d == 0)
                    isPrime = NO;

                if (isPrime == YES)
                    NSLog(@"%i", p);
        }
    }    
    return 0;
}

————————————————
版权声明:本文为CSDN博主「J_Knight」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/apple890111/article/details/46673267

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值