C語(yǔ)言全套課件_第1頁(yè)
C語(yǔ)言全套課件_第2頁(yè)
C語(yǔ)言全套課件_第3頁(yè)
C語(yǔ)言全套課件_第4頁(yè)
C語(yǔ)言全套課件_第5頁(yè)
已閱讀5頁(yè),還剩447頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C語(yǔ)言概述1.1C語(yǔ)言的發(fā)展簡(jiǎn)史與特色1.1.1C語(yǔ)言發(fā)展簡(jiǎn)史

C語(yǔ)言是目前世界上最廣泛使用的通用計(jì)算機(jī)語(yǔ)言。用它既可編寫計(jì)算機(jī)系統(tǒng)軟件,也可編寫各種應(yīng)用軟件,所以在數(shù)百種計(jì)算機(jī)語(yǔ)言中,C語(yǔ)言仍然是目前最流行、最受歡迎的計(jì)算機(jī)語(yǔ)言?,F(xiàn)在,Windows已成為計(jì)算機(jī)的主要操作系統(tǒng),相應(yīng)的基于Windows的程序開發(fā)多采用C++,它雖是一種面向?qū)ο蟮恼Z(yǔ)言,但其核心內(nèi)容仍是標(biāo)準(zhǔn)C。

C語(yǔ)言是在早期的B語(yǔ)言基礎(chǔ)上發(fā)展起來(lái)的。

C語(yǔ)言于1972年~1973年間,誕生于美國(guó)的貝爾實(shí)驗(yàn)室,由Denis.M.Ritchie創(chuàng)建。

C語(yǔ)言的產(chǎn)生基于兩個(gè)方面的需要。一是為滿足UNIX操作系統(tǒng)開發(fā)的需要。UNIX操作系統(tǒng)是一個(gè)通用的、復(fù)雜的計(jì)算機(jī)管理系統(tǒng)。二是為拉近高級(jí)語(yǔ)言與硬件之間距離的需要。

C語(yǔ)言集高級(jí)語(yǔ)言與匯編語(yǔ)言優(yōu)點(diǎn)于一身。

C語(yǔ)言面對(duì)實(shí)際應(yīng)用的需要而產(chǎn)生,直至今日仍不改初衷。1.1.2C語(yǔ)言的特點(diǎn)

1.它的語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。

2.C語(yǔ)言運(yùn)算豐富,將括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換、取量地址等都以運(yùn)算實(shí)現(xiàn)。3.運(yùn)算符多樣。

4.函數(shù)是程序的主體。函數(shù)是程序的基本單位,是C語(yǔ)言的靈魂。5.C語(yǔ)言語(yǔ)法限制不太嚴(yán)格,程序書寫自由度大,對(duì)程序員要求不高。

6.C語(yǔ)言允許直接訪問(wèn)物理地址。能進(jìn)行位運(yùn)算,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,能直接對(duì)硬件進(jìn)行操作,它是高級(jí)語(yǔ)言中的低級(jí)語(yǔ)言。

7.C語(yǔ)言編譯系統(tǒng)小,生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。8.可移植性好。

1.2C語(yǔ)言的關(guān)鍵字和語(yǔ)句形式1.關(guān)鍵字關(guān)鍵字又稱為保留字,由系統(tǒng)提供,用以表示特定的語(yǔ)法成份,是構(gòu)成C語(yǔ)言的語(yǔ)法基礎(chǔ)。常見關(guān)鍵字有32個(gè)。①程序控制語(yǔ)句關(guān)鍵字(12個(gè))

if else for do while continue switch break case default goto return ②類型定義說(shuō)明關(guān)鍵字(12個(gè))

int charfloatdoublelongshort signed unsignedenumstruct union void③存儲(chǔ)類別定義說(shuō)明關(guān)鍵字(4個(gè))auto register static extern④常量、變量定義和自定義類型關(guān)鍵字(3個(gè))const volatile typedef⑤字節(jié)測(cè)試關(guān)鍵字(1個(gè))sizeof[注意]關(guān)鍵字有特定的語(yǔ)法含義,不允許用戶重新定義。關(guān)鍵字在程序中像國(guó)家的名字一樣,絕對(duì)不能拼錯(cuò)。2.語(yǔ)句形式①控制語(yǔ)句

if(~)~else~ /*選擇分支語(yǔ)句*/

switch(~)case…;/*多分支語(yǔ)句*/

for(~;~;~)~ /*for循環(huán)語(yǔ)句*/

while(~)~ /*while循環(huán)語(yǔ)句*/

do~;while(~); /*dowhile循環(huán)語(yǔ)句*/

continue; /*無(wú)條件進(jìn)行下一次循環(huán)語(yǔ)句*/

break;/*無(wú)條件結(jié)束當(dāng)前層循環(huán)或跳出switch語(yǔ)句*/

goto~ /*無(wú)條件跳轉(zhuǎn)到程序指定處語(yǔ)句*/

return~ /*函數(shù)調(diào)用結(jié)束返回語(yǔ)句*/②函數(shù)調(diào)用語(yǔ)句函數(shù)名(實(shí)參表達(dá)式表);③表達(dá)式語(yǔ)句表達(dá)式;④空語(yǔ)句;或{} /*不做任何操作*/⑤復(fù)合語(yǔ)句(分程序){~}⑥注釋語(yǔ)句/*~*/ /*注釋的部分不參加程序編譯和運(yùn)行*/其中“~”代表一個(gè)或多個(gè)表達(dá)式或語(yǔ)句,括號(hào)內(nèi)為表達(dá)式,括號(hào)外為語(yǔ)句。1.3簡(jiǎn)單的C程序介紹【例1】計(jì)算表達(dá)式1-1/2+1/3-1/4+……+1/99-1/100的值?!挤治觥剑罕締?wèn)題要計(jì)算的是100個(gè)分?jǐn)?shù)的和,其中分子都是1,分母分別從1遞增排到100,又奇數(shù)項(xiàng)的值為負(fù),偶數(shù)項(xiàng)的值為正。這樣,只要我們計(jì)算出每一項(xiàng)的值,然后進(jìn)行累加即可,這個(gè)問(wèn)題,關(guān)鍵在于解決符號(hào)的事?!妓惴ā剑篿).初始化各量:n=1,用于循環(huán)計(jì)數(shù),同時(shí)參與每一項(xiàng)的計(jì)算;s=0,用于累加計(jì)算出的各項(xiàng),得到最終所求。ii).計(jì)算中間項(xiàng):n為奇數(shù),t=1/n;否則,t=-1/n。iii).累加各項(xiàng):s=s+t。iv).重復(fù)ii和iii,直到n>100,s即為所求和值。

〖程序〗:#defineN100main(){intn=1;floats=0.0,t;while(n<=100){if(n%2!=0)t=1.0/n;

elset=-1.0/n;

s=s+t;n=n+1;}printf("s=%f\n",s);}〖程序運(yùn)行結(jié)果〗:s=0.688172【例2】給定半徑,計(jì)算圓的面積。#include"stdio.h"/*文件包含*/#definePI3.1415926/*宏定義*/main()/*主函數(shù)*/{floatarea(floatx);/*函數(shù)引用說(shuō)明*/

floatr,s;/*變量定義*/

printf("Inputradius:");/*提示信息*/

scanf("%f",&r);/*鍵盤輸入半徑值*/

s=area(r);/*函數(shù)調(diào)用語(yǔ)句*/

printf("Radius:%f\tArea:%f\n",r,s);/*顯示或打印輸出結(jié)果*/}floatarea(floatx)/*計(jì)算面積函數(shù)*/{floaty;y=PI*x*x;returny;/*返回計(jì)算結(jié)果*/}〖運(yùn)行結(jié)果〗:Inputradius:10↙Radius:10.000000 Area:314.159271帶下劃線的信息表示用戶從鍵盤輸入的信息,“↙”表示回車。從上面的程序可以大概看出以下幾點(diǎn):①一個(gè)程序可以由多個(gè)文件構(gòu)成,每個(gè)文件可以由多個(gè)函數(shù)構(gòu)成。每個(gè)函數(shù)完成一個(gè)特定的功能,它由一組語(yǔ)句構(gòu)成。②一個(gè)C程序中有且僅有一個(gè)主函數(shù),名為main()。③程序中用到的各種各樣的量要先定義后使用,有時(shí)還要加上變量引用說(shuō)明和函數(shù)聲明。④由“#”開頭的行稱為宏定義或文件包含,末尾無(wú)分號(hào)。像這樣的語(yǔ)句還有后面要介紹的條件編譯,它們都是C語(yǔ)言中的編譯預(yù)處理命令,而不是真正的語(yǔ)句。語(yǔ)句必須以分號(hào)結(jié)束。⑤C語(yǔ)言標(biāo)識(shí)符區(qū)分大小寫字母,系統(tǒng)關(guān)鍵字都是小寫字母構(gòu)成,用戶起的變量名、函數(shù)名等標(biāo)識(shí)符一般也用小寫字母,宏名通常用大寫字母表示,以區(qū)別于變量名。標(biāo)識(shí)標(biāo)的起名字符集是:大小寫字母、數(shù)字、下劃線;規(guī)則為:不能以數(shù)字開頭,名稱要盡量有一定意義,做到“見名知義”。1.4C程序的實(shí)現(xiàn)1.4.1實(shí)現(xiàn)步驟

