計(jì)算機(jī)基礎(chǔ)與C語(yǔ)言程序設(shè)計(jì)教材配套資源ppt課件完整版(文字可編輯版)_第1頁(yè)
計(jì)算機(jī)基礎(chǔ)與C語(yǔ)言程序設(shè)計(jì)教材配套資源ppt課件完整版(文字可編輯版)_第2頁(yè)
計(jì)算機(jī)基礎(chǔ)與C語(yǔ)言程序設(shè)計(jì)教材配套資源ppt課件完整版(文字可編輯版)_第3頁(yè)
計(jì)算機(jī)基礎(chǔ)與C語(yǔ)言程序設(shè)計(jì)教材配套資源ppt課件完整版(文字可編輯版)_第4頁(yè)
計(jì)算機(jī)基礎(chǔ)與C語(yǔ)言程序設(shè)計(jì)教材配套資源ppt課件完整版(文字可編輯版)_第5頁(yè)
已閱讀5頁(yè),還剩568頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章計(jì)算機(jī)基礎(chǔ)知識(shí)第1章計(jì)算機(jī)基礎(chǔ)知識(shí)1.1計(jì)算機(jī)系統(tǒng)與工作原理1.2數(shù)制與編碼1.3計(jì)算機(jī)程序1.1計(jì)算機(jī)系統(tǒng)與工作原理

1.1.1計(jì)算機(jī)系統(tǒng)的組成

一個(gè)完整的計(jì)算機(jī)系統(tǒng)包括硬件系統(tǒng)和軟件系統(tǒng)兩部分。

硬件系統(tǒng):組成一臺(tái)計(jì)算機(jī)的物理設(shè)備的總稱,是實(shí)實(shí)在在的物體,是計(jì)算機(jī)工作的基礎(chǔ)。軟件系統(tǒng):指揮計(jì)算機(jī)工作的各種程序的集合,是計(jì)算機(jī)的靈魂,是控制和操作計(jì)算機(jī)工作的核心。圖1-1計(jì)算機(jī)系統(tǒng)組成結(jié)構(gòu)1.1.2計(jì)算機(jī)硬件系統(tǒng)計(jì)算機(jī)處理存儲(chǔ)的數(shù)據(jù)??梢哉f(shuō),存儲(chǔ)和處理是一個(gè)整體:存儲(chǔ)是為了處理,處理需要存儲(chǔ)。“存儲(chǔ)和處理的整體性”的最初表達(dá)是美國(guó)普林斯頓大學(xué)的馮·諾依曼于1945年提出的計(jì)算機(jī)體系結(jié)構(gòu)思想,一般稱為“程序存儲(chǔ)思想”。半個(gè)多世紀(jì)過(guò)去了,計(jì)算機(jī)的系統(tǒng)結(jié)構(gòu)已發(fā)生了很大改變,就其結(jié)構(gòu)原理來(lái)說(shuō),仍然是馮·諾依曼型計(jì)算機(jī)。“程序存儲(chǔ)思想”的主要特點(diǎn)可歸結(jié)為以下3點(diǎn):(1)計(jì)算機(jī)由5個(gè)基本部分組成:運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備。(2)程序和數(shù)據(jù)存放在存儲(chǔ)器中,并按地址尋訪。(3)程序和數(shù)據(jù)用二進(jìn)制表示,與十進(jìn)制相比,實(shí)現(xiàn)二進(jìn)制運(yùn)算的結(jié)構(gòu)簡(jiǎn)單,容易控制。

馮·諾依曼型計(jì)算機(jī),其結(jié)構(gòu)如圖1-2所示,圖中實(shí)線為數(shù)據(jù)流,虛線為控制流。圖1-2馮·諾依曼計(jì)算機(jī)結(jié)構(gòu)計(jì)算機(jī)的5個(gè)基本組成部分1.運(yùn)算器運(yùn)算器的主要功能是算術(shù)運(yùn)算和邏輯運(yùn)算。計(jì)算機(jī)中最主要的工作是運(yùn)算,大量的數(shù)據(jù)運(yùn)算任務(wù)是在運(yùn)算器中進(jìn)行的。運(yùn)算器只能做這些最簡(jiǎn)單的運(yùn)算,復(fù)雜的計(jì)算都要通過(guò)基本運(yùn)算一步步實(shí)現(xiàn)。然而,運(yùn)算器的運(yùn)算速度卻快得驚人,因而計(jì)算機(jī)才有高速的信息處理功能。運(yùn)算器中的數(shù)據(jù)取自內(nèi)存,運(yùn)算的結(jié)果又送回內(nèi)存。運(yùn)算器對(duì)內(nèi)存的讀/寫(xiě)操作是在控制器的控制之下進(jìn)行的。

2.控制器控制器是計(jì)算機(jī)的神經(jīng)中樞和指揮中心,只有在它的控制之下整個(gè)計(jì)算機(jī)才能有條不紊地工作,自動(dòng)執(zhí)行程序。控制器的功能是依次從存儲(chǔ)器取出指令,翻譯指令、分析指令、向其他部件發(fā)出控制信號(hào),指揮計(jì)算機(jī)各部件協(xié)同工作。運(yùn)算器和控制器合稱為中央處理器(CentralProcessingUnit,CPU)。

3.存儲(chǔ)器存儲(chǔ)器的主要功能是存放程序和數(shù)據(jù)。對(duì)存儲(chǔ)器可以進(jìn)行讀寫(xiě)操作

讀操作:從存儲(chǔ)器中取出信息,不破壞原有的內(nèi)容。

寫(xiě)操作:把信息存入存儲(chǔ)器,原來(lái)的內(nèi)容被抹掉。

存儲(chǔ)器通常分為內(nèi)存儲(chǔ)器和外存儲(chǔ)器。(1)內(nèi)存儲(chǔ)器內(nèi)存儲(chǔ)器簡(jiǎn)稱內(nèi)存(又稱主存),是計(jì)算機(jī)中信息交流的中心。內(nèi)存要與計(jì)算機(jī)的各個(gè)部件打交道,進(jìn)行數(shù)據(jù)交換。因此,內(nèi)存的存取速度直接影響計(jì)算機(jī)的運(yùn)算速度。(2)外存儲(chǔ)器外存儲(chǔ)器設(shè)置在主機(jī)外部,簡(jiǎn)稱外存(又稱輔存),主要用來(lái)長(zhǎng)期存放暫時(shí)不用的程序和數(shù)據(jù)。通常外存不和計(jì)算機(jī)的其他部件直接交換數(shù)據(jù),只和內(nèi)存交換數(shù)據(jù),而且不是按單個(gè)數(shù)據(jù)進(jìn)行存取,而是成批地進(jìn)行數(shù)據(jù)交換。常用的外存是磁盤(pán)、磁帶、光盤(pán)等。

4.輸入設(shè)備輸入設(shè)備用來(lái)接受用戶輸入的原始數(shù)據(jù)和程序,并將它們轉(zhuǎn)變?yōu)橛?jì)算機(jī)可以識(shí)別的形式(二進(jìn)制代碼)存放到內(nèi)存中。常用的輸入設(shè)備有鍵盤(pán)、鼠標(biāo)、掃描儀、光筆、數(shù)字化儀、麥克風(fēng)等。5.輸出設(shè)備輸出設(shè)備用于將存放在內(nèi)存中由計(jì)算機(jī)處理的結(jié)果轉(zhuǎn)變?yōu)槿藗兯芙邮艿男问?。常用的輸出設(shè)備有顯示器、打印機(jī)、繪圖儀、音響等。1.1.3計(jì)算機(jī)軟件系統(tǒng)計(jì)算機(jī)軟件(ComputerSoftware)是相對(duì)于硬件而言的,它包括計(jì)算機(jī)運(yùn)行所需的各種程序、數(shù)據(jù)及其有關(guān)技術(shù)文檔資料。只有硬件而沒(méi)有任何軟件支持的計(jì)算機(jī)稱為裸機(jī)。硬件是軟件賴以運(yùn)行的物質(zhì)基礎(chǔ),軟件是計(jì)算機(jī)的靈魂,是發(fā)揮計(jì)算機(jī)功能的關(guān)鍵。

通常軟件可分為系統(tǒng)軟件和應(yīng)用軟件兩大類(lèi)。用戶與計(jì)算機(jī)系統(tǒng)各層次之間的關(guān)系如圖1-3所示。圖1-3用戶與計(jì)算機(jī)系統(tǒng)各層次之間的關(guān)系1.系統(tǒng)軟件系統(tǒng)軟件是管理、監(jiān)控和維護(hù)計(jì)算機(jī)資源的軟件,用來(lái)擴(kuò)大計(jì)算機(jī)的功能、提高計(jì)算機(jī)的工作效率、方便用戶使用計(jì)算機(jī)的軟件。它包括操作系統(tǒng)、程序設(shè)計(jì)語(yǔ)言、語(yǔ)言處理程序、數(shù)據(jù)庫(kù)管理程序、系統(tǒng)服務(wù)程序等。2.應(yīng)用軟件應(yīng)用軟件是用戶利用計(jì)算機(jī)及其提供的系統(tǒng)軟件,為解決實(shí)際問(wèn)題所開(kāi)發(fā)的軟件的總稱。應(yīng)用軟件一般分為兩大類(lèi):通用軟件和專(zhuān)用軟件。

