



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
TOC\o"1-5"\h\z耳,〇早もi/予攻+論 1\o"CurrentDocument"0.1程序與程序設(shè)計(jì)語言 1\o"CurrentDocument"0.1.I程序 1\o"CurrentDocument"0.1.2程序設(shè)計(jì)語言 1\o"CurrentDocument"0.2C語言的歷史和發(fā)展 3\o"CurrentDocument"0.3ー個(gè)簡單程序的誕生 3\o"CurrentDocument"0.3.1簡單的C語言程序概貌 4\o"CurrentDocument"0.3.2第一個(gè)程序的誕生 5\o"CurrentDocument"本章小結(jié) 7\o"CurrentDocument"復(fù)習(xí)題 7第1早C程け設(shè)計(jì)基礎(chǔ)知識(shí) 8\o"CurrentDocument"變量 8\o"CurrentDocument"有關(guān)內(nèi)存的基礎(chǔ)概念 8\o"CurrentDocument"變量的引入 8\o"CurrentDocument"常量 12\o"CurrentDocument"字面常量 12\o"CurrentDocument"符號(hào)常里 14\o"CurrentDocument"const常量 15\o"CurrentDocument"算術(shù)運(yùn)算符與算術(shù)表達(dá)式 15\o"CurrentDocument"運(yùn)算符概述 15\o"CurrentDocument"算術(shù)運(yùn)算符 16\o"CurrentDocument"算術(shù)表達(dá)式 16\o"CurrentDocument"賦值運(yùn)算符與賦值表達(dá)式 18\o"CurrentDocument"簡單賦值運(yùn)算符 18\o"CurrentDocument"復(fù)合算術(shù)賦值運(yùn)算符 19\o"CurrentDocument"賦值運(yùn)算時(shí)的數(shù)據(jù)類型轉(zhuǎn)換 19\o"CurrentDocument"自加、自減、逗號(hào)運(yùn)算符 20\o"CurrentDocument"自加和自減運(yùn)算符:++、- 20\o"CurrentDocument"逗號(hào)運(yùn)算符 22\o"CurrentDocument"位運(yùn)算 23\o"CurrentDocument"位運(yùn)算的基本規(guī)律 23\o"CurrentDocument"位運(yùn)算符 23\o"CurrentDocument"本章小結(jié) 24\o"CurrentDocument"復(fù)習(xí)題 25\o"CurrentDocument"第2章簡單C語句 26\o"CurrentDocument"C語句概述 26\o"CurrentDocument"表達(dá)式語句 26\o"CurrentDocument"控制語句 26\o"CurrentDocument"函數(shù)調(diào)用語句 27\o"CurrentDocument"復(fù)合語句 27\o"CurrentDocument"空語句 27\o"CurrentDocument"輸入輸出的概念 28\o"CurrentDocument"基本輸入輸出函數(shù) 28\o"CurrentDocument"格式化輸出庫函數(shù):printf 28\o"CurrentDocument"格式輸入庫函數(shù):scanf 30\o"CurrentDocument"字符輸入輸出函數(shù) 32\o"CurrentDocument"本章小結(jié) 33\o"CurrentDocument"復(fù)習(xí)題 33\o"CurrentDocument"第3章分支結(jié)構(gòu)程序設(shè)計(jì) 34\o"CurrentDocument"算法與基本程序結(jié)構(gòu) 34\o"CurrentDocument"算法簡介 34\o"CurrentDocument"算法的表示 35基本程ノ"]'?纟口構(gòu) 37\o"CurrentDocument"關(guān)系運(yùn)算和邏輯運(yùn)算 38\o"CurrentDocument"關(guān)系這算 38\o"CurrentDocument"邏輯運(yùn)算 39if語句 40簡單if語句 40\o"CurrentDocument"if~else語句 42if語句的嵌套 43\o"CurrentDocument"if語句使用注意事項(xiàng) 45\o"CurrentDocument"switch語句 47\o"CurrentDocument"條件運(yùn)算符 49\o"CurrentDocument"結(jié) 50\o"CurrentDocument"50\o"CurrentDocument"第4章循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 51\o"CurrentDocument"循環(huán)的引入 51\o"CurrentDocument"for循環(huán) 51\o"CurrentDocument"while循環(huán) 54\o"CurrentDocument"do~while循環(huán) 55\o"CurrentDocument"循環(huán)的比較 57\o"CurrentDocument"for語句和while語句 57\o"CurrentDocument"while語句和do~while語句 60\o"CurrentDocument"數(shù)值輸入中的問題 61\o"CurrentDocument"循環(huán)嵌套 63\o"CurrentDocument"三重循環(huán)求解 64\o"CurrentDocument"縮小窮舉法的搜索范圍 65\o"CurrentDocument"兩重循環(huán)解決問題 66\o"CurrentDocument"極限情況:ー層循環(huán)的求解 67\o"CurrentDocument"break和continue語句 69\o"CurrentDocument"break語句 69\o"CurrentDocument"continue語句 70\o"CurrentDocument"應(yīng)用舉例 71\o"CurrentDocument"結(jié) 75\o"CurrentDocument"75\o"CurrentDocument"第5章函數(shù) 77\o"CurrentDocument"函數(shù)的基本概念 77函數(shù)的聲明和定義 78函數(shù)聲明和函數(shù)原型 78\o"CurrentDocument"函數(shù)定義 79\o"CurrentDocument"函數(shù)的參數(shù) 81\o"CurrentDocument"函數(shù)的返回值與函數(shù)類型 85\o"CurrentDocument"函數(shù)的調(diào)用 87\o"CurrentDocument"函數(shù)調(diào)用的方式 89\o"CurrentDocument"函數(shù)調(diào)用過程機(jī)制 90\o"CurrentDocument"函數(shù)的嵌套調(diào)用 92\o"CurrentDocument"函數(shù)的遞歸 95\o"CurrentDocument"遞歸的基本原理 96\o"CurrentDocument"尾遞歸 98\o"CurrentDocument"遞歸與反向計(jì)算 100\o"CurrentDocument"漢諾塔問題:雙重遞歸 101\o"CurrentDocument"遞歸的優(yōu)缺點(diǎn) 104\o"CurrentDocument"頭文件的使用 104\o"CurrentDocument"逐步求精 107\o"CurrentDocument"本章小結(jié) 116\o"CurrentDocument"復(fù)習(xí)題 117\o"CurrentDocument"第6章數(shù)組 118\o"CurrentDocument"ー維數(shù)組 118\o"CurrentDocument"ー維數(shù)組的聲明 118\o"CurrentDocument"訪問數(shù)組元素 120\o"CurrentDocument"數(shù)組的初始化 122\o"CurrentDocument"ー維數(shù)組應(yīng)用舉例 123\o"CurrentDocument"二維數(shù)組 125\o"CurrentDocument"二維數(shù)組的聲明 125\o"CurrentDocument"訪問ニ維數(shù)組元素 126\o"CurrentDocument"二維數(shù)組的初始化 126\o"CurrentDocument"二維數(shù)組應(yīng)用舉例 127\o"CurrentDocument"數(shù)組作為函數(shù)參數(shù) 129\o"CurrentDocument"數(shù)組元素用作函數(shù)的實(shí)參 129\o"CurrentDocument"數(shù)組用作函數(shù)的參數(shù) 130\o"CurrentDocument"本章小結(jié) 134\o"CurrentDocument"復(fù)習(xí)題 135\o"CurrentDocument"第7章指針 137\o"CurrentDocument"地址作為數(shù)據(jù)值 137\o"CurrentDocument"指針變量 138\o"CurrentDocument"聲明指針變量 138\o"CurrentDocument"有關(guān)指針的運(yùn)算符 139\o"CurrentDocument"指針操作 140\o"CurrentDocument"指針作為函數(shù)參數(shù) 143\o"CurrentDocument"數(shù)組與指針 145\o"CurrentDocument"通過指針操作數(shù)組元素 145\o"CurrentDocument"函數(shù)、數(shù)組與指針 149\o"CurrentDocument"保護(hù)數(shù)組內(nèi)容 151\o"CurrentDocument"多維數(shù)組與指針 156\o"CurrentDocument"指向數(shù)組的指針 159\o"CurrentDocument"函數(shù)指針 163\o"CurrentDocument"通過函數(shù)指針調(diào)用函數(shù) 163\o"CurrentDocument"函數(shù)指針用作函數(shù)參數(shù) 165\o"CurrentDocument"動(dòng)態(tài)分配內(nèi)存 168\o"CurrentDocument"NULL指針和void?類型 168\o"CurrentDocument"動(dòng)態(tài)數(shù)組 169\o"CurrentDocument"釋放內(nèi)存 170\o"CurrentDocument"本章小結(jié) 170\o"CurrentDocument"復(fù)習(xí)題 171\o"CurrentDocument"第8章字符數(shù)據(jù)處理 172\o"CurrentDocument"字符型常量和字符串 172\o"CurrentDocument"轉(zhuǎn)義字符 172\o"CurrentDocument"字符串 173\o"CurrentDocument"字符型變量 174\o"CurrentDocument"字符數(shù)組 175\o"CurrentDocument"字符數(shù)組的初始化 175\o"CurrentDocument"字符串和字符串結(jié)束標(biāo)志 176字符串和指針 179字符串的表示形式 179\o"CurrentDocument"字符串指針作函數(shù)參數(shù) 180\o"CurrentDocument"字符處理函數(shù) 181\o"CurrentDocument"字符串應(yīng)用實(shí)例 184\o"CurrentDocument"復(fù)習(xí)題 189\o"CurrentDocument"第9章結(jié)構(gòu) 190\o"CurrentDocument"結(jié)構(gòu)類型說明 190\o"CurrentDocument"使用結(jié)構(gòu) 191\o"CurrentDocument"結(jié)構(gòu)類型變量 191\o"CurrentDocument"結(jié)構(gòu)變量的引用 193\o"CurrentDocument"結(jié)構(gòu)變量賦初值 193\o"CurrentDocument"結(jié)構(gòu)和指針 194\o"CurrentDocument"結(jié)構(gòu)數(shù)組 194\o"CurrentDocument"指向結(jié)構(gòu)的指針 198\o"CurrentDocument"結(jié)構(gòu)數(shù)據(jù)在函數(shù)間傳遞 203\o"CurrentDocument"ラロ構(gòu)和鏈表 204\o"CurrentDocument"單鏈表 204\o"CurrentDocument"單鏈表結(jié)點(diǎn)的刪除 207\o"CurrentDocument"單鏈表的插入 208\o"CurrentDocument"環(huán)鏈表? 210\o"CurrentDocument"復(fù)習(xí)題 212\o"CurrentDocument"第10章文件 214\o"CurrentDocument"文件的打開與關(guān)閉 214\o"CurrentDocument"文件類型指針 214\o"CurrentDocument"文件的打開 215\o"CurrentDocument"文件的關(guān)閉 216\o"CurrentDocument"文件的讀寫 217\o"CurrentDocument"讀寫字符 217\o"CurrentDocument"讀寫字符串 219\o"CurrentDocument"格式化的讀寫 221\o"CurrentDocument"成塊讀寫(二進(jìn)制讀寫) 222\o"CurrentDocument"隨機(jī)讀寫文件 225\o"CurrentDocument"本章小結(jié) 227\o"CurrentDocument"復(fù)習(xí)題 228\o"CurrentDocument"第II章TurboC圖形 229\o"CurrentDocument"圖形模式的初始化及相關(guān)函數(shù) 229\o"CurrentDocument"屏幕顏色設(shè)置和清屏 231\o"CurrentDocument"基本圖形繪制 233\o"CurrentDocument"畫點(diǎn)與位置坐標(biāo)函數(shù) 233\o"CurrentDocument"畫直線、圓、橢圓與多邊形函數(shù) 234\o"CurrentDocument"線條樣式設(shè)定 235\o"CurrentDocument"圖形填充 237\o"CurrentDocument"封閉區(qū)間填充函數(shù) 237\o"CurrentDocument"設(shè)定填充方式 237\o"CurrentDocument"圖形模式下的文本輸出 238\o"CurrentDocument"圖形示例 239\o"CurrentDocument"復(fù)習(xí)題 254\o"CurrentDocument"第12章存儲(chǔ)類型 255\o"CurrentDocument"作用域 255イ弋れ-;-卜An^^...........................................?...?...?.?.........?...............”..............?.......2jj\o"CurrentDocument"函數(shù)原型作用域 256\o"CurrentDocument"文件作用域 256\o"CurrentDocument"鏈接 257彳ナイ用)芻 258存儲(chǔ)類型 259\o"CurrentDocument"自動(dòng)變量 259\o"CurrentDocument"寄存器變量 260\o"CurrentDocument"具有代碼塊作用域的靜態(tài)變量 260\o"CurrentDocument"具有外部鏈接的靜態(tài)變量 262\o"CurrentDocument"具有內(nèi)部鏈接的靜態(tài)變量 265\o"CurrentDocument"存儲(chǔ)類型說明符 266\o"CurrentDocument"函數(shù)的存儲(chǔ)類型 268\o"CurrentDocument"本章小結(jié) 269\o"CurrentDocument"復(fù)習(xí)題 270\o"CurrentDocument"附錄AC語言預(yù)處理器 272\o"CurrentDocument"A.1預(yù)處理器命令 272\o"CurrentDocument"A.2預(yù)處理器詞法規(guī)則 272\o"CurrentDocument"A.3定義和替換 273\o"CurrentDocument"A.3.1對象式宏定義 273\o"CurrentDocument"A.3.2函數(shù)式宏定義 274\o"CurrentDocument"A.3.3重新掃描宏表達(dá)式 276\o"CurrentDocument"A.3.4取消宏定義與重新定義宏 277\o"CurrentDocument"A.3.5宏擴(kuò)展中的優(yōu)先級(jí)錯(cuò)誤 278\o"CurrentDocument"A.3.6宏參數(shù)的副作用 278\o"CurrentDocument"A.4文件包含 279\o"CurrentDocument"A.5條件編譯 280\o"CurrentDocument"A.5.1#if,#else與#endif命令 280\o"CurrentDocument"A.5.3#ifdef與#ifndel 命令 282\o"CurrentDocument"A.5.4條件命令中的常量表達(dá)式 283\o"CurrentDocument"A.5.5defined運(yùn)算符 283\o"CurrentDocument"A.6顯式的行編號(hào) 284\o"CurrentDocument"A.7雜住指令 285\o"CurrentDocument"A.8錯(cuò)誤指令 285\o"CurrentDocument"附錄B常用函數(shù) 286\o"CurrentDocument"附錄C圖形驅(qū)動(dòng)程序和模式 289第0章程序設(shè)計(jì)概論用計(jì)算機(jī)解決問題包括兩個(gè)概念上不同的步驟。首先應(yīng)該構(gòu)造ー個(gè)算法或在解決該問題的已有算法中選擇ー個(gè),這個(gè)過程稱為算法設(shè)計(jì)。第二個(gè)步驟是用ー種程序設(shè)計(jì)語言將該算法表達(dá)為程序。剛開始學(xué)習(xí)程序設(shè)計(jì)時(shí)將算法翻譯成實(shí)際的編碼過程會(huì)是較為困難的階段。在學(xué)習(xí)了更多的有關(guān)程序設(shè)計(jì)的過程后,編碼會(huì)很快變得簡單,與此同時(shí),隨著要求解決的問題越來越復(fù)雜,算法設(shè)計(jì)會(huì)變得越來越復(fù)雜。所以在學(xué)習(xí)中要有意識(shí)的兼顧這兩個(gè)過程。本章介紹計(jì)算機(jī)程序設(shè)計(jì)的基本概念及發(fā)展。閱讀本章讀者將了解到程序設(shè)計(jì)中的一些基本概念以及了解C語言的概貌。0.1程序與程序設(shè)計(jì)語言軟件是計(jì)算機(jī)系統(tǒng)中不可缺少的部分。什么是軟件?什么是程序?什么是程序設(shè)計(jì)語言?本節(jié)將給出解答。0.1.1程序什么是軟件?目前還沒有一個(gè)精確的定義。但認(rèn)為軟件就是程序的概念肯定是錯(cuò)誤的。目前比較公認(rèn)的定義是由著名的軟件工程專家B.W.Boehm提出的“軟件是程序以及開發(fā)、使用和維護(hù)所需要的所有文檔”,由此可見,程序只是完整軟件產(chǎn)品的一個(gè)部分。什么是程序?國標(biāo)中規(guī)定’‘計(jì)算機(jī)程序是按照具體要求產(chǎn)生的適合于計(jì)算機(jī)處理的指令序列”。也就是說,程序是計(jì)算機(jī)可以識(shí)別和執(zhí)行的操作表示的處理步驟。我國頒布的《計(jì)算機(jī)軟件保護(hù)條例》更加明確提出''計(jì)算機(jī)程序是指為了得到某種結(jié)果而可以由計(jì)算機(jī)等具有信息處理能力的裝置執(zhí)行的代碼化指令序列,或者可被自動(dòng)地轉(zhuǎn)換成代碼化指令序列的符號(hào)化序列,或者符號(hào)化語句序列”。可以看出,程序既可以指能被計(jì)算機(jī)直接執(zhí)行的指令序列(可執(zhí)行文件),也可以是我們用程序設(shè)計(jì)語言編寫的源程序,但源程序不能被計(jì)算機(jī)直接執(zhí)行,必須通過程序設(shè)計(jì)語言翻譯為可執(zhí)行的指令序列。0.1.2程序設(shè)計(jì)語言程序是由人來編寫,程序的執(zhí)行實(shí)際上反映了人的設(shè)計(jì)思想。隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,“編程”技術(shù)也在不斷地發(fā)展,程序設(shè)計(jì)語言經(jīng)歷了幾個(gè)不同的階段。.機(jī)器語言眾所周知,數(shù)據(jù)是以二進(jìn)制形式存儲(chǔ)在計(jì)算機(jī)中,我們所能感知的聲音或圖像進(jìn)入計(jì)算機(jī)之前必須要經(jīng)過編碼轉(zhuǎn)化為二進(jìn)制。計(jì)算機(jī)能夠執(zhí)行的程序也不例外,也是以二進(jìn)制代碼表示指令序列。機(jī)器語言便是以二進(jìn)制代碼表示機(jī)器指令的ー種語言,用機(jī)器語言寫的程序能被計(jì)算機(jī)直接執(zhí)行。最早的計(jì)算機(jī)(如ENIAC)便是采用機(jī)器語言來編寫程序,“程序員”采用手工撥鈕開關(guān)和紙帶打孔的方式向計(jì)算機(jī)輸入程序,那時(shí)的程序員都是一流的科學(xué)家。下面的程序段便是使用X86計(jì)算機(jī)的機(jī)器語言編寫的,功能是計(jì)算1+1?!纠?.1】使用機(jī)器語言計(jì)算1+1。101110000000000100000000000001010000000100000000很明顯,用這樣的方式編寫程序非常麻煩,人類很難讀懂,而且不同的計(jì)算機(jī)提供的機(jī)器語言不同,編寫的代碼很難通用。于是匯編語言應(yīng)運(yùn)而生。.匯編語言為了解決機(jī)器語言編程的困難,人們專門編寫ー種稱為程序設(shè)計(jì)語言的程序,它提供一套語言規(guī)范,程序員可以采用該語言編寫“程序”,然后由程序設(shè)計(jì)語言將“程序”翻譯為計(jì)算機(jī)能夠執(zhí)行的程序。匯編語言便是最早的程序設(shè)計(jì)語言之一,用匯編語言編寫1+1的代碼如例0.2所示?!纠?.1]使用匯編語言計(jì)算l+loMOVAX,1ADDAX,1上面的兩行符號(hào),計(jì)算機(jī)并不能直接執(zhí)行,需要借助匯編編譯器將它翻譯成例0.1所示的二進(jìn)制機(jī)器代碼。匯編語言屏蔽了枯燥的二進(jìn)制代碼,匯編語言用人類易懂的符號(hào)代替二進(jìn)制代碼,使得編程技術(shù)前進(jìn)了一大步。但匯編語言與機(jī)器語言比較接近,多數(shù)符號(hào)基本上和一組二進(jìn)制指令碼直接對應(yīng),與計(jì)算機(jī)內(nèi)部實(shí)現(xiàn)細(xì)節(jié)直接相關(guān),編程的難度仍然較大。各種新的程序設(shè)計(jì)語言不斷誕生發(fā)展,人們習(xí)慣把機(jī)器語言和匯編語言稱為低級(jí)語言,而把之后的程序設(shè)計(jì)語言稱為高級(jí)語言。.髙級(jí)語言高級(jí)語言的出現(xiàn)是編程語言的一大進(jìn)步,它屏蔽了機(jī)器的細(xì)節(jié),語言更接近于自然語言和數(shù)學(xué)語言,給編程帶來了極大的方便。據(jù)不完全統(tǒng)計(jì),目前已經(jīng)有超過2500種計(jì)算機(jī)語言,絕大多數(shù)是高級(jí)語言。利用C語言計(jì)算1+1的代碼如例0.3所示。【例0.3】使用C語言計(jì)算I+1#inlcude<stdio.h>main()printf(''%d\nz\1+1);也許你還不懂這些符號(hào)和單詞,但很快就會(huì)學(xué)會(huì)這些內(nèi)容。髙級(jí)語言易學(xué)、易用、強(qiáng)大,具有一定的通用性。在例0.3中,如果想讓計(jì)算機(jī)計(jì)算20-4,你可能已經(jīng)猜到,將程序中的printf(“%d\n”,l+l);更改為printf("%d\I^,20-4);就這么簡單?;剡^頭來,如果要用機(jī)器語言或匯編語言來計(jì)算20-4,恐怕你就不容易猜到了。0.2C語言的歷史和發(fā)展高級(jí)語言門類繁多,c語言是其中影響最大、壽命最長的語言之一。本書便是教授大家利用C語言編寫計(jì)算機(jī)程序的。C語言的應(yīng)用非常廣泛,普通計(jì)算機(jī)使用的Windows操作系統(tǒng)基本上是用C語言編寫的,用來進(jìn)行文檔處理的Word、Excel也是基本上用C編寫的。C語言同時(shí)具有高級(jí)語言和低級(jí)語言的特點(diǎn),因此也被稱為“中級(jí)”語言,使得C語言具有其它語言無法相比的速度優(yōu)勢和靈活性,C的語法規(guī)則簡單、靈活,使得它屏蔽了匯編語言復(fù)雜、難以調(diào)試等缺點(diǎn)。下面介紹C語言產(chǎn)生發(fā)展的簡單歷史。20世紀(jì)60年代,貝爾實(shí)驗(yàn)室(BellLaboratory)的KenThompson開始用匯編語言開發(fā)UNIX操作系統(tǒng),當(dāng)程序規(guī)模不斷擴(kuò)大時(shí),他開始無法忍受匯編語言的難寫、難讀和難以維護(hù),便開始在BCPL程序設(shè)計(jì)語言的基礎(chǔ)上,將其改造成B語言,使得B語言更適合于開發(fā)UNIXo1971年,DennisM.Ritchie開始和Thompson合作開發(fā)UNIX,M.Ritchie主要負(fù)責(zé)改進(jìn)B語言,后來便被命名為C語言。1973年C語言基本完成,Thompson和Ritchie用C語言重寫了UNIX系統(tǒng),UNIX操作獲得了巨大的成功,C語言也因此獲得廣泛的應(yīng)用。C語言本身也在不斷發(fā)展,1989年,美國國家標(biāo)準(zhǔn)局(ANSI:AmericanNationalStandardsInstitute)發(fā)布了一個(gè)完整的C語言標(biāo)準(zhǔn),被稱為C89或ANSIC。1990年,國際標(biāo)準(zhǔn)化組織(ISO:IntemationOrganizatonforStandardization)直接采用了C89,有的資料上稱為C90,實(shí)際上C90和C89完全ー樣。1999年,ISO發(fā)布了最新的C語言規(guī)范,被稱為C99,是目前C語言標(biāo)準(zhǔn)的最高版本。目前,有許多新程序設(shè)計(jì)語言正在興起,如C++、Java、C#等,它們借助面向?qū)ο蟪绦蛟O(shè)計(jì)思想,大大提高了開發(fā)效率,獲得了程序員們的認(rèn)可,稱為程序設(shè)計(jì)語言中的三大主流陣營。在這樣的形勢下,仍然有一些程序員們在堅(jiān)守C語言的陣營,他們追求著C語言的運(yùn)行髙效率和靈活性。0.3ー個(gè)簡單程序的誕生在正式學(xué)習(xí)c語言編程規(guī)則之前,首先感受一下完整的c程序的的概貌,以及程序設(shè)計(jì)語言的工作過程。o.3.1簡單的C語言程序概貌下面的示例c程序,完成計(jì)算兩個(gè)整數(shù)中的最大值功能?!纠?.4】計(jì)算兩個(gè)整數(shù)的最大值#include<stdio.h>/*GetMax函數(shù)求兩個(gè)整數(shù)中的最大值,兩個(gè)參數(shù)類型為整型函數(shù)返回值類型為整數(shù)?/intGetMax(inta,intb)(if(a>b) /?如果a比b的值大,則返回a*/returna;returnb;)voidmain()(intx,y,max;printf(''Pleaseinputtwointegers:'');scanf(''吿d吿d〃,&x,&y); /★通過鍵盤輸入兩個(gè)整數(shù)★/max=GetMax(x,y); /*求x、y中的最大值保存到max中?/printf(''Themaxnumberis:吿d\n”,max);}例0.4就是ー個(gè)簡單但完整的C語言程序,現(xiàn)在你可能還讀不懂其中每個(gè)符號(hào)所代表的含義,沒關(guān)系,先對程序有一個(gè)輪廓的認(rèn)識(shí)。運(yùn)行程序時(shí),屏幕上將顯示一條提示信息:Pleaseinputtwointegers:要求用戶通過鍵盤輸入兩個(gè)整數(shù)。假設(shè)用戶輸入33和一4,即Pleaseinputtwointegers:33-4/符號(hào)/表示按下回車鍵,33和一4之間空ー個(gè)空格,也可以每輸入ー個(gè)數(shù)后按一下回車(以后的示例均如此表示),輸入后屏幕的提示結(jié)果為:Themaxnumberis:33.C語言程序由函數(shù)構(gòu)成函數(shù)(Function)是構(gòu)成C語言程序的基本單位,例0.4由GetMaX和main兩個(gè)函數(shù)構(gòu)成。毎個(gè)函數(shù)由函數(shù)首部和函數(shù)體構(gòu)成,GetMax的函數(shù)首部為"intGetMax(inta,intb)”,main函數(shù)的函數(shù)首部為"voidmain。”;函數(shù)體便是函數(shù)首部之后的ー對花括號(hào)”{ド之間的內(nèi)容。具體的有關(guān)函數(shù)的知識(shí)請參照第五章內(nèi)容。每個(gè)程序中有且只能有一個(gè)main函數(shù),這個(gè)函數(shù)稱為主函數(shù),程序執(zhí)行時(shí),便從這個(gè)函數(shù)體“對應(yīng)”的第一條指令開始執(zhí)行。ー個(gè)C程序中可以包含多個(gè)自定義函數(shù),也可以ー個(gè)沒有,示例。.4中的GetMax函數(shù)便是自定義函數(shù),main以外的函數(shù)均是自定義函數(shù)。.對庫函數(shù)的引用編程時(shí),如果所有的函數(shù)都要程序員自己編寫,那工作效率一定很低,對于ー些通用的功能,多數(shù)編譯器均提供了一組標(biāo)準(zhǔn)庫函數(shù)。庫函數(shù)的使用極大提高了編程效率,程序員可以在自己的程序中調(diào)用庫函數(shù)。要調(diào)用系統(tǒng)提供的庫函數(shù),必須在程序中包含相應(yīng)的頭文件(Headerfiles),包含頭文件要用到編譯預(yù)處理指令,示例。.4中所用的為:#include<stdio.h>stdio.h是最常用的需要包含的頭文件,一般程序中均要包含這ー頭文件。要將計(jì)算結(jié)果輸出的屏幕上,需要調(diào)用庫函數(shù)中的printf函數(shù),從鍵盤讓用戶輸入數(shù)據(jù),需要調(diào)用庫函數(shù)中的scanf函數(shù),它們都需要包含stdio.h;如果要調(diào)用數(shù)學(xué)函數(shù),如計(jì)算正弦函數(shù)值的sin函數(shù),則要包含math.h(具體格式為:#include<math.h>)o通常情況下,將頭文件包含放在程序的最開始處。.培養(yǎng)良好的書寫習(xí)慣C程序的函數(shù)體部分由語句構(gòu)成,語句都是以分號(hào)作為結(jié)束符(反過來不成立,出現(xiàn)分號(hào)的地方不一定是一條語句的結(jié)束),編譯預(yù)處理指令(如頭文件包含)不是C語句,所以不能在最后加分號(hào),函數(shù)的定義前后也不能加分號(hào)。C的語句書寫格式比較規(guī)范,可以在一行內(nèi)書寫多條語句,也可以將一條語句分開寫在多行上。但為了保證程序的可讀性和調(diào)試改錯(cuò)的方便,應(yīng)該養(yǎng)成良好的代碼書寫規(guī)范和習(xí)慣。ー般情況下,一行內(nèi)只寫一條語句,代碼結(jié)構(gòu)清楚,錯(cuò)落有致,希望大家在上機(jī)實(shí)踐的時(shí)候,仿照書中的例題來書寫程序,養(yǎng)成良好的習(xí)慣。.注釋也很重要在例0.4中,/*和*/之間的內(nèi)容便是注釋,注釋是程序員對自己所編寫程序的注釋性說明,可以采用中文也可以用英文,但一定要放在/*和*/之間,而且/和?之間不能有空格。編譯器在將程序翻譯為機(jī)器語言代碼時(shí),忽略所有的注釋內(nèi)容,也就是說注釋對程序功能沒有任何影響。但注釋卻是編寫程序時(shí)不可缺少的內(nèi)容,清晰的注釋記錄了程序員編寫程序時(shí)的思路和設(shè)計(jì)思想,便于其他程序員或自己事后再來閱讀這ー段程序。規(guī)范化的程序設(shè)計(jì)提倡給程序加上必要的注釋。C語言的注釋可以有兩種方式,上述是第一種方式,放在/*和*/之間,中間可以換行,也就是說可以有較多的注釋說明。另一種方式最早是C++語言引入的,目前大多數(shù)C編譯器已經(jīng)支持,ANSIC標(biāo)準(zhǔn)也已經(jīng)引入,也稱為行注釋,用〃引導(dǎo),〃之后到該行結(jié)束所有內(nèi)容都是注釋。如:scanf &x,&y); //通過鍵盤輸入兩個(gè)整數(shù)本教材中,根據(jù)需要兩種注釋都使用。0.3.2第一個(gè)程序的誕生用高級(jí)語言編寫的程序,計(jì)算機(jī)并不能直接運(yùn)行,必須要借助編譯程序?qū)⑽覀兙帉懙拇a翻譯為用〇和1表示的機(jī)器語言指令代碼,才能真正在計(jì)算機(jī)中執(zhí)行。用c語言開發(fā)軟件都要經(jīng)歷“編輯f編譯f鏈接f運(yùn)行”的過程。.編輯源代碼編輯階段就是利用c語言編寫實(shí)現(xiàn)特定功能的程序代碼,通常將這ー階段的代碼稱為源代碼(SourceCode),源代碼必須遵循高級(jí)語言的規(guī)范,同時(shí)也人的智慧與思維的體現(xiàn)。本書的其余章節(jié)都是講解如何寫好C語言源代碼。一般將編寫好的C語言源代碼保存為文本文件,擴(kuò)展名為.c,如例0.4的代碼我們可以保存為findmax.Co.編譯(Compile)編譯由編譯器負(fù)責(zé)完成,編譯器是ー個(gè)事先開發(fā)好的軟件,它專門用于將我們編寫的源代碼翻譯為計(jì)算機(jī)能夠理解的二進(jìn)制目標(biāo)代碼。能將C語言源代碼翻譯為二進(jìn)制碼的的編譯器有很多,常用的有TurboC、MicrosoftC、BorlandC等。編譯器是ー種非常復(fù)雜的軟件,不同的編譯器在翻譯代碼時(shí)的策略也不完全相同,同樣的代碼經(jīng)不同的編譯器翻譯后的可執(zhí)行文件并不完全相同,所以在真正開始軟件開發(fā)時(shí),首先要了解自己所選擇的編譯器。本書選用TurboC作為編譯器,有關(guān)TurboC的操作請參照附錄的說明。在編譯階段,編譯器通常會(huì)發(fā)現(xiàn)源代碼中不符合語言規(guī)范的語法錯(cuò)誤,程序員需要修訂這些錯(cuò)誤并重新編譯直到編譯成功。如果你輸入的findmax.c沒有語法錯(cuò)誤,編譯后將生成findmax.obj,我們稱之為目標(biāo)文件。.鏈接(Link)程序中除了自己編寫的代碼外,往往還需要調(diào)用庫函數(shù)中提供的函數(shù)或者其他人編寫目標(biāo)函數(shù),鏈接過程便是將這些目標(biāo)函數(shù)合并成有關(guān)完整的可執(zhí)行文件。對于例0.4的findmax.c,將生成findmax.exe,findmax.exe便可以在計(jì)算機(jī)上直接運(yùn)行。目前大多數(shù)編譯器都提供了集成的開發(fā)環(huán)境(IDE:IntegratedDevelopmentEnviroment),只要點(diǎn)擊一下菜單,便可以連續(xù)完成編譯、鏈接過程(編譯出錯(cuò)則不能完成鏈接),最后生成ー個(gè)可執(zhí)行文件,一般不會(huì)覺察到鏈接過程的存在。.運(yùn)行鏈接成功后得到的便是ー個(gè)可執(zhí)行程序,可執(zhí)行程序便可以復(fù)制給別人去執(zhí)行應(yīng)用??蓤?zhí)行程序生成后便和源代碼脫離關(guān)系,可執(zhí)行程序的執(zhí)行并不需要源代碼的存在。很多初學(xué)C語言程序設(shè)計(jì)的人,總是認(rèn)為是自己編寫的源代碼再執(zhí)行(一點(diǎn)TurboC中的Run菜單項(xiàng),程序便執(zhí)行),實(shí)際上應(yīng)該是你編寫的源代碼被編譯器翻譯成的可執(zhí)行程序在運(yùn)行,當(dāng)運(yùn)行有錯(cuò)誤時(shí),重新修改代碼,重新翻譯,重新運(yùn)行。程序在運(yùn)行時(shí),將二進(jìn)制指令代碼和要處理的數(shù)據(jù)加載到內(nèi)存中オ能執(zhí)行,要想了解可執(zhí)行文件的加載過程還需要進(jìn)一步的學(xué)習(xí),而源代碼只是存儲(chǔ)在磁盤上的ー個(gè)普通文件。由此可見,真正執(zhí)行的不是源代碼,而是編譯鏈接結(jié)果加載到內(nèi)存后的二進(jìn)制代碼。.小結(jié):程序員、編譯器、測試人員、用戶在軟件開發(fā)過程中,有非常重要的四個(gè)角色:程序員、編譯器、測試人員和用戶。程序員是C語言源代碼的撰寫者,根據(jù)功能需求,按C語言語言規(guī)范編寫源代碼。源代碼需要借助編譯器進(jìn)行翻譯,我們需要購買一個(gè)C語言編譯器(如TurboC)安裝到自己的機(jī)器上,執(zhí)行編譯器提供的翻譯功能,生成一個(gè)可執(zhí)行程序。生成的可執(zhí)行程序需要經(jīng)過測試人員進(jìn)行運(yùn)行測試。測試無誤后,將軟件打包分發(fā)、銷售給廣大用戶使用,用戶是軟件的使用者和收益者,用戶通過軟件解決實(shí)際的問題。當(dāng)然在學(xué)習(xí)C語言編程的時(shí)候,我們既是程序員,同時(shí)也是測試人員和用戶,但我們不能混淆這幾個(gè)截然不同的角色。編寫源代碼時(shí)我們是程序員:編譯時(shí)需要借助編譯軟件完成:程序編寫完成后要反復(fù)運(yùn)行,查看有無功能上的缺陷或錯(cuò)誤,此時(shí)我們便是測試員和用戶。程序員、測試員和用戶應(yīng)該是在不同的環(huán)境和場合下編寫或程序,但在實(shí)際學(xué)習(xí)時(shí),多個(gè)環(huán)節(jié)幾乎都是在同一臺(tái)機(jī)器的TurboC環(huán)境下完成的,容易造成錯(cuò)覺。大家在編寫程序時(shí),要養(yǎng)成良好的編碼習(xí)慣,編寫的程序要界面友好,輸入輸出要有提示說明,用戶輸入錯(cuò)誤要有檢測和提示。你編寫的程序不一定只是你在運(yùn)行,你的成果可能會(huì)拷貝到別人的機(jī)器上執(zhí)行,如果在輸入數(shù)據(jù)時(shí)沒有提示,用戶很難知道程序到底要干什么?在例0.4中,在要求用戶輸入兩個(gè)整數(shù)之前,通過printf("Pleaseinputtwointegers:");向屏幕上打印一行提示,非常直觀,在上機(jī)實(shí)踐時(shí)一定要遵循這ー編碼習(xí)慣。本章小結(jié)C語言是目前應(yīng)用比較廣泛的編程語言之一,本章簡單介紹了程序及程序設(shè)計(jì)語言的基本概念,介紹了C程序設(shè)計(jì)語言的發(fā)展歷史。C語言編寫的源程序不能被計(jì)算機(jī)直接執(zhí)行,必須借助編譯器將源代碼編譯鏈接為可執(zhí)行程序,才能被計(jì)算機(jī)識(shí)別執(zhí)行。通過一個(gè)簡單的示例,展現(xiàn)C語言源代碼的概貌和編寫C程序的基本流程。復(fù)習(xí)題1、指令、程序和軟件有什么區(qū)別?2、機(jī)器語言、匯編語言、高級(jí)語言各有什么特點(diǎn)?3、簡述C語言編程的基本過程。4、簡述C程序的基本結(jié)構(gòu)。5、程序員、編譯器、測試人員、用戶在軟件開發(fā)過程中各自的職責(zé)是什么?第1章C程序設(shè)計(jì)基礎(chǔ)知識(shí)程序的最后執(zhí)行需要將可執(zhí)行代碼及待處理的數(shù)據(jù)加載到內(nèi)存中,計(jì)算機(jī)內(nèi)存中要為可執(zhí)行代碼留出保存空間,還要為待處理的數(shù)據(jù)留出相應(yīng)的空間,很多場合下,要處理的數(shù)據(jù)占用的空間要比可執(zhí)行代碼占用的空間要多?,F(xiàn)實(shí)生活中有自然數(shù)、整數(shù)、小數(shù)等概念,不同類型數(shù)的精度是不一樣的。在計(jì)算機(jī)內(nèi)存中,也要區(qū)分所保存數(shù)據(jù)的類型,如整數(shù)、浮點(diǎn)數(shù)、字符數(shù)據(jù)等,不同類型數(shù)據(jù)所占用的內(nèi)存空間(即占用的字節(jié)數(shù))是不ー樣的。大多數(shù)高級(jí)語言在源代碼中都要用聲明語句對程序中將要處理的數(shù)據(jù)進(jìn)行變量定義,其目的就是為不同類型的數(shù)據(jù)開辟不同的存儲(chǔ)空間,便于進(jìn)行處理與存儲(chǔ)。本章從數(shù)據(jù)基本類型開始,介紹變量定義、基本運(yùn)算符及表達(dá)式語法,是C語言編程中的基礎(chǔ)知識(shí)。變量C語言的數(shù)據(jù)類型比較豐富,整體上可劃分為基本類型、構(gòu)造類型以及空類型,基本類型包括整型、浮點(diǎn)型(進(jìn)ー步區(qū)分為單精度和雙精度類型)、字符型、枚舉類型和指針類型,構(gòu)造類型有數(shù)組、結(jié)構(gòu)體和共用體。本節(jié)將重點(diǎn)討論最基本的整型數(shù)和實(shí)型數(shù)以及定義整型和實(shí)型變量的定義方法。有關(guān)內(nèi)存的基礎(chǔ)概念內(nèi)存由能存儲(chǔ)信息的介質(zhì)組成,它們劃分為眾多的存儲(chǔ)單元,每個(gè)存儲(chǔ)單元可以存儲(chǔ)ー個(gè)字節(jié)或8個(gè)二進(jìn)制位,可以將存儲(chǔ)單元理解為由8個(gè)微小開關(guān)構(gòu)成,每個(gè)開關(guān)可以表示一個(gè)二進(jìn)制位,將指令和數(shù)據(jù)送入存儲(chǔ)器,只不過是打開ー些開關(guān)而合上另外一些開關(guān)。內(nèi)存包含眾多的存儲(chǔ)單元,為了識(shí)別它們,從。開始順序?yàn)樗鼈兙幪?hào),編號(hào)稱為某個(gè)存儲(chǔ)單元的地址,表示這一存儲(chǔ)單元在內(nèi)存中的位置(很多時(shí)候用相對位置的概念)。存儲(chǔ)單元的地址反映的是位置信息,存儲(chǔ)單元的內(nèi)容是8個(gè)二進(jìn)制數(shù)。磁盤、光盤、CPU中的寄存器等存儲(chǔ)器的基本原理與內(nèi)存相似,只不過各自的存儲(chǔ)介質(zhì)不同而已。變量的引入程序運(yùn)行過程中,經(jīng)常需要保存用戶輸入的數(shù)據(jù)、計(jì)算的中間結(jié)果以及最終計(jì)算結(jié)果,因此在c語言中引入了變量的概念,用來存放值可以變化的數(shù)據(jù)。顧名思義,變量對應(yīng)的數(shù)據(jù)可以被讀出來參與計(jì)算,也可以將計(jì)算結(jié)果寫入某個(gè)變量對應(yīng)的存儲(chǔ)空間。C語言中每個(gè)變量要具備3個(gè)要素:變量的名稱、變量的數(shù)據(jù)類型、變量的值。.標(biāo)識(shí)符命名規(guī)則C程序中經(jīng)常要為函數(shù)、變量等起一個(gè)符號(hào)化的名稱,這些符號(hào)稱為標(biāo)識(shí)符,標(biāo)識(shí)符的命名必須遵循一定的規(guī)則。標(biāo)識(shí)符只能由英文的字母、數(shù)字和下劃線構(gòu)成,標(biāo)識(shí)符不能以數(shù)字打頭,第一個(gè)字符只能是字母或下劃線。C語言的關(guān)鍵字不能作為標(biāo)識(shí)符,C語言總共有32個(gè)關(guān)鍵字,見表需要注意的是,不同的C編譯器,支持的關(guān)鍵字略有不同。C語言中的標(biāo)識(shí)符區(qū)分大小寫,如Sum和sum是兩個(gè)不同的標(biāo)識(shí)符。在C語言中,標(biāo)識(shí)符長度可以不受限制,但舊的ANSIC規(guī)定,只有前6個(gè)字符有意義,也就是說編譯器只看標(biāo)識(shí)符的前6個(gè)字符,新的C和C++編譯器打破了這ー限制,但不同的編譯器還是有一個(gè)長度限制。標(biāo)識(shí)符命名要養(yǎng)成良好的習(xí)慣和一致的風(fēng)格,盡量做到“見名知義’‘,尤其當(dāng)程序代碼增多時(shí),不好的標(biāo)識(shí)符命名將使得代碼難以閱讀,也很難維護(hù)。這一條不是硬性規(guī)定,但應(yīng)該從ー開始就要養(yǎng)成良好的習(xí)慣。表1-1C語言的關(guān)鍵字表autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile2.變量的名字變量的名字可以根據(jù)需要由程序員指定,除了要遵循標(biāo)識(shí)符的規(guī)定,還應(yīng)該注意以下的規(guī)則。1)在同一個(gè)函數(shù)體內(nèi),不要定義同名的兩個(gè)變量。在TurboC中,所有變量的定義語句必須放在函數(shù)體的最開始處,變量定義要遵循‘‘先定義后使用”的原則,否則會(huì)出現(xiàn)編譯錯(cuò)誤。2) 盡量避免定義與庫函數(shù)中函數(shù)名同名的變量,如primf、scanf等,雖然不會(huì)出現(xiàn)語法錯(cuò)誤,但容易造成混亂。下面的變量名是合法的變量名:total_money、一MyCar、AverageScore,class_l,也是比較好的變量命名,變量名中最好用英文單詞表達(dá)變量的含義,有的系統(tǒng)推薦使用下劃線分隔單詞,有的推薦使用單詞首字母大寫來區(qū)分,盡量使用統(tǒng)ー的風(fēng)格,避免多種方法混雜在ー起。下面的變量命名雖然合法,卻不是很好的命名習(xí)慣:al、a2、xyz等。而下面的變量命名則是不合法的:l_class、total+moneny、My=Car>into.變量的定義方法變量定義的基本語法格式為:變量類型變量名列表;其中變量類型確定了變量所要存儲(chǔ)數(shù)據(jù)的類型,如整型、實(shí)型等,變量名列表列出多個(gè)需要定義的變量的名稱(也可以一次只定義ー個(gè)變量),變量名之間用逗號(hào)(一定不要使用中文逗號(hào))分隔?!纠?.1]變量的定義intenglish_score;intmath_scoreztotal_score;doubleaverage_score;float_height;char_myChar;定義整型變量使用關(guān)鍵詞int,定義單精度實(shí)數(shù)用關(guān)鍵詞noat,定義雙精度實(shí)數(shù)使用關(guān)鍵字double,double類型數(shù)據(jù)比float類型數(shù)據(jù)有更高的存儲(chǔ)精度。在這些基本類型關(guān)鍵詞之前,還可以加一些修飾符,如short、long、signed、unsigned等,以確定更加具體的類型,具體的用法稍后再介紹。變量定義的同時(shí)還可以為變量指定初始值,如inta=5;。.變量與存儲(chǔ)單元的探討程序員在源代碼中定義的變量,是程序設(shè)計(jì)語言中特有的概念,經(jīng)編譯器編譯生成的可執(zhí)行程序加載到內(nèi)存中時(shí),并沒有變量的概念,變量名被編譯器翻譯為某個(gè)存儲(chǔ)單元的“地址”,即它在內(nèi)存中的位置?;仡櫼幌吕?。.4中求兩個(gè)整數(shù)中的最大值的程序,用戶通過鍵盤輸入兩個(gè)整數(shù),兩個(gè)整數(shù)存儲(chǔ)在內(nèi)存中某些存儲(chǔ)單元,之后需要引用這兩個(gè)整數(shù)的值,在程序的運(yùn)行階段,是通過指定數(shù)據(jù)在內(nèi)存中的位置來進(jìn)行訪問的,這個(gè)位置由編譯器和系統(tǒng)加載可執(zhí)行程序時(shí)共同確定。而程序員在編寫源代碼的時(shí)候,很難知道數(shù)據(jù)將來會(huì)放在內(nèi)存的什么地方,為了屏蔽這ー細(xì)節(jié),我們用定義變量的方式來解決這一問題,定義的變量將來會(huì)放在內(nèi)存的什么地方這ー復(fù)雜問題交由編譯器來解決。由此必須明確,變量是為了編程的方便而提出的概念,我們只需通過變量名即可引用變量將來所對應(yīng)存儲(chǔ)單元的值,作為編程人員,可以簡單地將變量和其將來所對應(yīng)的存儲(chǔ)單元等同起來。.變量類型與占用的存儲(chǔ)空間定義變量需要指定變量的類型,變量的類型決定了在加載可執(zhí)行程序時(shí),系統(tǒng)將要為它在內(nèi)存中開辟多少個(gè)字節(jié)的存儲(chǔ)空間,這ー工作由編譯器和操作系統(tǒng)聯(lián)合完成。同樣當(dāng)需要訪問變量所對應(yīng)的數(shù)據(jù)時(shí),系統(tǒng)將根據(jù)變量的類型從某個(gè)位置開始(變量編譯后的地址),連續(xù)取若干個(gè)字節(jié)的內(nèi)容并解釋為該類型的數(shù)據(jù)。通俗地講,變量對應(yīng)的是ー組存儲(chǔ)單元,變量的值是這些存儲(chǔ)單元中的二進(jìn)制位組成的數(shù)。不同的系統(tǒng)、不同的編譯器中,某種數(shù)據(jù)類型占用的存儲(chǔ)空間并不一樣。表1-2以TurboC和常見的x86為例,列出常用的整型、實(shí)型和字符型變量類型將占用的存儲(chǔ)空間,若讀者使用不同的開發(fā)環(huán)境,請參照具體的文檔說明。表1-2不同類型數(shù)據(jù)占用存儲(chǔ)空間情況類型說明占用字節(jié)數(shù)取值范圍備注int整型2?32768?32767-2i5~(2,5-1)signed帶符號(hào)整型,與int等價(jià)shortint短整型,與int等價(jià)short短整型,與int等價(jià)singnedshortint帶符號(hào)短整型,與int等價(jià)unsignedint無符號(hào)整型2〇?655350~(2|6-1)unsignedshortint無符號(hào)短整型,與無符號(hào)整型等價(jià)longint長整型4-2147483648?2147483647-231-(23i-1)long長整型,與longint等價(jià)signedlongint帶符號(hào)長整型,與longint等價(jià)unsignedlongint無符號(hào)長整型4〇?42949672950-(232-l)float單精度型4-3.4X1038?3.4X10387位有效位double雙精度型8-1.7X1O3o8~1.7X1O30815位有效位longdouble長雙精度型10-3.4X104932?3.4X10493219位有效位char字符型1-128?127-27~(27-1)signedchar帶符號(hào)字符型,與char等りトunsignedchar無符號(hào)字符型10-2550-(28-l)關(guān)于不同類型數(shù)據(jù)占用存儲(chǔ)空間的幾點(diǎn)說明:signed(帶符號(hào)型)和unsigned只能修飾char和int型,因?yàn)閐ouble和float型必須為帶符號(hào)型,不能再修飾。char和int型默認(rèn)情況下就是signed類型,可以說signed關(guān)鍵詞總是可以省略。short只能修飾int型,在TurboC中,short修飾符也總是可以省略的。long可以用來修飾int和double,longint用來表示更多位數(shù)的整數(shù),longdouble表示精度更高的雙精度實(shí)數(shù)。單很多編譯器并沒有實(shí)現(xiàn)longdouble數(shù)據(jù)類型。int型占用存儲(chǔ)空間在不同編譯器之間變化是最為無常的,在實(shí)際編程時(shí),雖然可以省略諸如short之類的修飾符,但最好加上,以增加程序的可移植性。char型變量用于存儲(chǔ)ー個(gè)西文字符。但讀者要注意,char變量中存儲(chǔ)的是對應(yīng)字符的ASCII碼。某種類型的數(shù)據(jù)所能表示的數(shù)值范圍是一定的,如int型變量占兩個(gè)字節(jié)(16位二進(jìn)制),最高位為符號(hào)位,所能表示的整數(shù)范圍為ー32768?32767,如果將大于32767或小于ー32768的整數(shù)賦值給某個(gè)整型變量,則會(huì)發(fā)生錯(cuò)誤,稱為溢出。例1.2展現(xiàn)了整型變量的溢出?!纠?.2]整型變量的溢出?include<stdio.h>voidmain()unsignedintbad_int;bad_int=65536;printf(''Theresultis:%d\n”,bad_int);程序的輸出結(jié)果為:Theresultis0。bad_int是無符號(hào)類型,所以65535在內(nèi)存中的表示形式如圖1-1所示。1|1|1|1|1|1|1|1|1|1|1|1|1|1|1
圖1-165535在內(nèi)存中的示意圖0000000000000000圖1-2〇在內(nèi)存中的示意圖當(dāng)將65535加1變?yōu)?5536時(shí),內(nèi)存中的存儲(chǔ)形式變?yōu)閳D1-2所示,它正好是〇的存儲(chǔ)形式。int型變量的表示范圍為0?65535,在所能表示的最大數(shù)基礎(chǔ)上加1,該變量就變?yōu)榭杀硎痉秶鷥?nèi)的最小值,這一點(diǎn)非常類似鐘表的鐘點(diǎn),過了12點(diǎn),便又從。點(diǎn)開始。數(shù)據(jù)在內(nèi)存中均以補(bǔ)碼的形式存儲(chǔ),無符號(hào)數(shù)的原碼與反碼相同,只能表示正數(shù)。對于帶符號(hào)數(shù),表示整數(shù)的16位二進(jìn)制中的最高位為符號(hào)位,1表示負(fù)數(shù),0表示整數(shù),數(shù)據(jù)同樣以補(bǔ)碼的形式存儲(chǔ),帶符號(hào)整型數(shù)的取值范圍為ー32768?32767,32768按整數(shù)輸出將輸出ー32768。具體的驗(yàn)證過程,請讀者自行完成。所以在程序設(shè)計(jì)過程中,應(yīng)充分考慮數(shù)據(jù)的變化范圍,以選擇合適的數(shù)據(jù)類型來存儲(chǔ)數(shù)據(jù),避免由于溢出而導(dǎo)致的程序運(yùn)行錯(cuò)誤,這ー類錯(cuò)誤是很難被發(fā)現(xiàn)的。1.2常量程序中除了需要定義變量用于開辟存儲(chǔ)空間、存儲(chǔ)數(shù)據(jù),我們還需要一些在程序運(yùn)行過程中保持不變的數(shù)據(jù),如圓周率3.1415926、稅率、萬有引力常數(shù)等等,常量也有數(shù)據(jù)類型,常量的類型也決定了該常數(shù)占用的存儲(chǔ)空間。常量可區(qū)分為字面常量、符號(hào)常量和const常量,字面常量是程序代碼中直接書寫的數(shù)值,經(jīng)編譯后被嵌入在代碼中,稱為立即數(shù),程序運(yùn)行時(shí)直接參與運(yùn)算:符號(hào)常量與字面常量類似,但有一個(gè)易于理解的符號(hào)名稱;const常量與變量類似,程序加載時(shí),需要為const常量開辟存儲(chǔ)空間,const常量有特定的數(shù)據(jù)類型,有符號(hào)化的名稱,只是在程序運(yùn)行過程中,常量的值不能被修改。字面常量在書寫源程序時(shí),經(jīng)常要直接書寫數(shù)值常量,本節(jié)重點(diǎn)介紹不同類型字面常量的書寫規(guī)范和格式。.整型常量在C語言中可以用十進(jìn)制、ハ進(jìn)制或十六進(jìn)制書寫整型常量。默認(rèn)方式為十進(jìn)制,可以包含0-9的數(shù)字以及表示負(fù)數(shù)的號(hào),不能以0開頭。如。、128、ー23等。ハ進(jìn)制整型常量,在正常數(shù)值前加上〇作為前綴,數(shù)字由。?7構(gòu)成,如012(相當(dāng)于十進(jìn)制的10),-048(相當(dāng)于十進(jìn)制的ー40)。十六進(jìn)制整型常量,在正常數(shù)值前加上Ox或0X作為前綴,數(shù)字由〇?9、A?F、a?f構(gòu)成,如0x12(表示十進(jìn)制的18)、ー0X7B(表示十進(jìn)制的ー123)。整型常量默認(rèn)的類型為int型,如果要表示長整型整數(shù)常量,可以在正常數(shù)字后加一大寫或小寫的L作后綴,如129L、1391、Ox7AL等。默認(rèn)情況下,整型常量為帶符號(hào)常量,如果要表示無符號(hào)整型常量,可以在數(shù)據(jù)后面加上大寫或小寫的U作為后綴。如123u、3456UL等。.實(shí)型常量實(shí)型常量只能用十進(jìn)制表示,有小數(shù)方式和指數(shù)方式兩種表示方法。小數(shù)方式,與正常書寫的小數(shù)類似,如3.1415、ー2.、.345、0.0等。指數(shù)方式,由小數(shù)部分、代表指數(shù)的e或E、指數(shù)三部分構(gòu)成,指數(shù)為帶符號(hào)整數(shù),E或e之前必須有數(shù)字。合法的科學(xué)表示小數(shù)有1.23456E4、12.3456e3,它們均表示十進(jìn)制的12345.6。而1.2e2.3、.e2、E4均不是合法的常量。默認(rèn)情況下,實(shí)型常量為雙精度類型,在實(shí)型常量之后加上F或f作為后綴表示數(shù)據(jù)類型為單精度類型,在實(shí)型常量之后加上L或1作為后綴表示數(shù)據(jù)類型為長雙精度類型,但這ー類型在很多編譯器中并未實(shí)現(xiàn)。.字符常量C語言中的字符常量是由一對單引號(hào)括起來的一個(gè)字符,如'a,,‘べ,’鏟等。字符常量兩側(cè)的單引號(hào)是必須的,注意5和5兩個(gè)不同的對象,’5'表示字符5,而5表示整數(shù)的數(shù)字5,請讀者不要混淆。大多數(shù)字符常量都可以通過加單引號(hào)的方式表示,但有些特殊字符,如單引號(hào)本身和有些不可見的特殊字符,就無法通過這種方式表示。為了解決這ー問題,C語言引入“轉(zhuǎn)義字符”,用加若干字符的形式來表示有些特殊的字符,常見的轉(zhuǎn)義字符如表2-3所示。字符含義字符含義t\n,換行'\a'響鈴報(bào)警ヤ,回車(不換行)‘ヽ’'ー個(gè)單引號(hào)4\f水平制表符,ヽ,,,ー個(gè)雙引號(hào)W垂直制表符'Wー個(gè)反斜線W退格問號(hào)ヽf,走紙換頁4\ddd'1-3位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 14888-4:2024 EN Information security - Digital signatures with appendix - Part 4: Stateful hash-based mechanisms
- 2025年充電樁充電設(shè)備生產(chǎn)許可證申請與審批合同
- 2025年度新能源汽車充電樁建設(shè)與運(yùn)營服務(wù)合同-@-3
- 2024 年度中國汽車行業(yè)爭議解決報(bào)告
- 2025年度小時(shí)工維修養(yǎng)護(hù)服務(wù)合同范本
- 2025年度知識(shí)產(chǎn)權(quán)保險(xiǎn)產(chǎn)品代理與服務(wù)合同
- 2025年心電遙測監(jiān)護(hù)儀項(xiàng)目合作計(jì)劃書
- 英語-黑龍江省大慶市實(shí)驗(yàn)中學(xué)2024-2025學(xué)年高一上學(xué)期階段考試
- 2025年瀝青試驗(yàn)儀器項(xiàng)目合作計(jì)劃書
- 2025年度走讀生戶外活動(dòng)安全責(zé)任承諾協(xié)議范本
- 新《安全生產(chǎn)法》安全培訓(xùn)
- 2024年浙江省電力交易員競賽選拔考試參考題庫(含答案)
- (2023年最新版)醫(yī)師執(zhí)業(yè)、變更執(zhí)業(yè)、多機(jī)構(gòu)備案申請審核表
- 醫(yī)療器械臨床試驗(yàn)質(zhì)量管理規(guī)范培訓(xùn)課件
- 氣流粉碎機(jī)課件
- SJG 74-2020 深圳市安裝工程消耗量定額-高清現(xiàn)行
- GB∕T 41097-2021 非公路用旅游觀光車輛使用管理
- 鐵路乘車證管理辦法
- 軟件項(xiàng)目立項(xiàng)開發(fā)工作流程圖
- 叉車設(shè)備點(diǎn)檢表
- 三方聯(lián)測測量記錄表
評論
0/150
提交評論