C程序在計(jì)算機(jī)上的實(shí)現(xiàn)與其它高級(jí)語(yǔ)言程序的實(shí)現(xiàn)一樣,一般要經(jīng)過(guò)編輯、編譯、連接、運(yùn)行四個(gè)步驟,如圖1-1所示。圖1-11.編輯

編輯是將C語(yǔ)言的源程序輸入計(jì)算機(jī),并以文本文件的形式存儲(chǔ)在磁盤。編輯是建立C源程序文件的過(guò)程,源程序文件的擴(kuò)展名為.C或.CPP。

編輯可以用任何文字處理軟件完成,一般用編譯器本身集成的編輯器進(jìn)行編輯。2.編譯

C語(yǔ)言是以編譯方式實(shí)現(xiàn)的高級(jí)語(yǔ)言,C程序的實(shí)現(xiàn)必須經(jīng)過(guò)編譯程序?qū)υ闯绦蜻M(jìn)行編譯,生成目標(biāo)代碼程序。目標(biāo)代碼程序的擴(kuò)展名為.OBJ。

編譯前先進(jìn)行預(yù)處理。編譯過(guò)程主要進(jìn)行詞法分析和語(yǔ)法分析。編譯有錯(cuò)時(shí),在屏幕上列出錯(cuò)誤的位置和種類。此時(shí),要返回到編輯步驟修改源程序,修改后,再進(jìn)行編譯。3.連接

編譯形成的目標(biāo)代碼程序機(jī)器可以識(shí)別,但還不能直接執(zhí)行,還需要將目標(biāo)代碼程序與庫(kù)文件進(jìn)行連接處理,連接工作由連接程序完成。經(jīng)過(guò)連接,生成可執(zhí)行文件??蓤?zhí)行文件的擴(kuò)展名為.EXE。

連接有錯(cuò)同樣需返回到編輯步驟修改源程序,修改后,再進(jìn)行編譯、連接。4.運(yùn)行

一個(gè)C源程序經(jīng)過(guò)編譯、連接后生成了可執(zhí)行文件。運(yùn)行可執(zhí)行文件,可通過(guò)編譯系統(tǒng)下的運(yùn)行功能,也可像執(zhí)行DOS的外部命令一樣,輸入執(zhí)行文件名運(yùn)行。程序運(yùn)行后,一般在屏幕上顯示運(yùn)行結(jié)果。根據(jù)運(yùn)行結(jié)果可以判斷程序是否還有算法方面的錯(cuò)誤。編譯時(shí)產(chǎn)生的錯(cuò)誤是語(yǔ)法錯(cuò)誤,運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤是邏輯錯(cuò)誤。出現(xiàn)邏輯錯(cuò)誤時(shí)需要修改算法,重新編輯、編譯、運(yùn)行程序。1.4.2程序的執(zhí)行

C程序的執(zhí)行總是從主函數(shù)main()開始,不管主函數(shù)在程序中什么位置。主函數(shù)中的語(yǔ)句依先后順序執(zhí)行,除非改變了程序的執(zhí)行流程。其它函數(shù)通過(guò)被調(diào)用執(zhí)行。1.4.3TURBOC上機(jī)操作1.啟動(dòng)TURBOC

只需執(zhí)行TC.EXE文件,即可啟動(dòng)TURBOC進(jìn)入TURBOC的操作界面。如使用中文,需先將計(jì)算機(jī)置于中文操作系統(tǒng)管理之下。用TC加源程序文件名可快速啟動(dòng)TURBOC,立即進(jìn)入編輯操作。2.TURBOC操作界面啟動(dòng)TURBOC后,主操作界面如圖1-2所示。圖1-21)組成

TURBOC主操作界面由主菜單區(qū)、編輯窗口、信息窗口、熱鍵區(qū)四部分組成。

TURBOC的操作采用菜單驅(qū)動(dòng),主菜單包括File(文件操作)、Edit(編輯操作)、Run(運(yùn)行操作)、Compile(編譯操作)、Project(工程文件)、Options(編譯選擇)及Debug(跟蹤排錯(cuò))各項(xiàng)。熱鍵區(qū)提供常用操作的快速功能鍵方式,如F1(幫助)、F2(保存文件)、F3(裝入文件)、F5(縮放窗口)、F6(切換窗口)、ALT+F5(用戶屏幕)、ALT+X(退出TURBOC)等。2)主窗口當(dāng)前操作窗口為主窗口(工作窗口),主窗口為雙線框表示,按F6可切換主窗口,按F5可縮放主窗口。3)菜單選擇方式一:按F10進(jìn)入主菜單區(qū),通過(guò)菜單項(xiàng)的大寫字母選擇相應(yīng)菜單項(xiàng),或通過(guò)光標(biāo)控制鍵(→、←、↑、↓)移動(dòng)高亮度光棒至相應(yīng)菜單項(xiàng),按回車選擇相應(yīng)菜單項(xiàng)。方式二:用熱鍵ALT加相應(yīng)菜單項(xiàng)的大寫字母,選擇相應(yīng)菜單項(xiàng)。對(duì)子菜單項(xiàng)的選擇,操作方法類似。3.編輯

編輯在編輯窗口中進(jìn)行,有多種方式進(jìn)入編輯環(huán)境:方式一:選擇Edit項(xiàng)。方式二:選擇File項(xiàng)的子項(xiàng)New,用于編輯新程序。方式三:選擇File項(xiàng)的子項(xiàng)Load,裝入要修改的程序,用于修改程序。方式四:啟動(dòng)時(shí)采用快速啟動(dòng)方式。

TURBOC的編輯操作是Wordstar、WPS等字處理軟件編輯操作的子集,它與Wordstar、WPS的編輯操作完全類似。

4.編譯

TURBOC將編譯、連接一道完成。按熱鍵F9或選擇Compile項(xiàng)進(jìn)入編譯。編譯時(shí)發(fā)生錯(cuò)誤,返回編輯步驟,修改程序后,再編譯程序。

5.運(yùn)行按熱鍵CTRL+F9或選擇Run項(xiàng)下的子項(xiàng)Run,運(yùn)行計(jì)算機(jī)中的程序。按ALT+F5鍵或選擇Run項(xiàng)下的子項(xiàng)UserScreen進(jìn)入用戶屏幕,查看程序運(yùn)行結(jié)果。運(yùn)行時(shí)發(fā)生錯(cuò)誤,返回編輯步驟,修改程序后,再編譯、運(yùn)行程序。對(duì)于沒編譯的程序,選擇運(yùn)行會(huì)先自動(dòng)進(jìn)行編譯操作,再運(yùn)行程序。標(biāo)識(shí)符是一個(gè)字符序列,在程序中用來(lái)標(biāo)識(shí)變量名、函數(shù)名、數(shù)組名、類型名、文件名等。標(biāo)識(shí)符又分為系統(tǒng)標(biāo)識(shí)符和用戶標(biāo)識(shí)符,其中系統(tǒng)標(biāo)識(shí)符是系統(tǒng)預(yù)先定義的,如32個(gè)關(guān)鍵字。用戶標(biāo)識(shí)符是用戶自己定義的。TurboC中標(biāo)識(shí)符的取名規(guī)則是:1.只能由大小寫英文字母(A~Z,a~z)、數(shù)字(0~9)和下劃線(_)組成。2.第一個(gè)字符不能為數(shù)字。3.TurboC中標(biāo)識(shí)符長(zhǎng)度不能超過(guò)31個(gè)字符(有的系統(tǒng)不能超過(guò)8個(gè)字符)。2.1標(biāo)識(shí)符如:a_b、_ab、a123是合法的標(biāo)識(shí)符1ab、#ab、a%b是不合法的標(biāo)識(shí)符。說(shuō)明:1.C語(yǔ)言中區(qū)分英文字母的大小寫。如:a1和A1是兩個(gè)不同的標(biāo)識(shí)符。2.用戶不能定義與關(guān)鍵字同名的標(biāo)識(shí)符。3.用戶在定義標(biāo)識(shí)符時(shí),為了增加程序的可讀性,盡量做到“見名知義”,并且盡量不用下劃線開頭(因?yàn)橄到y(tǒng)內(nèi)部使用了一些以下劃線開頭的標(biāo)識(shí)符)。2.2數(shù)據(jù)類型2.3常量和變量