通用軟件支持最基本的應(yīng)用,如文字處理軟件(Word)、表處理軟件(Excel)等。專(zhuān)用軟件是專(zhuān)門(mén)為某一專(zhuān)業(yè)領(lǐng)域而開(kāi)發(fā)的軟件,如財(cái)務(wù)管理系統(tǒng)、計(jì)算機(jī)輔助設(shè)計(jì)(CAD)軟件和本部門(mén)的應(yīng)用數(shù)據(jù)庫(kù)管理系統(tǒng)等。1.2數(shù)制與編碼

在計(jì)算機(jī)系統(tǒng)中,數(shù)字和符號(hào)都是用電子元件的不同狀態(tài)表示的,即以電信號(hào)表示。根據(jù)計(jì)算機(jī)的這一特點(diǎn),提出這樣的問(wèn)題:數(shù)值在計(jì)算機(jī)中是如何表示和運(yùn)算的?這就是本節(jié)要討論的“數(shù)制”問(wèn)題。1.2.1數(shù)制的基本概念用一組固定的數(shù)字(數(shù)碼符號(hào))和一套統(tǒng)一的規(guī)則來(lái)表示數(shù)值的方法稱為數(shù)制(numbersystem),也稱為計(jì)數(shù)制。數(shù)制的種類(lèi)很多,除了十進(jìn)制數(shù),還有二十四進(jìn)制(24小時(shí)為一天),六十進(jìn)制(60秒為1分鐘、60分鐘為1小時(shí)),二進(jìn)制(手套、筷子等兩只為一雙)。

不論是哪一種數(shù)制,其計(jì)數(shù)和運(yùn)算都有共同的規(guī)律和特點(diǎn):(1)逢R進(jìn)一

R是指數(shù)制中所需要的數(shù)字字符的總個(gè)數(shù),稱為基數(shù)(Radix)。例如:十進(jìn)制數(shù)用0、1、2、3、4、5、6、7、8、9這十個(gè)不同的符號(hào)來(lái)表示數(shù)值。在十進(jìn)制中基數(shù)是10,表示逢十進(jìn)一。(2)位權(quán)表示法位權(quán)(也叫權(quán))是指一個(gè)數(shù)字在某個(gè)位置上所代表的值,處在不同位置上的數(shù)字所代表的值不同,每個(gè)數(shù)字的位置決定了它的值或位權(quán)。例如:在十進(jìn)制數(shù)586中,5的位權(quán)是100(即102)。位權(quán)與基數(shù)的關(guān)系是:各進(jìn)位制中位權(quán)的值是基數(shù)的若干次冪。因此,用任何一種數(shù)制表示的數(shù)都可以寫(xiě)成按位權(quán)展開(kāi)的多項(xiàng)式之和。例如:十進(jìn)制數(shù)256.07可以用如下形式表示:1.2.2常用的數(shù)制不同的計(jì)數(shù)制以基數(shù)(Radix)來(lái)區(qū)分。若以R代表基數(shù),則二進(jìn)制數(shù)R=2,使用0、1共2個(gè)數(shù)符八進(jìn)制數(shù)R=8,使用0、1、2、…6、7共8個(gè)數(shù)符十進(jìn)制數(shù)R=10,使用0、1、2、…8、9共10個(gè)數(shù)符十六進(jìn)制R=16,使用0、1、2、…8、9、A、B、C、D、E、F共16個(gè)數(shù)符1.十進(jìn)制數(shù)(Decimal)按“逢十進(jìn)一”的原則進(jìn)行計(jì)數(shù),稱為十進(jìn)制數(shù),即每位計(jì)滿10時(shí)向高位進(jìn)1。對(duì)于任意一個(gè)十進(jìn)制數(shù),可用小數(shù)點(diǎn)把數(shù)分成整數(shù)部分和小數(shù)部分。十進(jìn)制數(shù)的特點(diǎn)是:數(shù)字的個(gè)數(shù)等于基數(shù)10,逢十進(jìn)一,借一當(dāng)十;最大數(shù)字是9,最小數(shù)字是0,有10個(gè)數(shù)字字符0、1、2、3、4、5、6、7、8、9;在數(shù)的表示中,每個(gè)數(shù)字都要乘以基數(shù)10的冪次。

如在十進(jìn)制數(shù)436.82中,小數(shù)點(diǎn)左邊第一位的6代表個(gè)位,它的數(shù)值為6×100;小數(shù)點(diǎn)左邊第二位的3代表十位,它的數(shù)值為3×101;左邊第三位的4代表百位,它的數(shù)值為4×102;小數(shù)點(diǎn)右邊第一位的值為8×10-1;小數(shù)點(diǎn)右邊第二位的值為2×10-2??梢?jiàn),數(shù)碼處于不同的位置,代表的數(shù)值是不同的。十進(jìn)制數(shù)的性質(zhì)是:小數(shù)點(diǎn)向右移動(dòng)一位,數(shù)值擴(kuò)大10倍;反之,小數(shù)點(diǎn)向左移動(dòng)一位,數(shù)值縮小10倍。2.二進(jìn)制數(shù)(Binary)按“逢二進(jìn)一”的原則進(jìn)行計(jì)數(shù),稱為二進(jìn)制數(shù),即每位計(jì)滿2時(shí)向高位進(jìn)1。(1)二進(jìn)制數(shù)的特點(diǎn)二進(jìn)制數(shù)的特點(diǎn)是:數(shù)字的個(gè)數(shù)等于基數(shù)2;最大數(shù)字是1,最小數(shù)字是0;即只有兩個(gè)數(shù)字字符:0,1;在數(shù)值的表示中,每個(gè)數(shù)字都要乘以2的冪次,這就是每一位的位權(quán)。第一位的位權(quán)是20,第二位是21,第三位是22,后面依次類(lèi)推。表1-1給出了二進(jìn)制的位權(quán)和十進(jìn)制數(shù)的對(duì)應(yīng)關(guān)系。二進(jìn)制位數(shù)7654321-1-2-3-4位權(quán)(十進(jìn)制表示)262524232221202-12-22-32-464321684210.50.250.1250.0625表1-1二進(jìn)制的位權(quán)與十進(jìn)制數(shù)值的關(guān)系

任何一個(gè)二進(jìn)制數(shù),都可以用以下方法表示為十進(jìn)制數(shù):

二進(jìn)制數(shù)的性質(zhì)是:小數(shù)點(diǎn)向右移動(dòng)一位,數(shù)值就擴(kuò)大2倍;反之,小數(shù)點(diǎn)向左移動(dòng)一位,數(shù)值就縮小2倍。例如:把二進(jìn)制數(shù)110.101的小數(shù)點(diǎn)向右移動(dòng)一位,變?yōu)?101.01,比原來(lái)的數(shù)擴(kuò)大了2倍;把110.101的小數(shù)點(diǎn)向左移動(dòng)一位,變?yōu)?1.0101,比原來(lái)的數(shù)縮小2倍。(2)二進(jìn)制算術(shù)運(yùn)算二進(jìn)制算術(shù)運(yùn)算與十進(jìn)制運(yùn)算類(lèi)似,同樣可以進(jìn)行算術(shù)運(yùn)算。二進(jìn)制求和法則如下:0+0=00+1=11+0=11+1=10(逢二進(jìn)一)二進(jìn)制求差法則如下:0-0=01-0=110-1=1(借一當(dāng)二)1-1=0二進(jìn)制求積法則如下:0×0=00×1=01×0=01×1=1二進(jìn)制求商法則如下:0÷1=01÷1=1例1.1求1101.01+1001.11=?解1101.01+1001.11——————10111.00計(jì)算結(jié)果:1101.01+1001.11=10111.00例1.2求1101.01-1001.11=?解1101.01-1001.11—————0011.10計(jì)算結(jié)果:1101.01-1001.11=11.10例1.3求1101×110=?解1101×110————000011011101—————1001110計(jì)算結(jié)果:1101×110=10011103.八進(jìn)制數(shù)(Octal)八進(jìn)制數(shù)的進(jìn)位規(guī)則是“逢八進(jìn)一”,其基數(shù)R=8,采用的數(shù)碼是0、1、2、3、4、5、6、7,每位的位權(quán)是8的冪次。例如,對(duì)于八進(jìn)制數(shù)376.4可表示為4.十六進(jìn)制數(shù)(Hexadecimal)十六進(jìn)制數(shù)的特點(diǎn)是:①采用的16個(gè)數(shù)碼為0、1、2、…、9、A、B、C、D、E、F。符號(hào)A~F分別代表十進(jìn)制數(shù)的10~15。②進(jìn)位規(guī)則是“逢十六進(jìn)一”,基數(shù)R=16,每位的位權(quán)是16的冪次。例如,對(duì)于十六進(jìn)制數(shù)3AB.11可表示為

