01-運算符-基本概念
優(yōu)先級(1~15 最高1則為() )构拳、結(jié)合性(從左至右【x+y-z】鹅巍、從右至左【number=10】)
02-算術(shù)運算符
+妙同、-、*、/、%
注意 : 1)取模運算只能用于整數(shù)、2) 取模運算的正負(fù)性 取決于左邊的操作數(shù)、3)如果取模運算的左邊小于右邊, 那么結(jié)果就是左邊
03-算術(shù)運算符-優(yōu)先級和結(jié)合性
算術(shù)運算符它是左結(jié)合性,從左至右計算
算術(shù)運算符中 * / & 優(yōu)先級大于 + -
04-類型轉(zhuǎn)換
自動類型轉(zhuǎn)換(隱式轉(zhuǎn)化) int number = 10.8; // 輸出10
強(qiáng)制類型轉(zhuǎn)換(顯示轉(zhuǎn)換) int number1 = (int)10.8;
自動類型提升
算術(shù)運算注意點 : 參與運算的操作數(shù)是什么類型, 那么計算出來的結(jié)果就是什么類型 double result = (double)1 / 2; // 1.0 / 2.0 == 0.5;
05-賦值運算符
最簡單的賦值運算,將等號的值賦值給等號左邊的變量
賦值運算符的結(jié)核性: 從右至右
復(fù)合運算會先計算等號右邊的值,然后再用計算出來的結(jié)果 和 等號左邊的值進(jìn)行計算
06-自增自減
自增: 如果想讓某一個數(shù)加1 可以使用自增
自減: 如果想讓某一個數(shù)減1 可以使用自減
自增自減 寫在前面和后面的區(qū)別
如果++ 寫在變量的前面, 那么會先將變量自增再用自增之后的結(jié)果參與運算
如果++ 寫在變量的后面, 那么會先將變量的值參與運算 再將變量自增
總結(jié)一句話 : ++在前, 先自增再運算, ++在后, 先運算再自增
常量是不可以自增的
07-自增自減-拆分
int a = 10; int b = a++; (拆分: int b = a; a = a + 1;) 結(jié)果 a = 11 b = 10;
int a = 10; int b = ++a; (拆分: a = a + 1 , b = a;) 結(jié)果 a = 11 b = 11;
08-sizeof運算符
sizeof 可以用來計算一個變量或一個常量钾虐、一個數(shù)據(jù)類型所占的內(nèi)存字節(jié)數(shù)
注意 : sizeof是一個運算符, 不是一個函數(shù)
利用sizeof計算的格式 : sizeof(變量/常量/數(shù)據(jù)類型);
如果利用sizeof計算常量/變量, 那么可以省略() -- int number = sizeof 10;
注意 : 如果利用sizeof計算數(shù)據(jù)類型, ()不能省略
09-逗號運算符
只要運算符 那么一定會有運算結(jié)果, 逗號運算符也不例外.
逗號運算符的結(jié)果是 最后一個表達(dá)式的結(jié)果 int result = ((a = a + 5), (b = b +1)); // 結(jié)果 a = 10 + 5 = 15 , b = 5 + 1 = 6;
10-關(guān)系運算符
/*
關(guān)系運算符:
>
<
>=
<=
==
!=
關(guān)系運算符的返回值只有兩種,要么真,要么假,1(真)和0(假)
int result = a > b; // 嗎? 大于, 真,非0即真.
*/
關(guān)系運算符注意點
關(guān)系運算符也有優(yōu)先級, > < >= <= 優(yōu)先級大于 == != 【int result = 1 == 10 > 5 ;】
算術(shù)運算符的優(yōu)先級 大于 關(guān)系運算符 【int result = 1 + 1 < 2 + 2;】
關(guān)系運算符的結(jié)合性 : 從左至右 【int result = 10 > 3 > 1;】
如果優(yōu)先級和結(jié)合性同時存在, 先優(yōu)先級 再 結(jié)合性 【int result = 10 + 1 > 5 + 4 == 3 > 1;】 // 【int result = ((10 + 1) > (5 + 4)) == (3 > 1);】
11-邏輯運算符
/*
邏輯運算符的返回值 只有兩種 : 要么真要么假,要么是1(真),要么是假(0)
&& (與運算) 邏輯非結(jié)合性 : 從左至右
格式 : 表達(dá)式1 && 表達(dá)式2
只有表達(dá)式1 和 表達(dá)式都為 真 的時候, 邏輯與表達(dá)式才返回真
如果表達(dá)式1 或者 表達(dá)式2 中有一個是假, 那么邏輯 與 表達(dá)式 返回的結(jié)果都是 假
int result = 10 > 8 && 5 > 3; // 1 && 1 = 1;
int result = 10 > 8 && 5 > 8; // 1 && 0 = 0;
口訣 : 一假則假
邏輯與有一個特點 : 一假則假, 所以前面的表達(dá)式的值為假, 那么后面的表達(dá)式?jīng)]必要參與運算 【int a = 10; int result = 10 > 18 && a++ > 5;】 0 && 1 = 0 a=10
判斷一個范圍 (3<a<5); a= 10; 正確的C語言寫法 (a>3) && (a<5);
|| (或運算) 邏輯非結(jié)合性 : 從左至右
格式 : 表達(dá)式1 !! 表達(dá)式2
只要表達(dá)式1 或者 表達(dá)式2 中有一個是 真的,邏輯或表達(dá)式返回的值 就是真
只要表達(dá)式1 和 表達(dá)式2的值都是假, 邏輯或的值才是假
int result = 10 > 8 || 5 > 8; // 1 || 0 = 1
口訣 : 一真則真
【int a = 10;int result = 10 > 18 || ++a > 5;】 0||1 = 1 a= 11
邏輯與 和 邏輯或 的這個特點,稱之為邏輯運算符的短路
! (非運算) 邏輯非結(jié)合性 : 從右至左
如果表達(dá)式是真, 就返回假
如果表達(dá)式是假, 就返回真
【int result = !1;】 0
取反
*/
注意點:由于C語言規(guī)定 : 任何數(shù)值都有真假性, 非0即真, 所有邏輯運算符 可以直接與 數(shù)值進(jìn)行計算
12-三目運算符
三目運算符格式 : 表達(dá)式? 結(jié)果A : 結(jié)果B
結(jié)合性 : 從左至右
只要條件表達(dá)式 為真 就返回結(jié)果A, 如果條件表達(dá)式為假, 那么就返回結(jié)果B
【int result = (a > b) ? a : b;】 a 大于 b 嗎? 如果 a 大于 b 就返回 a, 否則返回b
三目運算符的優(yōu)先級 : 低于關(guān)系運算符 和 算術(shù)運算符
/*
1.閱讀性比較差
2.性能也比較差
int result = (num1 > num2 ? num1 : num2) > num3 ? (num1 > num2 ? num1 : num2) : num3; // 計算了兩次 (num1 > num2 ? num1 : num2)
*/
14-if-基本概念
/*
第一種格式:
if(條件表達(dá)式)
{
語句...
}
只要條件表達(dá)式 為真, 那么就會執(zhí)行if后面大括號中的內(nèi)容
第二種格式:
if (條件表達(dá)式)
{
語句...
}else
{
語句...
}
只要條件表達(dá)式 為真, 那么就會執(zhí)行if后面大括號中的內(nèi)容
如果 條件表達(dá)式 不為真, 那么就會執(zhí)行else后面大括號中的內(nèi)容
規(guī)律 : 兩個大括號中的內(nèi)容, 一定會有一個會被執(zhí)行
第三種格式:
if (條件表達(dá)式1)
{
語句...
}
else if (條件表達(dá)式2)
{
語句...
}
else if (條件表達(dá)式3)
{
語句...
}
....
else
{
語句...
}
只要 條件表達(dá)式1 為真, 那么就會執(zhí)行if后面大括號中的內(nèi)容,而其他大括號不會被執(zhí)行
如果 條件表達(dá)式1 不為真,那么就會去判斷 條件表達(dá)式2 , 如果 條件表達(dá)式2 為真就會執(zhí)行 條件表達(dá)式2后面大括號中的內(nèi)容 其他的else if以此類推.
當(dāng)前面所有的if, else if 的條件表達(dá)式都不為真, 就會執(zhí)行else后面大括號中的內(nèi)容
規(guī)律:
眾多大括號只會執(zhí)行其中一個
如果執(zhí)行到后面大括號中的內(nèi)容,代表前面的所有條件都不滿足
第四種格式:
if(條件表達(dá)式)
語句...
如果省略if后面的大括號,當(dāng)條件表達(dá)式為真時, 只會執(zhí)行if后面的第一條語句
第五種格式 : (if嵌套)
if(添加表達(dá)式)
{
if(添加表達(dá)式)
{
}
}
else if(添加表達(dá)式)
{
if(添加表達(dá)式)
{
}
}
*/
15-if-練習(xí)1
1. 從鍵盤輸入一個整數(shù),判斷其 是不是偶數(shù), 如果是偶數(shù)就輸出YES,否則輸出NO
2. 接收用戶輸入的1~7的整數(shù), 根據(jù)用戶輸入的整數(shù), 輸出對應(yīng)的星期幾
3.接收用戶輸入的一個整數(shù) month代表月份, 根據(jù)月份輸出對應(yīng)的季節(jié)
16-if-練習(xí)2
4. 鍵盤輸入兩個整數(shù), 判斷大小后輸出較大的那個數(shù)
5. 鍵盤輸入3個整數(shù), 判斷大小后輸出較大的那個數(shù)
5. 從鍵盤輸入3個整數(shù),排序后輸出 (利用num1 和 num2 進(jìn)行比較, 如果 num1 小于 num2 交換兩個變量的值 -- 利用num1 和 num3 進(jìn)行比較, 如果 num1 小于 num3 交換兩個變量的值, 利用num2 和 num3 進(jìn)行比較, 如果 num2 小于 num3 交換兩個變量的值)
17-if-注意點
以后如果要判斷其中一個變量 是否等于某一個值, 建議把常量寫前面, 變量寫后面 【if (18 == age){語句...}】
if 如果省略大括號, 就會管理離他最近的一條語句, 二; 是一條空語句 【if (0);printf("lyh");】
如果要在if后面定義變量, 那么必須寫上大括號【int number = 19;printf("number = %i\n",number);】
如果if ,else省略大括號, 那么else會匹配離他最近的if
18-石頭剪子布
#include <stdlib.h>
arc4random_uniform(3); // arc4random_uniform 方法會根據(jù)傳入的整數(shù) 生成一個隨機(jī)數(shù)
生成的值 就是 0~[N-1]的值
0~2
快捷鍵 :
上下移動 : command + option + ]/[
左右移動 : command + ]/[