1.常量在程序執(zhí)行過(guò)程中,其值不能被改變,即不能進(jìn)行賦值運(yùn)算的量稱為常量。C語(yǔ)言中,常量的類型有整型常量、實(shí)型常量、字符常量和字符串常量四種。常量的數(shù)據(jù)類型一般從字面形式就可以判斷。如:12、-10為整型常量,3.14、-8.9為實(shí)型常量,’a’為字符常量。另外,在C語(yǔ)言中可以用一個(gè)標(biāo)識(shí)符代表一個(gè)常量,稱為符號(hào)常量。其定義的一般形式為:#define標(biāo)識(shí)符常量值習(xí)慣上,符號(hào)常量用大寫字母表示,以便與其他標(biāo)識(shí)符相區(qū)別。

【例2.1】計(jì)算以r為半徑的圓的周長(zhǎng)、圓的面積和球的體積#definePI3.1415926main(){floatr,l,s,v;scanf("r=%f",&r); l=2*PI*r;s=PI*r*r;v=4.0/3*PI*r*r*r;printf("l=%fs=%fv=%f\n",l,s,v);}〖運(yùn)行結(jié)果〗:r=3↙l=18.849556s=28.274334v=113.0973362.變量在程序執(zhí)行過(guò)程中,其值可以被改變,即可以進(jìn)行賦值運(yùn)算的量稱為變量。變量通常用來(lái)保存程序運(yùn)行過(guò)程中的數(shù)據(jù)輸入,中間結(jié)果和最終結(jié)果。C語(yǔ)言中,變量必須先定義后使用。(1)變量定義的一般形式為:類型標(biāo)識(shí)符

變量名表;其中,類型標(biāo)識(shí)符表示變量的數(shù)據(jù)類型,可以是任意數(shù)據(jù)類型。如整型、實(shí)型和字符型等。變量名要符合標(biāo)識(shí)符的取名規(guī)則。變量名表可以是一個(gè)或多個(gè)標(biāo)識(shí)符名,中間用逗號(hào)分隔,最后以分號(hào)結(jié)束。以下是一些變量定義的例子:

inti,j,num;

floata,b,sum;unsignedintui;charc,ch,name;doublex,total;(2)說(shuō)明①變量必須“先定義后使用”。如果沒有定義或說(shuō)明而使用變量,編譯時(shí)系統(tǒng)會(huì)給出錯(cuò)誤信息。②

區(qū)分變量和類型。變量是屬于某一種數(shù)據(jù)類型的變量,在編譯時(shí)編譯程序會(huì)根據(jù)變量的類型為變量分配內(nèi)存單元,不同類型的變量在內(nèi)存中分配的字節(jié)數(shù)不同。

③變量可以在程序內(nèi)的三個(gè)地方定義:在函數(shù)內(nèi)部,在函數(shù)的參數(shù)(形參)定義中或在所有的函數(shù)外部。由此定義的變量分別稱為局部變量,形式參數(shù)和全局變量。在不同地方定義的變量,其作用范圍不同。在同一層次定義的變量,不能與數(shù)組、指針、函數(shù)和其它變量同名。④在函數(shù)內(nèi)部或函數(shù)外部定義變量時(shí),可以為變量賦初值,稱為變量的初始化??梢詫?duì)全部變量初始化,也可對(duì)部分變量初始化。對(duì)變量初始化的目的是為了使某些變量在程序開始執(zhí)行時(shí)就具有確定的值。如:inta1=10,b1=100;/*對(duì)全部變量初始化,a1、b1都為整型變量,初值分別為10和100*/floata2=3.14,b2;/*對(duì)部分變量初始化,a2、b2都為單精度實(shí)型變量,只對(duì)變量a2初始化,其值為3.14,b2沒有初始化,其值為隨機(jī)值。*/如果對(duì)同時(shí)定義的兩個(gè)整型變量a、b都初始化為100,必須對(duì)每個(gè)變量分別初始化。如:inta=100,b=100;不能寫成:inta=b=100;⑤同一個(gè)變量不能在同一個(gè)作用域重復(fù)定義,因?yàn)榫幾g程序不能對(duì)已分配內(nèi)存單元的變量重新分配內(nèi)存單元。⑥變量具有存儲(chǔ)類別,根據(jù)變量定義的位置和形式的不同,可分為自動(dòng)變量、靜態(tài)變量、外部變量和寄存器變量。詳見第四章。2.4整型數(shù)據(jù)1.整型常量整型常量就是整數(shù),包括正整數(shù)、負(fù)整數(shù)和0。C語(yǔ)言中整型常量可以用以下三種形式表示:①十進(jìn)制整數(shù):有效數(shù)字為0~9。如正整數(shù)20。②八進(jìn)制整數(shù):有效數(shù)字為0~7,且以0開頭。如020表示八進(jìn)制數(shù)20,等于十進(jìn)制數(shù)16,-020表示八進(jìn)制數(shù)-20,等于十進(jìn)制數(shù)-16。③十六進(jìn)制整數(shù):有效數(shù)字為0~9和a~f(或A~F),且以0x開頭。如0x20表示十六進(jìn)制數(shù)20,等于十進(jìn)制數(shù)32,-0x20表示十六進(jìn)制數(shù)20,等于十進(jìn)制數(shù)-32。2.整型變量整型變量用來(lái)存放整型數(shù)值。整型變量類型標(biāo)識(shí)符、內(nèi)存中分配的字節(jié)數(shù)和值域見表2-1。根據(jù)變量的定義形式,可定義整型變量。如:inti1=10;/*i1為整型變量,初值為10,在內(nèi)存中占2個(gè)連續(xù)的字節(jié)*/longl1,l2;/*l1和l3為長(zhǎng)整型變量,在內(nèi)存中各占4個(gè)連續(xù)的字節(jié)*/unsignedu1;/*u1為無(wú)符號(hào)整型變量,在內(nèi)存中占2個(gè)連續(xù)的字節(jié)*/說(shuō)明:①在TurboC中,把短整型變量作為整型變量處理,把無(wú)符號(hào)短整型變量作為無(wú)符號(hào)整型變量處理②如果整型常量的范圍是-215~215-1,則認(rèn)為它是int型,可以把它賦給int型或longint型變量。③如果整型常量的范圍是-231~-215+1或215~231-1,則認(rèn)為它是longint型,可以把它賦給longint型變量。④在一個(gè)整型常量的后面加字母l或L,則認(rèn)為是longint常量。如:0l、123l、345L等。在賦值時(shí),如果不是值域范圍的值,在編譯時(shí)不會(huì)出錯(cuò),但得不到原值,這種現(xiàn)象稱為溢出。

2.5實(shí)型數(shù)據(jù)

1.實(shí)型常量

實(shí)型常量也稱“浮點(diǎn)數(shù)”,也就是帶小數(shù)點(diǎn)的數(shù)。C語(yǔ)言中,實(shí)型常量只使用十進(jìn)制,它有以下兩種形式表示:①十進(jìn)制小數(shù)形式由正負(fù)號(hào)、數(shù)字0~9和小數(shù)點(diǎn)組成。如:3.140.80.0-36.625+100.00其中正號(hào)“+”可以省略。若整數(shù)部分為0,則整數(shù)部分可以省略,但小數(shù)點(diǎn)不能省略。若小數(shù)部分為0,則小數(shù)部分可以省略,但小數(shù)點(diǎn)不能省略。如:0.8與.8等價(jià),100.00與100.等價(jià)②指數(shù)形式(或稱科學(xué)記數(shù)法)由正負(fù)號(hào)、數(shù)字0~9、小數(shù)點(diǎn)和字母e(或E)組成。它的組織形式為: me±n或mE±n。表示m×10±n,其中m為整型數(shù)或?qū)嵭蛿?shù),n為整型數(shù),m和n缺一不可,即使m是1或n是0也不能省略,格式中的“+”可以省略。如: 3.14e5123e-41e5.89e90.78e-6是正確的而

e3123e4.0.e54.5ee是錯(cuò)誤的。2.實(shí)型變量實(shí)型變量分為單精度型和雙精度型兩種,其類型標(biāo)識(shí)符、內(nèi)存中分配的字節(jié)數(shù)、有效數(shù)字位數(shù)和值域見表2-2。

根據(jù)變量的定義形式,可定義實(shí)型變量。如:floatf1,f2;/*f1和f2為單精度實(shí)型變量,在內(nèi)存中各占4個(gè)連續(xù)字節(jié)*/doubled1=3.4;/*d1為雙精度實(shí)型變量,初值為3.4,在內(nèi)存中占8個(gè)連續(xù)字節(jié)*/C語(yǔ)言中的實(shí)型常量在內(nèi)存中以雙精度形式存儲(chǔ),一個(gè)實(shí)型常量既可以賦給一個(gè)單精度實(shí)型變量,也可賦給一個(gè)雙精度實(shí)型型,系統(tǒng)會(huì)根據(jù)變量的類型自動(dòng)截取實(shí)型常量中相應(yīng)的有效位數(shù)字。

2.6字符型數(shù)據(jù)