5.常用數(shù)制的對(duì)應(yīng)關(guān)系(1)常用數(shù)制的基數(shù)和數(shù)字符號(hào)常用數(shù)制的基數(shù)和數(shù)字符號(hào)如表1-2所示。(2)常用數(shù)制的對(duì)應(yīng)關(guān)系十進(jìn)制二進(jìn)制八進(jìn)制十六進(jìn)制0123456789101112131415160110111001011101111000100110101011110011011110111111110012345671011121314151617200123456789ABCDEF10表1-3常用數(shù)制的對(duì)應(yīng)關(guān)系1.2.3數(shù)制間的轉(zhuǎn)換將數(shù)由一種數(shù)制轉(zhuǎn)換成另一種數(shù)制稱為數(shù)制間的轉(zhuǎn)換。由于計(jì)算機(jī)采用二進(jìn)制,而在日常生活中人們習(xí)慣使用十進(jìn)制,所以在計(jì)算機(jī)進(jìn)行數(shù)據(jù)處理時(shí)就必須把輸入的十進(jìn)制數(shù)換算成計(jì)算機(jī)所能接受的二進(jìn)制數(shù),計(jì)算機(jī)運(yùn)行結(jié)束后,再把二進(jìn)制數(shù)換算成人們習(xí)慣的十進(jìn)制數(shù)輸出。這兩個(gè)換算過(guò)程完全由計(jì)算機(jī)系統(tǒng)自動(dòng)完成。1.二進(jìn)制數(shù)與十進(jìn)制數(shù)間的轉(zhuǎn)換(1)二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)只要將二進(jìn)制數(shù)按位權(quán)展開(kāi),然后將各項(xiàng)數(shù)值按十進(jìn)制數(shù)相加,便可得到等值的十進(jìn)制數(shù)。例如:(2)十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)需要將整數(shù)部分和小數(shù)部分分別轉(zhuǎn)換。①整數(shù)轉(zhuǎn)換整數(shù)轉(zhuǎn)換用除2取余法。例1.5將(57)10轉(zhuǎn)換為二進(jìn)制數(shù):解:設(shè)用除2取余法得:結(jié)果:

②小數(shù)轉(zhuǎn)換小數(shù)轉(zhuǎn)換用乘二取整法。例1.6將(0.834)10轉(zhuǎn)換成二進(jìn)制小數(shù)。解:設(shè)用乘二取整法得:結(jié)果:

將一個(gè)帶有整數(shù)和小數(shù)的十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)時(shí),必須將整數(shù)部分和小數(shù)部分分別按除2取余法和乘2取整法進(jìn)行轉(zhuǎn)換,然后再將兩者的轉(zhuǎn)換結(jié)果合并起來(lái)即可。同理,若將十進(jìn)制數(shù)轉(zhuǎn)換成任意R進(jìn)制數(shù)(N)R,則整數(shù)部分轉(zhuǎn)換采用除R取余法;小數(shù)部分轉(zhuǎn)換采用乘R取整法。2.二進(jìn)制數(shù)與八進(jìn)制數(shù)、十六進(jìn)制數(shù)間的轉(zhuǎn)換八進(jìn)制數(shù)和十六進(jìn)制數(shù)的基數(shù)分別為8=23,16=24,所以三位二進(jìn)制數(shù)恰好相當(dāng)于一位八進(jìn)制數(shù),四位二進(jìn)制數(shù)相當(dāng)于一位十六進(jìn)制數(shù),它們之間的相互轉(zhuǎn)換是很方便的。

二進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)的方法是從小數(shù)點(diǎn)開(kāi)始,分別向左、向右,將二進(jìn)制數(shù)按每三位一組分組(不足三位的補(bǔ)0),然后寫(xiě)出每一組等值的八進(jìn)制數(shù)。例1.7將二進(jìn)制數(shù)100110110111.00101轉(zhuǎn)換成八進(jìn)制數(shù)解結(jié)果:

八進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法恰好和二進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)相反,即從小數(shù)點(diǎn)開(kāi)始分別向左、向右將八進(jìn)制數(shù)的每一位數(shù)字轉(zhuǎn)換成三位二進(jìn)制數(shù)。如對(duì)例1.7,按相反的過(guò)程轉(zhuǎn)換,有:

二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)的方法和二進(jìn)制數(shù)與八進(jìn)制數(shù)的轉(zhuǎn)換相似,從小數(shù)點(diǎn)開(kāi)始分別向左、向右將二進(jìn)制數(shù)按每四位一組分組(不足四位補(bǔ)0),然后寫(xiě)出每一組等值的十六進(jìn)制數(shù)。例1.8將二進(jìn)制數(shù)1111000001011101.0111101轉(zhuǎn)換成十六進(jìn)制數(shù)。結(jié)果:

1.2.4數(shù)在計(jì)算機(jī)中的表示方式由于計(jì)算機(jī)采用二進(jìn)制,所有數(shù)據(jù)信息在計(jì)算機(jī)內(nèi)部都必須以二進(jìn)制編碼的形式表示。也就是說(shuō),一切輸入到計(jì)算機(jī)中的數(shù)據(jù)都是由0和1兩個(gè)數(shù)字進(jìn)行組合的。對(duì)于數(shù)值型數(shù)據(jù)來(lái)說(shuō)有正有負(fù),在數(shù)學(xué)中用符號(hào)“+”和“-”表示正數(shù)和負(fù)數(shù),但在計(jì)算機(jī)中數(shù)的正、負(fù)號(hào)也要用0和1來(lái)表示。1.帶符號(hào)數(shù)的表示方法在計(jì)算機(jī)中,對(duì)有符號(hào)的數(shù)常用原碼、反碼和補(bǔ)碼三種方式表示,其主要目的是解決減法運(yùn)算的問(wèn)題。任何正數(shù)的原碼、反碼和補(bǔ)碼的形式完全相同,負(fù)數(shù)則各自有不同的表示形式。(1)數(shù)的原碼表示正數(shù)的符號(hào)位用0表示,負(fù)數(shù)的符號(hào)位用1表示,有效值部分用二進(jìn)制絕對(duì)值表示,這種表示法稱為原碼。原碼對(duì)0的表示方法不唯一,即正的0(000…00)和負(fù)的0(100…00)。例如:X=+76;Y=-76則:(2)數(shù)的反碼表示正數(shù)的反碼和原碼相同,負(fù)數(shù)的反碼是對(duì)該數(shù)的原碼除符號(hào)位外各位取反,即“0”變“1”,“1”變“0”。例如:(+76)原=(+76)反=01001100(-76)原=11001100(-76)反=10110011

可以驗(yàn)證,任何一個(gè)數(shù)的反碼的反碼即是原碼本身。(3)數(shù)的補(bǔ)碼表示正數(shù)的補(bǔ)碼和原碼相同,負(fù)數(shù)的補(bǔ)碼是其反碼加1。例如:(+76)原=(+76)反=(+76)補(bǔ)=01001100(-76)原=11001100(-76)反=10110011(-76)補(bǔ)=10110100

可以驗(yàn)證,任何一個(gè)數(shù)的補(bǔ)碼的補(bǔ)碼即是原碼本身。

