C C語言基礎(包括 運算子 流程控制結構)

2021-08-19 15:17:26 字數 3620 閱讀 7870

c語言的運算範圍很寬,把除了控制語句和輸入/輸出以外的幾乎所有的基本操作都作為運算子處理。運算子主要分為三大類:算術運算子、關係邏輯運算子、按位運算子。根據運算子的運算物件的個數,c語言的運算子又可分成單目運算子、雙目運算子、三目運算子。運算子具體分類情況如下表所示:

c語言運算子

分類名稱

運算子算術運算子

+、-、*、/、%

關係運算子

、<=、>=、==、!=

邏輯運算子

&&、||、!

自增自減運算子

++、--

位運算子

<>、~、|、^、&

賦值運算子

=、+=、-=、*=、/=

條件運算子

?:逗號運算子

,指標運算子

*、&求位元組數運算子

sizeof

強制型別轉換運算子

()分量運算子

.、->

下標運算子

其他{}

c語言中各種運算子的結合性分成左結合性(自左至右)和右結合性(自右至左)兩種

例如,算數運算子是左結合性,即先左後右的。如:

x-y-z;       /* 先執行x-y的操作,再執行-z的操作 */
賦值運算子是右結合性,即先右後左的。如:

x=y=z;       /* 先執行y=z的操作,再執行x=的操作 */
一般而言,多數運算子具有左結合性,單目運算子、三目運算子、賦值運算子具有右結合性。使用運算子將常量、變數、函式連線在一起,就構成了表示式。

結合上文的運算子,對某些表示式進行講解:

printf("%d\n", 10 % 3);        /* 1 */

printf("%d\n", -10 % 3);        /* -1 */

printf("%d\n", 10 % -3);        /* 1 */

printf("%d\n", -10 % -3);        /* -1 */

++i:i自增1後再參與其他運算;

--i:i自減1後再參與其他運算;

i++:i參與其他運算後,i的值再自增1;

i--:i參與其他運算後,i的值再自減1。例如:

int i = 10;

printf("%d\n", ++i);        /* 11 */

printf("%d\n", --i);        /* 10 */

printf("%d\n", i++);        /* 10 */

printf("%d\n", i--);        /* 11 */

自增自減運算子在使用時,需要注意一下幾點:

運算子的操作物件只能是變數,而不能是常量或者表示式;

運算子的優先順序高於基本算數運算子,結合性是右結合性(自右向左)。例如:

int i = 5, j = 5, p, q;

p = (i++) + (i++) + (i++);

q = (++j) + (++j) + (++j);

printf("%d,%d,%d,%d", p, q, i, j);        /* 15,24,8,8 */

int x, a, b;

x = (a = 3) + (b = 4);

printf("%d", x);        /* 7 */

上述語句是合法的。當然,在c語言中也可以組成賦值語句。按照c語言規定,任何表示式在其末尾新增分號就構成語句。

在賦值表示式中,如果賦值運算子兩邊的資料型別不相同,系統將自動進行型別轉換,即將賦值運算子右邊的型別換成左邊的型別。具體規定如下:

實數賦予整數,捨去小數部分;

整數賦予實數,數值不變,但將以浮點形式存放,即增加小數部分(小數部分位0);

字元賦予整數,由於字元是1個位元組,整數(int)4個位元組,故將字元的ascii碼放到整數的最低8位;整數賦予字元,只將最低8位賦予字元。

如果表示式中同時出現了算術運算子、關係運算子、賦值運算子等,它們的優先順序由高到低,順序如下:

!——算術運算子——關係運算子——&&和||——賦值運算子

也就是說,邏輯運算子!和&&、||的優先順序順序不同,這裡需要注意。

int a = 2, b = 4, c = 6, x, y;

y = (x = a + b), (b + c);

printf("%d,%d", y, x);        /* 6,6 */

在這個例子中,由於賦值運算子的優先順序較高,也就是:(y = (x = a + b)) , (b + c) ,x=6,y=6;而整個逗號表示式的值是10,但是並沒有什麼用處(沒有把結果賦值給某個變數)。通常,逗號表示式是分別求各表示式的值,而並不一定要求整個逗號表示式的值。

利用異或運算交換兩個數:

a = a^b;

b = b^a;

a = a^b;

語句是構成程式的基本部分,程式是一系列帶有標點的語句集合。在c語言中,這個標點就是分號「;」。

結合上文,對語句進行部分講解:

int a = b = c = d = 1;        /* 錯誤使用 */

int a,b,c,d;

a = b = c = d = 1;        /* 正確使用 */

程式的流程有順序結構、選擇結構和迴圈結構3種。由於這部分知識比較簡單,只對其中的某些點進行提及就可以了,就不面面俱到了。

switch (變數) 

關於switch結構的說明如下:

switch (x) 

表示x的值無論是1還是2,都會執行printf("hello!")這條語句。

c語言中還有一種可以使程式執行過程中跳轉到指定位置的結構,將其稱為跳轉結構。跳轉結構一般在程式中與迴圈結構或分支結構配合使用,所以也可以認為是為了配合其他結構的。

c語言中提供了3種實現跳轉結構的語句:break語句、continue語句、goto語句。

goto 語句標號;
其中,語句標號是乙個有效的識別符號,它的命名規則與變數名的命名規則相同。語句標號加上乙個「:」一起出現在程式的某處,執行goto語句後,程式將跳轉到該標號處並執行其後的語句。例如:

loop_1 : printf("goto語句跳轉到此標號");
goto語句的主要應用:

goto語句的使用注意點:

運算子及流程控制

運算子 c語言提供一種操作的符號來計算 運算子表示式 由運算元和運算子組成的表示式 表示式結果 計算的結果 1 算術運算子 算數運算子表示式 算術結果 2 賦值運算子 左值 右值 左值必須有變數 1 溢位 大空間賦值給小空間 short in 2 不轉換型別 int float 只會整數間的賦值 f...

運算子和流程控制

python3中只有乙個input python2中的raw input與python3中的input一模一樣 python3中的input 要求輸入者必須輸入乙個明確的資料型別 輸入什麼型別就存成什麼型別 1.運算子 算術運算 int,float 數字型別 取整 取餘賦值運算子 age 18 ag...

運算子和流程控制

目錄算數運算子 取餘 自加1 自減1需要注意的是 var a 10 var b a 先賦值再自加 console.log b 10 console.log a 11 var c b 先自加再賦值 console.log b 11 console.log c 11比較運算子 全等 不全等1 1 fal...