天天看點

[學習筆記—Objective-C]《Objective-C 程式設計 第6版》第六章 選擇結構 課後題6-4&6-6&6-7

本篇講解第六章的課後題,6-4,6,7。代碼皆為本人原創,如果有不足之處,望各位指點。

課後題 6-4

題目:

編寫一個簡單的列印電腦,允許使用者輸入以下形式的表達式

代碼:

#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 =  ;
}

-(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 != )

                 [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 ;
}
           

課後題 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 = ;
        NSLog(@"Enter your number:");
        scanf("%i", &number_0);
        number = number_0;


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

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

        }
            counter = counter_0; //儲存位數

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

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

            left_digit = number_0 / ten;

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

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

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

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

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

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

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

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

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

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

                default:
                    break;
            }

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

    return ;
}

           

課後題 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 = ; p <=  ; ++p) //查找100以内的素數
        {
            isPrime = YES;  //初始化isPrime

            if (p %  == ) //判定是否是偶數
                continue;   //跳出此次循環。

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

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

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