引入補(bǔ)碼的概念之后,減法運(yùn)算可以用加法來(lái)實(shí)現(xiàn),并且兩數(shù)的補(bǔ)碼之“和”等于兩數(shù)“和”的補(bǔ)碼。因此,在計(jì)算機(jī)中,加減法基本上都是采用補(bǔ)碼進(jìn)行運(yùn)算。2.定點(diǎn)數(shù)與浮點(diǎn)數(shù)數(shù)值除了有正、負(fù)數(shù)外,還有帶小數(shù)點(diǎn)的數(shù)值。當(dāng)所要處理的數(shù)值含有小數(shù)部分時(shí),計(jì)算機(jī)還要解決數(shù)值中的小數(shù)點(diǎn)的表示問(wèn)題。在計(jì)算機(jī)中,通常采用隱含規(guī)定小數(shù)點(diǎn)的位置來(lái)表示有小數(shù)點(diǎn)的數(shù)。根據(jù)小數(shù)點(diǎn)的位置是否固定,數(shù)的表示方法可以分為定點(diǎn)整數(shù)、定點(diǎn)小數(shù)和浮點(diǎn)數(shù)三種類(lèi)型。定點(diǎn)整數(shù)和定點(diǎn)小數(shù)統(tǒng)稱為定點(diǎn)數(shù)。(1)定點(diǎn)整數(shù)定點(diǎn)整數(shù)是指小數(shù)點(diǎn)隱含固定在整個(gè)數(shù)值的最后,符號(hào)位右邊的所有位數(shù)表示的是一個(gè)整數(shù)。如果用4位表示一個(gè)定點(diǎn)整數(shù),則0110表示二進(jìn)制數(shù)“+110”,即十進(jìn)制數(shù)“+6”。(2)定點(diǎn)小數(shù)定點(diǎn)小數(shù)是指小數(shù)點(diǎn)隱含固定在某一個(gè)位置上的小數(shù)。通常將小數(shù)點(diǎn)固定在最高數(shù)據(jù)位的左邊。如果用4位表示一個(gè)定點(diǎn)小數(shù),則0110表示二進(jìn)制數(shù)“+0.110”,即十進(jìn)制數(shù)“+0.75”。

由此可見(jiàn),定點(diǎn)數(shù)可以表示純小數(shù)和整數(shù)。定點(diǎn)整數(shù)和定點(diǎn)小數(shù)在計(jì)算機(jī)中的表示沒(méi)有什么區(qū)別,小數(shù)點(diǎn)完全靠事先約定而隱含在不同位置,如圖1-5所示。(3)浮點(diǎn)數(shù)浮點(diǎn)數(shù)是指小數(shù)點(diǎn)位置不固定的數(shù),它既有整數(shù)部分又有小數(shù)部分。在計(jì)算機(jī)中通常把浮點(diǎn)數(shù)分成階碼(也稱為指數(shù))和尾數(shù)兩部分來(lái)表示,其中階碼用二進(jìn)制定點(diǎn)整數(shù)表示,尾數(shù)用二進(jìn)制定點(diǎn)小數(shù)表示,階碼的長(zhǎng)度決定數(shù)的范圍,尾數(shù)的長(zhǎng)度決定數(shù)的精度。為保證不損失有效數(shù)字,通常還對(duì)尾數(shù)進(jìn)行規(guī)格化處理,即保證尾數(shù)的最高位為1,實(shí)際數(shù)值通過(guò)階碼進(jìn)行調(diào)整。

浮點(diǎn)數(shù)的格式多種多樣,例如:某計(jì)算機(jī)用32位表示浮點(diǎn)數(shù),階碼部分為8位補(bǔ)碼定點(diǎn)整數(shù),尾數(shù)部分為24位補(bǔ)碼定點(diǎn)小數(shù)。采用浮點(diǎn)數(shù)的最大特點(diǎn)是比定點(diǎn)數(shù)表示的數(shù)值范圍大。例如:+110110的數(shù)值等于26×0.110110,階碼為6,即+110,尾數(shù)為+0.110110。其浮點(diǎn)數(shù)表示形式如圖1-6所示。圖1-6浮點(diǎn)數(shù)示例1.2.5字符編碼計(jì)算機(jī)是以二進(jìn)制方式組織、存放信息的,信息編碼就是指對(duì)輸入到計(jì)算機(jī)中的各種數(shù)值型和非數(shù)值型數(shù)據(jù)用二進(jìn)制進(jìn)行編碼的方式。對(duì)不同機(jī)器、不同類(lèi)型的數(shù)據(jù),其編碼方式是不同的,編碼的方法很多。為了使信息的表示、交換、存儲(chǔ)或加工處理方便,在計(jì)算機(jī)系統(tǒng)中通常采用統(tǒng)一的編碼方式,因此制定了編碼的國(guó)家標(biāo)準(zhǔn)或國(guó)際標(biāo)準(zhǔn)。如:位數(shù)不等的二進(jìn)制碼、BCD碼、ASCII碼等。計(jì)算機(jī)使用這些編碼在計(jì)算機(jī)內(nèi)部和鍵盤(pán)等終端設(shè)備之間以及計(jì)算機(jī)之間進(jìn)行信息交換。

在輸入過(guò)程中,系統(tǒng)自動(dòng)將用戶輸入的各種數(shù)據(jù)按編碼的類(lèi)型轉(zhuǎn)換成相應(yīng)的二進(jìn)制形式存入計(jì)算機(jī)的存儲(chǔ)器中。在輸出過(guò)程中,再由系統(tǒng)自動(dòng)將二進(jìn)制編碼的數(shù)據(jù)轉(zhuǎn)換成用戶可以識(shí)別的數(shù)據(jù)形式輸出給用戶。字符是計(jì)算機(jī)中使用最多的非數(shù)值型數(shù)據(jù),是人與計(jì)算機(jī)進(jìn)行通信、交互的重要媒介,國(guó)際上廣泛使用美國(guó)信息交換標(biāo)準(zhǔn)碼(ASCII:AmericanStandardCodeforInformationInterchange)。

ASCII碼有7位碼和8位碼兩種形式。7位ASCII碼是用7位二進(jìn)制數(shù)進(jìn)行編碼的,所以可以表示128個(gè)字符。這是因?yàn)?位二進(jìn)制數(shù)可以表示兩種狀態(tài),0或1(21=2);兩位二進(jìn)制數(shù)可以表示4種狀態(tài),00、01、10、11(22=4);以此類(lèi)推,7位二進(jìn)制數(shù)可以表示27=128種狀態(tài),每種狀態(tài)都唯一對(duì)應(yīng)一個(gè)7位二進(jìn)制碼,這些碼可以排列成一個(gè)十進(jìn)制序號(hào)0~127。

ASCII碼表的128個(gè)符號(hào)是這樣分配的:第0~32號(hào)及127號(hào)(共34個(gè))為控制字符,主要包括換行、回車(chē)等功能字符;第33~126號(hào)(共94個(gè))為字符,其中第48~57號(hào)為0~9十個(gè)數(shù)字符號(hào),65~90號(hào)為26個(gè)大寫(xiě)英文字母,97~122號(hào)為26個(gè)小寫(xiě)英文字母,其余為一些標(biāo)點(diǎn)符號(hào)、運(yùn)算符號(hào)等。例如,大寫(xiě)字母A的ASCII碼值為1000001,即十進(jìn)制數(shù)65,小寫(xiě)字母a的ASCII碼值為1100001,即十進(jìn)制數(shù)97。這些字符基本滿足了各種程序設(shè)計(jì)語(yǔ)言、西文文字、常見(jiàn)控制命令等的需要。

為了使用方便,在計(jì)算機(jī)的存儲(chǔ)單元中,一個(gè)字符的ASCII碼占一個(gè)字節(jié)(8個(gè)二進(jìn)制位),其最高位只用作奇偶校驗(yàn)位,如圖1-7所示。圖1-7一個(gè)字節(jié)的ASCII碼表示

奇偶校驗(yàn)是指在代碼傳送過(guò)程中,用來(lái)檢驗(yàn)是否出現(xiàn)錯(cuò)誤的一種方法。一般分為奇校驗(yàn)和偶校驗(yàn)兩種。奇校驗(yàn)規(guī)定,正確的代碼一個(gè)字節(jié)中1的個(gè)數(shù)必須是奇數(shù),若非奇數(shù),則在最高位b7處添1來(lái)滿足;偶校驗(yàn)規(guī)定,正確的代碼一個(gè)字節(jié)中1的個(gè)數(shù)必須是偶數(shù),若非偶數(shù),則在最高位b7處添1來(lái)滿足。

