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