21天學習C語言-第四天
語句,表示式和運算子。
語句(Statements)
C中
語句
指的是一個讓計算機執行某任務的完整指令,一般來說一行為一個語句,以分號結尾。栗子:
x =2 + 3; //計算機執行2+3並存到x中,一個簡單的語句
以下各寫法,操作是一樣的:
x=2+3; //變數和運算元之間沒有空格 x = 2 + 3; //變數和運算元之間有空格 x= 2 + 3; //變數和運算元不在一行
C不關心語句中的空格,編譯器只識別字符,會自動忽略空格。處於可讀性的考慮,建議使用第二種寫作方式。編譯器並不會忽略常量中的空格,比如:
"HELLO WORLD, NICE TO MEET YOU!" //單詞之間的空格不會被忽略掉
特殊情況也存在多行為一個語句,並且有不以分號結尾的語句。例子:
// 不以分號結尾 #include<stdio.h> #define PI 3.14 // 一個語句折行,雖然不好看,但是合法 printf( "hello world!" ); // 在字串中直接折行是不合法的 printf(“Hello, world!”); // 如果需要折行,在折行處新增\ printf(“Hello,\ world!”);
空語句(Null Statements)
就是什麼也不做的語句,直接放置一個分號;
,表示當前行的程式碼不做任何操作。
複合語句(Compound Statements)
是多個語句在一起組成的一個語句塊,差不多所有的程式中都包含了複合語句,例子:
{ x = 2; y = x + 1; }
表示式(Expressions)
表示式
是計算數值的任何東西(按原文直譯),感覺就是資料本身,和儲存資料的變數,常量都是表示式,同時也包含資料計算的操作。
簡單表示式(Simple Expressions)
是單一組成,比如變數,常量等。
PI // 常量π 0// 數字 name // 變數
複雜表示式(Complex Expressions)
與單一相對,由多個單一組成。
x + y z = x + 10;
運算子(Operators)
運算子
是命令計算機對運算元執行對應操作的符號。
賦值運算子(Assignment Operator)
賦值運算子
就是等號(=),把一個值給一個變數。
x = y
數學運算子(Mathematical Operators)
數學運算子
顧名思義,進行數學運算的符號。C中數學運算包括兩個一元運算子(Unary Mathematical Operators)
和5個二元運算子(Binary Mathematical Operators)
。
一元運算子
表示運算元只有一個的運算子,既++和--,也就是大家熟知的自增和自減運算。
int x = 10, y = 9; x ++; // 11 y --; // 8
二元運算子
運算元有兩個,包括加(+)減(-)乘(*)除(/)和求餘(%)。
int x = 10, y = 5, z; z = x + y; // 15 z = x - y; // 5 z = x * y; // 50 z = x / y; // 2 z = x % y; // 0
運算子的優先順序(Precedence)
這裡的優先順序基本遵循了數學運算的優先順序,括號最好,其次是乘除,最後是加減。
x = 4 + 5 * 3; //19
比較特殊的是++,--和%,++,--的優先順序高於乘除,求餘和乘除相同。
z = 12 % 5 * 2; // 4, 由於是同級,從左到右計算,先求餘,然後相乘 int x = 5, y; y = 2 * ++x; //12, ++優先計算
如果是巢狀括號,則內部的優先順序高於外部,由內到外依次計算。
x = 25 - (2 * (5 + (4 / 2))); // 11
關係運算符(Relational Operators)
關係運算符
就是我們常用的比較大小,是否相等的運算子,常見於if語句中。包括等於(==),大於(>),小於(<),大於等於(>=),小於等於(<=)和不等於(!=)。
if (age>=18) { printf("%s", "成年人!"); }
if語句
if語句
用來控制程式的執行。可單一使用if
結構,也可與else
或者else if
一起使用。整個if語句結構執行完畢之後,繼續執行if結構之後的程式碼。
// if的執行部分不用大括號包裹,為了可讀性,不建議這樣寫 if (x > y) y = x; // 推薦 if (x > y) { y = x; } // else if int x = 10; if (x > 10) { printf("x大於10"); } else if(x > 5) { printf("x大於5"); } else { printf("x小於5"); } printf("if語句執行完畢");
計算關係表示式(Evaluating Relational Expressions)
有if的地方就有true和false,true和false對應到數字就是1和0。
a = (5 == 5); // a等於1 a = (5 != 5); // a等於0
另外,不等於0的數字都認為是true,包括負數。有些人認為0是分界線,大於0才是true,這是不正確的。-1做為if的條件,是按true進行處理的。
關係運算符優先順序
在if條件中,一般不只有關係運算,還包含數學運算,數學運算的優先順序高於關係運算。
if (x + 2 > y) //先算x + 2
等於和不等於的優先順序低於大於小於的比較。
x == y > z //先計算y > z
邏輯運算子(Logical Operators)
邏輯運算子
有三個,與(&&)或(||)非(!)。
x > 2 && y < 5 //兩個條件同時成立時是true x > 2 || y < 5 //兩個條件有一個成立時是true !(x > 2) // 條件不成立時是true
邏輯運算子的優先順序比較低,之前提到的優先順序都高於邏輯運算子,! > && > ||。
符合賦值運算子(Compound Assignment Operators)
符合賦值運算子
是當某個變數自身進行數學運算時的一種簡化寫法。如:
x = x + 5; x += 5;
條件運算子(Conditional Operator)
條件運算子
是簡單if的一種簡化,常用於二選一的時候。例子:
int x = 5; int y = x > 0 ? 1 : 0;
當x大於5的時候y等於1,否則y等於0。
內容不復雜,但作者的講解很詳細,篇幅很大!