例如:將“COME”中的4個(gè)字符用帶奇校驗(yàn)的ASCII碼存儲(chǔ)。解:先由附錄B查出十進(jìn)制ASCII碼,然后轉(zhuǎn)換成二進(jìn)制ASCII碼,再根據(jù)奇校驗(yàn)的規(guī)定在左面補(bǔ)上奇偶校驗(yàn)位,如表1-4所示。1.2.6存儲(chǔ)單位各種各樣的數(shù)據(jù)在計(jì)算機(jī)內(nèi)都用二進(jìn)制形式存儲(chǔ),在計(jì)算存儲(chǔ)空間的大小時(shí),要用到不同的存儲(chǔ)單位。在這一節(jié),我們要討論計(jì)算機(jī)中數(shù)據(jù)的存儲(chǔ)單位問(wèn)題。1.位(bit)位是計(jì)算機(jī)的最小存儲(chǔ)單位,簡(jiǎn)寫(xiě)為“b”,表示二進(jìn)制中的一位。位也稱為“比特”,是bit的音譯。一個(gè)二進(jìn)制位只能表示2種狀態(tài),即只能存放二進(jìn)制數(shù)“0”或“1”。2.字節(jié)(Byte)字節(jié)是計(jì)算機(jī)的最小存儲(chǔ)單元,也是處理數(shù)據(jù)的基本單位,簡(jiǎn)寫(xiě)為“B”,表示二進(jìn)制中的8位,即1B=8b。字節(jié)也稱為“拜特”,是Byte的音譯。常用的存儲(chǔ)單位有:KB、MB、GB、TB。1KB表示1K字節(jié),讀作“千字節(jié)”,是2的10次方字節(jié),等于1024個(gè)字節(jié);相應(yīng)的1MB讀作“兆字節(jié)”,是2的20次方字節(jié),等于1024KB;1GB讀作“吉字節(jié)”或者“千兆字節(jié)”,是2的30次方字節(jié);1TB讀作“太字節(jié)”,是2的40次方字節(jié)。3.常用單位的前綴當(dāng)我們說(shuō)64KB的時(shí)候,KB是Kilobyte(千字節(jié))的縮寫(xiě)。Kilo是一種度量前綴,表示1000。如1Kilometer是1千米,1Kilogram是1000克。由于數(shù)據(jù)在計(jì)算機(jī)中用二進(jìn)制形式存儲(chǔ),為了計(jì)算的方便,當(dāng)K用在度量存儲(chǔ)空間的時(shí)候,這里的1000僅僅是一個(gè)近似值。它的實(shí)際值是2的10次方,等于1024。

在描述計(jì)算機(jī)存儲(chǔ)容量時(shí),常用的存儲(chǔ)單位KB、MB、GB、TB的前綴的含義見(jiàn)表1-6。

例1.9為了滿足一臺(tái)1024列768行像素的單色顯示器存儲(chǔ)需要,需要使用多小字節(jié)?解:我們可以說(shuō)它具有1024列,每列包含768個(gè)像素。由于是單色顯示器,每個(gè)像素需要1位存儲(chǔ)空間,也就是說(shuō),一個(gè)字節(jié)能存放8個(gè)像素。所以共需要:

例1.10假設(shè)顯示屏上的每個(gè)像素都要用兩個(gè)字節(jié)來(lái)存儲(chǔ),一臺(tái)1024列768行像素的顯示器需要多少KB的存儲(chǔ)空間。解:所需要的存儲(chǔ)空間為:

例1.11計(jì)算機(jī)動(dòng)畫(huà)對(duì)計(jì)算機(jī)存儲(chǔ)的需求一直都在增長(zhǎng)。有一種格式的計(jì)算機(jī)動(dòng)畫(huà)要把一系列圖片存儲(chǔ)在計(jì)算機(jī)中。假設(shè)圖片顯示在屏幕上一個(gè)包含1024列768行像素的長(zhǎng)方形矩陣中,而且一個(gè)像素需要一個(gè)字節(jié)的存儲(chǔ)空間,要存儲(chǔ)一段包含32幅圖片的動(dòng)畫(huà)需要多少存儲(chǔ)空間?在求得字節(jié)數(shù)以后,再把答案轉(zhuǎn)化為MB。解:一個(gè)圖片所包含的像素個(gè)數(shù)為由于一個(gè)像素需要一個(gè)字節(jié)的存儲(chǔ)空間,所以32幅圖片所需要的字節(jié)數(shù)為將其轉(zhuǎn)化為MB,有

例1.12如果用1000B來(lái)近似表示1KB,計(jì)算出它的絕對(duì)誤差和相對(duì)誤差。解:絕對(duì)誤差是指近似值與精確值的差的絕對(duì)值。相對(duì)誤差是指絕對(duì)誤差與精確值的比率,常用百分比表示。1KB的實(shí)際值是1024B,近似值是1000B,故所求絕對(duì)誤差為相對(duì)誤差為

例如,在進(jìn)行兩數(shù)相加時(shí),首先寫(xiě)出被加數(shù)和加數(shù),這種方法曾用來(lái)計(jì)算兩個(gè)十進(jìn)制數(shù)的加法。然后按照由低位到高位的順序,根據(jù)二進(jìn)制求和法則把兩個(gè)數(shù)字逐位相加即可。1.3計(jì)算機(jī)程序1.3.1程序的概念通常,完成一項(xiàng)復(fù)雜的任務(wù),需要進(jìn)行一系列的具體工作。這些按一定的順序安排的工作即操作序列,就稱為程序(program)。例如,學(xué)校里開(kāi)會(huì)的程序步驟:

(1)宣布大會(huì)開(kāi)始。

(2)紹出席大會(huì)的領(lǐng)導(dǎo)。

(3)領(lǐng)導(dǎo)講話

(4)宣布大會(huì)結(jié)束。

對(duì)于計(jì)算機(jī)來(lái)說(shuō),計(jì)算機(jī)要完成某種數(shù)據(jù)處理任務(wù),我們可以設(shè)計(jì)計(jì)算機(jī)程序,即規(guī)定一組操作步驟,使計(jì)算機(jī)按該操作步驟執(zhí)行,完成該數(shù)據(jù)處理任務(wù)。在為計(jì)算機(jī)設(shè)計(jì)程序時(shí),必須用特定的計(jì)算機(jī)語(yǔ)言描述。用計(jì)算機(jī)語(yǔ)言設(shè)計(jì)的程序,即為計(jì)算機(jī)程序。程序就是計(jì)算機(jī)為完成某一個(gè)任務(wù)所必須執(zhí)行的一系列指令的集合。1.3.2寄存器

CPU中設(shè)有寄存器,與運(yùn)算器或控制器直接相連,可以存放數(shù)據(jù)或計(jì)算的中間結(jié)果。寄存器的數(shù)據(jù)存取速度快,但是寄存器不能無(wú)限制的增加,多了就會(huì)影響速度。為了解決這個(gè)矛盾,在存儲(chǔ)器中特別劃分出了一塊區(qū)域,稱為棧,其特點(diǎn)是存取數(shù)據(jù)都在一端,該端稱為棧頂。棧的存取不需要計(jì)算地址,因此速度快,可以作為寄存器的補(bǔ)充。

累加器A:是一個(gè)8位寄存器,它與運(yùn)算器(ALU)一起完成各種運(yùn)算。ALU是一個(gè)組合邏輯電路,本身不能保留信息,只有與累加器A一起才能完成各種運(yùn)算:累加器A在運(yùn)算前向ALU提供操作數(shù),運(yùn)算后暫存運(yùn)算結(jié)果。

程序計(jì)數(shù)器PC:為16位寄存器,用來(lái)寄存指令的地址。CPU通過(guò)PC取來(lái)一條指令執(zhí)行時(shí),PC便“指向”下一條指令,即PC的值變?yōu)橄乱粭l將要執(zhí)行的指令的地址。除非遇到轉(zhuǎn)移指令或子程序調(diào)用指令,否則CPU都是通過(guò)PC順序地提取指令。例如,一條指令占2個(gè)字節(jié),取出這條指令之后,PC的值自動(dòng)加2。1.3.3程序的執(zhí)行過(guò)程程序是一組指令,指令聯(lián)系著存儲(chǔ)器和CPU。程序和數(shù)據(jù)都存儲(chǔ)在內(nèi)存中,所以執(zhí)行程序時(shí)CPU需要頻繁地于內(nèi)存進(jìn)行數(shù)據(jù)交換。指令由操作碼和操作數(shù)兩部分組成:操作碼:表示該指令應(yīng)進(jìn)行什么性質(zhì)的操作操作數(shù):數(shù)據(jù)所在的存儲(chǔ)單元的地址或直接就是數(shù)據(jù)。例如,“01H1000H”是一條操作指令,其中01H是操作碼,1000H是操作數(shù)。具體含義是:“將地址為1000H存儲(chǔ)單元中的數(shù)據(jù)放到累加器A中”。

下面我們通過(guò)一個(gè)程序,了解計(jì)算機(jī)的組成原理和工作過(guò)程。這是一個(gè)簡(jiǎn)單的求和程序:

y=3+4

3、4和y存儲(chǔ)在存儲(chǔ)器中數(shù)據(jù)存儲(chǔ)區(qū),假如地址依次為3000H、3001H、3002H。注意,y不是數(shù)據(jù),只是地址為3002H的存儲(chǔ)單元的標(biāo)示符,這個(gè)單元將要存放計(jì)算結(jié)果。程序由4條指令組成,如表1-7所示表1-7求和程序y=3+4所包含的指令

這組指令依次存儲(chǔ)在存儲(chǔ)器中的程序存儲(chǔ)區(qū),地址分別為2000H、2003H、2006H、和2009H,前3條指令各占3個(gè)字節(jié),第4條指令占一個(gè)字節(jié)。一條指令(013000H)的實(shí)際存儲(chǔ)如圖1-8所示。01H2000H00H2001H30H2002H圖1-8指令013000H的存儲(chǔ)

