1. 什么是表達(dá)式?
C語(yǔ)言中的表達(dá)式一種有值的語(yǔ)法結(jié)構(gòu),它由運(yùn)算符將變量、常量、函數(shù)調(diào)用返回值結(jié)合而成。
1.1 變量
變量名本身是一個(gè)表達(dá)式,表達(dá)式的值是變量當(dāng)前的值。復(fù)雜的表達(dá)式由[], ->
, .
, 和單目運(yùn)算符*構(gòu)成。
1.2 常量
常量名本身是一個(gè)表達(dá)式,字面常量也是表達(dá)式。對(duì)于這兩者,表達(dá)式的值是常量當(dāng)前的值。
1.3 函數(shù)調(diào)用
對(duì)于返回值不為void的函數(shù),對(duì)它的正確調(diào)用也是表達(dá)式。表達(dá)式的值為函數(shù)的返回值。
1.4 操作符
運(yùn)算符用于連接表達(dá)式中的值。以下是C語(yǔ)言中的運(yùn)算符,運(yùn)算符的優(yōu)先級(jí),及運(yùn)算符的結(jié)合順序
Order | Category | Operator | Operation | Associativity |
1 | Highest precedence | ( ) [ ] → : : . | Function call | L → R Left to Right |
2 | Unary | ! ~ + - ++ - - & * Size of | Logical negation (NOT) Bitwise 1’s complement Unary plus Unary minus Pre or post increment Pre or post decrement Address Indirection Size of operant in bytes | R → L Right -> Left |
3 | Member Access | .* →* | Dereference Dereference | L → R |
4 | Multiplication | * / % | Multiply Divide Modulus | L → R |
5 | Additive | + - | Binary Plus Binary Minus | L → R |
6 | Shift | << >> | Shift Left Shift Right | L → R |
7 | Relational | < <= > >= | Less than Less than or equal to Greater than Greater than or equal to | L → R |
8 | Equality | == != | Equal to Not Equal to | L → R |
9 | Bitwise AAND | & | Bitwise AND | L → R |
10 | Bitwise XOR | ^ | Bitwise XOR | L → R |
11 | Bitwise OR | | | Bitwise OR | L → R |
12 | Logical AND | && | Logical AND | L → R |
14 | Conditional | ? : | Ternary Operator | R → L |
15 | Assignment | = *= %= /= += -= &= ^= |= <<= >>= | Assignment Assign product Assign reminder Assign quotient Assign sum Assign difference Assign bitwise AND Assign bitwise XOR Assign bitwise OR Assign left shift Assign right shift | R → L |
16 | Comma | , | Evaluate | L → R |
1.5 實(shí)例
/* 變量常量表達(dá)式 */
a
sum
1
0.5
PI
/* 算術(shù)表達(dá)式 */
a + b
a - b + c
a * b + 'A'
a / b - c + 10
i++ + i++ + ++i
/* 賦值表達(dá)式 */
a = b
a *= b += 20
a = b = c = 10
a = (b=4) / (c=2)
/* 逗號(hào)表達(dá)式 */
1+2, 3+4
(10, a*5), a+10
/* 關(guān)系表達(dá)式 */
x == y
x <= y
x != y
/* 邏輯表達(dá)式 */
10 && 20
0 || 1
(a>b) && (!0)


/* 復(fù)合表達(dá)式 */
x = ( y = (a + b), z=10)
/* 表達(dá)式的應(yīng)用 */
if( !100 ) //!100為邏輯表達(dá)式
printf("expression show!");
for(int i=10; i<10; i++)//for包含3個(gè)表達(dá)式,分別為i=10 i<10 i++
printf("expression show!");
while( 1 ) //1也是一個(gè)表達(dá)式
{
printf("death loop!");
}