1.字符常量C語(yǔ)言中,用一對(duì)單引號(hào)括起來(lái)的一個(gè)字符稱為字符常量,如’a’、’7’、’#’等。一個(gè)字符常量的值就是該字符的ASCII碼。如字符常量’a’的ASCII碼為97,字符常量’A’的ASCII碼為65,由此可知’a’和’A’是兩個(gè)不同的字符常量。除了以上形式的字符常量外,C語(yǔ)言中還允許使用一種特殊形式的字符常量,即以“\”開頭的字符序列,稱為“轉(zhuǎn)義字符”,用來(lái)表示一些難以用一般形式表示的字符。常用的轉(zhuǎn)義字符見表2-3。轉(zhuǎn)義字符開頭的“\”,并不代表一個(gè)斜杠字符,其含義是將后面的字符或數(shù)字轉(zhuǎn)換成另外的意義;另外,轉(zhuǎn)義字符仍然是一個(gè)字符,仍然對(duì)應(yīng)于一個(gè)ASCII值。如“\n”中的“n”不代表字母n,而是代表“換行”符,其ASCII值為10。2.字符變量字符型變量分為有符號(hào)字符型(簡(jiǎn)稱字符型)和無(wú)符號(hào)字符型兩種,其類型標(biāo)識(shí)符、內(nèi)存中分配的字節(jié)數(shù)和ASCII碼范圍見表2-4根據(jù)變量的定義形式,可定義字符型變量。如:charc1,c2,c3;/*c1、c2和c3為字符型變量,在內(nèi)存中各占1個(gè)字節(jié)*/unsignedcharch1,ch2;/*ch1和ch2為無(wú)符號(hào)字符型變量,在內(nèi)存中各占1個(gè)字節(jié)*/在對(duì)字符變量賦值時(shí),可以把字符常量(包括轉(zhuǎn)義字符)賦給字符變量。如:

c1=’a’;c2=’\376’;3.字符數(shù)據(jù)和整型數(shù)據(jù)的關(guān)系

把一個(gè)字符常量賦給一個(gè)字符變量,實(shí)際上將該字符常量對(duì)應(yīng)的ASCII碼存放到為變量所分配的內(nèi)存單元。在C語(yǔ)言中字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用:①字符常量與其對(duì)應(yīng)的ASCII碼通用。②帶符號(hào)字符變量和值在-128~127之間的整型變量通用。③無(wú)符號(hào)字符變量和值在0~255之間的整型變量通用。一個(gè)字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。以字符形式輸出時(shí),需要先將存儲(chǔ)單元中的ASCII碼轉(zhuǎn)換成相應(yīng)字符,然后再輸出。以整數(shù)形式輸出時(shí),直接將ASCII碼作為整型數(shù)輸出。字符型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算,此時(shí)是對(duì)它的ASCII碼進(jìn)行算術(shù)運(yùn)算。【例2.2】main(){inti=65;charch=’A’;printf("i=%dch=%c\n",i,ch);/*輸出:i=65ch=A*/printf("i=%cch=%d\n",i,ch);/*輸出:i=Ach=65*/i=’A’;/*把字符常量賦給整型變量*/

ch=65;/*把整型常量賦給字符變量*/

printf("i=%dch=%c\n",i,ch);/*輸出:i=65ch=A*/printf("i=%cch=%d\n",i,ch);/*輸出:i=Ach=65*/}2.7字符串常量C語(yǔ)言中,用一對(duì)雙引號(hào)括起來(lái)的一個(gè)字符序列。字符序列可以是零個(gè)、一個(gè)或多個(gè)字符。字符序列中含有字符個(gè)數(shù)稱為字符串的長(zhǎng)度。如:

"china"長(zhǎng)度為5 "a"長(zhǎng)度為1

"□□"空格串,長(zhǎng)度為2 ""空串,長(zhǎng)度為0說(shuō)明:①字符串常量在存儲(chǔ)時(shí)除了存儲(chǔ)雙引號(hào)中的字符序列外,系統(tǒng)還會(huì)自動(dòng)在最后一個(gè)字符的后面加上一轉(zhuǎn)義字符’\0’,所以一個(gè)字符串常量在內(nèi)存中所占的字節(jié)數(shù)是字符串長(zhǎng)度加1。如"china"的長(zhǎng)度為5,而在內(nèi)存中占的字節(jié)數(shù)為6。②’\0’是ASCII碼為0的空操作字符,C語(yǔ)言規(guī)定用’\0’作為字符串的結(jié)束標(biāo)志,目的是以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。③區(qū)別’A’和"A",前者為字符常量,后者是以’\0’結(jié)束的字符串常量。④字符串常量中的字符可以是轉(zhuǎn)義字符,但它只代表一個(gè)字符。如:字符串"ab\n\\cd\e"的長(zhǎng)度是7,而不是10。⑤不能將字符串常量賦給字符變量。如下面的賦值是錯(cuò)誤的:c1="a"; c2="china";C語(yǔ)言中沒有專門的字符串變量,字符串如果需要存放在變量中,需要用字符數(shù)組來(lái)存放,即用一個(gè)字符型數(shù)組來(lái)存放一個(gè)字符串。2.8變量及指針

內(nèi)存中每一個(gè)字節(jié)都有一個(gè)確定其位置的地址,而每個(gè)變量在編譯時(shí)都在內(nèi)存分配連續(xù)的一定字節(jié)數(shù)的存儲(chǔ)單元,變量分配的存儲(chǔ)單元的第一字節(jié)的地址就是該變量的地址。一個(gè)變量的地址值可以通過(guò)取地址符&得到,其一般格式為:&變量名。C允許通過(guò)定義一個(gè)變量來(lái)存放另一變量的地址,這樣的變量就稱作指針變量。1.指針變量的定義和初始化

指針是一種存放地址值的變量,像其它變量一樣,必須在使用前定義。指針變量的命名遵守與其它變量相同的規(guī)則,

即必須是唯一的標(biāo)識(shí)符。指針定義的格式如下:類型名*指針名;如:int*p1;/*p1是一個(gè)指針變量,用來(lái)存放整型變量的地址*/在函數(shù)內(nèi)或函數(shù)外可以同時(shí)定義多個(gè)指針變量,也可以同時(shí)定義普通變量和指針變量。如:int*p1,*p2,a1;其中,a1是普通變量,用來(lái)存放整型數(shù)。p1和p2是指針變量,用來(lái)存放整型變量的地址??梢詫?duì)指針變量初始化。如:inta=10,*p=&a;等價(jià)于:inta=10,*p;p=&a;把變量a的地址賦給了指針變量p,此時(shí)稱指針變量p“指向”整型變量a。如果要把一個(gè)變量的指針初始化給一個(gè)指針變量,該變量必須在指針變量定義之前定義。如下列初始化錯(cuò)誤的:int*p1=&a;inta=10;其道理很簡(jiǎn)單,變量只有定義后才被分配一定的內(nèi)存單元。需要注意的是:定義指針變量時(shí)的數(shù)據(jù)類型不是指針變量中存放的數(shù)據(jù)類型,而是它要指向的變量的數(shù)據(jù)類型。也就是說(shuō)定義成某種數(shù)據(jù)類型的指針變量,將來(lái)只能用來(lái)指向該類型的其他變量。

2.指針變量的引用訪問(wèn)指針變量所指向的變量用間接訪問(wèn)運(yùn)算符“*”。其一般格式為:*指針變量名若有定義:inta=10,*p=&a;則*p為指針變量p所指向的變量,即變量a,其值為10?!纠?.3】main(){inta=10;int*p;p=&a;printf("%d%d",a,*p);}〖運(yùn)行結(jié)果〗1010說(shuō)明:①定義變量時(shí),變量名前加“*”,表示該變量為指針變量,使用指針變量時(shí),指針變量前加“*”,表示該指針變量所指向的變量。如:例2.3第三行的*p表示定義指針變量p,p前面的“*”只表示p為指針變量。第五行printf()函數(shù)中的*p則代表p所指向的變量,即變量a。②指針變量在使用前一定要賦予一定的地址值,如果指針變量在使用前沒有賦值,其值不確定,使用時(shí)容易出錯(cuò),嚴(yán)重時(shí)會(huì)造成系統(tǒng)癱瘓。③不能將普通類型數(shù)據(jù)(0除外)直接賦給指針變量。若p是指針變量,下面的賦值是不合法的:p=100;④指針變量賦值時(shí),類型一定要匹配,不能將一個(gè)指針直接賦給與它類型不同的指針變量。若有定義:inta,*p1=&a;floatp2;則下面的賦值是不合法的:

p1=p2;若想賦值,必須通過(guò)強(qiáng)制類型轉(zhuǎn)換,如:

p2=(float*)p1;其原因是:不同類型的指針變量,它們?cè)L問(wèn)的存儲(chǔ)單元的大小不同。如:char型指針為1個(gè)字節(jié),int型指針為連續(xù)2個(gè)字節(jié),float型指針為連續(xù)4個(gè)字節(jié),double型指針為連續(xù)8個(gè)字節(jié)。3.1表達(dá)式基礎(chǔ)3.1.1表達(dá)式的組成1.運(yùn)算符

