版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
前言C語(yǔ)言是高等學(xué)校計(jì)算機(jī)及相關(guān)專業(yè)必修的專業(yè)基礎(chǔ)課,是培養(yǎng)學(xué)生算法思維的先導(dǎo)課。學(xué)生對(duì)C語(yǔ)言的掌握情況將很大程度上決定著大學(xué)四年的學(xué)習(xí)情況。鑒于C的重要地位,近些年來(lái)出現(xiàn)了無(wú)數(shù)的C語(yǔ)言,但幾乎所有在內(nèi)C語(yǔ)言的教與學(xué)走入誤區(qū)。雖然有些在形式上做了不少改進(jìn),比如:案例教學(xué)法、啟發(fā)式教學(xué)法等,但都是表面文章,內(nèi)容并無(wú)變化,中問(wèn)題依然存在。作者講授C語(yǔ)言多年,對(duì)目前國(guó)內(nèi)在諸多方面的缺陷和錯(cuò)誤給廣大學(xué)子造是多年來(lái)一得能等到一本較高質(zhì)量、沒(méi)有重大錯(cuò)誤的,然而終無(wú)所見(jiàn),于編寫本書的指導(dǎo)思想對(duì)目前絕大多數(shù)都出現(xiàn)嚴(yán)重錯(cuò)誤的“指針”一章的內(nèi)容和絕大多數(shù)都語(yǔ)焉不詳?shù)摹拔募币徽碌膬?nèi)容重點(diǎn)著墨。糾正主流中的諸多錯(cuò)誤說(shuō)法和錯(cuò)與其他相比,本書在以下幾方面做了較大的改進(jìn)②有關(guān)路徑和輸入輸出重定向的概念。C語(yǔ)言中,很多地方需要用到路徑和輸作為選講或的內(nèi)容;輸入輸出重定向放在附錄中,供需要的讀者自行學(xué)習(xí)。C語(yǔ)言的輸入輸出,緩沖區(qū)是個(gè)繞不開(kāi)的難懂的原因有三:一是幾乎所有都未給出文件操作的原理,學(xué)生知其然,不知是a的地址”等錯(cuò)誤說(shuō)法。此多的類型本就容易,一般又把它們?nèi)糠旁谝徽轮兄v解,顯得很全面、本書將指針最重要的兩個(gè)應(yīng)用——用指針變量變量、用指針變量下標(biāo)①數(shù)組和指針的順序問(wèn)題。一般都是先講數(shù)組,再講指針。帶來(lái)的問(wèn)題就intx[]以令人信服,而且對(duì)很多現(xiàn)象(比如為什么x可以進(jìn)行自增運(yùn)算)也無(wú)法解釋。②數(shù)組和函數(shù)的順序問(wèn)題。一般都是把函數(shù)放在數(shù)組之后講解,原因是便綜上所述,最合適的順序安排應(yīng)是:函數(shù)、指針(1、數(shù)組、指針(2、指針本書的使用建議:設(shè)計(jì)》課的學(xué)生,或C語(yǔ)言的讀者。其他說(shuō)明:VisualC6.0和TurboC2.0VC編寫的,所有源程序都在VC中調(diào)試、運(yùn)行過(guò),例題中的運(yùn)行結(jié)果都是在VC中得到的。103個(gè)例題源代碼,例題編號(hào)與源程序的編號(hào)一一對(duì)應(yīng)。如:例2.1的源代碼對(duì)應(yīng)資料中的源文件s2_1.c,若該例題有三種解法,則對(duì)應(yīng)的源文件分別是s2_1_1.c、s2_1_2.c、s2_1_3.c。本書的編寫獲2014年山東省普通高校應(yīng)用型人才培養(yǎng)專業(yè)發(fā)展支持計(jì)劃項(xiàng)目這些書籍和文獻(xiàn)資料的作者表示感謝。本書在編寫過(guò)程中也得到了出目第1章計(jì)算機(jī)基礎(chǔ)知 計(jì)算機(jī)的硬件組 運(yùn)算 控制 輸入設(shè) 輸出設(shè) 數(shù)制及數(shù)制間的轉(zhuǎn) 二進(jìn) 八進(jìn) 十六進(jìn) 原碼、反碼和補(bǔ) 原 反 補(bǔ) 路徑的概 當(dāng)前盤和當(dāng) 絕對(duì)路徑和相對(duì)路 計(jì)算機(jī)語(yǔ) 機(jī)器語(yǔ) 匯編語(yǔ) 高級(jí)語(yǔ) 算 算法的概 算法的特 算法的表 程序的三種基本結(jié) 習(xí)題 第2章C程序和C編譯器簡(jiǎn) C語(yǔ)言及C標(biāo)準(zhǔn)簡(jiǎn) C語(yǔ)言的出 C語(yǔ)言的特 C標(biāo) C程序的構(gòu) TurboC2.0編程環(huán)境及常用操作簡(jiǎn) VisualC++6.0編程環(huán)境及常用操作簡(jiǎn) 習(xí)題 第3章C編程基礎(chǔ)知 常量和變 常 變 基本數(shù)據(jù)類 整型數(shù) 實(shí)型數(shù) 字符型數(shù) 字符 符號(hào)常量和常變 符號(hào)常 常變 運(yùn)算符和表達(dá) 算術(shù)運(yùn)算 賦值運(yùn)算符和賦值表達(dá) 自增自減運(yùn)算 逗號(hào)運(yùn)算符和逗號(hào)表達(dá) 類型轉(zhuǎn)換運(yùn)算 數(shù)據(jù)的類型轉(zhuǎn) 習(xí)題 第4章順序結(jié)構(gòu)程序設(shè) 賦值語(yǔ) 賦值語(yǔ)句及其執(zhí)行過(guò) 賦值的幾種數(shù)據(jù)處理方 輸入輸出函 緩沖區(qū)的概念及作 getchar()和 printf()和 順序結(jié)構(gòu)程序設(shè)計(jì)舉 習(xí)題 第5章選擇結(jié)構(gòu)程序設(shè) 關(guān)系運(yùn)算 關(guān)系表達(dá) 邏輯運(yùn)算符和邏輯表達(dá) 邏輯運(yùn)算 邏輯表達(dá) 條件運(yùn)算符和條件表達(dá) 習(xí)題 第6章循環(huán)結(jié)構(gòu)程序設(shè) 循環(huán)及其實(shí)現(xiàn)思 循環(huán)語(yǔ) while循 for循 三種循環(huán)的比 循環(huán)的控 計(jì)數(shù)器控制循環(huán)和其他條件控制循 break和 多重循 循環(huán)編程舉 習(xí)題 第7章函 函數(shù)的作 函數(shù)的定 函數(shù)定義的格 函數(shù)的返回 函數(shù)參數(shù)的設(shè) 函數(shù)的調(diào) 函數(shù)調(diào)用前的..............................................................................函數(shù)調(diào)用的方 函數(shù)的參數(shù)傳 形參與實(shí) 參數(shù)的傳 參數(shù)傳遞的單向 函數(shù)的嵌套調(diào) 遞歸函 遞歸的條 遞歸函數(shù)的執(zhí)行過(guò) 遞歸與迭 函數(shù)編程舉 內(nèi)部函數(shù)和外部函 習(xí)題 第8章變量的作用域和類 變量的作用 局部變 全局變 同名變量的辨 變量的類別和生存 內(nèi)存的區(qū) 動(dòng)態(tài)變 靜態(tài)變 變量的作用域和生存期小 習(xí)題 第9章用指針變量變 指針和指針變 指針和指針變量的概 直接尋址和間接尋 指針變量的值、地址及類 通過(guò)指針變量變 指針變量的定 指針變量的賦 通過(guò)指針變量間接一個(gè)變 指針變量在函數(shù)傳遞中的作 習(xí)題 第10章數(shù) 一維數(shù) 一維數(shù)組的定 一維數(shù)組的元素構(gòu)成及一維數(shù)組的結(jié) 數(shù)組名的指針類 數(shù)組元素的表示方 一維數(shù)組的................................................................................一維數(shù)組的初始 一維數(shù)組應(yīng)用舉 二維數(shù) 二維數(shù)組的定 二維數(shù)組的元素構(gòu)成及二維數(shù)組的結(jié) 二維數(shù)組名的指針類 二維數(shù)組中下標(biāo)變量的表示方 二維數(shù)組的................................................................................二維數(shù)組的初始 二維數(shù)組應(yīng)用舉 字符數(shù)組和字符串處理函 字符數(shù) 字符串處理函 字符數(shù)組應(yīng)用舉 習(xí)題 第11章用指針變量下標(biāo)變 用指針變量下標(biāo)變量的方 知識(shí)回 用指針變量二維數(shù)組中的下標(biāo)變 用指針變量下標(biāo)變量的適用場(chǎng) 習(xí)題 第12章指針綜 指針類型簡(jiǎn) 指向變量的指 指向變量的不可變指 指向變量的指針變 指向數(shù)組的指 指向一維數(shù)組的不可變指 指向一維數(shù)組的指針變 指向一維數(shù)組的指針變量的適用場(chǎng) 指針與字符 字符串的表示方 用指針變量處理字符 指針與函 函數(shù)的地 指向函數(shù)的指針變 指向函數(shù)的指針變量的作 指針函 指針數(shù) 指針數(shù)組的定 指針數(shù)組的................................................................................指針數(shù)組應(yīng)用舉 指向指針變量的指 指向指針變量的不可變指 指向指針變量的指針變 應(yīng)用舉 帶參數(shù)的main()函 帶參數(shù)main()函數(shù)的作 程序舉 動(dòng)態(tài)內(nèi)存分 動(dòng)態(tài)內(nèi)存分配函 動(dòng)態(tài)內(nèi)存分配舉 習(xí)題 第13章數(shù)據(jù)類型的自定 結(jié)構(gòu)體的定義和結(jié)構(gòu)體變量的定 結(jié)構(gòu)體的概念和結(jié)構(gòu)體的定 結(jié)構(gòu)體變量的定義和空間分 結(jié)構(gòu)體變量的初始 結(jié)構(gòu)體數(shù)組的定義和初始 結(jié)構(gòu)體變量的........................................................................................結(jié)構(gòu)體變量的方 結(jié)構(gòu)體變量舉 用指針變量結(jié)構(gòu)體變 為什么要通過(guò)指針變量結(jié)構(gòu)體變 應(yīng)用舉 鏈表及鏈表操作簡(jiǎn) 鏈表的概 使用鏈表的優(yōu) 鏈表操作簡(jiǎn) 共用 共用體的概 共用體的作 共用體及共用體變量的定 共用體變量(數(shù)組)的初始 共用體變量的............................................................................枚舉類 枚舉類型的定 枚舉變量的定 枚舉變量的使 枚舉應(yīng)用舉 用typedef定義類型別 習(xí)題 第14章位運(yùn) 位運(yùn)算及應(yīng) 按位 按位 異 取 左 右 習(xí)題 第15章文 文件及相關(guān)的概 文件的范 文件中數(shù)據(jù)的兩種方 文件的種 文件操作函數(shù)及緩沖區(qū)的概 文件讀寫的原 文件的讀寫位置指針和文件結(jié)束標(biāo) 讀寫位置指 文件的打開(kāi)和關(guān) 文件的打 文件的關(guān) 文件的讀 fgetc()和 fread()和 fgets()和 fscanf()和 讀寫位置指針的移動(dòng)和定 移動(dòng)讀寫位置指針的函 兩個(gè)與讀寫位置指針有關(guān)的函 文件的出錯(cuò)檢 文件操作舉 習(xí)題 第16章編譯預(yù)處 宏定 定 定 嵌套的宏定 文件包 文件包含的格 文件包含的作 文件包含兩種格式的區(qū) 條件編 條件編譯的格 條件編譯應(yīng)用舉 習(xí)題 附錄AC語(yǔ)言規(guī) 附錄B輸入輸出重定 附錄CC語(yǔ)言的關(guān)鍵 附錄D常用字符與ASCII碼對(duì)照 附錄E運(yùn)算符的優(yōu)先級(jí)和結(jié)合 附錄F常用庫(kù)函 參考文 本章內(nèi)計(jì)算機(jī)的硬件組成計(jì)算機(jī)的硬件由以下幾部分組成:CPU(CentralProcessingUnit)、器、輸入器1.1.3.1器的分基本電路都可以一位二進(jìn)制數(shù),故將一個(gè)基本電路稱為一個(gè)“位”(bit。(byte該編號(hào)稱為內(nèi)存地址,如圖1-1所示。
1234567………1-1
0一個(gè)內(nèi)存單元不可能為空,總是有內(nèi)容的(總是代表8個(gè)二進(jìn)制的1/2容量的電容進(jìn)行充電,對(duì)電量少于1/2容量的電容進(jìn)行放電。裝入內(nèi)存才能被CPU處理。外存包括硬盤、U盤、光盤、軟盤等,外存的特點(diǎn)是1.1.3.2器的特(1)器中存的信息,不管讀多少次,該信息都不會(huì),可反復(fù)1-2說(shuō)明:圖中黑色箭頭是數(shù)據(jù)流,帶邊框箭頭是指令流,細(xì)線箭頭是控制流,虛線內(nèi)是CPU數(shù)制及數(shù)制間的轉(zhuǎn)換只有兩個(gè)數(shù)字:01100/2=5050/2=2525/2=1212/2=66/2=33/2=11/2=0
)2,也可以寫成:100D 注意:在計(jì)算機(jī)書籍中,為了描述方便,一般用D表示十進(jìn)制,用B表示二進(jìn)制,用O表示八進(jìn)制,用H表示十六進(jìn)制。但這僅僅是約定,在C程序中不允許這樣表示。提示:十進(jìn)制數(shù)可以轉(zhuǎn)化為任意進(jìn)制的數(shù)。其方法是:若要轉(zhuǎn)為N進(jìn)制,則應(yīng)不斷地除以N直至0,將每次相除所得的余數(shù)倒排即可。 數(shù)值卻不相同,亦即:1在不同的位置有不同的權(quán)重。下面以十進(jìn)制數(shù)為例說(shuō)明權(quán)重的概念。一個(gè)十進(jìn)制數(shù)523,共有三位數(shù)字,每數(shù)字權(quán)重是100(即1),十位上的數(shù)字權(quán)重是101,百位上的數(shù)字權(quán)重是102……實(shí)際上,523是這樣得到的:3*1002*1015*102523對(duì)于二進(jìn)制數(shù),自右至左的權(quán)重分別是:、、、、二進(jìn)制數(shù) 262524232221 )2=0*20+0*21+1*22+0*23+0*24+1*25+1*26=進(jìn)制數(shù)進(jìn)行分組,自右至左每3位分成一組,然后計(jì)算出每一組的數(shù)據(jù),例如: )2 =( (分組后每一組所代表的十進(jìn)制數(shù)注意:雖然計(jì)算機(jī)內(nèi)部數(shù)據(jù)采用的是二進(jìn)制,但是在程序中表示整數(shù)的時(shí)候,卻不允許用二八進(jìn)制數(shù)都化為3位二進(jìn)制數(shù),按順序排列起來(lái),將不必要的0去掉即可。例如,八進(jìn)制數(shù) 每個(gè)數(shù)字都化為3個(gè)二進(jìn)制數(shù):011111 010(最的0沒(méi)有意義)故:372O= FA表示,1011B表示……1111F 每個(gè)數(shù)字都化為4位二進(jìn)制數(shù): 原碼、反碼和補(bǔ)碼,例如:設(shè)整數(shù)是用兩個(gè)字節(jié)的,則+5的原碼是: 最前面的0表示正號(hào)“+。又如:-5的原碼是 ,其中最的1表示負(fù)號(hào)“-負(fù)數(shù)的反碼是在原碼的基礎(chǔ)上取反而來(lái)。所謂取反,就是除最外,其余數(shù)字中所有的0都變成1,所有的1都變成0。如,-5的反碼是: 如:-5的補(bǔ)碼是:
路徑及其表示C盤根下的program子中,文件名是abc.txt。與此類似,在說(shuō)明 上面的文件標(biāo)識(shí)符中,“C:”表示C盤,第一個(gè)“\”表示根 又如:若文件標(biāo)識(shí)符 d:\VC\sample\aaa.c,則路徑是\VC\sample 說(shuō)明:路徑若由多 組成 之間也要用“\”隔開(kāi),如:\VC\sample注意:提示符是通過(guò)DOS命令(prompt)人為設(shè)置的,一般都用這樣令設(shè)置:prompt$p$g,前盤,則C:\program\abc.txt可以寫為:\program\abc.txt。 錄是\program ,則稱C盤的當(dāng)前 是\program。 該部分路徑可以省略。如:若C盤當(dāng)前 是\program,則C:\program\abc.txt可以省略為:c:abc.txt。又如:若D盤當(dāng)前 結(jié)構(gòu)如圖1-3所示,已a(bǔ)sample.cC ,,再向下查找到 x1-3
(即VC),再進(jìn)入上一級(jí) 再向下進(jìn)入TC ,再向下進(jìn)入abc ,繼續(xù)向下進(jìn)入a 若將當(dāng) 改為 ,則sample.c的兩種路徑的表示分別是若將當(dāng) 改為 ,則sample.c的兩種路徑的表示分別是CDOS概念做了最簡(jiǎn)單的介紹,若要深入了解有關(guān)絕對(duì)路徑、相對(duì)路徑、缺省盤、缺省等內(nèi)容,請(qǐng)參閱相關(guān)的DOS書籍。計(jì)算機(jī)語(yǔ)言所謂計(jì)算機(jī)指令,就是指揮計(jì)算機(jī)進(jìn)行工作令。由于計(jì)算機(jī)內(nèi)部采用二進(jìn)01兩個(gè)數(shù)字,因此,計(jì)算機(jī)指令也必須是二進(jìn)制的,以便被計(jì)算 找出錯(cuò)誤。圖1-4(1)是一頁(yè)用機(jī)器語(yǔ)言編寫的程序,可以想象,在若干頁(yè)的0和1中找出其中一個(gè)錯(cuò)誤是多么不易。C語(yǔ)言編寫的程序0MOVint0MOV{0MOVintADDSUB …… JMP… ……
return 1-4用三種語(yǔ)言編寫的程序就是:計(jì)算機(jī)只能識(shí)別0和1,識(shí)別不了助記符,怎么辦?人們想出的辦法是:編一個(gè)程序,負(fù)責(zé)把用匯編語(yǔ)言編寫的源程序翻譯成二進(jìn)制的計(jì)算機(jī)指令,然后再讓計(jì)算機(jī)去執(zhí)行。這個(gè)負(fù)責(zé)翻譯的程序叫做匯編程序,翻由于機(jī)器語(yǔ)言和匯編語(yǔ)言可移植性差,人們發(fā)明了高級(jí)語(yǔ)言。1957年推出的語(yǔ)言都接近于人類的自然語(yǔ)言,易懂易學(xué)。圖1-4(3)是用C語(yǔ)言編寫的程序,很容用.obj文件(目標(biāo)文件)存盤,.obj文件經(jīng)與庫(kù)函數(shù)連接后形成.exe文件(可執(zhí)行文件,.exe文件是可以直接運(yùn)行的文件,并且可反復(fù)運(yùn)行若干次。int{} 1-5算算法是程序設(shè)計(jì)的。要想編寫程序,必須先知道算法。有些初學(xué)者見(jiàn)到一2x–1=0的實(shí)根:floatx大于等0,則輸出x,如果x小于等于0,則不輸出x。當(dāng)x0時(shí),輸出還0界提供已知數(shù)據(jù),如:求nn是多少,需要從鍵盤輸入n。inputifx>=0nooperationelsex=-xoutput判斷框一般操作框流程線yyx<0?x=-
1-6傳統(tǒng)流程圖中的箭頭會(huì)使程序的轉(zhuǎn)來(lái)轉(zhuǎn)去,讓人B.SchneidermanN-S圖1-7便是用N-S流程圖描述的算法。
1-7N-S 條 模塊條循環(huán)條循環(huán) 1-8A,條件不成立就執(zhí)行模塊B,只能從中選擇一個(gè)分支來(lái)執(zhí)行。一.
習(xí)題內(nèi)存和外存各有什么特點(diǎn)? 和 若文件a.txt在D盤的 文件a.txt在C盤 下的 里去找a.txt?二.算法題2C程序和C編譯器簡(jiǎn)本章內(nèi)C語(yǔ)言及特點(diǎn)、C序的構(gòu)成、C編程框架以及在TurboCVisualC++C
C語(yǔ)言C標(biāo)準(zhǔn)簡(jiǎn)介C語(yǔ)言是伴隨著UNIX操作系統(tǒng)出現(xiàn)的。上世紀(jì)70年代,貝爾的D.M.RitchieUNIXBC語(yǔ)言。由于C語(yǔ)言具有很多優(yōu)點(diǎn),因此很快就風(fēng)靡全世界,成為深受程序員喜愛(ài)的一C(2)C語(yǔ)言功能更強(qiáng)。C語(yǔ)言具有豐富的運(yùn)算符和數(shù)據(jù)類型,如:C語(yǔ)言可以言編寫的運(yùn)行速度更快、占內(nèi)存更少。C的效率僅次于匯編語(yǔ)言。CC語(yǔ)言出現(xiàn)之后的很長(zhǎng)一段時(shí)間,都沒(méi)有人來(lái)制定一個(gè)統(tǒng)一的標(biāo)準(zhǔn),各編譯器一書,C語(yǔ)言才算有了一個(gè)事實(shí)上的標(biāo)準(zhǔn)(其實(shí)并沒(méi)有人規(guī)定它就是標(biāo)準(zhǔn)稱為標(biāo)準(zhǔn)C或經(jīng)典C。(ANSI)1983年制訂了第C語(yǔ)言標(biāo)準(zhǔn),并在C編譯器都遵循的標(biāo)準(zhǔn)??梢猿霈F(xiàn)在for語(yǔ)句的初始化從句中,如for(inti=1;i<10;i++);支持可變長(zhǎng)數(shù)組(程序運(yùn)行時(shí)才確定數(shù)組的大小型是void的函數(shù)return后面不能出現(xiàn)任何值(表達(dá)式;但是,C99目前尚未被廣泛采用,完全支持C99的編譯器不多。簡(jiǎn)單C程序例2.1在屏幕上輸出一行文字: oWorld。#include int o return 該頭文件,因?yàn)檫@些函數(shù)都是在這個(gè)頭文件中定義的,編譯器需要找到它們的定義。VisualC++(VC)CodeBlocks(CB)中使用任何輸入輸出函數(shù)時(shí),都需要包含stdio.hTurboC(TC)scanf()printf()時(shí)不需要包含,但使用其他輸入輸出函數(shù)getchar()、(man在任意一個(gè)函數(shù)的函數(shù)頭中,位于()之前的一定是函數(shù)名。返回0,結(jié)束返回非零值。這樣做的目的,是可以讓操作系統(tǒng)知道程序是如何結(jié)束的。為既然是原樣輸出,為什么輸出結(jié)果中沒(méi)有“\nC語(yǔ)言中,\n是“換息從下一行開(kāi)頭開(kāi)始。輸出\n時(shí),除了光標(biāo)換行,不會(huì)有任何看得見(jiàn)的符號(hào)出現(xiàn)。C89標(biāo)準(zhǔn)只支持用/*……*/的方式進(jìn)行注釋,C99還支持用//……說(shuō)明:C++允許用兩種注釋方法。VCCBC++CVCCBC語(yǔ)例 intmain(){inta,b,sum; sum=a+b; //計(jì)算a+b并將結(jié)果到sum中printf(“Sum=%d\n”,sum);//輸出結(jié)果return}來(lái)(記在內(nèi)存中,以備后面計(jì)算用。C語(yǔ)言中,要數(shù)據(jù),必須定義變量。提示:變量是內(nèi)存中的一段區(qū)域,用來(lái)存數(shù)據(jù)。“inta,b,sum;”。其中三個(gè)變量名都是程序員自己命名的。盤取回兩個(gè)整數(shù),分別存放到內(nèi)存中的變量a和b中。scanf()函數(shù)中,兩個(gè)雙引號(hào)之間的內(nèi)容用來(lái)控制輸入格式,%d的含義是:注意:此處一定要寫成&a,&b,不能寫成a,b=+“printf(“Sumd\nsum);”一行用來(lái)輸出程序的運(yùn)行結(jié)果。需要注意的是:sum所存的整數(shù)替換掉%d,其他字符原樣輸出。故輸出結(jié)果是:Sum=5(換行)。注意:一般地,有幾個(gè)以“%”開(kāi)頭的組合,后面就要有幾個(gè)輸出項(xiàng)。例如:若a、b23printf(“a=%d,b=%d\na,b);的結(jié)果是:a=2,b=3換行)試一試:把程序中兩個(gè)“&”去掉,分別在TCVC例 鍵盤輸入兩個(gè)整數(shù),找出其中的大數(shù)#includeintmax(intx,int {int return //z的值(zint型,與函數(shù)類型一致}int{int return0;}調(diào)用了max()函數(shù)。max()函數(shù)的函數(shù)頭是“intmax(intx,inty)”,最前面的“int”,表max()函數(shù)參數(shù)類型,表示:想要讓max()函數(shù)工作,必須首先給它兩個(gè)整數(shù)。本例中主函數(shù)的功能是:從鍵盤得到兩個(gè)整數(shù),然后調(diào)用max()函數(shù)并把兩個(gè)最后輸出m的值。(projct本例需建立兩個(gè)源文件:main.cpp存主函數(shù),max.cppmax()2-2-1C程序的構(gòu)成的工作。這樣設(shè)計(jì)的目的是便于和管理,增加程序的可讀性。intmax(intx,int{}int{}intmin(intx,int{} 注意:C語(yǔ)言規(guī)定,所有的數(shù)據(jù)和函數(shù),都必須在第一條執(zhí)行語(yǔ)句之前。C99標(biāo)準(zhǔn)對(duì)此intmain(){//數(shù)據(jù)和函數(shù)return0;
(函數(shù)參數(shù)及類型{//數(shù)據(jù)和函數(shù)}}inta,b,max;a=1 getchar()和gets(),輸出數(shù)據(jù)時(shí)用printf()、putchar()和puts()。C編譯器及操作簡(jiǎn)介TC和VC是使用人數(shù)最多的,故本節(jié)介紹TCVC。不到出了問(wèn)題也容易解決。VC過(guò)于龐大,容易出現(xiàn)各種問(wèn)題,初學(xué)者解決不易。TCTurboC2.0C++C。兩者之間的另一個(gè)區(qū)別是:TC3.0支持鼠標(biāo)(可能需要裝驅(qū)動(dòng))而TC2.0不支持。TC2.0TC3.0TC2.0TC一般都需要在后重新設(shè)置一下TC的Directories選項(xiàng)。 結(jié)構(gòu)如圖2-2所2.4.1.2拉菜單Options中選擇Directories,再選擇其下的IncludeDirectories,然后將文件包含的默認(rèn) 為G:\TC\include,以便與圖2-2
2-2TC TC在“資源管理器”或“我的電腦”中雙擊G:\TC 些windows有可能設(shè)置成了不顯示.exe,只顯示TC),可以打開(kāi)TC。鍵入命令 \TC并回車(進(jìn)入到 中TC.exe2-3TC2-3TCTCAlt+FFileNew建立新的源文件或者說(shuō)明:FILE菜單中下的SaveWriteto都可用來(lái)存盤,Writeto的作用是用另外一個(gè)名字存盤,相當(dāng)于另存為(Saveas)。種情況,通常都要用Writeto重新命名源文件,然后再編譯、連接、運(yùn)行。Run(Ctrl+F9)這個(gè)命令是把編譯、連接和運(yùn)行都合并到一起了,是“合注意:C語(yǔ)言中的一個(gè)語(yǔ)句可以寫成幾行。當(dāng)編譯發(fā)現(xiàn)語(yǔ)法錯(cuò)誤時(shí),光條將停在第一個(gè)錯(cuò)誤Alt+F5。查看結(jié)果之后,按任意鍵可以返回源程序編exe設(shè)源程序是abc.c,則編譯、連接后生成的可執(zhí)行文件是abc.exe???。若提示符不是G:\TC>,則需要鍵入:G:\TC\abc并回車。TCStepover)使程序單步執(zhí)行,兩者的區(qū)別見(jiàn)下面的說(shuō)明說(shuō)明:F7和F8的區(qū)別是,當(dāng)遇到函數(shù)調(diào)用時(shí),F(xiàn)7將進(jìn)入被調(diào)函數(shù)并且單步執(zhí)行被調(diào)函數(shù)(可擇其中的Addwatch選項(xiàng)(快捷鍵Ctr+F7x的值,則xa[3]的a[3];要查看整個(gè)數(shù)組的值2-4是單步運(yùn)2-4行的示例,其中添加了三個(gè)觀察量(顯示在屏幕下部的Watch欄中。Ctr+F(breakpont提示:取消斷點(diǎn)的方法是將光標(biāo)置于斷點(diǎn)所在行,然后按組合鍵Ctrl+F8 nonme.c拉下菜單Project,選擇其Projectname,輸入剛才建立的工選擇Clearproject,如果不這樣,后面再編寫別的程序時(shí),前面工程內(nèi)的文件會(huì)影響后面的程序2-1常用的TurboC作用作用單步運(yùn)行(進(jìn)入被調(diào)函數(shù)刪除一行(光標(biāo)所在行單步運(yùn)行(不進(jìn)入被調(diào)函數(shù)VC6.0C/C++編譯器之一,可視化圖形界面,而且,相對(duì)于TC2.0來(lái)說(shuō),它有支持鼠標(biāo)、可剪切、、粘貼等優(yōu)點(diǎn),因此頗受C程序員的喜中的也許只是VC方便的編輯功能。運(yùn)行。不同的是,在VC中要編譯一個(gè)源程序必須先建立一個(gè)工程。從VC的菜單中選擇“文,如圖2-5所示:
2-52-6圖2-7源文件的創(chuàng) 圖2-8源文件創(chuàng)建后的窗(本例中鍵入的是main),在“位置”框中指定源文件的存放路徑,同時(shí)必須選中“添加到工程”復(fù)選框,然后單擊“確定”。VC主窗口變成圖2-8所示。欄欄拉下菜單“組建,選擇其中的“組建,或者鼠標(biāo)單擊中的按鈕,都將生成exe文件,其功能相當(dāng)于“編譯+連接”。,StepIntoRuntoCursor,前者是單步執(zhí)行程序,相當(dāng)于TC中的F7,碰到函數(shù)調(diào)用會(huì)進(jìn)入被調(diào)函數(shù)單步運(yùn)行,后者執(zhí)行其中按F10(StepOver)相當(dāng)于在TC中按F8。注意:遇 scanf()、printf()調(diào)用時(shí),用F10,不要用F11個(gè)調(diào)試,如圖2-9所示
StepOver、StepOut、RuntoCursor四種操作。的可以設(shè)置斷點(diǎn)以便調(diào)試時(shí)讓程序自動(dòng)停留在某行。其方法是單擊中的要查看變量的值不需要像TC那樣添加觀察量。在調(diào)試中(Variables)按下的狀態(tài)下,VC窗口的下方會(huì)出現(xiàn)一個(gè)表格,
2-10按下QuickWatch按鈕,在隨后彈出的框中添加要觀察的表達(dá)式,然后圖2-11(右側(cè))所示。2-11作用作用單步運(yùn)行(不進(jìn)入被調(diào)函數(shù)單步運(yùn)行(進(jìn)入被調(diào)函數(shù)從被調(diào)函數(shù)跳出(返回一.
習(xí)題C語(yǔ)言支持的注釋方式有幾種?TCVC退出TurboC后能否運(yùn)行?如何運(yùn)行?TurboCVC6.0二.判斷題<3C編程基礎(chǔ)知本章內(nèi)常量和變量都是3.14。類似這樣的不可能發(fā)生變化的數(shù)據(jù)叫常量。C語(yǔ)言中的常量并非僅限于數(shù)值型的“常數(shù)”,還包括字符、字符串、符號(hào)常量、常變量等。本書在3.2將直接影響著能否學(xué)好C語(yǔ)言。1+2+3+…+100的值,在求解過(guò)程中,有兩個(gè)數(shù)據(jù)必須記住:一是已經(jīng)求得的和部分?jǐn)?shù)據(jù)的空間便是變量。即:變量是內(nèi)存中的一段區(qū)域。至于為什么叫變量,是因?yàn)檫@一段空間所存的數(shù)據(jù)可以改變。比如下面的代碼:short 執(zhí)行“a=3;”后,其值變?yōu)?。其變化過(guò)程如圖3-1所示。低地執(zhí)行 執(zhí)行 圖3-1變量的變化過(guò)變,所以把這兩個(gè)字節(jié)稱作變量a。說(shuō)明:幾乎所有微機(jī)的CPU在存數(shù)據(jù)時(shí)都采用小端模式,即:先存低字節(jié),再存高字節(jié)。的數(shù)據(jù)都要用與它同類型的變量來(lái),故變量的類型也分很多種。VisualC++6.0TurboC2.010~(28-10~ASCII2-215~(215-24-231~(231-24-231~(231-4-231~(231-unsigned20~(216-20~unsigned40~(232-20~unsigned40~(232-40~(232-4±3.4×10384±3.4×10388±1.7×103088±1.7×10308ASCII碼是AmericanStandardCodeforInformationInterchange(標(biāo)準(zhǔn)信息交換碼)的縮寫,是為了在計(jì)算機(jī)中用二進(jìn)制字符而制定的一種編碼。本書附錄D中列有常用字符及其ASCII碼值。unsigned是無(wú)符號(hào)的意思。C語(yǔ)言中有些數(shù)據(jù)不可能是負(fù)數(shù),沒(méi)有必要用最表示正負(fù),故unsigned類型的數(shù)據(jù),其最不再表示“-”號(hào),而是跟后面的位一樣代表大小。float和double型變量的方式遵循IEEE754標(biāo)準(zhǔn),詳見(jiàn)本書3.2.2有些編譯器還支持longlong、longdouble除了上面給出的類型,C語(yǔ)言中還有一種指針類型的變量,這種變量用來(lái)charc;int float char int*p1,*p2;//p1p2int型變量的地址floatx,*p3,y,*p4;//x、y和兩個(gè)指針變量p3、p4道該給變量分配多少字節(jié),才能知道變量的值用什么方式。如:若是字符變量變量定義的位置應(yīng)該在同級(jí)別的執(zhí)行語(yǔ)句之前(C99取消了這條規(guī)定int{int float {int }}變量和Name是兩個(gè)不同的標(biāo)識(shí)符。int、float、for、if、return等。C語(yǔ)言有32個(gè)關(guān)鍵字,見(jiàn)附錄C。是不超過(guò)31個(gè)字符。注意:C語(yǔ)言中,變量名不能與函數(shù)名相同。比如,已經(jīng)有函數(shù)max(),則變量名便不能用max,
2a5
3-2是5,變量的地址是1027。intmain(){int);return}試一試:把代碼中的“=5”去掉,運(yùn)行一遍程序,看aint 達(dá)式的值計(jì)算出來(lái)然后到左邊變量的內(nèi)存空間中。賦值后a的值是10。int intintint注意:變量初值相同時(shí),不可以寫成:int基本數(shù)據(jù)類型int unsignedshortd=32768;longe=65536;e 3-3,32768。,65536inta=76;short //%o表示用八進(jìn)制輸出整數(shù) printf(“%ld,%Lo,%lx\n”,b,b,b);//加上L或l表示輸出長(zhǎng)整數(shù)printf(“%hd,%ho,%hx\n”,c,c,c);//加上h表示輸出短整數(shù)看看,并解釋原因。在TC中輸出整數(shù)時(shí),多加了L或l,又會(huì)怎樣?解釋一下原因。unsignedinta=32768;longb=50000; shorta=-unsignedshortb=65535;);
圖3-4-1和65535的狀指數(shù)形式相當(dāng)于數(shù)學(xué)中的科學(xué)。C語(yǔ)言用“1.25E-2”這種形式代表數(shù)學(xué)單精度和雙精度型的數(shù)據(jù),都是以浮點(diǎn)數(shù)的方式的,遵循IEEE(InstituteofElectricalandElectronicsEngineers)754float型數(shù)據(jù)的方式,double型數(shù)據(jù)的與float型類似。 型的任何數(shù)據(jù),在前都必須先表示為下面的格式(符號(hào))*其中:M是一個(gè)小數(shù),n是指數(shù)。M須滿足條件:1.0<=M<2.0。如:30.0,要先表示為: +1.875*24-0.3925,要先表示為 -1.57*2-三部分的位置及所占空間大小如表3-2所示。表3-2浮點(diǎn)數(shù)空間的分符號(hào)位(0小數(shù)部分(M-1[31位8[30位~23位23[22位~00位0表示正,1指數(shù)部分:指數(shù)用8位,本來(lái)也有正負(fù)的,但是考慮到前面已經(jīng)有一后再,例如:若實(shí)際指數(shù)n為-2,則為125,若實(shí)際指數(shù)n為4,則為131。這樣規(guī)定的目的是,指數(shù)加上127后不會(huì)是負(fù)數(shù),故不必設(shè)指數(shù)的符號(hào)位。了M-1,例如:對(duì)1.875,只存0.875。這樣做可以0(表示正指數(shù)部分:(其值131,表示實(shí)際指數(shù)是4小數(shù)部分 00000(0.875,表示實(shí)際小數(shù)是1.875故30.0的實(shí)際狀態(tài)如圖3-5所示圖3-5浮點(diǎn)數(shù)30.0的狀……要想這個(gè)值,需要無(wú)限多的內(nèi)存單元,而實(shí)際上純小數(shù)部分的空間只有23位,后面部分只能截掉或進(jìn)位(0舍1入,所以實(shí)際的數(shù)據(jù)是 的小數(shù)是 3125,比1.2稍大原因是:x是float型變量,的是0.2的近似值,有7位有效數(shù)字,而常intmain(){floatx=-789.124;return0;}說(shuō)明:上面介紹的是float型數(shù)據(jù)的方式,double型數(shù)據(jù)的方式與此類似,只不過(guò)指數(shù)部分和小數(shù)部分的位數(shù),分別是11位、52位。floatx= printf(“%e,%e,%e\n”,x,y,z);//%e:指數(shù)形式輸出printf(“%E%E%E\n”,x,y,z);//%EE大寫用%f6位小數(shù)(6位小數(shù)用%e(%E)10的有效數(shù)字。而小數(shù)點(diǎn)后面有幾位小數(shù)以及e(E)后面的指數(shù)部分占幾位,取決于編譯器。C程序中經(jīng)常要處理的數(shù)據(jù)。C語(yǔ)錄D。intchar charc1=’a’,c2=’A’,c3 這樣,C語(yǔ)言中,單引號(hào)就被賦予了一個(gè)含義,即:它是定界符,用來(lái)表示一那么,C語(yǔ)言中若用到單引號(hào),怎么寫呢?顯然不能寫成’’’,因?yàn)檫@樣寫編譯器會(huì)把它們都認(rèn)作定界符。為了表示中間的單引號(hào)不是定界符,而是單引號(hào),C語(yǔ)char printf(“%c”,ch);//%c若不加反斜線代表字符n本身,加上反斜線后就變成了換行符。3-3常用的轉(zhuǎn)義字符及作用一個(gè)雙引號(hào)一條反斜線退格鍵回車鍵水平制表符如如,例外。多數(shù)計(jì)算機(jī)都是用“存字符的ASCII碼值”的方法來(lái)字符。過(guò)才256個(gè),所以C規(guī)定:字符用一個(gè)字節(jié)。設(shè)有如下代碼 char則c1和c2兩個(gè)變量在內(nèi)存中的狀態(tài)如圖3-6
圖3-6為字符也有大小,其ASCII碼值就是它的大小。charc1=‘A’,c2=65,c3=‘printf(“%c,%c,%c,%c\n”,c1,c2,c3,c4//%c表示要輸出一個(gè)字符printf(“%d,%d,%d,%d\n”,c1,c2,c3,c4);//字符可當(dāng)做整數(shù)輸出printf(“%d,%d,%d\n”,c1+c2,c1+1,’A’+1);//字符可參與運(yùn)算printf()函數(shù)(%c或%d格式。除printf()putchar()函數(shù),putchar()函數(shù)的使用方法將在第四章中C規(guī)定,字符串必須用一對(duì)雙引號(hào)括起來(lái),如:“abc”,“12”,,“A”。中找空間。
圖3-7,(‘\0’狀態(tài)如圖3-7所示。注意:空字符和空格并不是同一個(gè)字符,空字符的ASCII碼是0,空格的ASCII碼是32,它們的輸出字符串時(shí),printf()函數(shù)中要使用%s將在10.3節(jié)中介紹。符號(hào)常量和常變量#definePI其中的PI,叫做符號(hào)常量,它代表后面的3.141593#defineNUM用NUM代表人數(shù)60。假設(shè)程序中很多地方都用到這個(gè)NUM,當(dāng)人數(shù)發(fā)生變化常量,程序中都寫成了60,當(dāng)人數(shù)減少時(shí),需要修改多處源代碼。#define constint constfloat constfloatx//錯(cuò)誤,常變量定義未賦初值constint 運(yùn)算符和表達(dá)式本小節(jié)講述C語(yǔ)言算術(shù)運(yùn)算的一些知識(shí)。算術(shù)運(yùn)算符有是2,20%7的值是6。的結(jié)果是+27個(gè)算術(shù)運(yùn)算符中,+(正號(hào))、-(負(fù)號(hào))5個(gè)都是雙目運(yùn)算+(加號(hào))、-(減號(hào))的優(yōu)先級(jí)別最低(參看附錄根據(jù)優(yōu)先級(jí)可知,表達(dá)式-5*-2+2%3與((-5)*(-2))+(2%3)應(yīng)先算左邊的乘法,相當(dāng)于是(20*3)%720*(3%7),兩者結(jié)果不同。右結(jié)合考考你:既然+和*a+b*c要先算9/51,1/20,-5/3的結(jié)果是-1。結(jié)果為負(fù)時(shí),多數(shù)機(jī)器采用向零以是-2,但-1的絕對(duì)值更小,故取整后值為-1。試一試:已知華氏溫度到攝氏溫度的轉(zhuǎn)換是:c=5/9*(f-32)。下面程序段用來(lái)計(jì)算攝氏溫度,其中華氏溫度f(wàn)是由鍵盤輸入的,請(qǐng)寫出完整的程序并運(yùn)行之,看結(jié)果是否正確。若不正確,找intscanf(“%d”,&f);//提示:上面程序中,若想讓5/9的結(jié)果是實(shí)數(shù),應(yīng)該寫成:5./9(或5/9.),讓其中一個(gè)數(shù)變成實(shí)數(shù),其結(jié)果就是實(shí)數(shù)(帶“.”的數(shù),系統(tǒng)默認(rèn)是double型。變量,本書3.1節(jié)已作過(guò)一些介紹,這里再補(bǔ)充三點(diǎn):valueintconstint 3-4-說(shuō)明:C語(yǔ)言中,一個(gè)表達(dá)式最后執(zhí)行的是“什么”運(yùn)算,就把該表達(dá)式叫作“什么”表達(dá)式。式5>3的值是1(即“真”)等等。賦值表達(dá)式也有值。C語(yǔ)言規(guī)定:一個(gè)賦值表達(dá)式的值,等于賦值后左邊變量的值。如:若賦值表達(dá)式是a=3*2,則表達(dá)式的值就是賦值后a的值,即6。式的值),即5+6,得11,最后再把11存入變量b。還可以再?gòu)?fù)雜一點(diǎn):a=b=c=2a=(b=(c=2))考考你:上面a=b=c=2運(yùn)算時(shí),a、b、c三個(gè)變量哪個(gè)最先2?哪個(gè)最后得到?若賦值表達(dá)式?jīng)]右結(jié)合性,運(yùn)算優(yōu)先級(jí)與正負(fù)號(hào)相同,見(jiàn)附錄E。intintint 首先需要強(qiáng)調(diào)的是:++i和i++都是表達(dá)式,且兩個(gè)表達(dá)式的值都是i。只不過(guò),兩個(gè)i的值并不相同。取i的值(即2)作為表達(dá)式(++i)的值。因此,左側(cè)的m=++i;就相當(dāng)于是以下兩行代碼: //先給i加1 一句話:表達(dá)式++i的值是加1之后的i,而表達(dá)式i++的值是加1之前的ii++還是++ii1 //i++的值與分號(hào)構(gòu)成的語(yǔ)句,此后要給i --”的用法與“++(a+b)++;//a+ba+b+1;語(yǔ)法錯(cuò)誤:a+b不是左值 //相當(dāng)于寫成2=2- 語(yǔ)法錯(cuò)誤:2不是左值C語(yǔ)言中的表達(dá)式是有值的。逗號(hào)表達(dá)式的值等于逗號(hào)后面那個(gè)式子的值,即即6。但是,要想計(jì)算a*3,必須先執(zhí)行a=2??伎寄悖簃=1,2,3,4是逗號(hào)表達(dá)式還是賦值表達(dá)式?整個(gè)表達(dá)式的值是多少?表達(dá)式求解之后,mC語(yǔ)言中,有時(shí)候需要人為地把某種類型的數(shù)據(jù)轉(zhuǎn)為程序需要的類型,這時(shí)候inta,b;型轉(zhuǎn)換運(yùn)算符把表達(dá)式寫成:(float)(a-b)/(a+b)或(a-b)/(float)(a+b)。(類型名(表達(dá)式需要的是,在類型轉(zhuǎn)換前,系統(tǒng)要先求解表達(dá)式的值,然后將該值在運(yùn)算intm;數(shù)據(jù)的類型轉(zhuǎn)換C語(yǔ)言中,只有類型相同的數(shù)據(jù)才可以直接進(jìn)行相互運(yùn)算。不同類型的數(shù)據(jù)相參與該運(yùn)算符運(yùn)算的操作數(shù)若有char、short型,則無(wú)條件轉(zhuǎn)為int型,若有float型,則無(wú)條件轉(zhuǎn)為double型(可以提高精度,不管它們類型是否相同。為double型。3-8chara=65,b=66;floatx=2.0,y=2.6;longm=3;
圖3-8
mmdouble型,然后進(jìn)行乘法,其結(jié)果6.0(近似值)是double型。是int型。(一.
習(xí)題各用什么方式數(shù)據(jù)?unsigned類型呢?二.填空題程序中,整數(shù)100有3種表示方法,分別 量c,程序中可以寫成 “ABCD”(注:CD間有一空格)后,占用的字節(jié)數(shù)是 符號(hào)常量和常變量中,不占內(nèi)存空間的 表達(dá)式a=(a=1,b=2,c=3)是一 表達(dá)式,其值 表達(dá)式,其值 ,執(zhí)行后a的值 設(shè)i、c、f三個(gè)變量分別是int、char、float型,則表達(dá)式i+f、i*c、c+f的類 執(zhí)行代碼printf(“%d,%d,%d\n”,5/2,-2*4,11%3);的結(jié)果是 行printf(“%f,%f,%f\n”,5/2,5./2,-2*4);的結(jié)果是 下面的程序段執(zhí)行后,m的值 設(shè)有數(shù)據(jù)定義:inta=10,b=9,c=8;c=(a-=(b=5));兩條語(yǔ)句后,a、b、c的值分別是 若a是int型變量,且值為6,則執(zhí)行a+=a-=a*a后,a的值 若有數(shù)據(jù)定義:intx=3,y=2;floata=2.5,b=3.5;則表達(dá)式(x+y)%2+(int)a/(int)b的值是。charc1=‘b’,c2=‘e’;printf(“%d,%c”,c2-c1,c2-‘a(chǎn)’+‘A’);的輸出結(jié)果 intu=010,v=0x10,w=10;printf(“%d,%d,%d\n”,u,v,w);的輸出結(jié)果 執(zhí)行intnum=7,sum=7;sum=num++,sum++,++num后,sum的值 若a是int型值為2則執(zhí)行a%=4-1后a的值 后,a的值 執(zhí)行inta=011,b=101;printf(“%x,%o”,++a,b++);的結(jié)果是 三.選擇題以下四個(gè)選項(xiàng)中,合法的C語(yǔ)言標(biāo)識(shí)符是 (A) (B) (C) (D) 下面四個(gè)選項(xiàng)中,全部都是合法整型常量的是 (A)160,-0xffff,011(B)-0xcdf,01A,0xe(C)-01,012,0668(D)-下面四個(gè)選項(xiàng)中,均是不合法浮點(diǎn)數(shù)的選項(xiàng)是 (A) (C)- (D)- (A)執(zhí)行后c的值是‘D’(B)c的值是 (C)c的值是‘t’(D)無(wú)法執(zhí)下面四個(gè)選項(xiàng)中,正確的符號(hào)常量定義是 (A)defineN (C)#defineN (D)#defineN下面四個(gè)選項(xiàng)中代碼正確的是 (A)constinta;a=1;(B)constinta=1;(C)intconsta=1;(D)constint參與運(yùn)算的對(duì)象必須是整數(shù)的運(yùn)算符是 (A) (C)%和 (D)intx=10,y=3;printf(“%d,%d\n”,x--,--y);的輸出結(jié)果是 (A) (D)正確定義三個(gè)變量并為它們賦初值5的是 (A)int (C)int 設(shè)有定義:charc= c是一個(gè)字符串變 (B)c占用6個(gè)字節(jié)的內(nèi) (D)語(yǔ)句錯(cuò)誤,通不過(guò)編數(shù)字0的ASCII碼是48,下面程序的執(zhí)行結(jié)果是 char(A) (D)下面選項(xiàng)中,屬于合法的字符常量的是 (A) (B) (C) (D) 整數(shù)和實(shí)數(shù)的都不是精確的整數(shù)的都是精確的,實(shí)數(shù)的都不是精確的整數(shù)的不都是精確的,實(shí)數(shù)的都不是精確的四.判斷題五.編程題本章內(nèi)賦值語(yǔ)句 賦值時(shí),賦值號(hào)右側(cè)表達(dá)式的結(jié)果要先計(jì)算出來(lái),該結(jié)果的方式和賦值號(hào)左側(cè)變量的方式可能相同,也可能不同。對(duì)于這兩種情況,賦值時(shí)的數(shù)據(jù)處理若變量和表達(dá)式結(jié)果長(zhǎng)度相同,則原樣在運(yùn)算器中處理成相應(yīng)格式的二進(jìn)制數(shù)據(jù)了)原樣到內(nèi)存變量中。如:inta;unsignedshortc=65535; ,而變量a在內(nèi)存中恰好也是存補(bǔ)碼,且也是4個(gè)字節(jié),所以就直接把這個(gè)補(bǔ)碼原樣照搬到a的4個(gè)字節(jié)中,如圖4-1所示。賦值后,a的值是100。圖4-1賦值的處理方式(原樣同樣,執(zhí)行“b=c;”時(shí),也是先把c的值65535表示成補(bǔ)碼 因b與c的方式相同,且長(zhǎng)度都是2個(gè)字節(jié),所以也是直接把這個(gè)補(bǔ)碼寫入b中,b的值為-1。若變量比表達(dá)式結(jié)果“短”,則只截取低位部intc=-1;,而變量a只有故截取低位2個(gè)字節(jié)(160)存
變量4-2賦值的處理方式(截取儲(chǔ),兩個(gè)字節(jié)丟棄(溢出如圖4-2所示charc;shorta=321; 若變量比表達(dá)式結(jié)果“長(zhǎng)”,則進(jìn)行符號(hào)擴(kuò)longchar //符號(hào)擴(kuò)展,c的符號(hào)位是0,所以用0填充a的兩個(gè)字節(jié) //符號(hào)擴(kuò)展,d的符號(hào)位是1,所以用1填充b的兩個(gè)字節(jié) //是否符號(hào)擴(kuò)展?“長(zhǎng)”變量的兩個(gè)字節(jié),則用“短”數(shù)據(jù)的符號(hào)位(即最)填滿。這種用符號(hào)位把所缺字節(jié)填滿的操作,叫符號(hào)擴(kuò)展。圖4-3是符號(hào)擴(kuò)展的示意圖。變量 變量變量 變量4-3賦值的處理方式(符號(hào)擴(kuò)展ASCII碼值不超127,則還是用符號(hào)擴(kuò)展,本例便是如此;若字符ASCII1270還是1擴(kuò)展,取決于機(jī)器。但后來(lái)覺(jué)得不夠用,就又?jǐn)U充了128個(gè)(128~255),擴(kuò)充字符編碼的最都是1。擴(kuò)展,而是需要轉(zhuǎn)換方式。例如:inta=1;x=a;//兩種數(shù)據(jù)方式不同,需轉(zhuǎn)換方執(zhí)行x=a時(shí),由于x和a方式不同,因此不能直接照搬a的4個(gè)字節(jié),不然賦值后x的值就不是1.0。實(shí)際處理過(guò)程是:先a中取1,然后1轉(zhuǎn)化為浮點(diǎn)數(shù)的方式后再存入x。若將x=a改為a=x,則執(zhí)行過(guò)程是:先對(duì)3.14取整,然后再把整數(shù)3化成補(bǔ)碼存入a。(1+2-23)*2-127,你知道這個(gè)答案怎么來(lái)的想:若代碼中x的初值寫成1,a和x互相賦值時(shí)是否還需要轉(zhuǎn)換方式輸入輸出函數(shù)C的輸入輸出是由函數(shù)完成的,C在標(biāo)準(zhǔn)輸入輸出頭文件stdio.h中定義了若干CPU的速度是非常快的,而外部設(shè)備(鍵盤、磁盤等)的速度則慢得CPUCPU的效率中“緩沖”一下,然后再?gòu)木彌_區(qū)傳送到外設(shè)(顯示器、等。C語(yǔ)言基本上都采用緩沖文件系統(tǒng),在緩沖文件系統(tǒng)中,當(dāng)一個(gè)程序開(kāi)ABC并回車,則送入緩沖區(qū)的是:‘A’、‘B’、‘C’、‘\n’getchar()的原型是:intcharc; 想:getchar()的返回值不存行不行?即:如果直接寫成int{}不改變程序結(jié)構(gòu),在getchar()之后能不能把getchar()返回的大寫字母轉(zhuǎn)換成小寫字母?charc1=getchar();//c2=getchar();//putchar()的原型是:intchar //輸出C //輸出c putchar(getchar());//輸出getchar()返回的字符printf()的一些用法,對(duì)printf()更熟悉一些,故這里先講解printf()。printf()的原型是:intprintf(char若字符串中有“%”開(kāi)頭的組合,如%d、%f等,則字符串后面還應(yīng)該寫 o 除%d、%f這樣的組合外,字符串中的其他字符都要原樣輸出。其他字符intsum=100;printf(“Sumis:%d,Average“%d、f、c、s等。printf()中可用的格式字符如表4-1所列。用十進(jìn)制輸出intprintf(“o用八進(jìn)制輸出intprintf(“用十六進(jìn)制輸出整intprintf(“u輸出無(wú)符號(hào)整數(shù)(十進(jìn)制unsignedshorta=32768;printf(“%hu,%hd”,a,a);c輸出一個(gè)字inta=65;As輸出字符charprintf(“f輸出浮點(diǎn)數(shù)(默認(rèn)輸出6位小數(shù)floata=123.45;printf(“用標(biāo)準(zhǔn)格式輸出指數(shù)形式的浮點(diǎn)printf(“g一種),不輸出0printf(“%輸出字符printf(“%4-2printf()lhmintfloatx=3.14;printf(“intprintf(“nfloatcharprintf(“-inta=12;floatx=3.14;charprintf(“%-3d,%-5.1f,%-*intprintf(“ -0m.nlh格式字符int()scanf的原型是:intscanfchar一般使用格式:scanf(“格式控制字符串”,地址表列指定格式進(jìn)行轉(zhuǎn)換后,于指定位置的變量中。注意:從鍵盤緩沖區(qū)取回的是一個(gè)個(gè)字符,然后由scanf()轉(zhuǎn)化為相應(yīng)類型的數(shù)據(jù)后再設(shè)a、b變量的地址是1236和2518,則上面的代碼相當(dāng)于:內(nèi)存1236和2518處,即:存給變量a、b。上程序中可以用&a、&b得到這兩個(gè)地址,這就是為什么代碼中寫成&a、&b的原因。使用“-“0“n: lh格式字符并非用本書第16章所講的讀寫文件的方法。關(guān)于輸入輸出重定向的知識(shí),請(qǐng)參閱附錄B。scanf()輸入數(shù)據(jù)時(shí),輸入格式至關(guān)重要。很多情況下程序本身沒(méi)有任何問(wèn)scanf()輸入“一個(gè)”數(shù)據(jù)時(shí),直接輸入數(shù)據(jù)并回車即可,不需要分隔符。個(gè)數(shù)中間必須要用分隔符隔開(kāi),分隔符可以是空格、Tab鍵(即t、換行符(即‘\n’①12<空格②12<Tab>34<Enter③12<Enter>34<Enter④12<空格><TabEnter<Tab><空格>34Enter1)按規(guī)定的寬度字符序列然后組合成所需數(shù)據(jù)。執(zhí)行后,a為12,b為34。2)數(shù)據(jù)時(shí),若遇到字符則認(rèn)為該數(shù)據(jù)結(jié)束,如整數(shù)中不可能含有A。scanf(“%d%c”,&a,&b);//輸入格式:12A12A當(dāng)成一個(gè)整數(shù)scanf(“%c%c”,&a,&b);//輸入格式:ABAB當(dāng)成一個(gè)字符scanf(“%c%d”,&a,&b);//輸入格式:A12A,剩下就是整數(shù)試一試:對(duì)于下面的代碼,鍵盤輸入ABchar 試一試:scanf(“%d,%d”,&a,&b);scanf(“%d%d”,&a,&b);輸scanf(“%d //其中的空格也可以寫成\t或123<空格><Tab>空格><Enter><空格>x<Enter>,則b的值是‘x’順序結(jié)構(gòu)程序設(shè)計(jì)舉例4.1鍵盤輸入一個(gè)正整數(shù),求它的平方根,結(jié)果保留兩位小數(shù)。附錄F)求出平方根,最后輸出結(jié)果。輸入整數(shù)用scanf(),不能用getchar()#include //因用到scanf()和#include int{intn;printf(“Pleaseinputx:”);//x //sqrt()是一個(gè)數(shù)學(xué)函數(shù),用來(lái)求平return}4.2分兩次從鍵盤輸入兩個(gè)數(shù)字字符分別作為十位和個(gè)位上的數(shù)字,組成一和c2組合成一個(gè)整數(shù),然后輸出。輸入字符getchar(),也可scan
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《行政監(jiān)督學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州財(cái)經(jīng)大學(xué)《生物制藥綜合實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽(yáng)學(xué)院《裝飾材料構(gòu)造與人體工程學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025江西建筑安全員C證考試(專職安全員)題庫(kù)附答案
- 2025青海建筑安全員B證考試題庫(kù)及答案
- 2025年四川建筑安全員C證考試題庫(kù)
- 貴陽(yáng)信息科技學(xué)院《機(jī)械原理(實(shí)驗(yàn))》2023-2024學(xué)年第一學(xué)期期末試卷
- 硅湖職業(yè)技術(shù)學(xué)院《工業(yè)發(fā)酵分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025貴州省建筑安全員《A證》考試題庫(kù)
- 廣州新華學(xué)院《實(shí)驗(yàn)設(shè)計(jì)與數(shù)據(jù)處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 《中國(guó)近現(xiàn)代史綱要(2023版)》課后習(xí)題答案合集匯編
- 家庭管理量表(FaMM)
- 腰椎間盤突出癥的射頻治療
- 2023屆河南省洛陽(yáng)市平頂山市許昌市濟(jì)源市高三一模語(yǔ)文試題
- 【超星爾雅學(xué)習(xí)通】《老子》《論語(yǔ)》今讀網(wǎng)課章節(jié)答案
- 配電箱采購(gòu)技術(shù)要求
- 上海外國(guó)語(yǔ)大學(xué)附屬外國(guó)語(yǔ)學(xué)校2020-2021七年級(jí)下學(xué)期期中英語(yǔ)試卷+答案
- 綠色施工措施措施 四節(jié)一環(huán)保
- TCSES 71-2022 二氧化碳地質(zhì)利用與封存項(xiàng)目泄漏風(fēng)險(xiǎn)評(píng)價(jià)規(guī)范
- GB/T 8561-2001專業(yè)技術(shù)職務(wù)代碼
- GB/T 7661-2009光學(xué)零件氣泡度
評(píng)論
0/150
提交評(píng)論