位運算、switch、循環結構

1、位運算(6種)

與:&,對應位上都是1時才爲1
      3    011
    & 5    101
           001
或:|,對應位上有1就爲1
        3    011
    |   5    101
             111
異或:^,對應位上不同就爲1 相同就爲0(等價於找不同)
       3    011
    ^  5    101
            110
取反:~,按位取反
        3    011
    ~        100
左移:<<,整體左移,低位補0
       3    0000011
    <<      0000110
右移:>>,整體右移,補位時原高位是什麼就補什麼
       -3    11111101
    >>       11111110

原碼:將一個數直接轉換成二進制就是原碼,負數的原碼是其絕對值的補碼
反碼:原碼按位取反
補碼:反碼加1,負數就是用補碼錶示
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"%d", 5 & 3);
        NSLog(@"%d", 5 | 3);
        NSLog(@"%d", ~5);//-1-(5)
        NSLog(@"%d", ~-5);//-1-(-5)
        NSLog(@"%d", 5 ^ 3);

        int a = 1;
        a = a << 1;
        NSLog(@"%d", a);
        a = a >> 1;
        NSLog(@"%d", a);
        a = -1;
        a = a >> 1;
        NSLog(@"%d", a);
    }
    return 0;
}

2、switch語句

表達式的值必須是整數
case後面必須是整數常量,不能重複,但未順序要求
break語句用於終止switch語句運行
default語句用於switch後面的表達式的值與所有case後面的值均不相同時,執行其後的語句。可有可無
#import <Foundation/Foundation.h>