運(yùn)算符又稱操作符,是一個(gè)符號(hào),它指示在一個(gè)或多個(gè)操作數(shù)上完成某種運(yùn)算操作或動(dòng)作。

C語(yǔ)言中,除了輸入、輸出及程序流程控制操作以外的所有基本操作都作為運(yùn)算處理。如,賦值運(yùn)算符“=”、逗號(hào)運(yùn)算符“,”、括號(hào)運(yùn)算符“()”。①算術(shù)運(yùn)算符有+、—、*、/、%、++、--②關(guān)系運(yùn)算符有<、<=、==、!=、>、>=③邏輯運(yùn)算符有!、&&、||④位運(yùn)算符有<<、>>、~、|、^、&⑤賦值運(yùn)算符有=、+=、-=、*=、/=、%=⑥條件運(yùn)算符有?:⑦逗號(hào)運(yùn)算符有,⑧指針運(yùn)算符有*、&⑨求字節(jié)數(shù)運(yùn)算符有sizeof10強(qiáng)制類型轉(zhuǎn)換運(yùn)算符有(類型)11其它運(yùn)算符有.、→、()、[]等2.操作數(shù)

操作數(shù)是運(yùn)算符的操作對(duì)象,可以是常量、變量、函數(shù)與表達(dá)式。常量、變量、函數(shù)本身就是簡(jiǎn)單表達(dá)式,從一般意義上講,C語(yǔ)言中所有操作數(shù)都是表達(dá)式。復(fù)雜表達(dá)式由運(yùn)算符連接簡(jiǎn)單表達(dá)式形成。3.1.2表達(dá)式的書寫

C語(yǔ)言的表達(dá)式雖然來(lái)源于數(shù)學(xué)表達(dá)式,是數(shù)學(xué)表達(dá)式在計(jì)算機(jī)中的表示,但在書寫時(shí)應(yīng)該注意遵循C語(yǔ)言表達(dá)式書寫的原則:(1)C語(yǔ)言的表達(dá)式只能采用線性的形式書寫。例如:①應(yīng)寫成1/3+i+j*j*j。②應(yīng)寫成(a+b)/(c+d)*e+f。(2)C語(yǔ)言的表達(dá)式只能使用C語(yǔ)言中合法的運(yùn)算符和操作數(shù),對(duì)有些操作必須調(diào)用庫(kù)函數(shù)完成,而且運(yùn)算符不能省略。例如:①πr2應(yīng)寫成3.14159*r*r。②應(yīng)寫成0.5*a*b*sin(alph)。③|x-y|應(yīng)寫成fabs(x-y)。④y+2X

應(yīng)寫成y+pow(2,x)。3.1.3表達(dá)式的分類

C語(yǔ)言表達(dá)式種類很多,有多種分類方法。我們一般依據(jù)運(yùn)算的特征將表達(dá)式分為:①算術(shù)表達(dá)式,如a+b*2.0-3.0/5.0。②關(guān)系表達(dá)式,如x>=y,關(guān)系表達(dá)式可以認(rèn)為是邏輯表達(dá)式的特殊情況。③邏輯表達(dá)式,如(x>=2)&&(x<=8)。④賦值表達(dá)式,如a=b=c=1。⑤條件表達(dá)式,如(a>b)?a:b。⑥逗號(hào)表達(dá)式,如a=2,b=a*a,c=sqrt(b)。3.1.4表達(dá)式的計(jì)算1.運(yùn)算符優(yōu)先級(jí)

C語(yǔ)言將運(yùn)算符的優(yōu)先級(jí)劃分為15級(jí),初等運(yùn)算()、[]、→、.優(yōu)先級(jí)最高,單目運(yùn)算!、~、++、--、-、(類型)、*、&、sizeof優(yōu)先級(jí)次高,算術(shù)運(yùn)算+、-、*、/、%再次之,然后是關(guān)系運(yùn)算<、<=、==、![KG-*4]=、>、>=,再然后是邏輯運(yùn)算&&、||,條件運(yùn)算式?:,賦值運(yùn)算=、+=、-=、*=、/=、%=,逗號(hào)運(yùn)算優(yōu)先級(jí)最低,位運(yùn)算優(yōu)先級(jí)比較分散。2.運(yùn)算符的結(jié)合性

運(yùn)算符的結(jié)合性是指,優(yōu)先級(jí)相同的運(yùn)算從左到右進(jìn)行(左結(jié)合性)還是從右至左進(jìn)行(右結(jié)合性),左結(jié)合性是人們習(xí)慣的計(jì)算順序。

C語(yǔ)言中,只有單目運(yùn)算(!、~、++、--、-、*、&)、條件運(yùn)算(?:)、賦值運(yùn)算(=、+=、-=、*=、/=、%=)的結(jié)合性是右結(jié)合,其余運(yùn)算為左結(jié)合。3.2算術(shù)表達(dá)式1.自增運(yùn)算

自增運(yùn)算符:++自增運(yùn)算是單目運(yùn)算,操作數(shù)只能是整型變量,有前置、后置兩種方式:++i,在使用i之前,先使i的值增加1,俗稱先增后用。

i++,先使用i的值,然后使i的值增加1,俗稱先用后增。如:i=1999;j=++i;/*先將i的值增1,變?yōu)?000,后使用。j的值也為2000*/

j=i++;/*先使用,j的值為1999。后增,將i的值增1,變?yōu)?000*/自增運(yùn)算優(yōu)先級(jí)處于第2級(jí),結(jié)合自右向左。

2.自減運(yùn)算

自減運(yùn)算符:--自減運(yùn)算與自增運(yùn)算一樣也是單目運(yùn)算,操作數(shù)也只能是整型變量。同樣有前置、后置兩種方式:--i,在使用i之前,先使i的值減1,俗稱先減后用。

i--,先使用i的值,然后使i的值減1,俗稱先用后減。如:i=2000;j=--i;/*先減,將i的值減1,變?yōu)?999。后使用,j的值也為1999*/

j=i--;/*先使用,j的值為2000。后減,將i的值減1,i的值變?yōu)?999*/自減運(yùn)算的優(yōu)先級(jí)、結(jié)合性同自增運(yùn)算。請(qǐng)?zhí)貏e注意:(1)自增、自減運(yùn)算只能用于整型變量,不能用于常量或表達(dá)式。(2)自增、自減運(yùn)算比等價(jià)的賦值語(yǔ)句生成的目標(biāo)代碼更高效。(3)該運(yùn)算常用于循環(huán)語(yǔ)句中,使循環(huán)控制變量自動(dòng)加、減1,或用于指針變量,使指針指向下一個(gè)或上一個(gè)地址。(4)表達(dá)式中包含有自增、自減運(yùn)算時(shí),容易出錯(cuò),務(wù)請(qǐng)小心。如:i=1;(++i)+(++i)+(++i)的值為多少呢?有的計(jì)算出9(=2+3+4),其實(shí)這是錯(cuò)誤的。計(jì)算時(shí)先對(duì)整個(gè)表達(dá)式掃描,i先自增3次,由1→2→3→4,如此計(jì)算結(jié)果為4+4+4,等于12。(i++)+(i++)+(i++)的值又是多少呢?類似上面分析,應(yīng)為3,當(dāng)然表達(dá)式計(jì)算完成后i的值同樣改變?yōu)?。3.運(yùn)算符的組合問(wèn)題

C語(yǔ)言的運(yùn)算符一般為一個(gè)字符,有的由兩個(gè)字符組成,在表達(dá)式中出現(xiàn)多個(gè)字符時(shí)如何組合呢?C編譯系統(tǒng)在處理時(shí)原則上盡可能自左而右將若干字符組合成一個(gè)運(yùn)算符,標(biāo)識(shí)符、關(guān)鍵字也按同樣的原則進(jìn)行處理。如i+++j,解釋為(i++)+j,非i+(++j)。如要表示i+(++j),必須加括號(hào)。例3–2自增自減運(yùn)算。/*程序3-2,自增自減運(yùn)算*/#include″stdio.h″main(){inti,j;i=j=5;printf(″i++=%d,j--=%d\n″,i++,j--);printf(″++i=%d,--j=%d\n″,++i,--j);printf(″i++=%d,j--=%d\n″,i++,j--);printf(″++i=%d,--j=%d\n″,++i,--j);printf(″i=%d,j=%d\n″,i,j);}運(yùn)行結(jié)果:i++=5,j--=5++i=7,--j=3i++=7,j--=3++i=9,--j=1i=9,j=13.3賦值表達(dá)式3.3.1賦值運(yùn)算賦值運(yùn)算符:=賦值運(yùn)算是雙目運(yùn)算,一個(gè)操作數(shù)為變量,一個(gè)操作數(shù)為表達(dá)式。賦值運(yùn)算符的右邊是表達(dá)式,左邊是變量。賦值運(yùn)算時(shí)先計(jì)算右邊表達(dá)式的值,然后將右邊表達(dá)式的值賦給左邊變量,即送給左邊變量對(duì)應(yīng)的存儲(chǔ)單元,并以此作為整個(gè)賦值表達(dá)式的值。如:inti;i=3+5%2;/*先計(jì)算3+5%2,得到4,然后將4賦給i*/。