程序開(kāi)始時(shí)累加器A和存儲(chǔ)器的狀態(tài)如右圖所示。PC指向第一條指令,累加器A為空(或者為上一次使用累加器A的程序存儲(chǔ)在累加器中的數(shù)據(jù)),存儲(chǔ)器的程序區(qū)中2000H-2009H存放四條指令,數(shù)據(jù)區(qū)存放程序執(zhí)行時(shí)需要的數(shù)據(jù),其中3000H存放數(shù)據(jù)3,3001H存放數(shù)據(jù)4,3002H用于存放最終的結(jié)果y。

右圖是執(zhí)行第一條指令之后的存儲(chǔ)器和累加器A的狀態(tài),第一條指令的作用是將地址為3000H單元中的數(shù)據(jù)放入累加器A,而3000H單元中的數(shù)據(jù)為3,所以此時(shí)累加器A中的內(nèi)容變?yōu)?,PC指向下一條指令,即第二條指令。

右圖給出第二條指令執(zhí)行之后的結(jié)果,第二條指令的作用是將地址為3001H單元中的數(shù)據(jù)與累加器A中的數(shù)據(jù)相加,結(jié)果保留在累加器A。3001H單元中存放的數(shù)據(jù)為4,累加器A中的數(shù)據(jù)為3,相加后結(jié)果為7,將7保存在累加器A中,所以此時(shí)累加器A的內(nèi)容變?yōu)?,而PC指向下一條指令,即第3條指令。第2章C語(yǔ)言概述

1.C語(yǔ)言是在B語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的。1963年,CPL(CombinedProgrammingLanguage)語(yǔ)言1967年,BCPL(BasicCombinedProgrammingLanguage)語(yǔ)言1970年,B語(yǔ)言(取BCPL的第一個(gè)字母)1972年,C語(yǔ)言(取BCPL的第二個(gè)字母)2.C語(yǔ)言的版本:標(biāo)準(zhǔn)C,ANSIC2.1C語(yǔ)言的發(fā)展歷史1978年,B.W.Kernighan和D.M.Ritchie合著了《TheCprogramminglanguage》,

稱為標(biāo)準(zhǔn)C。1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)對(duì)C語(yǔ)言制定了新的標(biāo)準(zhǔn),稱為ANSIC。在微型機(jī)上使用的C語(yǔ)言編譯系統(tǒng)有MicrosoftC,TurboC,QuickC等,它們的不同版本又略有差異。C++等面向?qū)ο笳Z(yǔ)言(第四代語(yǔ)言)是C語(yǔ)言的發(fā)展;Java語(yǔ)言也是以C為基礎(chǔ)的。

VC++,VJ++等是可視化語(yǔ)言。2.2C語(yǔ)言的特點(diǎn)(1)簡(jiǎn)潔緊湊(2)介于匯編語(yǔ)言與高級(jí)語(yǔ)言之間(3)是一種結(jié)構(gòu)化語(yǔ)言(4)有豐富的數(shù)據(jù)類(lèi)型(5)有豐富的運(yùn)算符(6)具有較高的移植性(7)靈活性(8)缺點(diǎn)2.3C語(yǔ)言程序設(shè)計(jì)初步2.3.1簡(jiǎn)單的C程序?qū)嵗?.1在屏幕上輸出一行信息:Hello,Everyone!#include<stdio.h>voidmain(){printf("Hello,Everyone!\n");}編譯預(yù)處理主函數(shù)語(yǔ)句例2.2一個(gè)簡(jiǎn)單的加法計(jì)算程序,求兩個(gè)整數(shù)之和并輸出。#include<stdio.h> voidmain() {}Inputtwointegers:35↙sum=8

int

x,y,sum; /*定義存放整數(shù)的變量x、y、sum*/

printf("Inputtwointegers:");

scanf("%d%d",&x,&y);/*給變量x,y輸入整數(shù)*/sum=x+y; /*計(jì)算x+y,把結(jié)果賦給sum*/

printf("sum=%d\n",sum); /*輸出sum的值*/程序運(yùn)行情況:例2.3輸入三個(gè)數(shù),求其中最大的數(shù)。a,b,c=?38-6↙max=8.000000#include<stdio.h>floatmax(floatx,floaty){}voidmain(){floata,b,c,d;

printf("a,b,c=?\n");

scanf("%f%f%f",&a,&b,&c);d=max(a,b);d=max(d,c);

printf("max=%f\n",d);}floatz;if(x<y)z=y;elsez=x;returnz;2.3.2C程序結(jié)構(gòu)

C程序由函數(shù)、編譯預(yù)處理命令及注釋三部分組成。

1.函數(shù)函數(shù)包括兩部分:①函數(shù)首部,②函數(shù)體。

floatmax(floatx,floaty){floatz;if(x<y)z=y;elsez=x;returnz; }函數(shù)類(lèi)型函數(shù)名(參數(shù)){

函數(shù)體

}2.編譯預(yù)處理命令以“#”號(hào)開(kāi)頭的行。不同的編譯預(yù)處理命令完成不同功能。如“#include<stdio.h>”。3.注釋注釋部分在編譯時(shí)均被忽略掉。注釋的目的是增加程序可讀性。可用/*……*/對(duì)C程序中的任何部分作注釋.2.4C程序在計(jì)算機(jī)上執(zhí)行2.4.1C程序執(zhí)行的步驟

編輯、編譯、連接、運(yùn)行第3章基本數(shù)據(jù)類(lèi)型與常用庫(kù)函數(shù)

第3章基本數(shù)據(jù)類(lèi)型與常用庫(kù)函數(shù)3.1字符集與標(biāo)識(shí)符3.2數(shù)據(jù)類(lèi)型與基本數(shù)據(jù)類(lèi)型3.3常量與變量3.4數(shù)據(jù)的輸入/輸出函數(shù)3.5常用庫(kù)函數(shù)3.1字符集與標(biāo)識(shí)符1.C語(yǔ)言的字符集大寫(xiě)英文字母(26個(gè)):A-Z小寫(xiě)英文字母(26個(gè)):a-z阿拉伯?dāng)?shù)字(10個(gè)):0-9特殊字符(30個(gè)):+-*/%<>=^~|&!#′

″,.:;()[]{}_?\空格2.標(biāo)識(shí)符C語(yǔ)言規(guī)定:標(biāo)識(shí)符由字母、數(shù)字和下劃線組成第一個(gè)字符必須為字母或下劃線大小字母有區(qū)別合法標(biāo)識(shí)符非法標(biāo)識(shí)符sum、area、PI、_int、a_sum、s1235、D1Old234P、cad-y、a2.3、a&b標(biāo)識(shí)符分以下三類(lèi)。(1)關(guān)鍵字,如:int等(2)預(yù)定義標(biāo)識(shí)符,如:printf等。(3)用戶標(biāo)識(shí)符,如:sum等3.2數(shù)據(jù)類(lèi)型與基本數(shù)據(jù)類(lèi)型

3.2.1數(shù)據(jù)類(lèi)型3.2.2基本數(shù)據(jù)類(lèi)型有整型、實(shí)型和字符型。1.整型數(shù)據(jù)基本整型(int)、短整型(short)、長(zhǎng)整型(long)

占字節(jié)數(shù)類(lèi)型標(biāo)識(shí)符數(shù)值范圍有符號(hào)整數(shù)2int-32768~327672short-32768~327674long-2147483648~2147483647無(wú)符號(hào)整數(shù)2unsigned0~655352unsignedshort0~655354unsignedlong0~42949672952.實(shí)型數(shù)據(jù)即實(shí)數(shù),又稱為浮點(diǎn)數(shù)。

單精度實(shí)型(float類(lèi)型)用4個(gè)字節(jié)存放一個(gè)實(shí)數(shù)。雙精度實(shí)型(double類(lèi)型)用8個(gè)字節(jié)存放一個(gè)實(shí)數(shù)。

占字節(jié)數(shù)類(lèi)型標(biāo)識(shí)符數(shù)值范圍單精度實(shí)型4float±(10-38~1038),6位有效數(shù)字雙精度實(shí)型8double±(10-308~10308)16位有效數(shù)字3.字符型數(shù)據(jù)在內(nèi)存中以相應(yīng)的ASCII碼存放。例如字符'B'的ASCII碼為66,它在內(nèi)存中以如下形式存放:010000103.3.1常量常量:其值不變的量。1.整型常量即整常數(shù)。三種形式:

1)十進(jìn)制整數(shù):如123、-456、0。

2)八進(jìn)制整數(shù):如010、-0123。

3)十六進(jìn)制整數(shù):如0x123。3.3常量與變量2.實(shí)型常量又稱浮點(diǎn)數(shù),有兩種形式:

