




已閱讀5頁,還剩566頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄,第1章 c語言概述 第2章 數(shù)據(jù)類型與表達(dá)式 第3章 順序結(jié)構(gòu)程序設(shè)計(jì) 第4章 選擇結(jié)構(gòu)程序設(shè)計(jì) 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 第6章 數(shù) 組 第7章 函數(shù)與變量 第8章 編譯預(yù)處理,第9章 指 針 第10章 結(jié)構(gòu)體與共用體 第11章 文 件 第12章 c語言屏幕操作函數(shù)及應(yīng)用 第13章 c語言綜合實(shí)訓(xùn),第1章 c語言概述,1.1 計(jì)算機(jī)語言概述 1.2 c語言的基本符號(hào)與關(guān)鍵字 1.3 c語言程序 1.4 c語言程序的編輯及運(yùn)行,計(jì)算機(jī)的核心部件是 cpu,計(jì)算機(jī)完成的每一種操作都是在cpu的控制下完成的。cpu需要執(zhí)行由人們輸入的指令,才能完成一定的任務(wù)。一般情況下,cpu 能完成一系列操作,每種操作對(duì)應(yīng)一條或幾條指令,把計(jì)算機(jī)能執(zhí)行的指令的集合稱作指令系統(tǒng)。實(shí)際上,這些指令就是人們同計(jì)算機(jī)“交流”的語言.多數(shù)情況下,計(jì)算機(jī)所完成的任務(wù)往往需要若干條指令組合起來,形成人們稱之為 “程序”的指令集合,這一過程就是程序設(shè)計(jì),設(shè)計(jì)中使用的語言就是計(jì)算機(jī)語言。 1.1.1 計(jì)算機(jī)語言的發(fā)展概況 當(dāng)代計(jì)算機(jī)在程序控制下能完成相當(dāng)復(fù)雜的任務(wù),但計(jì)算機(jī)內(nèi)部所能識(shí)別的只有“0”、“1”兩個(gè)二進(jìn)制數(shù)。,1.1 計(jì)算機(jī)語言概述,使用機(jī)器語言編程,要求編程者精通計(jì)算機(jī)的內(nèi)部結(jié)構(gòu),熟記由0和1編碼形成的指令,程序設(shè)計(jì)相當(dāng)困難,影響了計(jì)算機(jī)的普及與應(yīng)用。 為了擺脫用機(jī)器語言編程的困難,人們研制出用助記符來代替機(jī)器語言編程,這種由助記符表示的計(jì)算機(jī)語言稱為匯編語言。使用匯編語言編程,克服了機(jī)器語言難記、不易閱讀等缺點(diǎn),但匯編語言同機(jī)器語言一樣,也是面向特定計(jì)算機(jī)的,要求編程者精通計(jì)算機(jī)的內(nèi)部結(jié)構(gòu),通用性差,只適用于專業(yè)開發(fā)人員使用。 為普及計(jì)算機(jī)的應(yīng)用,讓計(jì)算機(jī)發(fā)揮更大的作用,人們研究開發(fā)出更易掌握、接近人類自然語言的計(jì)算機(jī)語言,這就是高級(jí)語言。用高級(jí)語言開發(fā)應(yīng)用程序較機(jī)器語言和匯編語言要容易許多,效率也高。用匯編語言或高級(jí)語言編寫的程序,一般稱為匯編語言或高級(jí)語言源程序。,除機(jī)器語言外,使用其他語言編寫的源程序,在計(jì)算機(jī)內(nèi)部都必須轉(zhuǎn)換成機(jī)器語言。源程序可以通過被稱為編譯或解釋系統(tǒng)的“翻譯”來實(shí)現(xiàn)這種轉(zhuǎn)換。編譯和解釋系統(tǒng)是由專業(yè)開發(fā)人員設(shè)計(jì)好的系統(tǒng)程序,不同的高級(jí)語言有它自己的編譯或解釋系統(tǒng)。 早期使用的高級(jí)語言種類較多,如fortran語言、basic語言、cobol、algol60等,這些語言是面向數(shù)學(xué)公式和算法的語言。20世紀(jì)70年代出現(xiàn)了結(jié)構(gòu)化程序設(shè)計(jì)語言,如pascal、ada、c、prolog等。到了20世紀(jì)80年代,計(jì)算機(jī)語言跨入了面向?qū)ο蟮木幊屉A段,出現(xiàn)了c+、ml、perl等與自然語言更接近的計(jì)算機(jī)語言。20世紀(jì)90年代,出現(xiàn)了網(wǎng)絡(luò)化的編程語言,如java語言。計(jì)算機(jī)語言的發(fā)展,豐富了計(jì)算機(jī)的功能。 如今,無論在生活領(lǐng)域,還是在科學(xué)技術(shù)等領(lǐng)域,計(jì)算機(jī)已經(jīng)顯示出不可替代的作用。,1.1.2 c語言的發(fā)展歷史及特點(diǎn) 1.c語言的發(fā)展歷史簡(jiǎn)介 在計(jì)算機(jī)技術(shù)的發(fā)展過程中,開發(fā)性能卓越的操作系統(tǒng)是技術(shù)人員不斷追求的目標(biāo)。在眾多的操作系統(tǒng)中,unix是成功中的典范。為描述和實(shí)現(xiàn)unix操作系統(tǒng)的需要,美國貝爾實(shí)驗(yàn)室的ken thompson以bcpl語言為基礎(chǔ),于1970年開發(fā)了b語言,并用b語言編寫了unix操作系統(tǒng)。1972年至 1973年間,貝爾實(shí)驗(yàn)室的m.d.ritchie在 b語言基礎(chǔ)上設(shè)計(jì)出c語言,1973年,他和k.thompson合作用c語言將unix操作系統(tǒng)90%以上的源代碼重新改寫。unix操作系統(tǒng)的一些主要特點(diǎn),如可讀性強(qiáng)、易于修改、具有良好的可移植性等,在一定程度上得益于 c語言,所以u(píng)nix操作系統(tǒng)的成功與c語言是密不可分的。 目前,c語言已經(jīng)能夠在多種操作系統(tǒng)下運(yùn)行,實(shí)用的c語言編譯系統(tǒng)種類較多,如microsoft c、turbo c等。,2.c語言的特點(diǎn) (1)c語言基本組成部分緊湊簡(jiǎn)潔。c語言只有 32個(gè)標(biāo)準(zhǔn)關(guān)鍵字、44個(gè)標(biāo)準(zhǔn)運(yùn)算符以及 9種控制語句,不但語言的組成精練、簡(jiǎn)潔,而且使用方便、靈活。 (2)c語言運(yùn)算符豐富,表達(dá)能力強(qiáng)。c語言具有“高級(jí)語言”和“低級(jí)語言”的雙重特點(diǎn),運(yùn)算符包含的內(nèi)容廣泛,所生成的表達(dá)式簡(jiǎn)練、靈活,有利于提高編譯效率和目標(biāo)代碼的質(zhì)量. (3)c語言數(shù)據(jù)結(jié)構(gòu)豐富,結(jié)構(gòu)化好。c語言提供了編寫結(jié)構(gòu)化程序所需要的各種數(shù)據(jù)結(jié)構(gòu)和控制結(jié)構(gòu),這些豐富的數(shù)據(jù)和控制結(jié)構(gòu)以及以函數(shù)調(diào)用為主的程序設(shè)計(jì)風(fēng)格,保證了 c語言程序具有良好的結(jié)構(gòu)化特征。 (4)具有結(jié)構(gòu)化的控制語句。如ifelse語句.while語句. do while語句.switch語句.for語句。用函數(shù)作為程序模塊以實(shí)現(xiàn)程序的模塊化,是結(jié)構(gòu)化的理想語言,符合現(xiàn)代編程風(fēng)格。,(5)c語言提供了某些接近匯編語言的功能,有利于編寫系統(tǒng)軟件。c 語言提供的一些運(yùn)算和操作,能夠?qū)崿F(xiàn)匯編語言的一些功能,如它可以直接訪問物理地址,并能進(jìn)行二進(jìn)制位運(yùn)算等,這為編寫系統(tǒng)軟件提供了條件。 (6)c語言程序所生成的目標(biāo)代碼質(zhì)量高。c語言程序所生成的目標(biāo)代碼效率比用匯編語言描述同一個(gè)問題高20%左右。 (7)c語言程序可移植性好。c語言所提供的語句中,沒有直接依賴于硬件的語句,與硬件有關(guān)的操作,如數(shù)據(jù)的輸入、輸出等都是通過調(diào)用系統(tǒng)的庫函數(shù)來實(shí)現(xiàn)的,而庫函數(shù)本身不是c語言的組成部分。因此用c語言編寫的程序可很容易地從一種計(jì)算機(jī)環(huán)境移植到另一種計(jì)算機(jī)環(huán)境中。 c語言的弱點(diǎn): 一是運(yùn)算符的優(yōu)先級(jí)較復(fù)雜,不容易記憶;,二是由于c語言的語法限制不太嚴(yán)格,在增強(qiáng)程序設(shè)計(jì)靈活性的同時(shí),某種程度上也降低了程序的安全性,因此對(duì)程序設(shè)計(jì)人員也提出了更高的要求。 1.2.1 基本符號(hào)集 字符集是構(gòu)成c語言的基本元素。用c語言編寫程序時(shí),除字符型數(shù)據(jù)外,其他所有成份必須由字符集中的字符構(gòu)成。 c語言的字符集由下列字符構(gòu)成: (1)英文字母:az,az。 (2)數(shù)字字符:09。 (3)特殊符號(hào):,1.2 c語言的基本符號(hào)與關(guān)鍵字,空格 ! % * . , () 1.2.2 關(guān)鍵字 關(guān)鍵字是c語言已經(jīng)定義的、具有特殊功能和含義的單詞、單詞縮寫或者單詞組合。以下列出的是c語言的關(guān)鍵字: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned union void volatile while,1.2.3 標(biāo)識(shí)符 標(biāo)識(shí)符用于給變量、函數(shù)和其他用戶自定義類型命名。c 語言的標(biāo)識(shí)符必須按以下規(guī)則構(gòu)成: (1)必須以英文字母或下劃線開始,并由字母、數(shù)字和下劃線組成。例如:chabc,intx,uy126 等都是合法的標(biāo)識(shí)符,而555str,-chabc,+intj等則是非法的標(biāo)識(shí)符。 (2)每個(gè)標(biāo)識(shí)符可以由多個(gè)字符組成,但只有前 8個(gè)標(biāo)識(shí)符為有效標(biāo)識(shí)符,例如:employee1和employee2 被認(rèn)為是相同的標(biāo)識(shí)符employee。 (3)大寫字符和小寫字符代表不同的標(biāo)識(shí)符,如chabc和chabc是兩個(gè)不同的標(biāo)識(shí)符。 (4)不能使用c語言的關(guān)鍵字作為標(biāo)識(shí)符。,1.2.4 ascii字符集 在計(jì)算機(jī)中,所有的信息都用二進(jìn)制代碼表示。二進(jìn)制編碼的方式較多,應(yīng)用最為廣泛的是 ascii碼。我們使用的字符在計(jì)算機(jī)中就是以ascii碼方式存儲(chǔ)的。 ascii碼是美國標(biāo)準(zhǔn)信息交換碼(american standard code for information interchange,縮寫為ascii)。它已被國際標(biāo)準(zhǔn)化組織(iso)認(rèn)定為國際標(biāo)準(zhǔn),詳見附錄3。 ascii碼分為標(biāo)準(zhǔn)ascii碼和擴(kuò)展ascii碼,標(biāo)準(zhǔn)ascii碼在內(nèi)存中占用一個(gè)字節(jié),字節(jié)中的低 7位用于編碼,因此可以表示128個(gè)符號(hào)。 基本字符如09,az,az等編碼值為 32127,控制符的編碼值為 031??刂品糜谟?jì)算機(jī)向外部設(shè)備輸出一些特殊的命令,如控制打印機(jī)換行、換頁等。,1.3.1 源程序的書寫格式 下面以一個(gè)簡(jiǎn)單的例子,說明c語言源程序的書寫格式。 例1.1 在計(jì)算機(jī)屏幕上輸出i am a c programmer,i like c!。 /* 程序名稱:simple.c */ /* writen by jinghui zhao */ main() /* 主函數(shù) */ printf(i am a c programmer,i like c!); /* 輸出被顯示的內(nèi)容 */ ,1.3 c語言程序,例1.1是一個(gè)最簡(jiǎn)單的c源程序。其中main()是主函數(shù),main是函數(shù)的名稱。用括起來的內(nèi)容是函數(shù)體,函數(shù)體應(yīng)由若干條語句組成,這是計(jì)算機(jī)要執(zhí)行的部分,每條語句以分號(hào)“;”結(jié)束。/*/之間的內(nèi)容是語句的注釋部分,供閱讀程序之用。計(jì)算機(jī)并不執(zhí)行注釋部分的內(nèi)容,編程時(shí),為了使程序易讀,應(yīng)養(yǎng)成加注釋的習(xí)慣。 例1.2 從鍵盤上輸入兩個(gè)整數(shù),計(jì)算它們的和并顯示結(jié)果. /* 程序名稱:ex1-2.c */ /* writen by jinghui zhao */ main() int i,j,result; /* 定義整型變量i,j,result */ printf(please input i and j:); /* 輸入提示信息 */,scanf(%d,%d, /* 返回x,y之和 */ ,同例1.1相比,例1.2除含有main()函數(shù)外,增加了函數(shù)sum(int x,int y),整個(gè)程序由主函數(shù)和函數(shù)sum(int x,int y)構(gòu)成。需要說明的是,main() 函數(shù)是程序執(zhí)行的入口點(diǎn),無論程序包含多少個(gè)函數(shù),程序都從main()開始執(zhí)行. 1.3.2 c語言程序結(jié)構(gòu)特點(diǎn) (1)c 語言程序是由函數(shù)構(gòu)成的,一個(gè)源程序可以包含若干個(gè)函數(shù),但必須有且只有一個(gè)函數(shù)為主函數(shù)main()。 (2)由大括號(hào)括起來的部分為函數(shù)體,函數(shù)體可以包含若干條c語句。每條語句必須以分號(hào)“;”結(jié)束。 (3)除主函數(shù)外,c 語言系統(tǒng)還提供一些可直接使用的庫函數(shù),如例子中的 printf()、scanf()等。用戶也可以根據(jù)需要,自己定義函數(shù)如sum()。 (4)程序可以加注釋以增加可讀性,其內(nèi)容必須用/*.*/括起來。,(5)c語句一般用小寫字母書寫。 c語言是編譯執(zhí)行的高級(jí)語言,用c編寫的源程序必須經(jīng)編譯、連接生成相應(yīng)的二進(jìn)制代碼后,才能被執(zhí)行。c 程序的編輯、編譯、連接等過程可以在現(xiàn)成的集成開發(fā)環(huán)境下完成。常用的開發(fā)環(huán)境有:unix和dos操作系統(tǒng)下的msc4.0、turbo c,其中tur-bo c是最流行、使用最方便的開發(fā)環(huán)境,turbo c開發(fā)環(huán)境詳見附錄1。 1.4.1 turbo c環(huán)境下編輯與運(yùn)行c程序的步驟 1.c程序的上機(jī)步驟,1.4 c語言程序的編輯及運(yùn)行,(1)編輯。在turbo c環(huán)境下,將c語言源程序通過鍵盤輸入到計(jì)算機(jī)中,并以文件形式存盤,以便將來再使用時(shí),直接從磁盤調(diào)入到內(nèi)存中執(zhí)行,文件擴(kuò)展名為.c,例如ex1.c。 (2)編譯。編譯過程將把 c語言源程序轉(zhuǎn)換成目標(biāo)程序。目標(biāo)程序是以.obj為擴(kuò)展名的文件。若源程序有錯(cuò),需要對(duì)其進(jìn)行修改,然后重新編譯直至沒有錯(cuò)誤,才算編譯成功。 (3)連接。編譯后生成的目標(biāo)文件不能直接執(zhí)行,需要經(jīng)過連接之后才能生成可執(zhí)行代碼。在 dos系統(tǒng)下,連接后所得到的可執(zhí)行文件擴(kuò)展名是.exe。連接的目的是將目標(biāo)文件和庫函數(shù)或其他目標(biāo)程序連接成可執(zhí)行程序。 (4)執(zhí)行。連接生成的程序就是可執(zhí)行文件了。在 dos系統(tǒng)下,只要鍵入可執(zhí)行文件名,如ex1,再按回車鍵就可以了。 綜上所述,上機(jī)步驟為: 編輯(.c)編譯(.obj)連接(.exe)執(zhí)行.,2.turbo c環(huán)境介紹 turbo c是一個(gè)快速、高效的編譯軟件,它將程序的編輯、編譯、連接和執(zhí)行集成在一起,形成一個(gè)集成開發(fā)環(huán)境。在turbo c 的集成環(huán)境下,編程和調(diào)試等功能均可以通過菜單來完成。 turbo c2.0系統(tǒng)是dos環(huán)境下的應(yīng)用軟件。只要在dos系統(tǒng)下進(jìn)入turbo c2.0 所在的目錄,輸入tc并回車后,即進(jìn)人turbo c2.0集成環(huán)境。按任意鍵,版本信息消失,屏幕顯示如圖1.1所示。,圖1.1 turbo c2.0集成開發(fā)環(huán)境,turbo c2.0集成開發(fā)環(huán)境的主屏幕,由上至下分成四部分:主菜單、編輯窗口、編譯信息窗口和功能鍵提示行。 一般情況下,光標(biāo)停留在主菜單的file項(xiàng)上,可以通過鍵盤上的光標(biāo)移動(dòng)鍵移動(dòng)光標(biāo)。要選擇執(zhí)行哪項(xiàng)功能,可以將光標(biāo)移動(dòng)到哪一項(xiàng)上,如edit,然后回車,便執(zhí)行該項(xiàng)的功能。如果在啟動(dòng)tc時(shí),已經(jīng)鍵入了源程序的文件名(如執(zhí)行tc.exe.),則光標(biāo)直接處在編輯窗口的左上角,此時(shí),可以直接鍵入源程序。否則,如果光標(biāo)處在主菜單上,需要利用光標(biāo)移動(dòng)鍵移動(dòng)光標(biāo)至edit項(xiàng)上,回車,光標(biāo)回到編輯窗口的編輯區(qū)時(shí),才能輸入程序。 源程序編輯完成后,先按f2鍵保存源程序,然后用功能鍵f10激活主菜單(使光標(biāo)回到主菜單),利用光標(biāo)移動(dòng)鍵依次移動(dòng)光標(biāo)到編譯(compile)、連接(link)、運(yùn)行(run)的菜單項(xiàng)上,按回車鍵,即可執(zhí)行相應(yīng)的功能。,1.4.2 程序調(diào)試方法 程序設(shè)計(jì)過程中難免出錯(cuò)。設(shè)計(jì)完成的計(jì)算機(jī)程序必須經(jīng)過測(cè)試來確定其是否可以正確地工作,這一過程稱為調(diào)試。 程序錯(cuò)誤一般有兩類:一類是語法錯(cuò)誤;另一類是運(yùn)行錯(cuò)誤. 語法錯(cuò)誤是由于沒有按照程序設(shè)計(jì)語言的語法規(guī)則編寫語句所致,一般通過編譯和連接就會(huì)找到,可根據(jù)編譯系統(tǒng)給出的提示進(jìn)行修改,直至編譯通過,說明程序沒有語法錯(cuò)誤。 運(yùn)行錯(cuò)誤往往是由于編程者所采用的變量類型或(部分或全部)算法有問題,而導(dǎo)致開始或中間結(jié)果不正確。 1.設(shè)置和使用觀察變量 找出程序運(yùn)行錯(cuò)誤的一種有效方法是設(shè)法了解程序執(zhí)行過程中某些變量或表達(dá)式值的變化,turbo c集成環(huán)境提供了觀察變量的途徑。,選break/watch菜單項(xiàng)中的add watch項(xiàng)或同時(shí)按ctrl+f7鍵,會(huì)出現(xiàn)一個(gè)輸入框,輸入欲觀察的變量名或表達(dá)式后,它們就會(huì)出現(xiàn)在watch(屏幕底部)窗口中。 重復(fù)使用 break.watch菜單項(xiàng)中的 add watch項(xiàng)或同時(shí)按ctrl+f7鍵可以在watch窗口添加多個(gè)變量或表達(dá)式。變量或表達(dá)式設(shè)置完成后,執(zhí)行程序。watch 窗口中變量或表達(dá)式的值隨程序的執(zhí)行將發(fā)生變化,由于程序執(zhí)行速度非??欤^察不到這種變化。因此,需要使程序在人為地控制下逐條地執(zhí)行語句,以觀察變量或表達(dá)式的值。這可以通過單步執(zhí)行程序、設(shè)置和使用斷點(diǎn)來實(shí)現(xiàn)。 2.單步執(zhí)行程序 選run菜單中的step over命令項(xiàng)或按f8鍵,亮條就出現(xiàn)在主函數(shù)處,說明程序從主函數(shù)開始執(zhí)行。每次選run菜單中的step over命令項(xiàng)或按一次f8鍵則執(zhí)行一行程序,遇到函數(shù)時(shí)不進(jìn)入函數(shù)(定義),即將函數(shù)作為一條語句或一個(gè)表達(dá)式處理.,執(zhí)行run菜單中的trace into命令項(xiàng)或按f7鍵也是跟蹤執(zhí)行程序,與單步不同的是遇到函數(shù)時(shí)進(jìn)入其內(nèi)部逐行執(zhí)行。 執(zhí)行run菜單中的goto cursor命令項(xiàng)或按f4鍵,從主函數(shù)開始執(zhí)行程序到光標(biāo)所在處(跟蹤到光標(biāo))。欲讓程序在某條語句暫停,只需將光標(biāo)移到那條語句所在行,選 run菜單中的goto cursor命令項(xiàng)或按 f4鍵,程序即可暫停在光標(biāo)所在行。 然后再移動(dòng)光標(biāo)到欲暫停的語句行上,再選 run菜單中的goto cursor命令項(xiàng)或按f4鍵,由此可以方便地調(diào)試程序。 3.設(shè)置和使用斷點(diǎn) 通過設(shè)置斷點(diǎn),可以分段解決問題,把出現(xiàn)問題的范圍縮小。調(diào)試程序時(shí),可以在程序中設(shè)置多個(gè)斷點(diǎn)。當(dāng)程序執(zhí)行到斷點(diǎn)時(shí),就會(huì)在有斷點(diǎn)的那行上暫停程序的執(zhí)行,顯示所需觀察變量或表達(dá)式的當(dāng)前值,據(jù)此可判定斷點(diǎn)前的程序是否有問題。設(shè)置斷點(diǎn)的步驟為:,(1)在編輯窗口將光標(biāo)移到欲設(shè)置斷點(diǎn)的那一行上; (2)選break.watch菜單項(xiàng)中的toggle breakpoint命令項(xiàng)或同時(shí)按ctrl+f8鍵,被設(shè)置斷點(diǎn)的一行呈高亮度顯示; (3)欲設(shè)多個(gè)斷點(diǎn),重復(fù)步驟(1)、(2),斷點(diǎn)所在的行均呈高亮度顯示; (4)要?jiǎng)h除斷點(diǎn),將光標(biāo)移到欲刪除斷點(diǎn)所在行,選break/watch菜單項(xiàng)中的togg-lebreakpoint命令項(xiàng)或同時(shí)按ctrl+f8鍵。 以上方法可結(jié)合使用。程序連續(xù)執(zhí)行時(shí),一遇到斷點(diǎn)就會(huì)暫時(shí)停止,并返回編輯狀態(tài)。斷點(diǎn)不會(huì)因?yàn)楸粓?zhí)行而清除。 程序的調(diào)試技巧和程序設(shè)計(jì)一樣重要。在調(diào)試過程中可以積累編程經(jīng)驗(yàn)和技巧,為設(shè)計(jì)優(yōu)秀的程序奠定基礎(chǔ)。,第2章 數(shù)據(jù)類型與表達(dá)式,2.1 常量和變量 2.2 整型數(shù)據(jù) 2.3 實(shí)型數(shù)據(jù) 2.4 字符型數(shù)據(jù) 2.5 變量賦值 2.6 運(yùn)算符及表達(dá)式 2.7 數(shù)據(jù)類型轉(zhuǎn)換,任何程序都涉及到待處理的數(shù)據(jù),數(shù)據(jù)可以是常量和變量. c 語言可以處理的數(shù)據(jù)類型很多,可分為基本類型、復(fù)雜類型,如圖2.1所示。本章將討論c語言的變量和常量、基本數(shù)據(jù)類型、運(yùn)算符和表達(dá)式以及不同數(shù)據(jù)類型之間的轉(zhuǎn)換等。,圖2.1 數(shù)據(jù)類型,數(shù)據(jù)類型,基本類型,復(fù)雜類型,整型類型,浮點(diǎn)數(shù)類型,字符型類型,單精度型,雙精度型,構(gòu)造類型,指針類型,枚舉類型,自定義類型,數(shù)組類型,結(jié)構(gòu)體類型,共用體類型,2.1.1 常量 常量又稱常數(shù),是指在程序運(yùn)行中其值不能被改變的量。 常量可分為不同的類型:如 5、0、-8為整型常量; 2.5、-1.2為實(shí)型常量; a、b為字符型常量,也可以用一個(gè)名字(字符序列)來代表一個(gè)常量,如用pi表示3.14,這種常量被稱為符號(hào)常量。符號(hào)常量的使用將在第 8章介紹;還可以用與某些字母組合,表示能夠讓計(jì)算機(jī)運(yùn)行時(shí)完成一固定動(dòng)作的字符常量稱轉(zhuǎn)義字符常量。,2.1 常量和變量,2.1.2 變量 變量是指在程序運(yùn)行過程中其值可以被改變的量。 變量被分為不同類型,在內(nèi)存中占用不同的存儲(chǔ)單元,以便用來存放相應(yīng)變量的值,編程時(shí),用變量名來標(biāo)識(shí)變量,變量的命名規(guī)則同第1章中標(biāo)識(shí)符的定義規(guī)則相同。 1.變量的有關(guān)規(guī)定 (1)使用變量前,必須先定義,否則不能作為變量來使用. 例如: int student;statent=20; 在編譯時(shí)檢查出statent未經(jīng)定義。 (2)每一個(gè)變量屬于一種類型,便于在編譯時(shí)為其分配相應(yīng)的存儲(chǔ)單元并據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。 合法的變量名:day,year,book,student,a1,a2,b1,b2 不合法的變量名:#852,.com,s1,1999y,123,float,2.變量的定義 存儲(chǔ)屬性 數(shù)據(jù)類型 變量名表 變量定義包括三部分:存儲(chǔ)屬性、數(shù)據(jù)類型、變量名表。 數(shù)據(jù)類型決定了變量的取值范圍和占用內(nèi)存空間的字節(jié)數(shù),變量名表是具有同一數(shù)據(jù)類型變量的集合。 2.2.1 整型常量 整型常量有三種表示方法: (1)十進(jìn)制整數(shù):如1236,-234,0。 (2)八進(jìn)制整數(shù):以0開頭的數(shù)是八進(jìn)制數(shù)。如 011表示八進(jìn)制數(shù)的(11)8 。,2.2 整型數(shù)據(jù),(3)十六進(jìn)制整數(shù):以0x開頭的數(shù)是十六進(jìn)制數(shù)。 如0x123即(123)16 。 例2.1 三種進(jìn)制表示方法的轉(zhuǎn)換。 源程序a1.c main() int x=1246,y=01246,z=0x1246; printf(%d,%d,%dn,x,y,z); /*%d: 以十進(jìn)制格式符輸出 */ printf(%o,%o,%on,x,y,z); /*%o: 以八進(jìn)制格式符輸出 */ printf(%x,%x,%xn,x,y,z); /*%x: 以十六進(jìn)制格式符輸出 */ ,c:a1 1246,678,4678 2336,1246,11106 4de,2a6,1246 2.2.2 整型變量 整型變量可用來存放整型數(shù)據(jù)(即不帶小數(shù)點(diǎn)的數(shù))。整型變量可以分為:基本型、短整型、長(zhǎng)整型和無符號(hào)整型4種類型,其定義的關(guān)鍵字如下: (1)基本型:用int表示; (2)短整型:用short int或short表示; (3)長(zhǎng)整型:用long int或long表示; (4)無符號(hào)整型: 無符號(hào)整型: 用unsigned int或unsigned表示;,無符號(hào)短整型: 用unsigned short int或unsigned short表示; 無符號(hào)長(zhǎng)整型: 用unsigned long int或unsigned long表示。 無符號(hào)整型變量在存儲(chǔ)單元中的全部二進(jìn)制位都用來存放數(shù)據(jù)本身,而沒有符號(hào)位,即不能存放負(fù)數(shù),一個(gè)無符號(hào)整型變量剛好是其有符號(hào)數(shù)表示范圍的上下界絕對(duì)值之和。 例如:一個(gè)整型變量在內(nèi)存中占兩個(gè)字節(jié)(16bit),則int型變量數(shù)值的表示范圍是-3276832767,unsigned int 變量數(shù)值的表示范圍為065535。 c語言標(biāo)準(zhǔn)沒有具體規(guī)定以上各類數(shù)據(jù)所占內(nèi)存的字節(jié)數(shù),各種編譯系統(tǒng)在處理上有所不同。 一般的原則是:,以一個(gè)機(jī)器字(word)存放一個(gè)int 型數(shù)據(jù),而long整型數(shù)據(jù)的字節(jié)數(shù)應(yīng)不小于int型,而short型應(yīng)不長(zhǎng)于int型。 以pc機(jī)為例,整型變量數(shù)值的表示范圍如表2.1所示。 2.2.3 整型變量的使用 不同的整型數(shù)據(jù),應(yīng)根據(jù)其特性和取值范圍,將其定義成不同類型的整型變量。,整型數(shù)據(jù)類型 所占位數(shù) 所占字節(jié)數(shù) 數(shù)的表示范圍 int 16 2 -3276832767,即-2152 5-1 short int 16 2 -3276832767,即-215215-1 long int 32 4 -21474836482147483647,即-231231-1 unsigned int 16 2 065535,即0216-1 unsigned short 16 2 065535,即0216-1 unsigned long 32 4 04294967295,即0232-1,表2.1 整型變量數(shù)值取值范圍,如果一個(gè)整型數(shù)據(jù)取值在 -32768到32767之間,應(yīng)該定義為int 整型數(shù)據(jù)。對(duì)于不可能有負(fù)值的整型數(shù)據(jù),應(yīng)該定義為unsigned int。當(dāng)整型數(shù)據(jù)的取值可能超出-32768或0到65535的范圍時(shí),應(yīng)定義為long int型或unsigned long型。 例如:下面幾個(gè)變量的定義。 平均年齡a1:0150 學(xué)生人數(shù)a2:020000 磁盤的字節(jié)數(shù)a3:02 16 int a1; /* 定義為整型變量 */ unsigned int a2; /* 定義為無符號(hào)整型變量 */ unsigned long int a3; /* 定義為無符號(hào)長(zhǎng)整型變量 */ 例2.2 不同類型的數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。 源程序a2.c,main() int a,b,s1,s2; /* 定義名為a,b,s1,s2的整型變量 */ unsigned x; /* 定義名為x的無符號(hào)整型變量 */ a=10;b=-30;x=20; s1=a+x;s2=b+x; printf(a+x=%d,b+x=%dn,s1,s2); c:a2 運(yùn)行結(jié)果為 a+x=30,b+x=-10,從本例可以看出,不同類型的數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算。在本例中是int型數(shù)據(jù)與unsigned int型數(shù)據(jù)進(jìn)行相加和相減運(yùn)算. 例2.3 整型數(shù)據(jù)各類型所能表示的范圍。 源程序a3.c main() int a,b; /* 定義整型變量a,b */ long c,d; /* 定義長(zhǎng)整型變量c,d */ unsigned e,f; /* 定義無符號(hào)整型變量e,f */ a=32767;b=1; c=2147483647;d=1; e=65535;f=1;,printf(int: %d,%d,n,a,a+b); /*%d: 以十進(jìn)制的格式輸出 */ printf(long: %ld,%ldn,c,c+d); /*%ld: 以長(zhǎng)整型的格式輸出 */ printf(unsigned: %u,%un,e,e+f); /*%u: 以無符號(hào)整型的格式輸出 */ c:a3 運(yùn)行結(jié)果為 int: 32767,-32768 long: 2147483647,-2147483648 unsigned: 65535,0 從運(yùn)行結(jié)果可以看出,當(dāng)各種整型數(shù)取最大值時(shí),如果再加1,則超出其所能表示的范圍,變成該類型取值范圍的最小值.,2.3.1 實(shí)型常量 在c語言中,把帶小數(shù)的數(shù)稱為實(shí)數(shù)或浮點(diǎn)數(shù)。 1.十進(jìn)制數(shù)形式 它是由數(shù)字和小數(shù)點(diǎn)組成,如3.14159,-7.2,8.9等都是十進(jìn)制形式。 2.指數(shù)法形式 如:180000.0用指數(shù)法可以表示為1.8e5,1.8稱為尾數(shù),5稱為指數(shù)。 0.00123用指數(shù)法可以表示為1.23e-3。 注意: (1)字母e或e之前(即尾數(shù)部分)必須有數(shù)字。,2.3 實(shí)型數(shù)據(jù),(2)e或e后面的指數(shù)部分必須是整數(shù)。 如:e-3,9.8e3.1,e5都是不合法的。 2.3.2 實(shí)型變量 實(shí)型變量又稱為浮點(diǎn)型變量,按能夠表示數(shù)的精度,又分為單精度浮點(diǎn)型變量和雙精度浮點(diǎn)型變量,定義方式分別如下: float a,b; /* 單精度變量的定義 */ double c,d; /* 雙精度變量的定義 */ 單精度浮點(diǎn)型變量和雙精度浮點(diǎn)型變量之間的差異,僅僅體現(xiàn)在所能表示的數(shù)的精度上。一般系統(tǒng)單精度型數(shù)據(jù)占 4個(gè)字節(jié),有效位為7位,數(shù)值范圍約為10-38 1038 ,而雙精度型數(shù)據(jù)占8個(gè)字節(jié),有效位為1516位,數(shù)值范圍約為1030810 308. 實(shí)型常量不存在單精度型和雙精度型之分。當(dāng)一個(gè)實(shí)型常量賦予一個(gè)實(shí)型變量時(shí),c語言根據(jù)該實(shí)型變量的類型來截取常量中相應(yīng)的有效位數(shù)字。,2.4.1 字符型常量 字符型常量是由一對(duì)單引號(hào)括起來的單個(gè)字符構(gòu)成,例如, a,b,2,%,;等都是有效的字符型常量。一個(gè)字符型常量的值是該字符集中對(duì)應(yīng)的編碼值,例如在ascii字符集中,字符常量09的ascii編碼值是4857。顯然0與數(shù)字0是不同的。 c語言中還允許用一種特殊形式的字符常量,即以反斜杠字符開頭的字符序列。前面用的printf()函數(shù)中的n,代表一個(gè)“回車換行”符。這類字符稱為“換碼序列”,或“轉(zhuǎn)義字符”,意思是將反斜杠“”后面的字符轉(zhuǎn)換成另外的意義。換碼序列見表2.2。,2.4 字符型數(shù)據(jù),例如: main() printf(abct derftgn); 運(yùn)行結(jié)果: f gde,換碼序列 意 義 換碼序列 意 義 n 回車換行 r 回車,將當(dāng)前位置移到本行開頭 b 左退一格 t 橫向跳格字符(即跳到下一個(gè)輸出區(qū)) f 換頁 0 空值(null) 單引號(hào) 雙引號(hào) v 豎向跳格 ddd 1至3位八進(jìn)制數(shù)所代表的字符 反斜線 xhh 1至2位十六進(jìn)制數(shù)所代表的字符,表2.2 換碼序列表,2.4.2 字符型變量 一個(gè)字符型變量用來存放一個(gè)字符,在內(nèi)存中占一個(gè)字節(jié).實(shí)際上,將一個(gè)字符常數(shù)賦給一個(gè)字符變量,并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的 ascii代碼放到內(nèi)存單元中,因此,字符型數(shù)據(jù)也可以像整型數(shù)據(jù)那樣使用,可以用來表示一些特定范圍內(nèi)的整數(shù)。 字符型數(shù)據(jù)可分為兩類: 一般字符類型(char)和無符號(hào)字符類型(unsigned char),運(yùn)行在 pc及其兼容機(jī)上的字符數(shù)據(jù)的字節(jié)長(zhǎng)度和取值范圍如表2.3所示。 注意:一個(gè)字符型變量只能存放一個(gè)字符,不能存放一個(gè)字符串。,表2.3 字符數(shù)據(jù)的字節(jié)長(zhǎng)度和取值范圍,數(shù)據(jù)類型 字節(jié)長(zhǎng)度 取值范圍 char 1 -128127的整數(shù) unsigned char 1 0255的整數(shù),字符型數(shù)據(jù)與整型數(shù)據(jù)可以通用,且字符型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算。 例2.4 字符型數(shù)據(jù)與整型數(shù)據(jù)可以通用。 源程序a4.c main() char c1,c2; /* 定義名為c1,c2的字符型變量 */ c1=65;c2=66; /*將字符ascii碼值65、66分別賦給c1,c2*/ printf(%c,%cn,c1,c2); /* 輸出c1,c2對(duì)應(yīng)的字符 */ printf(%d,%dn,c1,c2); /* 輸出c1,c2對(duì)應(yīng)字符的ascii碼值 */ ,c:a4 運(yùn)行結(jié)果為 a,b 65,66 例2.5 字符型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算。 源程序a5.c main() char c1,c2; /* 定義名為c1,c2的字符型變量 */ c1=a;c2=b; /* 將字符a、b分別賦給c1,c2 */ c1=c1+32;c2=c2+32; /* 將c1,c2的ascii碼分別加32 */ printf(%c,%cn,c1,c2); printf(%d,%dn,c1,c2);, c:a5 運(yùn)行結(jié)果為 a,b 97,98 2.4.3 字符串常量 字符串常量是由一對(duì)雙引號(hào)括起來的字符序列,例如program,a,book都是字符串常量,雙引號(hào)僅起定界符的作用,并不是字符串中的字符。字符串常量中不能直接包括單引號(hào)、雙引號(hào)和反斜杠“”,若要使用,可參照換碼序列中介紹的方法。 字符串常量與字符常量的區(qū)別: (1)字符串常量是用雙引號(hào)括起來的字符序列; (2)字符串常量在內(nèi)存中存儲(chǔ)時(shí)有串尾標(biāo)記“0”;,(3)字符串常量允許擴(kuò)展表示法; (4)c 語言中沒有專門的字符串變量。字符串如果需要存放在變量中,需要用字符型數(shù)組來存放。 注意:不要將單個(gè)字符組成的字符串常量與字符常量混淆。a為字符常量,而a為字符串常量,不能把一個(gè)字符串常量賦給一個(gè)字符變量。例如下面的用法都是錯(cuò)誤的: char c1,c2; c1=a; c2=china; 對(duì)于字符串,c 語言中規(guī)定以字符0作為結(jié)束標(biāo)志,系統(tǒng)將根據(jù)該字符判斷字符串是否結(jié)束。字符0由系統(tǒng)自動(dòng)加入到每個(gè)字符串的結(jié)束處,不必由編程人員加入。因此,對(duì)于字符串china,它在內(nèi)存中實(shí)際存放形式如圖2.2所示,其長(zhǎng)度是 6個(gè)字節(jié),而不是 5個(gè)字節(jié)。字符 0所對(duì)應(yīng)的ascii值為0,即“空”字符。,為變量賦值有兩種方式:一是變量初始化,即在定義變量的同時(shí)給變量賦予初值。另一種方式是采用先說明變量的類型,然后在執(zhí)行語句體中再賦值給變量。 1.先定義后賦值 int a,b,c; char d; float f; a=2;,圖2.2 字符串的存儲(chǔ)形式,2.5 變量賦值,b=5; c=10; d=a; f=5.7; 2.定義和賦值同時(shí)進(jìn)行 int a=5; short b=10; char c=a; float d=7.8; 3.對(duì)幾個(gè)變量同時(shí)賦一個(gè)初值 int a1=10,a2=10,a3=10; 初始化不是在編譯階段完成的,而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦以初值的。相當(dāng)于一個(gè)賦值語句。例如: int a=10;,相當(dāng)于: int a; a=10; 又如: int a,b,c=20; 相當(dāng)于: int a,b,c; c=20; c語言的運(yùn)算符非常豐富,使用方法也非常靈活,這是c語言的主要特點(diǎn)。c語言具有 44種運(yùn)算符,其中一部分與其他高級(jí)語言相同,而另外一部分與匯編語言相似。,2.6 運(yùn)算符及表達(dá)式,運(yùn)算符與運(yùn)算對(duì)象(常量、變量、函數(shù)、表達(dá)式)組合起來,構(gòu)成不同類型的表達(dá)式。c 語言的運(yùn)算符有不同的優(yōu)先級(jí)和結(jié)合方向規(guī)則。如附錄所示,優(yōu)先級(jí)是按由高到低的順序排列的。 c 語言運(yùn)算符可以分為: 算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符等幾類; 若從其在表達(dá)式中與運(yùn)算對(duì)象的關(guān)系上分,可分為單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。 2.6.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 1.算術(shù)運(yùn)算符 算術(shù)運(yùn)算符有加,減,乘,除及取模5種,分別由: + , -, *, /, % 來表示。 c語言規(guī)定: (1)取模運(yùn)算符%,僅用于整型變量或整型常量,例如: 5%3,其值為2。,(2)優(yōu)先級(jí): 一個(gè)表達(dá)式中如有多個(gè)運(yùn)算符,則計(jì)算的先后次序?yàn)橄鄳?yīng)運(yùn)算符的優(yōu)先級(jí)高的優(yōu)先。乘、除、取模優(yōu)先級(jí)高于加、減的優(yōu)先級(jí),即先乘、除、取模,后加、減。 (3)結(jié)合方向: 是當(dāng)一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)別相同時(shí),應(yīng)遵循的處理規(guī)則,即進(jìn)行運(yùn)算(處理)的結(jié)合方向。算術(shù)運(yùn)算符的結(jié)合方向是從左至右; 賦值運(yùn)算符的結(jié)合方向是從右至左。 2.算術(shù)表達(dá)式 由算術(shù)運(yùn)算符、括號(hào)以及操作對(duì)象組成的符合c語言語法規(guī)則的表達(dá)式稱為算術(shù)表達(dá)式。例如下述式子均為算術(shù)表達(dá)式: a+b*c+(x/y)-700 100%3+100*2 2.6.2 賦值運(yùn)算符和賦值表達(dá)式 1.賦值運(yùn)算符,c語言的賦值運(yùn)算符是“=”,它的作用是將賦值運(yùn)算符右邊表達(dá)式的值賦給其左邊的變量。 例如:a=10;x=a+5;前者是把常量 10賦給變量a,后者是將表達(dá)式a+5的值賦給變量x。 注意:如果“=”兩側(cè)的類型不一致,在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。例如:a=b;執(zhí)行該語句時(shí),b 的結(jié)果轉(zhuǎn)換為a的類型后才能進(jìn)行賦值運(yùn)算。 2.復(fù)合賦值運(yùn)算符 c語言允許在賦值運(yùn)算符“=”之前加上其他運(yùn)算符,以構(gòu)成其復(fù)合運(yùn)算符。復(fù)合運(yùn)算符多數(shù)為雙目。在 c語言中,可以使用的復(fù)合賦值運(yùn)算符有: + =,- =,* =,/ =,% =, =,& =,=, = a+=2 等價(jià)于 a=a+2 x*=y+5 等價(jià)于 x=x*(y+5),x%=8 等價(jià)于 x=x%8 賦值運(yùn)算符都是自右向左執(zhí)行的。c語言采用復(fù)合運(yùn)算符,一是為了簡(jiǎn)化程序,使程序精練,二是為了提高編譯效率。 3.賦值表達(dá)式 賦值表達(dá)式的一般形式為 變量賦值運(yùn)算符表達(dá)式 它的功能是將賦值運(yùn)算符右邊的“表達(dá)式”的值賦給左邊的變量。注:賦值表達(dá)式左邊必須為變量,例如: 下面的表達(dá)式均為賦值表達(dá)式。 b=4,b的值為4。 e=f=-2 等價(jià)于 e=(f=-2),其值為-2。 a=(10+20)%8/3 的值為2。 x=(y=10)/(d=2)的值為5。,賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符,例如: 如果a=10,表達(dá)式a+=a-=a*a的值為-180。其求解步驟為: (1)先進(jìn)行a-=a*a的計(jì)算, 它相當(dāng)于a=a-a*a=10-10*10=-90。 (2)再進(jìn)行a+=-90的計(jì)算, 它相當(dāng)于a=a+(-90)=-90-90=-180。 4.自增自減運(yùn)算符 增1運(yùn)算符(+)和減1運(yùn)算符(-)是 c語言中兩個(gè)較為獨(dú)特的單目運(yùn)算符。它既可以在操作數(shù)前,也可以在操作數(shù)后,其操作對(duì)象只能是變量,不能是常量或表達(dá)式。 自增自減運(yùn)算符的作用是將操作對(duì)象的值增加1或減去1。 雖然自增自減運(yùn)算符既可用于前綴運(yùn)算,也可用于后綴運(yùn)算,但其意義不同。例如:,i+,i- 表示在使用i值之后將i值加(減)1 +i,-i 表示在使用i值之前將i值加(減)1 若i=5,則: x=+i; i=i+1=5+1=6,x=i=6 x=i+; x=i=5,i=i+1=5+1=6 例如:i=2,則: j=+i; i的值先變?yōu)?,再賦給j,j的值為3 j=i+; 先將i的值2賦給j,j的值為2,然后i變?yōu)? j=-i; i的值先變?yōu)?,再賦給j,j的值為1 j=i-; 先將i的值2賦給j,j的值為2,然后i變?yōu)? 若i=3,則: (i+)+(i+)+(i+)=9,相當(dāng)于3+3+3=9; (+i)+(+i)+(+i)=18,相當(dāng)于6+6+6=18。,說明: (1)+和-僅適用于變量,不能用于常量或表達(dá)式。 (2)+和-運(yùn)算符的結(jié)合方向是“自右向左”。 例如: main() int a=100; printf(a+=%dn,a+); printf(+a=%dn,+a); printf(a-=%dn,a-); printf(-a=%dn,-a); 輸出結(jié)果:,a+=100 +a=102 a-=102 -a=100 2.6.3 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 1.關(guān)系運(yùn)算符 關(guān)系運(yùn)算符均為二目運(yùn)算符,共有以下6種: 大于 = 大于等于 = 小于等于 = 等于 != 不等于,關(guān)系運(yùn)算符要求兩個(gè)操作數(shù)是同一種數(shù)據(jù)類型,其結(jié)果為一邏輯值,即關(guān)系成立時(shí),其值為真(true),用非0值表示;關(guān)系不成立時(shí),其值為假(false),用0表示。 關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,關(guān)系運(yùn)算符=和!=低于前四種運(yùn)算符,并且結(jié)合方向均為自左至右。 2.關(guān)系表達(dá)式 由關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的有意義的式子稱為關(guān)系表達(dá)式。 xy,a+b100為合法的關(guān)系表達(dá)式 例如:a+bc-6 先進(jìn)行a+b和c-6兩個(gè)算術(shù)表達(dá)式的運(yùn)算,得到兩個(gè)值后再進(jìn)行比較,從而求出關(guān)系表達(dá)式的值。由關(guān)系運(yùn)算符和其運(yùn)算對(duì)象組成的表達(dá)式稱為關(guān)系表達(dá)式,其值為0或非0。 關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。,在c語言中,常用1表示“真”,用0表示“假”。例如:當(dāng)xy為“真”時(shí),其表達(dá)式的值為1;當(dāng)xy為“假”時(shí),其表達(dá)式的值為0。 可以將關(guān)系表達(dá)式的運(yùn)算結(jié)果(0或1)賦給一個(gè)整型變量或字符型變量,如:a=4,b=1,下面的賦值語句將1賦給變量c: c=ab;c的值為1; 若a=1,b=8,x=ab;x的值為0。 2.6.4 邏輯運(yùn)算符和邏輯表達(dá)式 1.邏輯運(yùn)算符 邏輯運(yùn)算符有“ “!”為單目運(yùn)算符,僅對(duì)其右邊的對(duì)象進(jìn)行邏輯求反運(yùn)算。邏輯運(yùn)算符中的“&”和“ ”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。如圖2.3所示。,!(非) (高) 算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 &和 賦值運(yùn)算符 (低),圖2.3 各種運(yùn)算的優(yōu)先級(jí),邏輯運(yùn)算符的操作對(duì)象為零或非零整數(shù)值,其運(yùn)算規(guī)則見表2.4.,表2.4 邏輯運(yùn)算規(guī)則,數(shù)據(jù)a 數(shù)據(jù)b a&b a b !a !b t t t t f f t f f t f t f t f t t f f f f f t t,2.邏輯表達(dá)式 由邏輯運(yùn)算符和其操作對(duì)象組成的表達(dá)式稱為邏輯表達(dá)式。,例如: a&b,!c,(a+b)&(c。這些運(yùn)算符除外,均為二目運(yùn)算符,即要求運(yùn)算符的兩側(cè)各有一個(gè)運(yùn)算量,且運(yùn)算量只能是整型或字符型。 1.按位與(&) 操作規(guī)則: 參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)的位均為1,則該位的結(jié)果為1,否則為0,見表2.5。,表2.5 按位與,運(yùn)算量1 0 1 0 1 運(yùn)算量2 0 0 1 1 結(jié)果 0 0 0 1,例如:(1) (2) (3) (4) 01000001 01000001 01000001 01000001 & 01000010 & 00000000 & 11111111 & 10001110 01000000 00000000 01000001 00000000 例如: 按位與的主要用途為: (1)清零。要將一個(gè)運(yùn)算量的每個(gè)位清為零, 即00000000,只要找一個(gè)運(yùn)算量,其中相應(yīng)于原量為1的每位均為0,則這兩個(gè)運(yùn)算量按位與的結(jié)果為00000000。 (2)取一個(gè)數(shù)中的某些位。如要取一個(gè)整數(shù)中的低字節(jié),只要將它與255, 即十六進(jìn)制的00ff、二進(jìn)制的0000000011111111按位與即可。如: 00101101 10011100 & 00000000 11111111 00000000 10011100,這樣就將其高字節(jié)清零了。 若要取其中的高字節(jié),可將其與65280,即十六進(jìn)制的ff00、二進(jìn)制的1111111100000000按位與即可。如: 00101101 10011100 & 11111111 00000000 0101101 00000000 2.按位或( ) 操作規(guī)則:參加運(yùn)算的兩個(gè)運(yùn)算量,其相應(yīng)的位中只要有一個(gè)為1,則該位的結(jié)果為1,否則為0,見表2.6。,運(yùn)算量1 0 1 0 1 運(yùn)算量2 0 0 1 1 結(jié)果 0 1 1 1,表2.6 按位或,例如: (1) (2) (3) (4) 01000001 01000001 01000011 01000001 00101001 00000000 11111111 10111110 01101001 01000001 11111111 11111111 按位或常用來對(duì)一個(gè)數(shù)的某些位置為1。一個(gè)整數(shù)a,要將其低字節(jié)全置為1,即低字節(jié)為11111111,可將該數(shù)與255(十六進(jìn)制為ff,二進(jìn)制為11111111)按位或即可。如: 00110010 01001010 00000000 11111111 00110010 11111111 3.按位異或() 操作規(guī)則:參加運(yùn)算的兩個(gè)運(yùn)算量,當(dāng)相應(yīng)位相同時(shí),其結(jié)果在該位為0,相應(yīng)位不同時(shí),其結(jié)果在該位為1,即按位相加,但不進(jìn)位,見表2.7。,例如: (1) (2) (3) (4) 01000011 01000011 01000011 01000011 00100101 00000000 11111111 01000011 01100110 01000011 10111100 00000000 按位異或的主要用途為: (1)使指定位翻轉(zhuǎn)。即由1變?yōu)?,由0變?yōu)?。 如:要對(duì)011100110的低4位翻轉(zhuǎn),將其與00001111按位異或即可。 01100110 00001111 01101001,運(yùn)算量1 0 1 0 1 運(yùn)算量2 0 0 1 1 結(jié)果 0 1 1 0,表2.7 按
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國生態(tài)修復(fù)行業(yè)深度研究及發(fā)展前景投資評(píng)估分析
- 2025至2030中國瓶裝水行業(yè)深度研究及發(fā)展前景投資評(píng)估分析
- 2025至2030中國珠光色素粒子行業(yè)發(fā)展趨勢(shì)分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 工科研究生助教在課堂互動(dòng)中的參與與影響
- 2025至2030中國玉器行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃報(bào)告
- 加盟培訓(xùn)學(xué)員課件圖片
- 幼兒情感教育中的心理輔導(dǎo)實(shí)踐
- 財(cái)務(wù)入職培訓(xùn)課件
- 未來學(xué)校中的智能機(jī)器人教師
- 叉車作業(yè)培訓(xùn)課件
- 2025年吉林省中考語文試卷真題(含答案)
- 20250628紅餐產(chǎn)業(yè)研究院粥品品類發(fā)展報(bào)告2025284mb
- 2025至2030量子點(diǎn)增強(qiáng)膜顯示行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025年陜西省中考數(shù)學(xué)真題試卷及答案解析
- 2025年全國新高考I卷高考全國一卷真題英語試卷(真題+答案)
- 仙家送錢表文-文字打印版
- 10、連乘、連除和乘除混合運(yùn)算
- 《平行四邊形》PPT課件共(25張PPT)
- 法國公雞樂卡克
- 煤炭供應(yīng)鏈金融平臺(tái)方案課件
- 腳手架驗(yàn)收記錄表
評(píng)論
0/150
提交評(píng)論