賦值運(yùn)算的優(yōu)先級(jí)為第14級(jí),次低,結(jié)合自右向左。賦值運(yùn)算中的表達(dá)式操作數(shù)最簡(jiǎn)單的形式是一個(gè)常量,這時(shí)讓變量得到一個(gè)初值。如:inti;floatx;charch;i=100;x=12.345;ch=′A′;

賦值運(yùn)算中表達(dá)式操作數(shù)又可以是賦值表達(dá)式,如此可輾轉(zhuǎn)賦值。如:intx,y,z;x=y=z=0.0;/*相當(dāng)于x=(y=(z=0.0)),x、y、z都得到值0.0*/③②①3.3.2賦值類型轉(zhuǎn)換(1)將實(shí)型數(shù)據(jù)賦給整型變量時(shí),舍棄實(shí)數(shù)的小數(shù)部分。如:inti;i=1.23;/*結(jié)果i的值為1*/(2)將整型數(shù)據(jù)賦給單、雙精度型變量時(shí),數(shù)值大小不變,但以浮點(diǎn)形式存儲(chǔ)到變量中。(3)將字符型數(shù)據(jù)賦給整型變量時(shí),由于字符數(shù)據(jù)只占一個(gè)字節(jié),而整型變量為兩個(gè)字節(jié),將字符的數(shù)據(jù)放整型變量的低8位,而對(duì)整型變量的高8位進(jìn)行擴(kuò)充。(4)將基本整型數(shù)據(jù)賦給長(zhǎng)整型變量時(shí),基本整型數(shù)據(jù)放長(zhǎng)整型變量低16位,高16位用符號(hào)位擴(kuò)充。反之將長(zhǎng)整型數(shù)據(jù)賦給整型變量時(shí),只需將長(zhǎng)整型數(shù)據(jù)的低16位原封不動(dòng)送整型變量中。例如:①inti=-1;longintj;j=i;i的二進(jìn)制形式:1000000000000001j的二進(jìn)制形式:11111111111111111000000000000001②longinti=-1;intj;j=i;i的二進(jìn)制形式:10000000000000000000000000000001j的二進(jìn)制形式:0000000000000001(5)將無(wú)符號(hào)整型數(shù)據(jù)賦給長(zhǎng)整型變量時(shí),不存在符號(hào)擴(kuò)展的問(wèn)題,只需將高位補(bǔ)0即可。將無(wú)符號(hào)整型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的整型變量時(shí),將無(wú)符號(hào)整型數(shù)據(jù)原樣送整型變量中,并將最高位當(dāng)作符號(hào)位,如果數(shù)據(jù)超出相應(yīng)的整型范圍,將產(chǎn)生數(shù)據(jù)錯(cuò)誤。如果將整型數(shù)據(jù)賦給占字節(jié)數(shù)相同的無(wú)符號(hào)整型變量,也是原樣照賦,最高位作數(shù)值處理。例如:①unsignedinti=65535;intj;j=i;/*j的值為-1*/②inti=-1;unsignedintj;j=i;/*i的值為65535*/

3.3.3復(fù)合賦值運(yùn)算在基本賦值運(yùn)算符“=”之前加上任一雙目算術(shù)運(yùn)算符及位運(yùn)算符可構(gòu)成復(fù)合賦值運(yùn)算符,又稱帶運(yùn)算的賦值運(yùn)算符。算術(shù)復(fù)合賦值運(yùn)算符:+=、-=、*=、/=、%=位復(fù)合賦值運(yùn)算符:&=、|=、^=、>>=、<<=一般形式:變量☆=表達(dá)式等價(jià)于:變量=變量☆表達(dá)式☆代表任一雙目算術(shù)運(yùn)算符或位運(yùn)算符。復(fù)合賦值運(yùn)算先進(jìn)行所帶運(yùn)算,再進(jìn)行賦值運(yùn)算。復(fù)合賦值運(yùn)算的優(yōu)先級(jí)同賦值運(yùn)算。(1)inta=3;a+=2等價(jià)于a=a+2(2)floatx=1.2,y=2.1;y*=x+3.4等價(jià)于y=y*(x+3.4)(3)inta=1,b=2;b/=a+=1,等價(jià)于b=b/(a=a+1)例3–3賦值運(yùn)算。/*程序3-3,賦值運(yùn)算*/#include″stdio.h″main(){inti,j;floatx,y;i=j=1;x=y=1.1;printf(″i=%d,j=%d\n″,i,j);x=i+j;y+=1;printf(″x=%4.2f,y=%4.2f\n″,x,y);i=i+++j;x=2*x+y;printf(″i=%d,x=%4.2f\n″,i,x);}運(yùn)行結(jié)果:i=1,j=1x=2.00,y=2.10i=2,x=6.103.4邏輯表達(dá)式3.4.1關(guān)系表達(dá)式關(guān)系表達(dá)式是邏輯表達(dá)式中的一種特殊情況,關(guān)系表達(dá)式由關(guān)系運(yùn)算符和操作數(shù)組成,關(guān)系運(yùn)算用于完成數(shù)的比較運(yùn)算。關(guān)系運(yùn)算有<、<=、==、!=、>、>=,<、<=、>、>=的優(yōu)先級(jí)相同,==、!=的優(yōu)先級(jí)相同,前者的優(yōu)先級(jí)高于后者。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算,高于邏輯運(yùn)算&&、||,也高于賦值運(yùn)算。邏輯表達(dá)式由邏輯運(yùn)算符和關(guān)系表達(dá)式或邏輯量組成,邏輯表達(dá)式用于程序設(shè)計(jì)中的條件描述。

C語(yǔ)言有!、&&、||等三種邏輯運(yùn)算。!運(yùn)算的優(yōu)先級(jí)高于算術(shù)運(yùn)算,&&運(yùn)算高于||運(yùn)算,&&、||運(yùn)算低于關(guān)系運(yùn)算,高于賦值運(yùn)算。3.4.2邏輯表達(dá)式&&和||是一種短路運(yùn)算。所謂短路運(yùn)算,是指在計(jì)算的過(guò)程中,只要表達(dá)式的值能確定,便不再計(jì)算下去。如邏輯與運(yùn)算時(shí)計(jì)算到某個(gè)操作數(shù)為假,可確定表達(dá)式的值為假,剩余的操作數(shù)不再考慮;邏輯或運(yùn)算時(shí)計(jì)算到某個(gè)操作數(shù)為真,可確定表達(dá)式的值為真,剩余的操作數(shù)也不再需要考慮。例如:(1)e1&&e2,若e1為0,可確定表達(dá)式的值為0,不再計(jì)算e2。(2)e1||e2,若e1為真,則可確定表達(dá)式的值為真,也不再計(jì)算e2。例3—4用邏輯表達(dá)式描述下列條件:(1)x是3的倍數(shù)。x%3==0(2)x是偶數(shù)。x%2==0(3)x是3的倍數(shù)且x是偶數(shù)。(x%3==0)&&(x%2==0)(4)100<x<200。(x>100)&&(x<200)(5)x等于2或8。(x==2)||(x==8)(6)某年是否為閏年。(year%400==0)||((year%4==0)&&(year%100!=0))3.5位運(yùn)算表達(dá)式3.5.1位邏輯運(yùn)算1.按位取反運(yùn)算

運(yùn)算符:~按位取反運(yùn)算用來(lái)對(duì)一個(gè)二進(jìn)制數(shù)按位取反,即0位變1,1位變0。例如:~25,25的二進(jìn)制表示為:0000000000011001按位取反得結(jié)果:1111111111100110,即-26?!\(yùn)算常用于產(chǎn)生一些特殊的數(shù)。如高8位全1低8位全0的數(shù)0xFF00,按位取反后變?yōu)?x00FF?!?,在16位與32位的系統(tǒng)中,都代表只有最低位為0的整數(shù)?!\(yùn)算是位運(yùn)算中唯一的單目運(yùn)算,也是唯一具有右結(jié)合性的位運(yùn)算。2.按位與運(yùn)算

運(yùn)算符:&按位與運(yùn)算的規(guī)則是操作數(shù)的對(duì)應(yīng)位都為1,則該位的運(yùn)算結(jié)果為1,否則為0。例如:0x29&0x37,0x29與0x37的二進(jìn)制表示為:0000000000101001與0000000000110111按位與結(jié)果為:00000000000100001,即0x21。

