位运算、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;
}
发布了52 篇原创文章 · 获赞 5 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/shuan9999/article/details/52325076
今日推荐