1)小數(shù)形式:0.123、.123、-123.0、123.、0.0(必須有小數(shù)點(diǎn))2)指數(shù)形式:123e3或123E3(代表123x103)(e或E前必須有數(shù)字,且e后必須有整數(shù))

3.字符常量用單引號(hào)括起來(lái)的單個(gè)普通字符或轉(zhuǎn)義字符.如‘a(chǎn)’‘A’‘?’‘\n’‘\101’字符常量的值:該字符的ASCII碼值如‘A’——65,‘a(chǎn)’——97,‘0’——48,‘\n’——10字符數(shù)據(jù)可以參加運(yùn)算,例如‘A’+2的值為67,即’C’的ASCII碼<轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉(zhuǎn)義字符含義換行垂直制表回車(chē)響鈴單引號(hào)3位8進(jìn)制數(shù)代表的字符水平制表退格換頁(yè)反斜線雙引號(hào)2位16進(jìn)制數(shù)代表的字符4.字符串常量

”Howdoyoudo”,”CHINA”,”a”CHINA\0例字符串“CHINA”在內(nèi)存中例空串””\0

注意:’a’是字符常量,”a”是字符串常量。每個(gè)字符串末尾自動(dòng)加一個(gè)’\0’作為字符串結(jié)束標(biāo)志3.3.2符號(hào)常量符號(hào)常量:給常量所起的名字。例如:#definePI3.14159則PI即3.14159【例3.1】輸入一個(gè)半徑值,求圓周長(zhǎng)和圓面積。#include<stdio.h>#definePI3.14159voidmain(){floatr,c,area;

scanf("%f",&r);c=2*PI*r;area=PI*r*r;

printf("c=%f\narea=%f\n",c,area);}1↙1↙c=6.283180area=3.1415903.3.3變量變量:可以改變的量。1.變量的定義

類(lèi)型標(biāo)識(shí)符變量名列表;例如:

int

a,b,c;

floatx,y,z;2.變量賦初值例如:

intx,sum=0;

inta=1,b=1,c=1;

不能寫(xiě)成inta=b=c=1;

注意:變量定義后未初始化,其值不定。3.4數(shù)據(jù)的輸入/輸出函數(shù)3.4.1字符輸入/輸出函數(shù)1.字符輸入函數(shù)(getchar)函數(shù)原型:int

getchar()

函數(shù)功能:從鍵盤(pán)讀取一個(gè)字符。2.字符輸出函數(shù)(putchar)函數(shù)原型:int

putchar(charx)

函數(shù)功能:向屏幕輸出一個(gè)字符x?!纠?.2】getchar函數(shù)和putchar函數(shù)應(yīng)用舉例。#include<stdio.h>voidmain(){charc1,c2,c3;c1=getchar();c2=getchar();c3=getchar();putchar(c3);putchar(c2);putchar(c1);} abc↙abc↙cba

3.4.2格式輸出函數(shù)printf

使用方式:printf(格式控制字符串,輸出項(xiàng))例如

inta=3;floatx=5;

printf(“a=%d,x=%f\n”,a,x);輸出:a=3,x=5.0000001、整數(shù)的輸出

例如:inta=12;

printf(“a=%d,%o,%x”,a,a,a);

輸出:a=12,14,c例如:longa=1234567;

printf(“a=%ld,%lo,%lX”,a,a,a);輸出:a=1234567,363227,1E697指定寬度m:%md%mo%mx例如:inta=12345,b=-1;printf(“a=%4d,b=%4d\n”,a,b);

輸出:a=12345,b=-12、字符、字符串的輸出printf(“%c,%s\n”,‘c’,“Windows”);輸出:c,Windowsprintf(“%4c,%4.2s\n”,‘c’,“Windows”);輸出:c,Wi

3、實(shí)數(shù)的輸出floata;doubleb;a=1/3.0;b=1/3.0;

printf("a=%f,b=%18.16f\n",a,b);輸出:a=0.333333,b=0.3333333333333333例如:printf("%e",123456789123.0);

輸出1.234568e11

注意!:

%f%e只能輸出實(shí)數(shù),不能輸出整數(shù)%d%o%x只能輸出整數(shù),不能輸出實(shí)數(shù)3.4.3格式輸入函數(shù)scanf

scanf(格式控制字符串,地址列表)例3.3用scanf函數(shù)輸入數(shù)據(jù)。#include<stdio.h>voidmain(){int

a,b,c;

scanf("%d%d%d",&a,&b,&c);

printf("%d,%d,%d\n",a,b,c);}123↙ 1,2,31.格式說(shuō)明符的使用

附加格式說(shuō)明符:

l

輸入長(zhǎng)整型數(shù)據(jù)(%ld,%lo,%lx)

和double型數(shù)據(jù)(%lf,%le)。格式字符輸入說(shuō)明

d十進(jìn)制整數(shù)。

o八進(jìn)制整數(shù)。

x十六進(jìn)制整數(shù)。

c單個(gè)字符。

s字符串。

f,e

實(shí)數(shù)。2.指定輸入數(shù)據(jù)的寬度scanf(“%3d%3d”,&a,&b);輸入:123456,則a=123,b=456scanf(“%3c”,&ch);輸入:abc,則ch=‘a(chǎn)’3.輸入緩沖區(qū)

4.輸入項(xiàng)之間的分隔符C語(yǔ)言確定一個(gè)數(shù)據(jù)項(xiàng)的結(jié)束,有下列幾種方法:①遇到空格,或按回車(chē)鍵,或跳格鍵(Tab)。②按指定的寬度結(jié)束,如“%3d”,只取3列。③遇到非法輸入。例如:inta;charch;floatx;

scanf("%d%c%f",&a,&ch,&x);輸入:1234a123o.78↙這時(shí):a=1234,ch=‘a(chǎn)’,x=1232.5常用庫(kù)函數(shù)調(diào)用庫(kù)函數(shù)時(shí),應(yīng)注意下面兩點(diǎn):(1)用#include預(yù)處理命令將對(duì)應(yīng)的頭文件包含到程序中;(2)確定函數(shù)參數(shù)的類(lèi)型、返回值的類(lèi)型,以保證正確地使用該函數(shù)。例如數(shù)學(xué)函數(shù)中的求平方根函數(shù)sqrt的原型如下:

doublesqrt(doublex)【例3.4】輸入一個(gè)正數(shù),求它的平方根值。#include<stdio.h>#include<math.h>voidmain(){floatx,y;

scanf("%f",&x);if(x<0)x=-x;y=sqrt(x);printf("%.4f\n",y);}

2↙2↙1.4142第4章運(yùn)算符和表達(dá)式第4章運(yùn)算符和表達(dá)式4.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式4.2自增、自減運(yùn)算4.3位運(yùn)算4.4賦值運(yùn)算4.5關(guān)系表達(dá)式與邏輯表達(dá)式4.6條件表達(dá)式與逗號(hào)表達(dá)式表達(dá)式

:用運(yùn)算符將要運(yùn)算的對(duì)象連接起來(lái)的式子運(yùn)算符的優(yōu)先級(jí):如2+5*4運(yùn)算符的結(jié)合性:如3.0*5/2書(shū)寫(xiě)表達(dá)式規(guī)則:如可以寫(xiě)作1.0/2*(a*x+(b+x)/(a+x))

4.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式

運(yùn)算符表達(dá)式

+3+5、+3-5-2、-3*3*5

/3/2(結(jié)果為1)

3/2.0,3.0/2,3.0/2.0(結(jié)果為1.5)%7%4(結(jié)果為3)

(求余)-9%5(結(jié)果為-4)

9%(-5)(結(jié)果為4)

2.0%3(錯(cuò)誤,2.0不是整數(shù))1.單目運(yùn)算符2.雙目運(yùn)算符

字符以其ASCII碼參加運(yùn)算:

‘a(chǎn)’+1為98‘b’-’a’為1‘8’-’0’為8例:設(shè)a為兩位整數(shù),求其各位數(shù)字之和。解:a/10+a%10(如a=24,則結(jié)果為6)例:求一個(gè)整數(shù)b的十位上的數(shù)字。解:(b%100)/10(如b=4321,則結(jié)果為2)

3.算術(shù)運(yùn)算中的類(lèi)型轉(zhuǎn)換

(1)自動(dòng)轉(zhuǎn)換規(guī)則如下doublefloatlongunsignedintchar,short低高例如:2+’a’+1.52+97+1.599+1.599.0+1.5100.5(2)強(qiáng)制類(lèi)型轉(zhuǎn)換一般形式為:

(類(lèi)型名)表達(dá)式例如:

(double)a(將a轉(zhuǎn)換成double類(lèi)型)(int)(x+y)(將x+y的值轉(zhuǎn)換成整型)(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)(int)3.14%2(即3%2)4.2自增、自減運(yùn)算

