WEB前端全棧成長計(jì)劃第一階段》第三章——常用標(biāo)簽">《WEB前端全棧成長計(jì)劃第一階段》第三章——常用標(biāo)簽
843
2022-05-29
一、 C語言程序設(shè)計(jì)
本章節(jié)介紹C語言程序設(shè)計(jì)的基本方法和基本的程序語句。
從程序流程的角度來看,程序可以分為三種基本結(jié)構(gòu), 即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。 這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。
C語言提供了多種語句來實(shí)現(xiàn)這些程序結(jié)構(gòu)。 本章介紹這些基本語句及其應(yīng)用,使讀者對C程序有一個(gè)初步的認(rèn)識, 為后面各章的學(xué)習(xí)打下基礎(chǔ)。
二、 C程序的語句
C程序的執(zhí)行部分是由語句組成的。 程序的功能也是由執(zhí)行語句實(shí)現(xiàn)的。
C語句可分為以下五類:
1.表達(dá)式語句
2.函數(shù)調(diào)用語句
3.控制語句
4.復(fù)合語句
5.空語句
表達(dá)式語句
表達(dá)式語句由表達(dá)式加上分號“;”組成。其一般形式為: 表達(dá)式; 執(zhí)行表達(dá)式語句就是計(jì)算表達(dá)式的值。例如: x=y+z; 賦值語句y+z; 加法運(yùn)算語句,但計(jì)算結(jié)果不能保留,無實(shí)際意義i++; 自增1語句,i值增1
函數(shù)調(diào)用語句
由函數(shù)名、實(shí)際參數(shù)加上分號“;”組成。其一般形式為: 函數(shù)名(實(shí)際參數(shù)表); 執(zhí)行函數(shù)語句就是調(diào)用函數(shù)體并把實(shí)際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語句,求取函數(shù)值。(在第五章函數(shù)中再詳細(xì)介紹)例如printf(“C Program”);調(diào)用庫函數(shù),輸出字符串。
控制語句
控制語句用于控制程序的流程, 以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。
它們由特定的語句定義符組成。
C語言有九種控制語句。
可分成以下三類:
(1) 條件判斷語句
if語句,switch語句
(2) 循環(huán)執(zhí)行語句
do while語句,while語句,for語句
(3) 轉(zhuǎn)向語句
break語句,goto語句,continue語句,return語句
復(fù)合語句
把多個(gè)語句用括號{}括起來組成的一個(gè)語句稱復(fù)合語句。 在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句,例如
{ x=y+z; a=b+c; printf(“%d%d”,x,a); }
是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“}”外不能加分號。
空語句
只有分號“;”組成的語句稱為空語句。 空語句是什么也不執(zhí)行的語句。在程序中空語句可用來作空循環(huán)體。例如 while(getchar()!=’\n’); 本語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環(huán)體為空語句。
三、賦值語句
賦值語句是由賦值表達(dá)式再加上分號構(gòu)成的表達(dá)式語句。 其一般形式為: 變量=表達(dá)式; 賦值語句的功能和特點(diǎn)都與賦值表達(dá)式相同。 它是程序中使用最多的語句之一。
在賦值語句的使用中需要注意以下幾點(diǎn):
由于在賦值符“=”右邊的表達(dá)式也可以又是一個(gè)賦值表達(dá)式,因此,下述形式 變量=(變量=表達(dá)式); 是成立的,從而形成嵌套的情形。
其展開之后的一般形式為: 變量=變量=…=表達(dá)式;
例如:
a=b=c=d=e=5;按照賦值運(yùn)算符的右接合性,因此實(shí)際上等效于: e=5; d=e; c=d; b=c; a=b;
注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結(jié)尾。
在變量說明中,不允許連續(xù)給多個(gè)變量賦初值。 如下述說明是錯(cuò)誤的: int a=b=c=5 必須寫為 int a=5,b=5,c=5; 而賦值語句允許連續(xù)賦值
注意賦值表達(dá)式和賦值語句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語句則不能。
下述語句是合法的: if((x=y+5)>0) z=x; 語句的功能是,若表達(dá)式x=y+5大于0則z=x。
下述語句是非法的: if((x=y+5;)>0) z=x; 因?yàn)?y+5;是語句,不能出現(xiàn)在表達(dá)式中。
四、數(shù)據(jù)輸出語句
本小節(jié)介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語句。在C語言中,所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的。 因此都是函數(shù)語句。本小節(jié)先介紹printf函數(shù)和putchar函數(shù)。printf函數(shù)printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為“格式”(format)之意。其功能是按用戶指定的格式, 把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個(gè)函數(shù)。
4.1 printf函數(shù)調(diào)用的一般形式
printf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個(gè)特例,不要求在使用 printf 函數(shù)之前必須包含stdio.h文件。
printf函數(shù)調(diào)用的一般形式為: printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。 格式控制串可由格式字符串和非格式字符串兩種組成。
格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。如“%d”表示按十進(jìn)制整型輸出,“%ld”表示按十進(jìn)制長整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。
非格式字符串在輸出時(shí)原樣照印,在顯示中起提示作用。 輸出表列中給出了各個(gè)輸出項(xiàng), 要求格式字符串和各輸出項(xiàng)在數(shù)量和類型上應(yīng)該一一對應(yīng)。
void main() { int a=88,b=89; printf("%d %d\n",a,b); printf("%d,%d\n",a,b); printf("%c,%c\n",a,b); printf("a=%d,b=%d",a,b); } a<--8,b<--89 printf("%d %d\n",a,b); printf("%d,%d\n",a,b); printf("%c,%c\n",a,b); printf("a=%d,b=%d",a,b);
本例中四次輸出了a,b的值,但由于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出語句格式控制串中,兩格式串%d 之間加了一個(gè)空格(非格式字符),所以輸出的a,b值之間有一個(gè)空格。第五行的printf語句格式控制串中加入的是非格式字符逗號, 因此輸出的a,b值之間加了一個(gè)逗號。第六行的格式串要求按字符型輸出 a,b值。第七行中為了提示輸出結(jié)果又增加了非格式字符串。
4.2 格式字符串
在Turbo C中格式字符串的一般形式為: [標(biāo)志][輸出最小寬度][.精度][長度]類型 其中方括號[]中的項(xiàng)為可選項(xiàng)。
各項(xiàng)的意義介紹如下:
類型類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義下表所示:
表示輸出類型的格式字符 格式字符意義 d 以十進(jìn)制形式輸出帶符號整數(shù)(正數(shù)不輸出符號) o 以八進(jìn)制形式輸出無符號整數(shù)(不輸出前綴O) x 以十六進(jìn)制形式輸出無符號整數(shù)(不輸出前綴OX) u 以十進(jìn)制形式輸出無符號整數(shù) f 以小數(shù)形式輸出單、雙精度實(shí)數(shù) e 以指數(shù)形式輸出單、雙精度實(shí)數(shù) g 以%f%e中較短的輸出寬度輸出單、雙精度實(shí)數(shù) c 輸出單個(gè)字符 s 輸出字符串
標(biāo)志
標(biāo)志字符為-、+、#、空格四種,其意義下表所示:
標(biāo)志格式字符 標(biāo) 志 意 義 - 結(jié)果左對齊,右邊填空格 + 輸出符號(正號或負(fù)號)空格輸出值為正時(shí)冠以空格,為負(fù)時(shí)冠以負(fù)號 # 對c,s,d,u類無影響;對o類, 在輸出時(shí)加前 綴o 對x類,在輸出時(shí)加前綴0x;對e,g,f 類當(dāng)結(jié)果有小數(shù)時(shí)才給出小數(shù)點(diǎn)
輸出最小寬度
用十進(jìn)制整數(shù)來表示輸出的最少位數(shù)。 若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出, 若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。
精度
精度格式符以“.”開頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符, 則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過的部分。
長度
長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。
void main(){ int a=15; float b=138.3576278; double c=35648256.3645687; char d='p'; printf("a=%d,%5d,%o,%x\n",a,a,a,a); printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b); printf("c=%lf,%f,%8.4lf\n",c,c,c); printf("d=%c,%8c\n",d,d); } a<--15 b<--138.3576278 c<--35648256.3645687 d<--'p' main() { int a=29; float b=1243.2341; double c=24212345.24232; char d='h'; printf("a=%d,%5d,%o,%x\n",a,a,a,a); printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b); printf("c=%lf,%f,%8.4lf\n",c,c,c); printf("d=%c,%8c\n",d,d); }
本例第七行中以四種格式輸出整型變量a的值,其中“%5d ”要求輸出寬度為5,而a值為15只有兩位故補(bǔ)三個(gè)空格。 第八行中以四種格式輸出實(shí)型量b的值。其中“%f”和“%lf ”格式的輸出相同,說明“l(fā)”符對“f”類型無影響。“%5.4lf”指定輸出寬度為5,精度為4,由于實(shí)際長度超過5故應(yīng)該按實(shí)際位數(shù)輸出,小數(shù)位數(shù)超過4位部分被截去。第九行輸出雙精度實(shí)數(shù),“%8.4lf ”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符量d,其中“%bc ”指定輸出寬度為8故在輸出字符p之前補(bǔ)加7個(gè)空格。
使用printf函數(shù)時(shí)還要注意一個(gè)問題, 那就是輸出表列中的求值順序。不同的編譯系統(tǒng)不一定相同,可以從左到右, 也可從右到左。Turbo C是按從右到左進(jìn)行的。如把例2.13改寫如下述形式:
void main(){ int i=8; printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--); } i<--8
這個(gè)程序與例2.13相比只是把多個(gè)printf語句改一個(gè)printf 語句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會不同呢?就是因?yàn)閜rintf函數(shù)對輸出表中各量求值的順序是自右至左進(jìn)行 的。在式中,先對最后一項(xiàng)“-i–”求值,結(jié)果為-8,然后i自減1后為7。 再對“-i++”項(xiàng)求值得-7,然后i自增1后為8。再對“i–”項(xiàng)求值得8,然后i再自減1后為7。再求“i++”項(xiàng)得7,然后I再自增1后為8。 再求“–i”項(xiàng),i先自減1后輸出,輸出值為7。 最后才求輸出表列中的第一項(xiàng)“++i”,此時(shí)i自增1后輸出8。但是必須注意, 求值順序雖是自右至左,但是輸出順序還是從左至右, 因此得到的結(jié)果是上述輸出結(jié)果。
4.3、字符輸出函數(shù)
putchar 函數(shù)是字符輸出函數(shù), 其功能是在顯示器上輸出單個(gè)字符。其一般形式為: putchar(字符變量)
例如:
putchar('A'); 輸出大寫字母A putchar(x); 輸出字符變量x的值 putchar('\n'); 換行 對控制字符則執(zhí)行控制功能,不在屏幕上顯示。 使用本函數(shù)前必須要用文件包含命令: #include
五、 數(shù)據(jù)輸入語句
C語言的數(shù)據(jù)輸入也是由函數(shù)語句完成的。 本節(jié)介紹從標(biāo)準(zhǔn)輸入設(shè)備—鍵盤上輸入數(shù)據(jù)的函數(shù)scanf和getchar。 scanf函數(shù) scanf函數(shù)稱為格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。
5.1 scanf函數(shù)的一般形式
scanf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,C語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。
scanf函數(shù)的一般形式為: scanf(“格式控制字符串”,地址表列);
其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串, 也就是不能顯示提示字符串。地址表列中給出各變量的地址。 地址是由地址運(yùn)算符“&”后跟變量名組成的。例如,&a,&b分別表示變量a和變量b 的地址。這個(gè)地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在C語言中,使用了地址這個(gè)概念,這是與其它語言不同的。 應(yīng)該把變量的值和變量的地址這兩個(gè)不同的概念區(qū)別開來。變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。 變量的地址和變量值的關(guān)系如下: &a—>a567 a為變量名,567是變量的值,&a是變量a的地址。
在賦值表達(dá)式中給變量賦值,如: a=567 在賦值號左邊是變量名,不能寫地址,而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。 這兩者在形式上是不同的。&是一個(gè)取地址運(yùn)算符,&a是一個(gè)表達(dá)式,其功能是求變量的地址。
void main(){ int a,b,c; printf("input a,b,c\n"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); }
5.2 注意&的用法!
在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請用戶輸入a、b、c的值。執(zhí)行scanf語句,則退出TC屏幕進(jìn)入用戶屏幕等待用戶輸入。用戶輸入7、8、9后按下回車鍵,此時(shí),系統(tǒng)又將返回TC屏幕。
在scanf語句的格式串中由于沒有非格式字符在“%d%d%d”之間作輸入時(shí)的間隔, 因此在輸入時(shí)要用一個(gè)以上的空格或回車鍵作為每兩個(gè)輸入數(shù)之間的間隔。
如: 7 8 9 或 7 8 9
5.3 格式字符串
格式字符串的一般形式為: %[*][輸入數(shù)據(jù)寬度][長度]類型 其中有方括號[]的項(xiàng)為任選項(xiàng)。
各項(xiàng)的意義如下:
類型
表示輸入數(shù)據(jù)的類型,其格式符和意義下表所示。 格式 字符意義 d 輸入十進(jìn)制整數(shù) o 輸入八進(jìn)制整數(shù) x 輸入十六進(jìn)制整數(shù) u 輸入無符號十進(jìn)制整數(shù) f或e 輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式) c 輸入單個(gè)字符 s 輸入字符串
“*”符
用以表示該輸入項(xiàng)讀入后不賦予相應(yīng)的變量,即跳過該輸入值。 如 scanf("%d %*d %d",&a,&b);當(dāng)輸入為:1 2 3 時(shí),把1賦予a,2被跳過,3賦予b。
寬度
用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。
例如: scanf("%5d",&a);
輸入:
12345678
只把12345賦予變量a,其余部分被截去。
又如: scanf("%4d%4d",&a,&b);
輸入:
12345678將把1234賦予a,而把5678賦予b。
長度
長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld) 和雙精度浮點(diǎn)數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。
使用scanf函數(shù)還必須注意以下幾點(diǎn):
a. scanf函數(shù)中沒有精度控制,如: scanf("%5.2f",&a); 是非法的。不能企圖用此語句輸入小數(shù)為2位的實(shí)數(shù)。
b. scanf中要求給出變量地址,如給出變量名則會出錯(cuò)。如 scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);才是合法的。
c. 在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。
d. 在輸入字符數(shù)據(jù)時(shí),若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。例如:
scanf("%c%c%c",&a,&b,&c);
輸入為:
d e f
則把’d’賦予a, 'f’賦予b,'e’賦予c。只有當(dāng)輸入為:
def
時(shí),才能把’d’賦于a,'e’賦予b,'f’賦予c。 如果在格式控制中加入空格作為間隔,如 scanf ("%c %c %c",&a,&b,&c);則輸入時(shí)各數(shù)據(jù)之間可加空格。
void main(){ char a,b; printf("input character a,b\n"); scanf("%c%c",&a,&b); printf("%c%c\n",a,b); } scanf("'C14F14%c%c",&a,&b); printf("%c%c\n",a,b);
由于scanf函數(shù)"%c%c"中沒有空格,輸入M N,結(jié)果輸出只有M。
而輸入改為MN時(shí)則可輸出MN兩字符,見下面的輸入運(yùn)行情況:
input character a,b MN MN void main(){ char a,b; printf("input character a,b\n"); scanf("%c %c",&a,&b); printf("\n%c%c\n",a,b); }
scanf("%c %c",&a,&b); 本例表示scanf格式控制串"%c %c"之間有空格時(shí), 輸入的數(shù)據(jù)之間可以有空格間隔。e. 如果格式控制串中有非格式字符則輸入時(shí)也要輸入該非格式字符。
例如:
scanf("%d,%d,%d",&a,&b,&c);
其中用非格式符“ , ”作間隔符,故輸入時(shí)應(yīng)為: 5,6,7
又如: scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
則輸入應(yīng)為
a=5,b=6,c=7g. 如輸入的數(shù)據(jù)與輸出的類型不一致時(shí),雖然編譯能夠通過,但結(jié)果將不正確。 void main(){ int a; printf("input a number\n"); scanf("%d",&a); printf("%ld",a); }
由于輸入數(shù)據(jù)類型為整型, 而輸出語句的格式串中說明為長整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。
如改動程序如下:
void main(){ long a; printf("input a long integer\n"); scanf("%ld",&a); printf("%ld",a); } 運(yùn)行結(jié)果為: input a long integer 1234567890 1234567890 當(dāng)輸入數(shù)據(jù)改為長整型后,輸入輸出數(shù)據(jù)相等。
5.4 鍵盤輸入函數(shù)
getchar函數(shù)getchar函數(shù)的功能是從鍵盤上輸入一個(gè)字符。
其一般形式為: getchar();
通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語句,如:
char c; c=getchar(); #include
使用getchar函數(shù)還應(yīng)注意幾個(gè)問題:
getchar函數(shù)只能接受單個(gè)字符,輸入數(shù)字也按字符處理。輸入多于一個(gè)字符時(shí),只接收第一個(gè)字符。
使用本函數(shù)前必須包含文件“stdio.h”。
在TC屏幕下運(yùn)行含本函數(shù)程序時(shí),將退出TC 屏幕進(jìn)入用戶屏幕等待用戶輸入。輸入完畢再返回TC屏幕。
void main(){ char a,b,c; printf("input character a,b,c\n"); scanf("%c %c %c",&a,&b,&c); printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32); }
輸入三個(gè)小寫字母
輸出其ASCII碼和對應(yīng)的大寫字母。
void main(){ int a; long b; float f; double d; char c; printf("%d,%d,%d,%d,%d",sizeof(a),sizeof(b),sizeof(f) ,sizeof(d),sizeof(c)); }
輸出各種數(shù)據(jù)類型的字節(jié)長度。
六、分支結(jié)構(gòu)程序
6.1 關(guān)系運(yùn)算符和表達(dá)式
在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系, 以決定程序下一步的工作。
比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。
在C語言中有以下關(guān)系運(yùn)算符:
< 小于 <= 小于或等于 > 大于 >= 大于或等于 == 等于 != 不等于
關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。
關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。
在六個(gè)關(guān)系運(yùn)算符中,<,<=,>,>=的優(yōu)先級相同,高于==和!=,==和!=的優(yōu)先級相同。
6.2 關(guān)系表達(dá)式
關(guān)系表達(dá)式的一般形式為: 表達(dá)式 關(guān)系運(yùn)算符 表達(dá)式
例如:a+b>c-d,x>3/2,‘a(chǎn)’+1 由于表達(dá)式也可以又是關(guān)系表達(dá)式。 因此也允許出現(xiàn)嵌套的情況,例如:a>(b>c),a!=(c==d)等。關(guān)系表達(dá)式的值是“真”和“假”,用“1”和“0”表示。 如: 5>0的值為“真”,即為1。(a=3)>(b=5)由于3>5不成立,故其值為假,即為0。 void main(){ char c='k'; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",'a'+5 在本例中求出了各種關(guān)系運(yùn)算符的值。 字符變量是以它對應(yīng)的ASCII碼參與運(yùn)算的。對于含多個(gè)關(guān)系運(yùn)算符的表達(dá)式,如k==j==i+5,根據(jù)運(yùn)算符的左結(jié)合性,先計(jì)算k==j,該式不成立,其值為0,再計(jì)算0==i+5,也不成立,故表達(dá)式值為0。 6.3 邏輯運(yùn)算符和表達(dá)式 邏輯運(yùn)算符C語言中提供了三種邏輯運(yùn)算符 && 與運(yùn)算 || 或運(yùn)算 ! 非運(yùn)算 與運(yùn)算符&&和或運(yùn)算符||均為雙目運(yùn)算符。具有左結(jié)合性。 非運(yùn)算符!為單目運(yùn)算符,具有右結(jié)合性。 邏輯運(yùn)算符和其它運(yùn)算符優(yōu)先級的關(guān)系可表示如下: 按照運(yùn)算符的優(yōu)先順序可以得出: