c語言教案講義.doc_第1頁
c語言教案講義.doc_第2頁
c語言教案講義.doc_第3頁
c語言教案講義.doc_第4頁
c語言教案講義.doc_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

天宇教育 C語言輔導(dǎo)講義 2010.10C語言程序設(shè)計教案1. c語言概述2. 程序的靈魂算法3. 數(shù)據(jù)類型、運算符與表達(dá)式4. 最簡單的C程序設(shè)計順序程序設(shè)計5. 分支結(jié)構(gòu)程序6. 循環(huán)控制7. 數(shù)組8. 函數(shù)9. 預(yù)處理命令10. 指針11. 結(jié)構(gòu)體與共用體12. 位運算13. 文件C語言教程1 C語言概述1.1 語言的特點1C語言簡潔、緊湊,使用方便、靈活。ANSI C一共只有32個關(guān)鍵字:autobreakcasecharconstcontinuedefaultdo double else enum extern float for goto if int long register return short signed static sizeof struct switch typedef union unsigned void volatilewhile9種控制語句,程序書寫自由,主要用小寫字母表示,壓縮了一切不必要的成分。Turbo C擴(kuò)充了11個關(guān)鍵字:asm_cs_ds_es_sscdeclfarhuge interruptnearpascal注意:在C語言中,關(guān)鍵字都是小寫的。2運算符豐富。共有34種。C把括號、賦值、逗號等都作為運算符處理。從而使C的運算類型極為豐富,可以實現(xiàn)其他高級語言難以實現(xiàn)的運算。3數(shù)據(jù)結(jié)構(gòu)類型豐富。4具有結(jié)構(gòu)化的控制語句。5語法限制不太嚴(yán)格,程序設(shè)計自由度大。6C語言允許直接訪問物理地址,能進(jìn)行位(bit)操作,能實現(xiàn)匯編語言的大部分功能,可以直接對硬件進(jìn)行操作。因此有人把它稱為中級語言。7生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。8與匯編語言相比,用C語言寫的程序可移植性好。但是,C語言對程序員要求也高,程序員用C寫程序會感到限制少、靈活性大,功能強(qiáng),但較其他高級語言在學(xué)習(xí)上要困難一些。1.2 簡單的程序介紹 為了說明語言源程序結(jié)構(gòu)的特點,先看以下幾個程序。這幾個程序由簡到難,表現(xiàn)了語言源程序在組成結(jié)構(gòu)上的特點。雖然有關(guān)內(nèi)容還未介紹,但可從這些例子中了解到組成一個C源程序的基本部分和書寫格式?!纠?.1】main() printf(世界,您好!n);l main是主函數(shù)的函數(shù)名,表示這是一個主函數(shù)。l 每一個C源程序都必須有,且只能有一個主函數(shù)(main函數(shù))。l 函數(shù)調(diào)用語句,printf函數(shù)的功能是把要輸出的內(nèi)容送到顯示器去顯示。l printf函數(shù)是一個由系統(tǒng)定義的標(biāo)準(zhǔn)函數(shù),可在程序中直接調(diào)用。1.3 源程序的結(jié)構(gòu)特點 1.一個語言源程序可以由一個或多個源文件組成。 2.每個源文件可由一個或多個函數(shù)組成。 3.一個源程序不論由多少個文件組成,都有一個且只能有一個main函數(shù),即主函數(shù)。 4.源程序中可以有預(yù)處理命令(include 命令僅為其中的一種),預(yù)處理命令通常應(yīng)放在源文件或源程序的最前面。 5.每一個說明,每一個語句都必須以分號結(jié)尾。但預(yù)處理命令,函數(shù)頭和花括號“”之后不能加分號。 6.標(biāo)識符,關(guān)鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。1.4 書寫程序時應(yīng)遵循的規(guī)則 從書寫清晰,便于閱讀,理解,維護(hù)的角度出發(fā),在書寫程序時應(yīng)遵循以下規(guī)則: 1.一個說明或一個語句占一行。 2.用 括起來的部分,通常表示了程序的某一層次結(jié)構(gòu)。一般與該結(jié)構(gòu)語句的第一個字母對齊,并單獨占一行。 3.低一層次的語句或說明可比高一層次的語句或說明縮進(jìn)若干格后書寫。以便看起來更加清晰,增加程序的可讀性。 在編程時應(yīng)力求遵循這些規(guī)則,以養(yǎng)成良好的編程風(fēng)格。1.5 語言的字符集 在語言中使用的詞匯分為六類:標(biāo)識符,關(guān)鍵字,運算符,分隔符,常量,注釋符等。 1.標(biāo)識符 在程序中使用的變量名、函數(shù)名、標(biāo)號等統(tǒng)稱為標(biāo)識符。除庫函數(shù)的函數(shù)名由系統(tǒng)定義外,其余都由用戶自定義。C 規(guī)定,標(biāo)識符只能是字母(AZ,az)、數(shù)字(09)、下劃線(_)組成的字符串,并且其第一個字符必須是字母或下劃線。 以下標(biāo)識符是合法的:a, x, x3, BOOK_1, sum5 以下標(biāo)識符是非法的: 3s 以數(shù)字開頭 s*T 出現(xiàn)非法字符* -3x 以減號開頭 bowy-1 出現(xiàn)非法字符-(減號) 在使用標(biāo)識符時還必須注意以下幾點: 2.關(guān)鍵字 關(guān)鍵字是由語言規(guī)定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標(biāo)識符不應(yīng)與關(guān)鍵字相同。語言的關(guān)鍵字分為以下幾類: (1)類型說明符 用于定義、說明變量、函數(shù)或其它數(shù)據(jù)結(jié)構(gòu)的類型。如前面例題中用到的int,double等 (2)語句定義符 用于表示一個語句的功能。如例1.3中用到的if else就是條件語句的語句定義符。 (3)預(yù)處理命令字 用于表示一個預(yù)處理命令。如前面各例中用到的include。 3.注釋符C 語言的注釋符是以“/*”開頭并以“*/”結(jié)尾的串。在“/*”和“*/”之間的即為注釋。程序編譯時,不對注釋作任何處理。注釋可出現(xiàn)在程序中的任何位置。注釋用來向用戶提示或解釋程序的意義。在調(diào)試程序中對暫不使用的語句也可用注釋符括起來,使翻譯跳過不作處理,待調(diào)試結(jié)束后再去掉注釋符。2 程序的靈魂算法一個程序應(yīng)包括:l 對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure)。l 對操作的描述。即操作步驟,也就是算法(algorithm)。Nikiklaus Wirth提出的公式:數(shù)據(jù)結(jié)構(gòu)+算法=程序教材認(rèn)為:程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言工具和環(huán)境這4個方面是一個程序涉及人員所應(yīng)具備的知識。本課程的目的是使同學(xué)知道怎樣編寫一個C程序,進(jìn)行編寫程序的初步訓(xùn)練,因此,只介紹算法的初步知識。2.1 算法的概念做任何事情都有一定的步驟。為解決一個問題而采取的方法和步驟,就稱為算法。l 計算機(jī)算法:計算機(jī)能夠執(zhí)行的算法。l 計算機(jī)算法可分為兩大類:n 數(shù)值運算算法:求解數(shù)值;n 非數(shù)值運算算法:事務(wù)管理領(lǐng)域。3 數(shù)據(jù)類型、運算符與表達(dá)式3.1 語言的數(shù)據(jù)類型在第一章中,我們已經(jīng)看到程序中使用的各種變量都應(yīng)預(yù)先加以定義,即先定義,后使用。對變量的定義可以包括三個方面:數(shù)據(jù)類型 存儲類型作用域在本章中,我們只介紹數(shù)據(jù)類型的說明。其它說明在以后各章中陸續(xù)介紹。所謂數(shù)據(jù)類型是按被定義變量的性質(zhì),表示形式,占據(jù)存儲空間的多少,構(gòu)造特點來劃分的。在語言中,數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型,指針類型,空類型四大類。1. 基本數(shù)據(jù)類型:基本數(shù)據(jù)類型最主要的特點是,其值不可以再分解為其它類型。也就是說,基本數(shù)據(jù)類型是自我說明的。2. 構(gòu)造數(shù)據(jù)類型:構(gòu)造數(shù)據(jù)類型是根據(jù)已定義的一個或多個數(shù)據(jù)類型用構(gòu)造的方法來定義的。也就是說,一個構(gòu)造類型的值可以分解成若干個“成員”或“元素”。每個“成員”都是一個基本數(shù)據(jù)類型或又是一個構(gòu)造類型。在C語言中,構(gòu)造類型有以下幾種: 數(shù)組類型 結(jié)構(gòu)體類型 共用體(聯(lián)合)類型3. 指針類型:指針是一種特殊的,同時又是具有重要作用的數(shù)據(jù)類型。其值用來表示某個變量在內(nèi)存儲器中的地址。雖然指針變量的取值類似于整型量,但這是兩個類型完全不同的量,因此不能混為一談。4. 空類型:在調(diào)用函數(shù)值時,通常應(yīng)向調(diào)用者返回一個函數(shù)值。這個返回的函數(shù)值是具有一定的數(shù)據(jù)類型的,應(yīng)在函數(shù)定義及函數(shù)說明中給以說明,例如在例題中給出的max函數(shù)定義中,函數(shù)頭為:int max(int a,int b);其中“int ”類型說明符即表示該函數(shù)的返回值為整型量。又如在例題中,使用了庫函數(shù)sin,由于系統(tǒng)規(guī)定其函數(shù)返回值為雙精度浮點型,因此在賦值語句s=sin (x);中,s 也必須是雙精度浮點型,以便與sin函數(shù)的返回值一致。所以在說明部分,把s說明為雙精度浮點型。但是,也有一類函數(shù),調(diào)用后并不需要向調(diào)用者返回函數(shù)值,這種函數(shù)可以定義為“空類型”。其類型說明符為void。在后面函數(shù)中還要詳細(xì)介紹。在本章中,我們先介紹基本數(shù)據(jù)類型中的整型、浮點型和字符型。其余類型在以后各章中陸續(xù)介紹。3.2 常量與變量對于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量兩種。在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量,其值可變的量稱為變量。它們可與數(shù)據(jù)類型結(jié)合起來分類。例如,可分為整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量、枚舉常量、枚舉變量。在程序中,常量是可以不經(jīng)說明而直接引用的,而變量則必須先定義后使用。整型量包括整型常量、整型變量。3.2.1 常量和符號常量在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量。l 直接常量(字面常量):n 整型常量:12、0、-3;n 實型常量:4.6、-1.23;n 字符常量:a、b。l 標(biāo)識符:用來標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列。l 符號常量:用標(biāo)識符代表一個常量。在語言中,可以用一個標(biāo)識符來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為:#define 標(biāo)識符 常量其中#define也是一條預(yù)處理命令(預(yù)處理命令都以#開頭),稱為宏定義命令(在后面預(yù)處理程序中將進(jìn)一步介紹),其功能是把該標(biāo)識符定義為其后的常量值。一經(jīng)定義,以后在程序中所有出現(xiàn)該標(biāo)識符的地方均代之以該常量值。l 習(xí)慣上符號常量的標(biāo)識符用大寫字母,變量標(biāo)識符用小寫字母,以示區(qū)別?!纠?.1】符號常量的使用。#define PRICE 30main() int num,total;num=10;total=num* PRICE;printf(“total=%d”,total);n 用標(biāo)識符代表一個常量,稱為符號常量。n 符號常量與變量不同,它的值在其作用域內(nèi)不能改變,也不能再被賦值。n 使用符號常量的好處是: 含義清楚; 能做到“一改全改”。3.2.2 變量其值可以改變的量稱為變量。一個變量應(yīng)該有一個名字,在內(nèi)存中占據(jù)一定的存儲單元。變量定義必須放在變量使用之前。一般放在函數(shù)體的開頭部分。要區(qū)分變量名和變量值是兩個不同的概念。a 變量名3變量值存儲單元變量名3.3 整型數(shù)據(jù)3.3.1 整型常量的表示方法整型常量就是整常數(shù)。在語言中,使用的整常數(shù)有八進(jìn)制、十六進(jìn)制和十進(jìn)制三種。1) 十進(jìn)制整常數(shù):十進(jìn)制整常數(shù)沒有前綴。其數(shù)碼為09。以下各數(shù)是合法的十進(jìn)制整常數(shù):237、-568、65535、1627;以下各數(shù)不是合法的十進(jìn)制整常數(shù):023 (不能有前導(dǎo)0)、23D (含有非十進(jìn)制數(shù)碼)。在程序中是根據(jù)前綴來區(qū)分各種進(jìn)制數(shù)的。因此在書寫常數(shù)時不要把前綴弄錯造成結(jié)果不正確。2) 八進(jìn)制整常數(shù):八進(jìn)制整常數(shù)必須以0開頭,即以0作為八進(jìn)制數(shù)的前綴。數(shù)碼取值為07。八進(jìn)制數(shù)通常是無符號數(shù)。以下各數(shù)是合法的八進(jìn)制數(shù):015(十進(jìn)制為13)、0101(十進(jìn)制為65)、0177777(十進(jìn)制為65535);以下各數(shù)不是合法的八進(jìn)制數(shù):256(無前綴0)、03A2(包含了非八進(jìn)制數(shù)碼)、-0127(出現(xiàn)了負(fù)號)。3) 十六進(jìn)制整常數(shù):十六進(jìn)制整常數(shù)的前綴為0X或0x。其數(shù)碼取值為09,AF或af。以下各數(shù)是合法的十六進(jìn)制整常數(shù):0X2A(十進(jìn)制為42)、0XA0 (十進(jìn)制為160)、0XFFFF (十進(jìn)制為65535);以下各數(shù)不是合法的十六進(jìn)制整常數(shù):5A (無前綴0X)、0X3H (含有非十六進(jìn)制數(shù)碼)。4) 整型常數(shù)的后綴:在16位字長的機(jī)器上,基本整型的長度也為16位,因此表示的數(shù)的范圍也是有限定的。十進(jìn)制無符號整常數(shù)的范圍為065535,有符號數(shù)為-32768+32767。八進(jìn)制無符號數(shù)的表示范圍為00177777。十六進(jìn)制無符號數(shù)的表示范圍為0X00XFFFF或0x00xFFFF。如果使用的數(shù)超過了上述范圍,就必須用長整型數(shù)來表示。長整型數(shù)是用后綴“L”或“l(fā)”來表示的。例如:十進(jìn)制長整常數(shù):158L (十進(jìn)制為158)、358000L (十進(jìn)制為358000);八進(jìn)制長整常數(shù):012L (十進(jìn)制為10)、077L (十進(jìn)制為63)、0200000L (十進(jìn)制為65536);十六進(jìn)制長整常數(shù):0X15L (十進(jìn)制為21)、0XA5L (十進(jìn)制為165)、0X10000L (十進(jìn)制為65536)。長整數(shù)158L和基本整常數(shù)158 在數(shù)值上并無區(qū)別。但對158L,因為是長整型量,編譯系統(tǒng)將為它分配4個字節(jié)存儲空間。而對158,因為是基本整型,只分配2 個字節(jié)的存儲空間。因此在運算和輸出格式上要予以注意,避免出錯。無符號數(shù)也可用后綴表示,整型常數(shù)的無符號數(shù)的后綴為“U”或“u”。例如:358u,0x38Au,235Lu均為無符號數(shù)。前綴,后綴可同時使用以表示各種類型的數(shù)。如0XA5Lu表示十六進(jìn)制無符號長整數(shù)A5,其十進(jìn)制為165。3.3.2 整型變量1. 整型變量的分類1) 基本型:類型說明符為int,在內(nèi)存中占2個字節(jié)。2) 短整量:類型說明符為short int或short。所占字節(jié)和取值范圍均與基本型相同。3) 長整型:類型說明符為long int或long,在內(nèi)存中占4個字節(jié)。4) 無符號型:類型說明符為unsigned。無符號型又可與上述三種類型匹配而構(gòu)成:n 無符號基本型:類型說明符為unsigned int或unsigned。n 無符號短整型:類型說明符為unsigned short。n 無符號長整型:類型說明符為unsigned long。例如: int a,b,c; (a,b,c為整型變量) long x,y; (x,y為長整型變量)unsigned p,q; (p,q為無符號整型變量)在書寫變量定義時,應(yīng)注意以下幾點:n 允許在一個類型說明符后,定義多個相同類型的變量。各變量名之間用逗號間隔。類型說明符與變量名之間至少用一個空格間隔。n 最后一個變量名之后必須以“;”號結(jié)尾。n 變量定義必須放在變量使用之前。一般放在函數(shù)體的開頭部分。2. 整型數(shù)據(jù)的溢出3.4 實型數(shù)據(jù)3.4.1 實型常量的表示方法1) 十進(jìn)制數(shù)形式:由數(shù)碼0 9和小數(shù)點組成。例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均為合法的實數(shù)。注意,必須有小數(shù)點。2) 指數(shù)形式:由十進(jìn)制數(shù),加階碼標(biāo)志“e”或“E”以及階碼(只能為整數(shù),可以帶符號)組成。其一般形式為:a E n(a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù))其值為 a*10n。如:2.1E5 (等于2.1*105)3.7E-2 (等于3.7*10-2)0.5E7 (等于0.5*107)-2.8E-2 (等于-2.8*10-2)以下不是合法的實數(shù):345 (無小數(shù)點)E7 (階碼標(biāo)志E之前無數(shù)字)-5 (無階碼標(biāo)志)53.-E3 (負(fù)號位置不對)2.7E (無階碼)標(biāo)準(zhǔn)允許浮點數(shù)使用后綴。后綴為“f”或“F”即表示該數(shù)為浮點數(shù)。如356f和356.是等價的?!纠?.5】說明了這種情況。main() printf(%fn ,356.); printf(%fn ,356); printf(%fn ,356f);3.4.2 實型變量1. 實型數(shù)據(jù)在內(nèi)存中的存放形式實型數(shù)據(jù)一般占4個字節(jié)(32位)內(nèi)存空間。按指數(shù)形式存儲。實數(shù)3.14159在內(nèi)存中的存放形式如下:+.3141591 數(shù)符 小數(shù)部分 指數(shù)l 小數(shù)部分占的位(bit)數(shù)愈多,數(shù)的有效數(shù)字愈多,精度愈高。l 指數(shù)部分占的位數(shù)愈多,則能表示的數(shù)值范圍愈大。2. 實型變量的分類實型變量分為:單精度(float型)、雙精度(double型)和長雙精度(long double型)三類。在Turbo C中單精度型占4個字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為3.4E-383.4E+38,只能提供七位有效數(shù)字。雙精度型占8 個字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為1.7E-3081.7E+308,可提供16位有效數(shù)字。類型說明符比特數(shù)(字節(jié)數(shù))有效數(shù)字?jǐn)?shù)的范圍float32(4)6710-371038 double64(8)151610-30710308 long double 80 (10)181910-4931104932 實型變量定義的格式和書寫規(guī)則與整型相同。例如: float x,y; (x,y為單精度實型量)double a,b,c; (a,b,c為雙精度實型量)3. 實型數(shù)據(jù)的舍入誤差由于實型變量是由有限的存儲單元組成的,因此能提供的有效數(shù)字總是有限的。如下例。【例3.6】實型數(shù)據(jù)的舍入誤差。main()float a,b; a=123456.789e5; b=a+20printf(%fn,a);printf(%fn,b);注意:1.0/3*3的結(jié)果并不等于1?!纠?.7】main() float a; double b; a=33333.33333; b=33333.33333333333333; printf(%fn%fn,a,b); l 從本例可以看出,由于a 是單精度浮點型,有效位數(shù)只有七位。而整數(shù)已占五位,故小數(shù)二位后之后均為無效數(shù)字。l b 是雙精度型,有效位為十六位。但Turbo C 規(guī)定小數(shù)后最多保留六位,其余部分四舍五入。3.4.3 實型常數(shù)的類型實型常數(shù)不分單、雙精度,都按雙精度double型處理。3.5 字符型數(shù)據(jù)字符型數(shù)據(jù)包括字符常量和字符變量。3.5.1 字符常量字符常量是用單引號括起來的一個字符。例如:a、b、=、+、?都是合法字符常量。在語言中,字符常量有以下特點:1) 字符常量只能用單引號括起來,不能用雙引號或其它括號。2) 字符常量只能是單個字符,不能是字符串。3) 字符可以是字符集中任意字符。但數(shù)字被定義為字符型之后就不能參與數(shù)值運算。如5和5 是不同的。5是字符常量,不能參與運算。3.5.2 轉(zhuǎn)義字符 轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線開頭,后跟一個或幾個字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,在前面各例題printf函數(shù)的格式串中用到的“n”就是一個轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來表示那些用一般字符不便于表示的控制代碼。常用的轉(zhuǎn)義字符及其含義轉(zhuǎn)義字符轉(zhuǎn)義字符的意義ASCII代碼n回車換行10t橫向跳到下一制表位置9b退格8r回車13f走紙換頁12反斜線符92單引號符39”雙引號符34a鳴鈴7ddd13位八進(jìn)制數(shù)所代表的字符xhh12位十六進(jìn)制數(shù)所代表的字符廣義地講,語言字符集中的任何一個字符均可用轉(zhuǎn)義字符來表示。表中的ddd和xhh正是為此而提出的。ddd和hh分別為八進(jìn)制和十六進(jìn)制的ASCII代碼。如101表示字母A ,102表示字母B,134表示反斜線,XOA表示換行等。【例3.8】轉(zhuǎn)義字符的使用。main() printf(“ ab ctderfn”);printf(“hijktLbMn”);3.5.3 字符變量字符變量用來存儲字符常量,即單個字符。字符變量的類型說明符是char。字符變量類型定義的格式和書寫規(guī)則都與整型變量相同。例如: char a,b;3.5.4 字符數(shù)據(jù)在內(nèi)存中的存儲形式及使用方法每個字符變量被分配一個字節(jié)的內(nèi)存空間,因此只能存放一個字符。字符值是以ASCII碼的形式存放在變量的內(nèi)存單元之中的。如x的十進(jìn)制ASCII碼是120,y的十進(jìn)制ASCII碼是121。對字符變量a,b賦予x和y值:a=x; b=y;實際上是在a,b兩個單元內(nèi)存放120和121的二進(jìn)制代碼:a:01111000b:01111001所以也可以把它們看成是整型量。語言允許對整型變量賦以字符值,也允許對字符變量賦以整型值。在輸出時,允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。 整型量為二字節(jié)量,字符量為單字節(jié)量,當(dāng)整型量按字符型量處理時,只有低八位字節(jié)參與處理?!纠?.9】向字符變量賦以整數(shù)。main() char a,b; a=120; b=121; printf(%c,%cn,a,b);printf(%d,%dn,a,b); 本程序中定義a,b為字符型,但在賦值語句中賦以整型值。從結(jié)果看,a,b值的輸出形式取決于printf函數(shù)格式串中的格式符,當(dāng)格式符為c時,對應(yīng)輸出的變量值為字符,當(dāng)格式符為d時,對應(yīng)輸出的變量值為整數(shù)?!纠?.10】main() char a,b; a=a; b=b; a=a-32; b=b-32; printf(%c,%cn%d,%dn,a,b,a,b); 本例中,a,b被說明為字符變量并賦予字符值,語言允許字符變量參與數(shù)值運算,即用字符的ASCII 碼參與運算。由于大小寫字母的ASCII 碼相差32,因此運算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出。3.5.5 字符串常量字符串常量是由一對雙引號括起的字符序列。例如: CHINA , “C program” , $12.5 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它們之間主要有以下區(qū)別:1) 字符常量由單引號括起來,字符串常量由雙引號括起來。2) 字符常量只能是單個字符,字符串常量則可以含一個或多個字符。3) 可以把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。在語言中沒有相應(yīng)的字符串變量。這是與BASIC 語言不同的。但是可以用一個字符數(shù)組來存放一個字符串常量。在數(shù)組一章內(nèi)予以介紹。4) 字符常量占一個字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1。增加的一個字節(jié)中存放字符0 (ASCII碼為0)。這是字符串結(jié)束的標(biāo)志。例如:字符串 C program 在內(nèi)存中所占的字節(jié)為:Cprogram0字符常量a和字符串常量a雖然都只有一個字符,但在內(nèi)存中的情況是不同的。a在內(nèi)存中占一個字節(jié),可表示為:aa在內(nèi)存中占二個字節(jié),可表示為:a0 3.6 變量賦初值在程序中常常需要對變量賦初值,以便使用變量。語言程序中可有多種方法為變量提供初值。本小節(jié)先介紹在作變量定義的同時給變量賦以初值的方法。這種方法稱為初始化。在變量定義中賦初值的一般形式為: 類型說明符 變量1= 值1,變量2= 值2,;例如:int a=3;int b,c=5; float x=3.2,y=3,f,z=0.75;char ch1=K,ch2=P;應(yīng)注意,在定義中不允許連續(xù)賦值,如a=b=c=5是不合法的。【例3.11】main() int a=3,b,c=5; b=a+c; printf(a=%d,b=%d,c=%dn,a,b,c); 3.7 各類數(shù)值型數(shù)據(jù)之間的混合運算變量的數(shù)據(jù)類型是可以轉(zhuǎn)換的。轉(zhuǎn)換的方法有兩種,一種是自動轉(zhuǎn)換,一種是強(qiáng)制轉(zhuǎn)換。自動轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運算時,由編譯系統(tǒng)自動完成。自動轉(zhuǎn)換遵循以下規(guī)則:1) 若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運算。2) 轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進(jìn)行,以保證精度不降低。如int型和long型運算時,先把int量轉(zhuǎn)成long型后再進(jìn)行運算。3) 所有的浮點運算都是以雙精度進(jìn)行的,即使僅含float單精度量運算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運算。4) char型和short型參與運算時,必須先轉(zhuǎn)換成int型。5) 在賦值運算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度左邊長時,將丟失一部分?jǐn)?shù)據(jù),這樣會降低精度,丟失的部分按四舍五入向前舍入。下圖表示了類型自動轉(zhuǎn)換的規(guī)則。intchar,shortdoublelongunsigned強(qiáng)制類型轉(zhuǎn)換其一般形式為: (類型說明符) (表達(dá)式)其功能是把表達(dá)式的運算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。例如: (float) a 把a(bǔ)轉(zhuǎn)換為實型 (int)(x+y) 把x+y的結(jié)果轉(zhuǎn)換為整型在使用強(qiáng)制轉(zhuǎn)換時應(yīng)注意以下問題:1) 類型說明符和表達(dá)式都必須加括號(單個變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。2) 無論是強(qiáng)制轉(zhuǎn)換或是自動轉(zhuǎn)換,都只是為了本次運算的需要而對變量的數(shù)據(jù)長度進(jìn)行的臨時性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時對該變量定義的類型。3.8 算術(shù)運算符和算術(shù)表達(dá)式3.8.1 C運算符簡介語言的運算符可分為以下幾類:1. 算術(shù)運算符:用于各類數(shù)值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(+)、自減(-)共七種。2. 關(guān)系運算符:用于比較運算。包括大于()、小于(=)、小于等于(=)和不等于(!=)六種。3. 邏輯運算符:用于邏輯運算。包括與(&)、或(|)、非(!)三種。4. 位操作運算符:參與運算的量,按二進(jìn)制位進(jìn)行運算。包括位與(&)、位或(|)、位非()、位異或()、左移()六種。5. 賦值運算符:用于賦值運算,分為簡單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運算賦值(&=,|=,=,=,=)三類共十一種。6. 條件運算符:這是一個三目運算符,用于條件求值(?:)。7. 逗號運算符:用于把若干表達(dá)式組合成一個表達(dá)式(,)。8. 指針運算符:用于取內(nèi)容(*)和取地址(&)二種運算。9. 求字節(jié)數(shù)運算符:用于計算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。10. 特殊運算符:有括號(),下標(biāo),成員(,.)等幾種。3.8.2 算術(shù)運算符和算術(shù)表達(dá)式1. 基本的算術(shù)運算符l 加法運算符“+”:加法運算符為雙目運算符,即應(yīng)有兩個量參與加法運算。如a+b,4+8等。具有右結(jié)合性。l 減法運算符“-”:減法運算符為雙目運算符。但“-”也可作負(fù)值運算符,此時為單目運算,如-x,-5等具有左結(jié)合性。l 乘法運算符“*”:雙目運算,具有左結(jié)合性。l 除法運算符“/”:雙目運算具有左結(jié)合性。參與運算量均為整型時,結(jié)果也為整型,舍去小數(shù)。如果運算量中有一個是實型,則結(jié)果為雙精度實型。l 求余運算符(模運算符)“%”:雙目運算,具有左結(jié)合性。要求參與運算的量均為整型。 求余運算的結(jié)果等于兩數(shù)相除后的余數(shù)。 算術(shù)表達(dá)式和運算符的優(yōu)先級和結(jié)合性表達(dá)式是由常量、變量、函數(shù)和運算符組合起來的式子。一個表達(dá)式有一個值及其類型, 它們等于計算表達(dá)式所得結(jié)果的值和類型。表達(dá)式求值按運算符的優(yōu)先級和結(jié)合性規(guī)定的順序進(jìn)行。單個的常量、變量、函數(shù)可以看作是表達(dá)式的特例。算術(shù)表達(dá)式是由算術(shù)運算符和括號連接起來的式子。l 算術(shù)表達(dá)式:用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子。以下是算術(shù)表達(dá)式的例子:a+b(a*2)c(x+r)*8-(a+b)7+Isin(x)+sin(y)(+i)-(j+)+(k-)l 運算符的優(yōu)先級:語言中,運算符的運算優(yōu)先級共分為15級。1級最高,15級最低。在表達(dá)式中,優(yōu)先級較高的先于優(yōu)先級較低的進(jìn)行運算。而在一個運算量兩側(cè)的運算符優(yōu)先級相同時,則按運算符的結(jié)合性所規(guī)定的結(jié)合方向處理。l 運算符的結(jié)合性:語言中各運算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。例如算術(shù)運算符的結(jié)合性是自左至右,即先左后右。如有表達(dá)式x-y+z則y應(yīng)先與“-”號結(jié)合,執(zhí)行x-y運算,然后再執(zhí)行+z的運算。這種自左至右的結(jié)合方向就稱為“左結(jié)合性”。而自右至左的結(jié)合方向稱為“右結(jié)合性”。 最典型的右結(jié)合性運算符是賦值運算符。如x=y=z,由于“=”的右結(jié)合性,應(yīng)先執(zhí)行y=z再執(zhí)行x=(y=z)運算。語言運算符中有不少為右結(jié)合性,應(yīng)注意區(qū)別,以避免理解錯誤。2. 強(qiáng)制類型轉(zhuǎn)換運算符其一般形式為: (類型說明符) (表達(dá)式)其功能是把表達(dá)式的運算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。例如: (float) a 把a(bǔ)轉(zhuǎn)換為實型 (int)(x+y) 把x+y的結(jié)果轉(zhuǎn)換為整型3. 自增、自減運算符自增,自減運算符:自增1運算符記為“+”,其功能是使變量的值自增1。自減1運算符記為“-”,其功能是使變量值自減1。自增1,自減1運算符均為單目運算,都具有右結(jié)合性。可有以下幾種形式:+i i自增1后再參與其它運算。-i i自減1后再參與其它運算。i+ i參與運算后,i的值再自增1。i- i參與運算后,i的值再自減1。在理解和使用上容易出錯的是i+和i-。 特別是當(dāng)它們出在較復(fù)雜的表達(dá)式或語句中時,常常難于弄清,因此應(yīng)仔細(xì)分析。賦值運算符和賦值表達(dá)式1. 賦值運算符簡單賦值運算符和表達(dá)式:簡單賦值運算符記為“=”。由“= ”連接的式子稱為賦值表達(dá)式。其一般形式為:變量=表達(dá)式2. 類型轉(zhuǎn)換如果賦值運算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動進(jìn)行類型轉(zhuǎn)換,即把賦值號右邊的類型換成左邊的類型。具體規(guī)定如下:1) 實型賦予整型,舍去小數(shù)部分。前面的例子已經(jīng)說明了這種情況。2) 整型賦予實型,數(shù)值不變,但將以浮點形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。3) 字符型賦予整型,由于字符型為一個字節(jié),而整型為二個字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高八位為0。整型賦予字符型,只把低八位賦予字符量。3. 復(fù)合的賦值運算符在賦值符“=”之前加上其它二目運算符可構(gòu)成復(fù)合賦值符。如+=,-=,*=,=,%=,=,&=,=,|=。 構(gòu)成復(fù)合賦值表達(dá)式的一般形式為:變量 雙目運算符=表達(dá)式它等效于變量=變量 運算符 表達(dá)式例如: a+=5 等價于a=a+5 x*=y+7 等價于x=x*(y+7) r%=p 等價于r=r%p復(fù)合賦值符這種寫法,對初學(xué)者可能不習(xí)慣,但十分有利于編譯處理,能提高編譯效率并產(chǎn)生質(zhì)量較高的目標(biāo)代碼。3.9 逗號運算符和逗號表達(dá)式 在語言中逗號“,”也是一種運算符,稱為逗號運算符。 其功能是把兩個表達(dá)式連接起來組成一個表達(dá)式, 稱為逗號表達(dá)式。其一般形式為:表達(dá)式1,表達(dá)式2其求值過程是分別求兩個表達(dá)式的值,并以表達(dá)式2的值作為整個逗號表達(dá)式的值。對于逗號表達(dá)式還要說明兩點:1) 逗號表達(dá)式一般形式中的表達(dá)式1和表達(dá)式2 也可以又是逗號表達(dá)式。例如: 表達(dá)式1,(表達(dá)式2,表達(dá)式3)形成了嵌套情形。因此可以把逗號表達(dá)式擴(kuò)展為以下形式: 表達(dá)式1,表達(dá)式2,表達(dá)式n整個逗號表達(dá)式的值等于表達(dá)式n的值。2) 程序中使用逗號表達(dá)式,通常是要分別求逗號表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個逗號表達(dá)式的值。并不是在所有出現(xiàn)逗號的地方都組成逗號表達(dá)式,如在變量說明中,函數(shù)參數(shù)表中逗號只是用作各變量之間的間隔符。3.10 小結(jié)3.10.1 的數(shù)據(jù)類型基本類型,構(gòu)造類型,指針類型,空類型3.10.2 基本類型的分類及特點 類型說明符字節(jié)數(shù)值范圍字符型char1C字符集基本整型int2-3276832767短整型short int2-3276832767長整型long int4-214783648214783647無符號型unsigned2065535無符號長整型unsigned long404294967295單精度實型float43/4E-383/4E+38雙精度實型double81/7E-3081/7E+3083.10.3 常量后綴 L或l 長整型 U或u 無符號數(shù)F或f 浮點數(shù)3.10.4 常量類型 整數(shù),長整數(shù),無符號數(shù),浮點數(shù),字符,字符串,符號常數(shù),轉(zhuǎn)義字符。3.10.5 數(shù)據(jù)類型轉(zhuǎn)換自動轉(zhuǎn)換:在不同類型數(shù)據(jù)的混合運算中,由系統(tǒng)自動實現(xiàn)轉(zhuǎn)換,由少字節(jié)類型向多字節(jié)類型轉(zhuǎn)換。不同類型的量相互賦值時也由系統(tǒng)自動進(jìn)行轉(zhuǎn)換,把賦值號右邊的類型轉(zhuǎn)換為左邊的類型。強(qiáng)制轉(zhuǎn)換:由強(qiáng)制轉(zhuǎn)換運算符完成轉(zhuǎn)換。3.10.6 運算符優(yōu)先級和結(jié)合性 一般而言,單目運算符優(yōu)先級較高,賦值運算符優(yōu)先級低。算術(shù)運算符優(yōu)先級較高,關(guān)系和邏輯運算符優(yōu)先級較低。多數(shù)運算符具有左結(jié)合性,單目運算符、三目運算符、賦值運算符具有右結(jié)合性。3.10.7 表達(dá)式 表達(dá)式是由運算符連接常量、變量、函數(shù)所組成的式子。 每個表達(dá)式都有一個值和類型。表達(dá)式求值按運算符的優(yōu)先級和結(jié)合性所規(guī)定的順序進(jìn)行。4最簡單的C程序設(shè)計順序程序設(shè)計14.1語句概述14.2賦值語句34.3數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)44.4字符數(shù)據(jù)的輸入輸出44.4.1putchar 函數(shù)(字符輸出函數(shù))44.4.2getchar函數(shù)(鍵盤輸入函數(shù))54.5格式輸入與輸出54.5.1printf函數(shù)(格式輸出函數(shù))54.5.2scanf函數(shù)(格式輸入函數(shù))84.6順序結(jié)構(gòu)程序設(shè)計舉例124 最簡單的C程序設(shè)計順序程序設(shè)計 從程序流程的角度來看,程序可以分為三種基本結(jié)構(gòu), 即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。 這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。語言提供了多種語句來實現(xiàn)這些程序結(jié)構(gòu)。 本章介紹這些基本語句及其在順序結(jié)構(gòu)中的應(yīng)用,使讀者對程序有一個初步的認(rèn)識, 為后面各章的學(xué)習(xí)打下基礎(chǔ)。4.1 語句概述程序的結(jié)構(gòu):程序的執(zhí)行部分是由語句組成的。 程序的功能也是由執(zhí)行語句實現(xiàn)的。C語句可分為以下五類:1) 表達(dá)式語句2) 函數(shù)調(diào)用語句3) 控制語句4) 復(fù)合語句5) 空語句1. 表達(dá)式語句:表達(dá)式語句由表達(dá)式加上分號“;”組成。其一般形式為: 表達(dá)式;執(zhí)行表達(dá)式語句就是計算表達(dá)式的值。例如: x=y+z; 賦值語句; y+z; 加法運算語句,但計算結(jié)果不能保留,無實際意義; i+; 自增1語句,i值增1。2. 函數(shù)調(diào)用語句:由函數(shù)名、實際參數(shù)加上分號“;”組成。其一般形式為: 函數(shù)名(實際參數(shù)表);執(zhí)行函數(shù)語句就是調(diào)用函數(shù)體并把實際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語句,求取函數(shù)值 (在后面函數(shù)中再詳細(xì)介紹) 。例如:printf(C Program);調(diào)用庫函數(shù),輸出字符串。3. 控制語句:控制語句用于控制程序的流程, 以實現(xiàn)程序的各種結(jié)構(gòu)方式。它們由特定的語句定義符組成。語言有九種控制語句。 可分成以下三類:1) 條件判斷語句:if語句、switch語句;2) 循環(huán)執(zhí)行語句:do while語句、while語句、for語句;3) 轉(zhuǎn)向語句:break語句、goto語句、continue語句、return語句。4. 復(fù)合語句:把多個語句用括號括起來組成的一個語句稱復(fù)合語句。在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句。例如: x=y+z; a=b+c; printf(“%d%d”,x,a); 是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“”外不能加分號。5. 空語句:只有分號“;”組成的語句稱為空語句??照Z句是什么也不執(zhí)行的語句。在程序中空語句可用來作空循環(huán)體。例如 while(getchar()!=n) ;本語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環(huán)體為空語句。4.2 賦值語句賦值語句是由賦值表達(dá)式再加上分號構(gòu)成的表達(dá)式語句。其一般形式為: 變量=表達(dá)式;賦值語句的功能和特點都與賦值表達(dá)式相同。 它是程序中使用最多的語句之一。在賦值語句的使用中需要注意以下幾點:1. 由于在賦值符“=”右邊的表達(dá)式也可以又是一個賦值表達(dá)式,因此,下述形式 變量=(變量=表達(dá)式);是成立的,從而形成嵌套的情形。其展開之后的一般形式為: 變量=變量=表達(dá)式;例如: a=b=c=d=e=5;按照賦值運算符的右接合性,因此實際上等效于: e=5; d=e; c=d; b=c; a=b;2. 注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結(jié)尾。例如: int a=5,b,c;3. 在變量說明中,不允許連續(xù)給多個變量賦初值。 如下述說明是錯誤的: int a=b=c=5必須寫為 int a=5,b=5,c=5;而賦值語句允許連續(xù)賦值。4. 注意賦值表達(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;因為x=y+5;是語句,不能出現(xiàn)在表達(dá)式中。4.3 數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)1) 所謂輸入輸出是以計算機(jī)為主體而言的。2) 本章介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語句。3) 在語言中,所有的數(shù)據(jù)輸入輸出都是由庫函數(shù)完成的。 因此都是函數(shù)語句。4) 在使用語言庫函數(shù)時,要用預(yù)編譯命令#include將有關(guān)“頭文件”包括到源文件中。使用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時要用到 “stdio.h”文件,因此源文件開頭應(yīng)有以下預(yù)編譯命令:#include或#include ”stdio.h”stdio是standard input &outupt的意思。5) 考慮到printf和scanf函數(shù)使用頻繁,系統(tǒng)允許在使用這兩個函數(shù)時可不加#include或#include ”stdio.h”4.4 字符數(shù)據(jù)的輸入輸出4.4.1 putchar 函數(shù)(字符輸出函數(shù))putchar 函數(shù)是字符輸出函數(shù), 其功能是在顯示器上輸出單個字符。其一般形式為:putchar(字符變量)例如: putchar(A); (輸出大寫字母A) putchar(x); (輸出字符變量x的值)putchar(101); (也是輸出字符A)putchar(n); (換行)對控制字符則執(zhí)行控制功能,不在屏幕上顯示。使用本函數(shù)前必須要用文件包含命令:#include或#include “stdio.h”【例4.1】輸出單個字符。#includemain() char a=B,b=o,c=k; putchar(a);putchar(b);putchar(b);putchar(c);putchar(t); putchar

溫馨提示

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

最新文檔

評論

0/150

提交評論