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