1.運(yùn)算符:

++、--2.使用格式:

++ii的值先加1,后使用

如i=3;j=++i;j:4,i:4

i++i的值先使用,后加1

如i=3;j=i++;j:3,i:4--ii的值先減1,后使用i--i的值先使用,后減1

又如:

i=3;printf(“%d”,++i);

i=3;printf(“%d”,i++);3.優(yōu)先級(jí)與結(jié)合性

++、--的優(yōu)先級(jí)與單目運(yùn)算符(+、-)相同,比雙目運(yùn)算符(*、/、%、+、-)高

++、--具有右結(jié)合性例如:-a++相當(dāng)于:-(a++)4.使用自增、自減運(yùn)算符的注意事項(xiàng)略4.3位運(yùn)算

1.位運(yùn)算符的種類(lèi)

C語(yǔ)言共有六種位運(yùn)算符:

&按位與運(yùn)算符

|按位或運(yùn)算符

^按位異或運(yùn)算符

<<二進(jìn)制左移運(yùn)算符

>>二進(jìn)制右移運(yùn)算符

~按位取反運(yùn)算符2.按位與運(yùn)算(&)

當(dāng)對(duì)應(yīng)位均為1時(shí),結(jié)果為1;否則為0。例如,12&10的運(yùn)算如下:

12:00001100&10:00001010_________________

結(jié)果:00001000

又如,只保留a的第5位,其余位置0:

a:11010010&020:00010000________________________a&020:000100003.按位或運(yùn)算(|)

對(duì)應(yīng)位均為0時(shí),結(jié)果為0;否則結(jié)果為1。例如:

0123:01010011|014:00001100___________________0123|014:01011111例如:若想使a中的高四位(左端四位)不變,低四位(右端四位)置1,可用:a=a|017。4.按位異或運(yùn)算(^)

當(dāng)對(duì)應(yīng)位相同時(shí),結(jié)果為0;否則為1。例如:00110011^11000011_____________11110000

又如,使a的高四位不變;低四位取反:

a:01101010^017:00001111___________________a^017:011001015.按位取反運(yùn)算(~)

使每一位上的0變1;1變0。

例如;~0115是將八進(jìn)制數(shù)115按位求反。即:

~01001101_______________

結(jié)果:10110010

6.左移運(yùn)算(<<)

例如:

chara=6,b;b=a<<2;

用二進(jìn)制數(shù)如下:

a:00000110(a=6)b=a<<2:00011000(b=24)

7.右移運(yùn)算(>>)

inta=-071400,b;b=a>>2;

符號(hào)位

a的二進(jìn)制原碼表示:1111001100000000a的二進(jìn)制反碼表示:1000110011111111a的二進(jìn)制補(bǔ)碼表示:1000110100000000(機(jī)內(nèi)存儲(chǔ)形式)b=a>>2:1110001101000000b的二進(jìn)制原碼表示:1001110011000000b的八進(jìn)制數(shù):-0163004.4賦值運(yùn)算1.賦值表達(dá)式

變量名=表達(dá)式如a=3b=2*a+102.賦值語(yǔ)句

變量名=表達(dá)式;

如a=3;c=b=a+3;右結(jié)合3.賦值時(shí)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換在賦值語(yǔ)句

變量名=表達(dá)式;中,當(dāng)左右類(lèi)型不同時(shí),系統(tǒng)自動(dòng)轉(zhuǎn)換,具體規(guī)則見(jiàn)表4.1。4.復(fù)合賦值運(yùn)算

+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=例如:a+=3等價(jià)于a=a+3x*=y+8等價(jià)于x=x*(y+8)x/=2*y-10等價(jià)于x=x/(2*y-10)a&=b等價(jià)于a=a&b4.5關(guān)系表達(dá)式與邏輯表達(dá)式4.5.1關(guān)系運(yùn)算符1.六種關(guān)系運(yùn)算符>(大于)>=(大于等于)<(小于)<=(小于或等于)==(等于)!=(不等于)注意:兩字符間不可以加空格,如:<=就不能寫(xiě)成:<=。2.運(yùn)算優(yōu)先級(jí)與結(jié)合性

(1)“>、>=、<、<=”優(yōu)先級(jí)相同,“==、!=”優(yōu)先級(jí)相同,且前四種優(yōu)先級(jí)高于后兩種。

(2)比算術(shù)運(yùn)算符的優(yōu)先級(jí)低、比賦值運(yùn)算符的優(yōu)先級(jí)高(參見(jiàn)附錄C)。

(3)結(jié)合性為“自左向右”3.關(guān)系表達(dá)式

例如:

a>b,a+b>b+c,(a=3)>(b=5),‘a(chǎn)’<’b’,(a>b)>(b<)

關(guān)系表達(dá)式成立,其值為1;關(guān)系表達(dá)式不成立,其值為0。【例4.1】分析下面程序的運(yùn)行結(jié)果。#include<stdio.h>voidmain(){floatx,y=0.6;y=y*11;x=6+0.6;if(x==y)printf("OK,x==y");elseprintf("NO,x!=y");}程序運(yùn)行結(jié)果:NO,x!=y#include<math.h>fabs(x-y)<1e-54.5.2邏輯運(yùn)算符1.三種邏輯運(yùn)算符

!(邏輯非)

&&(邏輯與)

||(邏輯或)運(yùn)算結(jié)果:用1表示“真”,用0表示“假”,例如

!a

a&&b

a||b2.運(yùn)算優(yōu)先級(jí)與結(jié)合性(1)優(yōu)先級(jí)從高到低:!、&&、||,(2)“!”的結(jié)合性是“從右到左”?!?&”和“||”的結(jié)合性是“從左到右”。例如:判別“a小于4且|b|>3”的邏輯表達(dá)式可寫(xiě)為a<4&&(b>3||b<-3),若寫(xiě)成a<4&&b>3||b<-3,則是錯(cuò)誤的。

3.邏輯表達(dá)式在邏輯運(yùn)算中,將非0值視為真、將0視為假。

【例4.2】根據(jù)下列條件,寫(xiě)出C的邏輯表達(dá)式。(1)條件“|x|<10”。

邏輯表達(dá)式為

-10<x&&x<10。

注意,不能寫(xiě)為-10<x<10。(2)條件“|x|是一個(gè)具有兩位數(shù)的整數(shù)”。

邏輯表達(dá)式為

x>=10&&x<=99||x>=-99&&x<=-10。(3)條件“y年是閏年”。

y是閏年的條件為符合下面二者之一:①能被4整除,但不能被100整除。②能被400整除。邏輯表達(dá)式為

y%4==0&&y%100!=0||y%400==0。(4)條件“長(zhǎng)度分別為a、b、c的三條線段能夠組成三角形”。

邏輯表達(dá)式為

a+b>c&&a+c>b&&b+c>a。4.6條件表達(dá)式與逗號(hào)表達(dá)式4.6.1條件表達(dá)式1.條件運(yùn)算符

?:

2.條件表達(dá)式表達(dá)式1?表達(dá)式2:表達(dá)式3

例如x<0?-x:x【例4.3】用條件表達(dá)式求解下列問(wèn)題。(1)求兩個(gè)變量a、b的最大值。

解s=(a>b)?a:b;(2)求三個(gè)變量a、b、c的最大值。

解s=(s=a>b?a:b)>c?s:c;(3)對(duì)字符變量ch,若為小寫(xiě)字母,則改為大寫(xiě)字母,其余字符不變。

ch=(ch>=’a’&&ch<=’z’)?(ch+’A’-‘a(chǎn)’):ch;(4)輸出整型變量x的絕對(duì)值。

解(x>0)?printf(“%d”,x):printf(“%d”,-x);【例4.4】任意輸入三個(gè)整數(shù),按從大到小輸出。程序如下:#include<stdio.h>voidmain(){inta,b,c,m,n,k;

scanf("%d%d%d",&a,&b,&c);m=(m=a>b?a:b)>c?m:c;/*將a、b、c中的最大數(shù)賦給m*/n=(n=a<b?a:b)<c?n:c;/*將a、b、c中的最小數(shù)賦給n*/k=a+b+c-m-n;/*將a、b、c中的中間數(shù)賦給k*/

printf("%d%d%d\n",m,k,n);/*從大到小輸出三個(gè)數(shù)*/}程序運(yùn)行情況:3-59↙93-54.6.2逗號(hào)表達(dá)式形式:表達(dá)式1,表達(dá)式2,……,表達(dá)式n結(jié)合性:從左向右優(yōu)先級(jí):最低逗號(hào)表達(dá)式的值:取最后一個(gè)表達(dá)式的值例如:(1)a=2+3,4*5;(2)inta=2,c;c=(b=a++,a+2);(3)inta=2,c;c

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論