目錄
1. if語句
1)if
2)? else
3)分支中包含多條語句
4)if嵌套
2.關系操作符
3.條件操作符
4.邏輯操作符:&&? ||? !
1) 邏輯取反運算符 !?編輯
2 與運算符?編輯
3)?或運算符?編輯
4) 閏年的判斷
5)?短路
?
C語言是結構化的程序設計語言,這里的結構指的是順序結構、選擇結構、循環結構,C語言是能夠實現這三種結構,通過使用 if 、switch 實現分支結構,使用 for 、while 、do while 實現循環結構
1. if語句
1)if
if ( 表達式 )//表達式成立(為真)則語句執行,表達式不成立(為假)則語句不執行
{語句
}
在C語言中,0為假,非0表示真,如果表達式的結果是0則語句不執行,如果表達式的結果不是0則語句執行
輸入一個整數,判斷是否為奇數:
#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);if(num % 2 == 1)printf("%d 是奇數\n", num);return 0;
}
2)? else
如果一個數不是奇數那就是偶數了,所以我們可以通過 if...else... 語句來表示
if ( 表達式 )語句1
else語句2
輸入一個整數,判斷是否為奇數,如果是奇數打印是奇數,否則打印數偶數
#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);if(num % 2 == 1)printf("%d 是奇數\n", num);elseprintf("%d 是偶數\n", num);return 0;
}
3)分支中包含多條語句
因為if 語句只能控制一條語句,通過使用 { } 將代碼括起來,同樣else 后也可以跟上大括號
4)if嵌套
在if else 語句中, else 可以與另一個if 語句連用,構成多重判斷。
比如:要求輸入一個整數,判斷輸入的整數是0,還是正數或者負數
#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);if(num == 0)printf("輸入的數字是0\n");else if(num > 0) //這里的 if 相當于嵌套在els語句中,形成了嵌套結構printf("輸入的數字是正數\n");elseprintf("輸入的數字是負數\n");return 0;
}
5)else的懸空問題
如果有多個if 和else ,可以記住這樣一條規則, else 總是跟最接近的if 匹配
#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");//打印為空 第一個if為假 而if...else嵌套在第一個if中return 0;
}
2.關系操作符
比較的表達式稱為 “關系表達式”(relational expression),里面使用的運算符就稱為“關系運算符”(relational operator)
?? > 大于運算符
?? < 小于運算符
?? >= 大于等于運算符
?? <= 小于等于運算符
?? == 相等運算符(相等運算符== 與賦值運算符= 是兩個不一樣)
?? != 不相等運算符
關系表達式通常返回0 或1 ,表示真假。
容易錯誤的是:多個關系運算符不宜連用
i < j < k//關系運算符是從左到右計算,所以實際執行的是下面的表達式//(i < j) < k//i < j 返回 0 或1 ,所以最終是 0 或 1 與變量k 進行比較。如果想要判斷變量j的值是否在 i //和 k 之間,應該使用下面的寫法:i < j && j < k
3.條件操作符
條件操作符也叫三目操作符,需要接受三個操作數
exp1 ? exp2 : exp3
條件操作符的計算邏輯是:如果exp1 為真, exp2 計算,計算的結果是整個表達式的結果;如果 exp1 為假, exp3 計算,計算的結果是整個表達式的結果
#include <stdio.h>
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);b = a>5 ? 3:-3;printf("%d\n", b);return 0;
}
4.邏輯操作符:&&? ||? !
? ! :邏輯取反運算符(改變單個表達式的真假)
? && :與運算符,就是并且的意思(兩側的表達式都為真,則為真,否則為假)
? || :或運算符,就是或者的意思(兩側至少有一個表達式為真,則為真,否則為假)
1) 邏輯取反運算符 !
?
#include <stdio.h>
int main()
{int flag = 0;if(!flag)//如果flag 為真, !flag 就是假,如果 flag 為假, !flag 就是真{printf("do something\n");}return 0;
}
2 與運算符
?
#include <stdio.h>
int main()
{int month = 0;scanf("%d", &month);if(month >= 3 && month <= 5)//是month既要大于等于3,又要小于等于5{printf("春季\n");}return 0;
}
3)?或運算符
#include <stdio.h>
int main()
{int month = 0;scanf("%d", &month);if(month == 12 || month==1 || month == 2)//月份是12月或者1月或者2月是冬天{printf("冬季\n");}return 0;
}
4) 閏年的判斷
輸入一個年份year,判斷year是否是閏年
1. 能被4整除并且不能被100整除是閏年
2. 能被400整除是閏年
#include <stdio.h>
//代碼1
int main()
{int year = 0;scanf("%d", &year);if(year%4==0 && year%100!=0)printf("是閏年\n");else if(year%400==0)printf("是閏年\n");return 0;
}
#include <stdio.h>
//代碼2
int main()
{int year = 0;scanf("%d", &year);if((year%4==0 && year%100!=0) || (year%400==0))printf("是閏年\n");return 0;
}
5)?短路
在C語言邏輯運算符中,總是先對左側的表達式求值,再對右邊的表達式求值,如果左邊的表達式滿足邏輯運算符的條件,就不再對右邊的表達式求值。這種情況稱為“短路”
if(month 1 >= 3 && month <= 5)// && 的左操作數是 month >= 3 ,右操作數是month <= 5
//當左操作數month >= 3 的結果是 0 的時候,即使不判斷month <= 5 ,整個表達式的結果也是0(不是春季)
所以,對于&&操作符來說,左邊操作數的結果是0的時候,右邊操作數就不再執行
if(month == 12 || month==1 || month == 2)//如果month == 12則不用再判斷month是否等于1或者2,
//整個表達式的結果也是1(是冬季) 所以, || 操作符的左操作數的結果不為0時,就無需執行右操作數
謝謝觀看