按位與運(yùn)算主要用途是清零及取數(shù)的某些位或保留數(shù)的某些位。例如:(1)a&0,將a清0。(2)a&0xFF00,取數(shù)a的高8位,低8位清0。(3)a&0x00FF,取數(shù)a的低8位,高8位清0。3.按位或運(yùn)算運(yùn)算符:|按位或運(yùn)算的規(guī)則是操作數(shù)的對(duì)應(yīng)位都為0,則該位的運(yùn)算結(jié)果為0,否則為1。例如:0x29|0x37,0x29與0x37的二進(jìn)制表示為:0000000000101001與0000000000110111按位或結(jié)果為:0000000000111111,即等于0x3f。

利用|運(yùn)算可將數(shù)的部分位或所有位置1。例如:a|0x000F,a的低4位全置1,其它位保留。a|0xFFFF,a的每一位全置1。4.按位異或運(yùn)算運(yùn)算符:^按位異或運(yùn)算的規(guī)則是操作數(shù)的對(duì)應(yīng)位相同,則該位的運(yùn)算結(jié)果為0,否則為1。例如:0x29^0x37,0x29與0x37的二進(jìn)制表示為:0000000000101001與0000000000110111按位異或結(jié)果為:0000000000011110,即等于0x1e。

利用^運(yùn)算將數(shù)的特定位翻轉(zhuǎn),保留原值,不用臨時(shí)變量交換兩個(gè)變量的值。例如:(1)a^0x00FF,將數(shù)a的低8位翻轉(zhuǎn),高8位不變。(2)a^0,保留數(shù)a的原值。(3)a=a^b,b=b^a,a=a^b,不用臨時(shí)變量交換a#,b的值。位邏輯運(yùn)算自身的優(yōu)先級(jí)由高到低依次是~、&、|、^,在整個(gè)運(yùn)算體系中~運(yùn)算的優(yōu)先級(jí)位于第二級(jí),&、|、^運(yùn)算低于關(guān)系運(yùn)算,高于邏輯運(yùn)算。位邏輯運(yùn)算意義與邏輯運(yùn)算一樣,但位邏輯運(yùn)算對(duì)二進(jìn)制位而言,且必須對(duì)數(shù)的所有二進(jìn)制位進(jìn)行,而且操作數(shù)只能為整數(shù)。如果參與運(yùn)算的數(shù)據(jù)長(zhǎng)度不同,將對(duì)短的數(shù)據(jù)先進(jìn)行高位符號(hào)擴(kuò)展后再進(jìn)行位運(yùn)算。3.5.2移位運(yùn)算1.左移位運(yùn)算運(yùn)算符:<<移位運(yùn)算的左操作數(shù)是要進(jìn)行移位的整數(shù),右操作數(shù)是要移的位數(shù)。左移位運(yùn)算規(guī)則是高位左移后溢出,舍棄,空出的右邊低位補(bǔ)0。例如,15<<2,15的二進(jìn)制表示為:0000000000001111左移2位結(jié)果為:0000000000111100,等于60。左移1位相當(dāng)于該數(shù)乘以2,左移2位相當(dāng)于該數(shù)乘以4(22)。使用左移位運(yùn)算可以實(shí)現(xiàn)快速乘2運(yùn)算。2.右移位運(yùn)算

運(yùn)算符:>>右移位運(yùn)算規(guī)則是低位右移后被舍棄,空出的左邊高位對(duì)無(wú)符號(hào)數(shù)移入0。如果是有符號(hào)數(shù),對(duì)正數(shù)空出的左邊高位移入0;如果是負(fù)數(shù),則左邊移入0還是1,要取決于所用編譯系統(tǒng),有的移入0(邏輯右移),有的移入1(算術(shù)右移)。例如,15>>2,右移2位,等于0000000000000011,即3。右移1位相當(dāng)于該數(shù)除以2,右移2位相當(dāng)于該數(shù)除以4(22)。使用右移位運(yùn)算可以快速實(shí)現(xiàn)除2運(yùn)算。移位運(yùn)算低于算術(shù)運(yùn)算,高于關(guān)系運(yùn)算。位運(yùn)算與賦值運(yùn)算可組合成復(fù)合賦值運(yùn)算&=、|=、^=、<<=、>>=。例3—5取一個(gè)整數(shù)a的從右端開始的4~7位。/*程序3—5,取一個(gè)整數(shù)a的從右端開始的4~7位*/#include″stdio.h″main(){unsigneda,b,c,d;scanf(″%o″,&a);/*八進(jìn)制形式輸入*/b=a>>4;/*a右移4位*/c=~(~0<<4);/*得到一低4位全為1,其余位為0的數(shù)*/d=b&c;/*取b的0~3位,即得到a的4~7位*/printf(″a=%o,a(4~7)=%o″,a,d);}輸入數(shù)據(jù):331運(yùn)行結(jié)果:a=331,a(4~7)=153.6其它表達(dá)式3.6.1條件表達(dá)式條件表達(dá)式由條件運(yùn)算符和操作數(shù)組成,用以將條件語(yǔ)句以表達(dá)式的形式出現(xiàn),完成選擇判斷處理。條件運(yùn)算符由“?”和“:”組成。條件運(yùn)算是三目運(yùn)算,有三個(gè)操作數(shù),一般形式如下:表達(dá)式1?表達(dá)式2:表達(dá)式3表達(dá)式1必須為邏輯表達(dá)式,如表達(dá)式1為真,計(jì)算表達(dá)式2,并以此作為整個(gè)表達(dá)式的值。如表達(dá)式1為假,計(jì)算表達(dá)式3,并以此作為整個(gè)表達(dá)式的值。(1)a>b?a:ba大于b,表達(dá)式的值為a;a小于b,表達(dá)式的值為b。實(shí)際上求a、b的最大值。(2)a>0?a:-aa大于0,表達(dá)式的值為a;a小于等于0,表達(dá)式的值為-a。實(shí)際上求a的絕對(duì)值。條件運(yùn)算的優(yōu)先級(jí)為倒數(shù)第3級(jí),高于賦值運(yùn)算,低于邏輯運(yùn)算,結(jié)合從右至左。如a>b?a:c>d?c:d,相當(dāng)于a>b?a:(c>d?c:d)例3—6判斷整數(shù)的正負(fù)。/*程序3—6,判斷整數(shù)的正負(fù)*/#include″stdio.h″main(){intx;scanf(″%d″,″&x″);x>0?printf(″%s″,″正數(shù)″):printf(″%c″,″負(fù)數(shù)″);}3.6.2逗號(hào)表達(dá)式逗號(hào)表達(dá)式由逗號(hào)運(yùn)算符和操作數(shù)組成,用以將多個(gè)表達(dá)式連接成一個(gè)表達(dá)式。逗號(hào)運(yùn)算符:,逗號(hào)運(yùn)算是雙目運(yùn)算,一般形式如下:表達(dá)式1,表達(dá)式2先計(jì)算表達(dá)式1,再計(jì)算表達(dá)式2,并以此作為整個(gè)表達(dá)式的值。如a=2,a*6,先計(jì)算a=2,再計(jì)算a*6,并以此作為整個(gè)表達(dá)式的值,表達(dá)式的值為12。逗號(hào)運(yùn)算的優(yōu)先級(jí)最低,結(jié)合自左向右。逗號(hào)表達(dá)式的更一般使用形式為:表達(dá)式1,表達(dá)式2,表達(dá)式3,……,表達(dá)式n

先計(jì)算表達(dá)式1,再計(jì)算表達(dá)式2,再計(jì)算表達(dá)式3,…,再計(jì)算表達(dá)式n的值,并以此作為整個(gè)表達(dá)式的值。如表達(dá)式x=a=3,6*x,6*a,a+x的值為6。逗號(hào)運(yùn)算又稱順序求值運(yùn)算。3.6.3其它運(yùn)算

1.取地址運(yùn)算

運(yùn)算符:&取地址運(yùn)算是單目運(yùn)算,操作數(shù)只能是變量,得到變量的地址。C語(yǔ)言程序設(shè)計(jì)中許多場(chǎng)合要使用到地址數(shù)據(jù)。如輸入函數(shù)scanf(),輸入?yún)?shù)就要求是地址表,將讀入的數(shù)據(jù)送變量對(duì)應(yīng)的存儲(chǔ)單元中。取地址運(yùn)算的優(yōu)先級(jí)次高。

C語(yǔ)言還提供一個(gè)指針運(yùn)算“*”,用于取存儲(chǔ)單元的內(nèi)容.2.求字節(jié)數(shù)運(yùn)算運(yùn)算符:sizeof

求字節(jié)數(shù)運(yùn)算是單目運(yùn)算,操作數(shù)可以是類型名,也可以是變量、表達(dá)式,用以求得相應(yīng)類型或數(shù)據(jù)所占的字節(jié)數(shù)。此運(yùn)算的優(yōu)先級(jí)與取地址運(yùn)算優(yōu)先級(jí)相同。4.1C語(yǔ)句概述