2. 語(yǔ)句
語(yǔ)句指的是當(dāng)程序運(yùn)行時(shí)執(zhí)行某個(gè)動(dòng)作的語(yǔ)法結(jié)構(gòu)。它改變變量的值,產(chǎn)生輸出,或處理輸入。C語(yǔ)言包括4類語(yǔ)句:
2.1 表達(dá)式語(yǔ)句
表達(dá)式語(yǔ)句是最簡(jiǎn)單的一種語(yǔ)句,在表達(dá)式的末尾加分號(hào)就形成了一個(gè)表達(dá)式語(yǔ)句。表達(dá)式語(yǔ)句有以下形式:
expression;
最常用的表達(dá)式語(yǔ)句是函數(shù)調(diào)用語(yǔ)句和賦值語(yǔ)句。函數(shù)調(diào)用語(yǔ)句也屬于表達(dá)式語(yǔ)句,因?yàn)楹瘮?shù)調(diào)用(如sin(x) )也屬于表達(dá)式的一種。賦值語(yǔ)句的作用是將等號(hào)左邊變量的值改成等號(hào)右邊表達(dá)式的值。賦值語(yǔ)句最常用的形式為:
variable = expression;
實(shí)例:
x = 10;
y = 20;
x *= 10;
1;
x + y; //這些語(yǔ)句也是合法的。語(yǔ)句被執(zhí)行時(shí),表達(dá)式求值,但結(jié)果并不保存于任何地方
getchar(); //讀取輸入中的下一個(gè)字符,但接著便將其丟棄!
x++;
printf("hello \n"); //printf函數(shù)的返回值通常并不關(guān)心。所謂語(yǔ)句“沒有效果”只是表示表達(dá)式的值被忽略。
2.2 語(yǔ)句塊
可以用{ }將一系列語(yǔ)句括起來(lái)使其大功能上相當(dāng)于一條語(yǔ)句,這就是語(yǔ)句塊。語(yǔ)句塊中可以有變量聲明,聲明必須位于塊的開始。
實(shí)例:

int x;
int y;
x = 6;
{
int z = 100;
y = z/x;
printf("%d \n", y);
}

2.3 空語(yǔ)句
即只有一個(gè)分號(hào)的語(yǔ)句,它什么也不做。當(dāng)用在循環(huán)體中時(shí),表示循環(huán)體什么也不做。
實(shí)例:
; //空語(yǔ)句
for( int i=0; i<10; i++ )
; //循環(huán)體為空
2.4 控制語(yǔ)句
控制語(yǔ)句分類3類:循環(huán)語(yǔ)句,選擇/條件語(yǔ)句,特殊語(yǔ)句
Repetition
While Loops | - | pretest loops |
For Loops | - | pretest loops |
Do-While Loops | - | posttest loops |
| | |
/* While Loops */
while (conditional-expression) {
nested-statements
}
/* For Loops */
for (initialization; conditional-expression; increment) {
nested-statements
}
/* Do-While Loops */
do {
nested-statements
} while (conditional-expression);
Conditional Execution And Selection
If Statements | - | conditional execution of a single statement |
If-Else Statements | - | conditional selection among two statements |
Switch Statements | - | conditional selection among several statements |
Extended If Statements | - | conditional selection among several statements |
| | |
/* If Statements */
if (conditional-expression) {
then-clause
}
/* If-Else Statements */
if (conditional-expression) {
then-clause
}
else {
else-clause
}
/* Switch Statements */
switch (control-expression) {
case constant-expression-1:
statements-1
.
.
.
case constant-expression-n:
statements-n
default:
default-statements
}
/* Extended If Statements */
if (conditional-expression-1) {
statements-1
}
else if (conditional-expression-1) {
statements-1
.
.
.
}
else if (conditional-expression-n) {
statements-n
}
else {
default-statements
}
Special Control Statements
Return Statements | - | return values from and terminate functions |
Continue Statements | - | skip the remaining statements in an iteration of a loop |
Break Statements | - | exit a loop or switch statement |
/* Return Statements */
return;
return expression;
/* Continue Statements */
continue;
/* Break Statements */
break;
實(shí)例略
Tag標(biāo)簽: 表達(dá)式,語(yǔ)句
jcsu
關(guān)注 - 1
粉絲 - 1
關(guān)注博主