int main()
{
    @autoreleasepool {
        //從鍵盤輸入一個1~7之間的整數,如果輸入的是1,則輸出星期一,2輸出星期二,以此類推
        int day;
        NSLog(@"請輸入一個1~7之間的整數:");
        scanf("%d", &day);

        if (day < 1)
        {
            NSLog(@"輸入錯誤");
        }
        else if (day == 1)
        {
            NSLog(@"星期一");
        }
        else if (day == 2)
        {
            NSLog(@"星期二");
        }
        else if (day == 3)
        {
            NSLog(@"星期三");
        }
        else if (day == 4)
        {
            NSLog(@"星期四");
        }
        else if (day == 5)
        {
            NSLog(@"星期五");
        }
        else if (day == 6)
        {
            NSLog(@"星期六");
        }
        else if (day == 7)
        {
            NSLog(@"星期日");
        }
        else
        {
            NSLog(@"輸入錯誤");
        }

        //float day1;
        switch (day)//表達式的值一定是整數,不能是浮點數
        {
            case 1://有且僅有一個整數常量
                NSLog(@"星期一");
                break;
            case 2://不能是變量、表達式、浮點數、字符串
                NSLog(@"星期二");
                break;
            case 3://不能重複,但沒有順序要求
                NSLog(@"星期三");
                break;//結束switch語句的運行
            case 4:
                NSLog(@"星期四");
                break;
            case 5:
                NSLog(@"星期五");
                break;
            case 6:
                NSLog(@"星期六");
                break;
            case 7:
                NSLog(@"星期日");
                break;
            default://所有case後面的常量與switch後面的表達式的值都不相同時,執行其後的語句。可有可無的
                NSLog(@"輸入錯誤");
                break;
        }

        char x;
        NSLog(@"請輸入一個數字:");
        scanf("%*c");
        scanf("%c", &x);
        switch (x) {
            case '0':
                NSLog(@"x==0");
                break;
            case '1':
                NSLog(@"x==1");
                break;
            case '2':
                NSLog(@"x==2");
                break;
            case '3':
                NSLog(@"x==3");
                break;
            case '4':
                NSLog(@"x==4");
                break;
            default:
                NSLog(@"error");
                break;
        }

        //從鍵盤輸入一個年份值和月份值,輸出該月有幾天
        int year;
        NSLog(@"請輸入一個年份值:");
        scanf("%d", &year);
        int month;
        NSLog(@"請輸入一個月份值:");
        scanf("%d", &month);

        if (month < 1 || month > 12)
        {
            NSLog(@"輸入錯誤");
            return 0;
        }

        day = 31;
        switch (month) {
            case 4:
            case 6:
            case 9:
            case 11:
                day = 30;
                break;
            case 2:
                day = 28 + (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
                break;
        }
        NSLog(@"%d年%d月有%d天", year, month, day);


        //從鍵盤輸入一個百分制成績,輸出其等級成績
        int score;
        NSLog(@"請輸入一個百分制成績:");
        scanf("%d", &score);

        switch (score) {
            case 90 ... 100://...表示score>=90&&score<=100
                NSLog(@"優");
                break;
            case 60 ... 89:
                NSLog(@"一般");
                break;
            case 0 ... 59:
                NSLog(@"不及格");
                break;
            default:
                NSLog(@"輸入錯誤");
                break;
        }
    }
    return 0;
}

3、循環結構

for循環
    三個表達式
        三個表達式的特殊用法
        固定次數的循環
while循環:用於不固定次數的循環
#import <Foundation/Foundation.h>

int main()
{
    @autoreleasepool {
        //求PI的值
        //PI=4*(1-1/3+1/5-1/7+1/9-1/11+1/13...
        double sum1 = 0;
        for (int i = 1; i < 2100000000; i += 4)
        {
            sum1 += 1.0 / i;
        }

        double sum2 = 0;
        for (int i = 3; i < 2100000000; i += 4)
        {
            sum2 += 1.0 / i;
        }

        NSLog(@"PI=%.15lf", 4 * (sum1 - sum2));


        //求1,2,3,5,8,13,21,...的和
        int n1 = 1;
        int n2 = 2;
        int sum = n1 + n2;
        for (int i = 1; i < 100; i++)
        {
            int temp = n1 + n2;
            sum += temp;
            n1 = n2;
            n2 = temp;
        }
    }
    return 0;
}
#import <Foundation/Foundation.h>

int main()
{
    @autoreleasepool {
        int i = 0;
        for (; i < 10; i++)//表達式一可以爲空
        {
            printf("%d ", i);
        }
        printf("\n");
        printf("%d\n", i);

//        //死循環
//        for (int i = 0; ; i++)//表達式二也可以爲空,當表達式二爲空時,等效於爲真
//        {
//            printf("%d ", i);
//        }
//        printf("\n");


        for (int i = 0; i < 10; )
        {
            printf("%d ", i);
            i++;
        }
        printf("\n");

//        for (;;)//同時省略三個表達式
//        {
//            printf("a");
//        }

        for (int i = 0, j = 0, k = 0; i * j * k - 10 < 30; i++, j += 2, k++)
        {
            NSLog(@"i=%d,j=%d,k=%d", i, j ,k);
        }
    }
    return 0;
}

隨機數範圍公式(m~n):
srand((unsigned)time(0))//該句一定要放在主函數的第一句
x = rand()
這裏寫圖片描述

#import <Foundation/Foundation.h>

int main()
{
    @autoreleasepool {
        srand((unsigned)time(0));

        int x;
        x = rand();//0~2^31-1
        NSLog(@"%d", x);

        x = rand() % 100;
        NSLog(@"%d", x);
    }
    return 0;
}

思考練習

猜數字遊戲,計算機隨機生成一個數,然後手動輸入數字去猜,並提示大了小了,猜對說猜對了
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
解析:

#import <Foundation/Foundation.h>

int main()
{
    @autoreleasepool {
        srand((unsigned)time(0));

        int random = rand() % 100 + 1;
        int guess = 0;
        while (guess != random)
        {
            NSLog(@"請輸入你猜的數:");
            scanf("%d", &guess);
            if (guess > random)
            {
                NSLog(@"大了");
            }
            else if (guess < random)
            {
                NSLog(@"小了");
            }
        }
        NSLog(@"恭喜,你猜對了");
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章