C語(yǔ)言是函數(shù)式語(yǔ)言,每一個(gè)函數(shù)是由數(shù)據(jù)說(shuō)明部分和執(zhí)行語(yǔ)句部分組成。C語(yǔ)言中的所有語(yǔ)句均是執(zhí)行語(yǔ)句,沒有非執(zhí)行語(yǔ)句。根據(jù)C語(yǔ)言的句法,語(yǔ)句可分為單個(gè)語(yǔ)句,復(fù)合語(yǔ)句和空語(yǔ)句。根據(jù)結(jié)構(gòu)化程序設(shè)計(jì)的三個(gè)模塊大致可分為:用于順序結(jié)構(gòu)中的表達(dá)式語(yǔ)句、賦值語(yǔ)句、函數(shù)調(diào)用語(yǔ)句等;用于分支結(jié)構(gòu)中的if語(yǔ)句、switch語(yǔ)句、轉(zhuǎn)移語(yǔ)句、標(biāo)號(hào)語(yǔ)句等;用于循環(huán)結(jié)構(gòu)中的while語(yǔ)句、for語(yǔ)句、do-while語(yǔ)句。另外在后兩種結(jié)構(gòu)中還可出現(xiàn)break語(yǔ)句、continue語(yǔ)句、復(fù)合語(yǔ)句和空語(yǔ)句等作為其中的一部分。(1)邏輯上每個(gè)語(yǔ)句最后都必須有一個(gè)分號(hào)(;),一個(gè)語(yǔ)句可分寫成幾行,幾個(gè)語(yǔ)句也可合寫成一行(但不提倡,因其不利于單步調(diào)試)。(2)空語(yǔ)句直接由分號(hào)(;)組成,常用于控制語(yǔ)句中必須出現(xiàn)語(yǔ)句之處,它不做任何操作,只在邏輯上起到有一個(gè)語(yǔ)句的作用。(3)復(fù)合語(yǔ)句由花括號(hào){}括起的若干個(gè)語(yǔ)句,語(yǔ)法上可以看成是一個(gè)語(yǔ)句。復(fù)合語(yǔ)句中最后一個(gè)語(yǔ)句的分號(hào)不能省略。如下面是一個(gè)復(fù)合語(yǔ)句:{z=x+y;y=x/z;x=z-y;}(4)表達(dá)式語(yǔ)句是在各種表達(dá)式后加一個(gè)分號(hào)(;)形成一個(gè)語(yǔ)句。如賦值語(yǔ)句由賦值表達(dá)式加一個(gè)分號(hào)構(gòu)成:

x=x+y;再如表達(dá)式x++后加一個(gè)分號(hào)構(gòu)成表達(dá)式語(yǔ)句:

x++;

表達(dá)式和表達(dá)式語(yǔ)句的區(qū)別是表達(dá)式后無(wú)分號(hào),可以出現(xiàn)在其它語(yǔ)句中允許出現(xiàn)表達(dá)式的地方;而表達(dá)式語(yǔ)句后有分號(hào),自己獨(dú)立成一個(gè)語(yǔ)句,不能再出現(xiàn)在其它語(yǔ)句的表達(dá)式中。如:

if((a=b)<0)min=a;(5)控制語(yǔ)句有條件判斷語(yǔ)句(if、switch),循環(huán)語(yǔ)句(for、while、do-while),轉(zhuǎn)移語(yǔ)句(goto、continue、break、return)。4.2基本輸入輸出函數(shù)

4.2.1字符輸出函數(shù)—putchar()一般調(diào)用格式:putchar(參數(shù))其中,參數(shù)可以是任意類型表達(dá)式,一般為算術(shù)表達(dá)式。功能:向顯示器輸出一個(gè)字符。返回值:如果輸出成功,返回值就是輸出的字符,否則返回EOF(-1)。如:putchar(’a’)/*輸出字符a*/putchar(65)/*輸出ASCII碼為65的字符A*/putchar(’a’+2)/*輸出字符c*/putchar(’\n’)/*輸出一個(gè)換行符*/說(shuō)明:1.putchar()函數(shù)一次只能輸出一個(gè)字符,即該函數(shù)有且只有一個(gè)參數(shù)。2.putchar()函數(shù)可以輸出轉(zhuǎn)義字符。3.在使用函數(shù)putchar()前,一定要使用文件包含:

#include"stdio.h"或#include<stdio.h>

【例4.1】#include"stdio.h"main(){chara,b,c;

a=’o’;b=’u’;c=’t’;putchar(a);putchar(b);putchar(c);putchar(’\n’);putchar(65);putchar(’\t’);putchar(’B’);putchar(a-10);}〖運(yùn)行結(jié)果〗:outA□□□□□□□Be(□代表空格)4.2.2字符輸入函數(shù)—getchar()

一般調(diào)用格式:getchar()功能:從鍵盤讀入一個(gè)字符。返回值:如果讀入成功,返回值就是讀入的字符,否則返回EOF(-1)。說(shuō)明:1.getchar()函數(shù)一次只能接收一個(gè)字符,即使從鍵盤輸入多個(gè)字符,也只接收第一個(gè)??崭窈娃D(zhuǎn)義字符都作為有效字符接收。2.接收的字符可以賦給字符型變量或整型變量,也可以不賦給任何變量,作為表達(dá)式的一部分。3.getchar()函數(shù)是無(wú)參函數(shù)。4.從鍵盤上輸入的字符不能帶單引號(hào),輸入以回車結(jié)束。5.在使用函數(shù)getchar()前,一定要使用文件包含: #include"stdio.h"

或#include<stdio.h>【例4.2】#include"stdio.h"main(){charch1,ch2,ch3;ch1=getchar();ch2=getchar()ch3=getchar();putchar(ch1);putchar(ch2);putchar(ch3);}在運(yùn)行時(shí),若從鍵盤上輸入:C↙G↙則第一個(gè)getchar()接收的是C,第二個(gè)getchar()接收的是回車,第三個(gè)getchar()接收的是G。輸出結(jié)果為:C(輸出ch1的值)G(輸出ch3的值)4.2.3格式輸出函數(shù)—printf()一般調(diào)用格式:printf("格式控制字符串",輸出表列)功能:按指定格式向顯示器輸出數(shù)據(jù)。返回值:輸出成功,返回輸出字節(jié)數(shù);否則返回EOF(-1)。輸出表列:是要輸出的數(shù)據(jù),可以沒有,有兩個(gè)或兩個(gè)以上時(shí),用逗號(hào)(,)分隔。輸出表列中的輸出項(xiàng)可以是常量,可以是變量,也可以是表達(dá)式。格式控制字符串:由普通字符和格式說(shuō)明兩部分組成。普通字符,即需要原樣輸出的字符,包括轉(zhuǎn)義字符;格式說(shuō)明是以%開始,以一個(gè)格式字符結(jié)束,中間可以插入附加格式說(shuō)明符,它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出,其一般形式為: %[附加格式說(shuō)明符]格式字符

printf()函數(shù)的格式字符和常用的附加格式說(shuō)明符分別見表4-1和表4-2。表4-1printf()函數(shù)格式字符

按%f格式輸出實(shí)型數(shù)據(jù)時(shí),整數(shù)部分全部輸出,小數(shù)部分保留六位。

在TurboC中,按%e格式輸出實(shí)型數(shù)據(jù)時(shí),輸出占十一位,其中整數(shù)部分占一位,小數(shù)部分占五位,指數(shù)部分占四位,小數(shù)點(diǎn)占一位。如:printf("%f",123.4);的輸出結(jié)果為:123.400000

printf("%e",123.4);的輸出結(jié)果為:1.23400e+02

表4-2printf()函數(shù)常用的附加格式說(shuō)明符【例4.3】main(){charch=’A’;inta=1234;floatb=123.4562222;printf("ch=%c\n",ch);/*輸出:ch=A*/printf("ch=%3c\n",ch);/*輸出:ch=□□A*/printf("a=%6d\n",a);/*輸出:a=□□1234*/printf("a=%2d\n",a);/*輸出:a=1234*/printf("a=%#o\n",a);/*輸出:a=02322*/printf("a=%#x\n",a);/*輸出:a=0x4d2*/printf("b=%f\n",b);/*輸出:b=123.456223*/printf("b=%8.2lf\n",b);/*輸出:b=□□123.46*/printf("b=%-8.2f\n",b);/*輸出:b=123.46□□*/

printf("b=%.2f\n",b);/*輸出:b=123.46*/printf("b=%e\n",b);/*輸出:b=1.23456e+02*/printf("b=%8.2e\n",b);/*輸出:b=□1.2e+02*/printf("b=%-8.2le\n",b);/*輸出:b=1.2e+02*/printf("b=%.2e\n",b);/*輸出:b=1.2e+02*/printf("str=%s\n","china");/*輸出:china*/printf("str=%8.3s\n","china");/*輸出:□□□□□chi*/printf("str=%-6.3s\n","china");/*輸出:chi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論