C語言程序設計基本知識點解答_第1頁
C語言程序設計基本知識點解答_第2頁
C語言程序設計基本知識點解答_第3頁
C語言程序設計基本知識點解答_第4頁
C語言程序設計基本知識點解答_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計根本學問點解答(一)

第。章計算機根底學問

Q001>計算機的根本原理是什么?(計算機的根本原理)

A001>計算機的根本原理有兩個:

1.二進制:是指計算機中全部的信息都是以二進制形式的數(shù)據(jù)來表示、存儲、傳遞和運算的。

2.存儲程序限制:是指在利用計算機解決問題時,首先需要人找出解決方法,然后將這個方法用

某種計算機語言轉換成計算機程序(包含了原始數(shù)據(jù)和處理指令),再送入計算機中存儲,最終由

人發(fā)出囑咐,計算機開場依據(jù)程序中的指令和流程執(zhí)行這個程序(即對數(shù)據(jù)進展加工處理)。

Q002>為什么計算機內部運用二進制?(二進制)

A002>運用二進制的主要緣由是:

1.物理上很簡潔實現(xiàn)兩種相對立的穩(wěn)定的能量狀態(tài)(如晶體管的導通與不導通、高電平與低電平、

磁性材料中剩磁的順時針或逆時針方向等)

2.二進制數(shù)據(jù)的運算規(guī)則數(shù)量少而且簡潔,操作實現(xiàn)簡便

Q003>計算機硬件的根本構造是什么?(硬件)

A003>r運算器

,中央處理器CPU[_lsa

I控制器

主機V

I內存儲器]

硬件

?存儲器

系統(tǒng)

r外存儲器

外設V

I輸入輸出設備(I/O)

Q004>計算機硬件系統(tǒng)的核心部件有哪些?它們的作用是什么?(硬件)

A004>計算機硬件系統(tǒng)的四大核心部件是限制器、運算器、存儲器和輸入輸出設備。其中:

限制器是計算機的指揮限制中心。其主要功能是識別翻譯指令代碼并向計算機各部分發(fā)出適當?shù)南?/p>

制信號,以便執(zhí)行機器指令。

運算器是對數(shù)據(jù)進展加工、運算的部件。其主要功能是對二進制數(shù)據(jù)進展算術運算和邏輯運算。

存儲器是存放數(shù)據(jù)和程序的部件。其主要功能是依據(jù)要求向指定的位置存進或取出信息。

輸入設備的功能是將數(shù)據(jù)和程序送入到計算機的存儲器中。常見的輸入設備有鍵盤、鼠標等。

輸出設備的功能是將計算機產生的結果送出計算機外。常見的輸出設備有顯示器、打印機等。

Q005>計算機的根本工作過程是怎樣的?(硬件)(工作過程)

A005>

控制器

I/O運算

計算程序命令指存取命令

原始數(shù)據(jù)令盔■令

t

輸出存數(shù)

計算_I

結果.....控制流

-----數(shù)據(jù)流

Q006>內存儲器和外存儲器有哪些區(qū)分?(存儲器)(內存)

A006>主要區(qū)分如下表所示:

內存儲器(主存儲器)外存儲器(扶植存儲器)

屬于硬件系統(tǒng)的主機部分,位于主機板的屬于硬件系統(tǒng)的外設部分,與運算器和限

構造插槽上,與運算器和限制器干脆聯(lián)絡進展制器必需通過確定的硬件接口相聯(lián)絡進

數(shù)據(jù)交換展數(shù)據(jù)交換

電介質:半導體集成電路磁介質:磁盤或磁帶

物理組成

計算機斷電會使內存數(shù)據(jù)喪失磁介質損傷或消磁會使數(shù)據(jù)喪失

存放計算機系統(tǒng)運行期間正在執(zhí)行的各存放系統(tǒng)程序、各種應用程序和數(shù)據(jù)文件

作用

種程序和數(shù)據(jù)等當前不參加運行的大量信息

Q007>什么叫存儲單元的“位”和“字節(jié)”?(內存)(字節(jié))(位)

A007>“位”(bit):是最小的電子線路單元,只能保存一位二進制數(shù)即一個0或一個1。因此一

個“位”單元可以保存的最大的十進制數(shù)是lo

“字節(jié)”(byte):是由若干個“位”組成的邏輯單元。微機中,1字節(jié)=8位。字節(jié)是最根本的數(shù)

據(jù)存儲單元,即數(shù)據(jù)在內存中的存儲是以“字節(jié)”為根本單位的。任何數(shù)據(jù)總是占據(jù)整數(shù)個“字節(jié)”

單元。

Q008>什么叫存儲單元的地址和內容?(內存)

A008>存儲器從第一個字節(jié)開場到最終一個字節(jié)為止,每一個字節(jié)單元在了邏輯上依次有一個“編

號”,這個編號就叫內存單元的地址。而有這個地址所指向的內存單元中存放的數(shù)據(jù)就叫該內存

單元的內容。

Q009>計算機是如何在內存單元中找到需要的數(shù)據(jù)的?(內存)

A009>計算機總是首先找到所需數(shù)據(jù)所在字節(jié)單元的地址(編號),再到該地址所指向的內存單元

去讀取內存單元的內容(數(shù)據(jù)的值)。

Q010>什么是“機器語言”?(語言)

A010>計算機能干脆執(zhí)行的用于表示機器指令的二進制數(shù)字代碼稱為“機器語言”,也就是機器

指令集合。典型的機器語言程序如下:

10101111

00110111

01110110

……等等幾百個指令

很明顯,這樣的語言寫的程序不易記憶和理解,運用、修改和維護都很費時費勁,而且不易推廣。

Q011>什么是“匯編語言”?(語言)

A011>運用一些符號來代表指令、存放器、存儲單元等機器指令中的要素,然后用這些符號來寫

程序。運用這些助記符代碼的語言,叫做“匯編語言”。典型的匯編語言源程序如下:

MOVA,47翻譯之后就是10101111

ADDA,B00110111

HALT01110110

……等等幾百個指令

優(yōu)點:比機器語言易理解、記憶和運用,速度與機器語言相仿。大量用于實時限制。

不能獨立于機器。匯編語言源程序必需經(jīng)過“匯編程序”的匯編后才能執(zhí)行。

Q012>什么是“高級語言”?(語言)

A012>運用與人類的自然語言和數(shù)學語言相近的符號和運算符構成的語言,叫做“高級語言”。

典型的C語言源程序如下:

voidmain()

inta=l,b=2,c;

c=a+b;

printf("c=%d\n”,c);

優(yōu)點:獨立于機器,通用性和可移植性強;簡潔理解、記憶和學習,運用便利,源程序較短。

缺點:不行以干脆執(zhí)行,源程序必需經(jīng)過''編譯程序”的編譯或“說明程序”的說明后形成目的程

序才行。執(zhí)行速度慢,系統(tǒng)開銷大。

Q013>計算機中表示數(shù)據(jù)的根本原則是什么?(數(shù)據(jù))

A013>計算機中表示數(shù)據(jù)的根本原則是:

一個數(shù)據(jù)總要占據(jù)確定數(shù)目的字節(jié)單元(整數(shù)個字節(jié)、有限個字節(jié))。

不同類型的數(shù)據(jù)占據(jù)不同數(shù)目的字節(jié)單元(比方,PC機DOS環(huán)境下一個整數(shù)占2個字節(jié),一個實

數(shù)占4個字節(jié))。

全部數(shù)據(jù)都是以二進制數(shù)的補碼形式表示的。

當要表示一個數(shù)據(jù)的正負號時,總是用該數(shù)據(jù)所占字節(jié)單元的全部位中最高一位表示數(shù)的符號(0

表示正,1表示負)。

Q014>什么叫“定點數(shù)”和“浮點數(shù)”?(數(shù)據(jù))(定點數(shù))(浮點數(shù))

A014>在計算機中,小數(shù)點位置固定的數(shù)被稱為定點數(shù)。定點數(shù)有定點整數(shù)和定點小數(shù)兩種。

定點整數(shù):小數(shù)點默認為在一個二進制數(shù)最低位的后面。如圖所示:

定點小數(shù):小數(shù)點默認為在一個二進制數(shù)最高位(符號位)的后面。

在計算機中,既有整數(shù)部分又有小數(shù)部分的數(shù)被稱為浮點數(shù)。

第一章C語言根底學問

Q015>什么是“C"?(C)

A015>在現(xiàn)代社會中,組織處理信息的實力是勝利的關鍵。設計計算機的目的就是為了快速而有

效地處理大量信息。但是除非有人告知計算機該干什么和怎么干,否則它什么事情也不能做。這就

是計算機編程語言誕生的緣由,而C語言就屬于一種計算機編程語言。它是一種可以讓軟件工程師

與計算機之間進展有效對話的介于匯編語言和高級語言之間的編程語言。C語言特別靈敏而且適應

性強。自1970年誕生之日起,它始終被用來開發(fā)各種各樣的程序,包括用于微限制器的固化軟件、

操作系統(tǒng)、應用程序和圖形程序。

Q016>什么是“C++”?(C++)

A016>C++是C語言改良之后的產物。這種語言最初被稱為“帶類的C"(Cwithclass)。它增加

了一些特性,其中最重要的特性就是引入了“類“類”是依據(jù)面對對象的程序設計(OOD)思想

來創(chuàng)立的,它能使代碼便于重復運用。C++語言完全兼容C語言,學好C有助于C++的學習。

Q017>如何學習“C”?(C)

A017>學習和駕馭一門編程語言的最終途徑是用這門語言編寫程序。事實上,在編寫程序之前和

之后也有許多很重要的工作要做??偟膩碚f,遵循這樣一個過程是必有收獲的,即:讀別人寫的程

序一自己動手寫程序一調試這個程序直到勝利。這就猶如下圍棋:打棋譜一親自下棋一復盤。

Q018>什么是計算機程序?(程序)

A018>計算機程序主要由兩部分組成:數(shù)據(jù)與指令。在一個計算機程序當中,數(shù)據(jù)和指令總是在

滿意語法規(guī)則的前提下,由程序員依據(jù)某種組織形式支配好它們,從而來描繪對某個具體問題的已

經(jīng)預先制定出來的解決方法和步驟。

程序員運用數(shù)據(jù)來描繪他要操作的信息,運用指令來描繪操作的方法、過程和步驟。

Q019>什么叫“源程序”?(程序)

A019>源程序特指用匯編語言或高級語言編寫出來的,計算機不行以干脆識別并執(zhí)行的數(shù)據(jù)和代

碼的集合。源程序必需經(jīng)過某種“翻譯”過程才能變成計算機可以識別的指令。這個“翻譯”過程

對于匯編語言源程序叫做“匯編”,對于高級語言源程序有“編譯”或“說明”兩種翻譯方法。C

語言源程序承受是“編譯”的方法。

Q020>什么是“編譯器”?(編譯器)

A020>從根本上說,計算機不能干脆識別和執(zhí)行有高級語言編寫的“源程序”,因此必需運用一種

稱之為“翻譯程序”的程序,把“源程序”翻譯成二進制形式的“目的程序”。而“編譯器”就是

這些“翻譯程序”當中的一種。C語言就是一種“編譯”語言,即是說,用C語言寫出的源程序

必需經(jīng)過“C編譯器”的編譯才能變成二進制的代碼。

QO21A我怎么能得到C的“編譯器”?(編譯器)

A021>世界上有許多廠商和團體開發(fā)了許多的“C編譯器”,有商業(yè)版本的,也有完全免費的。比

擬知名的C編譯器有MicrosoftC,TurboC,BorlandC,WatcomC,GNUC等等。商業(yè)版本的編

譯器往往性能更好,所附帶的函數(shù)庫也更豐富,但是需要花錢購置。因此,假設主要目的是為了學

習C語言,那么完全可以運用免費的C編譯器。比方TurboC和GNUC。你可以在有關公司的網(wǎng)站

上或者許多有關C語言的個人網(wǎng)站上下載這些免費的編譯器。

另外一點,由于C++是完全兼容C的,所以你也可以運用C++編譯器來編譯你的C源程序。同樣,

你也可以在互聯(lián)網(wǎng)上下載到免費的C++編譯器,比方Inprise公司(原Borland公司)的C++Builder

編譯器。

Q022>C程序的根本構造和特點是什么?(C程序)(程序構造)

A022>1.一個C程序是由函數(shù)構成的。C語言又被稱作“函數(shù)式語言”。函數(shù)可能是系統(tǒng)庫函數(shù)

或用戶自定義函數(shù)。運用函數(shù)構成程序可以簡潔實現(xiàn)構造化程序設計方法。

2.一個C程序中必需有一個main函數(shù),而且只能有一個。無論主函數(shù)位于程序的何處,程序都由

它開場執(zhí)行。

3.一個函數(shù)由兩部分組成:函數(shù)原型和函數(shù)體。函數(shù)原型確定函數(shù)名,形參數(shù)量和類型,函數(shù)的

返回值及其類型;而函數(shù)體包含在一對{}中,由若干語句組成以實現(xiàn)函數(shù)功能。

4.每個C語句必需以分號完畢。

5.可以用/**/(塊注釋符)在程序中任何地方作注釋。注釋的內容不會被編譯。

6.C程序的書寫格式很自由。

Q023>什么是“函數(shù)”?(函數(shù))

A023>函數(shù)是依據(jù)確定語法規(guī)則被封裝好了的,可以完成特定功能的一段代碼模塊。運用函數(shù)構

成程序可以簡潔實現(xiàn)構造化程序設計方法。

Q024>什么是“系統(tǒng)庫函數(shù)”和“用戶自定義函數(shù)”?(函數(shù))

A024>系統(tǒng)庫函數(shù)是指伴同某個版本的C編譯器一起發(fā)布的已經(jīng)實現(xiàn)了的函數(shù)集合。用戶往往不

能得到這些函數(shù)的源代碼,但是可以在自己的程序里調用這些函數(shù)從而實現(xiàn)相應的功能。

不同公司、不同版本的C編譯器所附帶的庫函數(shù)不盡一樣,但是全部的C編譯器都會附帶一個被稱

之為“標準庫函數(shù)”的函數(shù)庫。因此,在運用標準庫函數(shù)編程時,可以不考慮編譯器的版本問題,

因為全部的編譯器都支持它們。另外也有一些獨立軟件供給商會供給第三方的需要單獨購置的具有

特定功能的函數(shù)庫。

而用戶自定義函數(shù)是指用程序員自己編寫的完成所需功能的函數(shù)。比方,每個C程序中都包含的

main函數(shù)就是一個用戶自定義函數(shù)。

Q025AC語言有哪些“系統(tǒng)庫函數(shù)”?(函數(shù))

A025>每個版本的編譯器都會發(fā)送對所附帶的庫函數(shù)的分類列表和字母依次列表以及具體說明手

冊。另外,也可以查找編譯器所附帶的在線扶植系統(tǒng)來尋求信息。還可以購置有關專家編寫的函數(shù)

運用手冊。假設是標準庫函數(shù)的話,你可以在互聯(lián)網(wǎng)上找到它們的運用說明。

QO26A什么是main函數(shù)?(main函數(shù))(主函數(shù))

AO26A在C程序當中,main函數(shù)是一個具有特定名稱和特別地位的用戶自定義函數(shù)。無論主函數(shù)

位于源程序的何處,程序都從它的第一個語句開場執(zhí)行,到執(zhí)行完最終一個語句完畢。在main函

數(shù)的函數(shù)體中,通過調用系統(tǒng)庫函數(shù)或其它的用戶自定義函數(shù)來完成整體的功能。而其它的自定義

函數(shù)是不能調用main函數(shù)的。

Q027>C程序中,如何定義一個函數(shù)?(函數(shù))

A027A定義一個函數(shù)包括定義函數(shù)頭和定義函數(shù)體。格式如下:

函數(shù)值類型函數(shù)名(函數(shù)形參列表)

函數(shù)體

函數(shù)頭指示了該函數(shù)與其它函數(shù)不同的唯一的函數(shù)名,執(zhí)行該函數(shù)時所必需供給的輸入信息,以及

函數(shù)執(zhí)行完畢后得到的值的類型。

函數(shù)體包含若干個語句來具體實現(xiàn)該函數(shù)的功能。

Q028>C程序中,函數(shù)體為什么要包含在大括號而不是其它的括號當中?(函數(shù))

A028>函數(shù)體總要包含在一對特定的符號中以形成封裝的模塊。其它的高級語言可能運用的是其

它的符號,而C語言中就是運用的大括號。這是規(guī)定。

Q029>什么叫“語句”和“語句完畢符”?(語句)(語句完畢符)

A029>一個語句就是一條囑咐。一個語句在編譯后會變成許多條機器指令,告知計算機做什么事

情。語句可以很簡潔,也可以很困難。為了區(qū)分程序中的若干個語句,每種語言都必需指定一個符

號來標示語句的完畢,這個符號就叫語句完畢符。C語言中的語句完畢符是分號。又是規(guī)定。

Q030>什么叫“注釋”?(注釋)

A030>注釋是指在源程序中,對代碼本身以及代碼所設計的相關信息進展說明和注解的字符序列。

為了區(qū)分源程序中的注釋內容和正式的內容,必需用某種界定符號包圍注釋。

Q031>在編寫計算機源程序中,為什么要添加“注釋”?(注釋)

A031>現(xiàn)代計算機的運行速度已經(jīng)很快,所以對計算機程序的要求從原來的程序大小、算法效率、

編程的技巧性等等已經(jīng)轉變?yōu)槌绦虻目勺x性和可維護性。而添加適當?shù)淖⑨屖潜WC和增加程序可讀

性和可維護性的最重要的手段之一。對大型的程序尤其如此。對沒有注釋或注釋不科學的程序進展

維護和二次開發(fā),其代價和本錢是無法估計阿。因此,對程序員來講,一開場就養(yǎng)成給程序寫注釋

的習慣是至關重要的,這已經(jīng)成為評價一個程序員程度凹凸的重要標準。

Q032>在C程序中,如何添加“注釋”?(注釋)

A032>C語言中,用成對出現(xiàn)的/*/來告知編譯器,包含在/**/之間的全部內容都是注釋。

編譯器在對源程序進展編譯時,將無視和跳過這些內容。

Q033>對于C程序的書寫格式有何規(guī)定?(格式)

A033>C程序的書寫格式是很自由的。你只要不把一個完好的符號或一個常量拆開,其它的都可

以隨意支配。

Q034>在編寫計算機源程序時,為什么要遵循確定的書寫標準?(格式)

A034>緣由很簡潔也很重要:保證和增加程序的可讀性和可維護性。一幅美麗的書法會使人賞心

悅目,可一幅涂鴉則會使人雅興大減。

Q035>關于良好的書寫標準和編碼習慣,有何建議?(格式)

A035>只是建議,并非規(guī)定,但事實上已經(jīng)約定俗成:

1.適當?shù)淖⑨寱蟠笤黾映绦虻目勺x性和可維護性

2.一行盡量只寫一個語句

3.運用有規(guī)則的縮進式代碼排列方式

4.在需要的地方加上一些空行

5.起有意義和易于區(qū)分的符號名

QO37A什么是IDE?(IDE)(集成開發(fā)環(huán)境)

A037>是集成開發(fā)環(huán)境IntegratedDevelopEnvironment的縮寫。IDE包含了編輯器Editor、編

譯器Compiler、連接程序Linker、工程管理程序ProjectManager>調試器Debugger、在線扶植

系統(tǒng)OnlineHelpSystem和其它一些扶植開發(fā)工具OtherTools。用戶的全部開發(fā)工作都可以在

一個IDE中完成。

Q038>怎么學習運用IDE?(IDE)(集成開發(fā)環(huán)境)

A038>最好的方法就是查看IDE自帶的在線扶植系統(tǒng)。絕大多數(shù)的IDE都帶有詳盡的扶植系統(tǒng),

對IDE本身的組成、功能和運用有具體的說明。除此之外,扶植系統(tǒng)中還包含對全部庫函數(shù)和扶植

工具的運用說明。因此,確定要學會看扶植。當然,這對你的計算機英語程度有較高要求。

Q039>什么叫“預編譯”?(預編譯)

A039>在對源程序進展正式編譯之前所做的一些處理工作叫做預編譯。最常見的預編譯工作就是

用include包含文件和用define進展符號交換。C源程序中,全部的預編譯囑咐都由#號開頭。運

用預編譯囑咐,可以供給C語言本身不包含的一些擴大功能。

Q040>什么叫“編譯”?(編譯)

A040>將高級語言源程序翻譯成二進制代碼的目的程序的一種方法和過程。完成這個過程的是一

個特地的程序,叫“編譯器”。

Q041>什么叫“連接"?(連接)

A041>將編譯后的二進制目的程序和有關函數(shù)庫進展連接并打包成可執(zhí)行程序的過程叫做連接。

完成這個過程的是一個特地的程序,叫“連接器”。

Q042>什么叫“調試”?(調試)

A042>一個程序恒久不行能一次就完全寫正確,總會存在這樣那樣的錯誤。有些錯誤屬于簡潔的

語法錯誤,有些錯誤屬于困難的邏輯錯誤,有些錯誤直到程序運行時才有可能覺察。檢查并解除全

部這些錯誤直到程序完全正確的過程就叫調試。編寫一個大型的程序,往往有一半的時間用在了調

試工作上,因此,學習調試的方法,積累調試的閱歷時一個程序員必需要閱歷的過程。

Q043>用C語言只能寫在DOS下運行的程序嗎?(C)

A043>當然不是。不管是DOS和WINDOWS,還是Unix和Linux,或者其它的操作系統(tǒng),你所需要

的就是屬于那個操作系統(tǒng)的C或C++“編譯器”,你就可以用C語言編寫在那個操作系統(tǒng)下運行的

程序。當然,不同的操作系統(tǒng)下,由于程序運行的原理不一樣,因此編程的原理睬有所不同。

Q044>除了C程序設計的書籍外,還有更多學習C語言的資源嗎?(C)(學習)

A044A有,那就是INTERNET。你只要在某個搜尋引擎中輸入諸如“C語言”、“C教程”、“C源碼”

之類的關鍵字,就會搜尋到成百上千的網(wǎng)站和網(wǎng)頁。國外關于c語言教程和C語言編程的網(wǎng)站就更

多了。學會運用并用好這些資源,你很快就會變成一個C語言高手。

第二章算法根底學問

Q045>什么叫“算法”?(算法)

A045>算法,簡潔的說就是為解決一個問題而實行的方法和步驟。一個實際問題假設需要通過編

寫計算機程序來解決的話,就必需首先制定出解決該問題的算法。對于同一個問題可能存在著不同

的解決方法和步驟,也就是說有不同的算法。所以確定算法時,在保證正確有效的前提下,應當盡

量進步算法的效率和質量。另外,我們更關切的是特地針對計算機編程而制定的算法,而不是一般

的一般意義上的算法。

Q046>能否舉例說明什么是“計算機算法”?(算法)

AO46A例如編程序求1X2X3X4X5X…X10。對于這樣一個具體問題,我們可以得到不止一個

的算法。

算法1:干脆寫一個乘法表達式來計算,即

SI:prod=lX2X3X4X5X6X7X8X9X10

這個算法的結果雖然是正確的,但是這樣的解決方法和步驟明顯不是有效合理的。因為假設問題變

成了求1X2X3X4X5X…X100,或者變成了1X3X5X7X9X…X101,那么這種方法就不適用

了。

算法2:利用編程語言中“變量”的概念,每次計算一個乘法并把結果保存在該變量中,下次再用

這個變量去乘以下一個數(shù),即

SI:prod=l

S2:prod=prodX2

S3:prod=prodX3

S4:prod=prodX4

S5:prod=prodX5

S10:prod=prodX10

這個算法的結果也是正確的,比算法1簡潔一些,但是照舊不是有效合理的,同樣的問題就在于算

法不通用。

算法3:利用“變量”的概念的同時,再利用“循環(huán)”的解決方法,可以實現(xiàn)真正的計算機算法

SI:prod=l

S2:n=l

S3:prod=prodXn

S4:n=n+l

S5:假設nWlO,則返回到S3;否則,完畢

這個算法具有通用性、靈敏性。因為只要是同樣的類似的問題,那么這個算法是不需要作大的改動

的。而且全部計算機語言都有實現(xiàn)“循環(huán)”的限制語句,因此這個算法就是我們所說的有效的正確

的計算機算法。

Q047>一個計算機算法應當有什么樣的特性?(算法)

A047>一個算法應具有以下特點:

(1)有窮性:一個算法的步驟必需是合理有限的

(2)確定性:算法中的每一個步驟應當是確定的,而不應當是模糊的、模棱兩可的

(3)有零個或多個輸入:執(zhí)行算法是需從外界獲得必要的信息

(4)有一個或多個輸出:執(zhí)行一個算法后應當有必要的結果

(5)有效性:算法中的每一個步驟都必需是能有效成立和有效執(zhí)行,并得到確定結果的。

Q048>如何表示一個計算機算法?(算法)(算法的表示)

A048>一個算法制定好后,總要通過某種方式把它表示出來,以便自己和其別人閱讀理解。通常,

可以通過“自然語言”、“流程圖”、“偽代碼”、“計算機語言”等方法來描繪一個計算機算法。

自然語言就是人們日常運用的語言,可以是英語、漢語或其它語言。用自然語言表示算法通俗易懂,

但文字冗長,含義不太嚴格,簡潔出現(xiàn)“歧義性”。止匕外,用自然語言表示包含分支和循環(huán)的算法

也不便利。因此,最常見的計算機算法表示方法就是“流程圖”。用“計算機語言”來描繪算法事

實上就是我們通常所說的編程序,即程序事實上就是對一個算法的描繪?!皞未a”是用介于自然

語言和計算機語言之間的文字和符號來描繪算法。它猶如一篇文章。自上而下地寫下來。每一行(或

幾行)表示一個根本操作。它不用圖形符號。因此書寫便利。格式緊湊,也比擬好懂,便于向計算

機語言算法(即程序)過渡。

Q049>如何用流程圖表示一個計算機算法?(算法的表示)(流程圖)

A049>流程圖是用一些事先規(guī)定好的具有某種含義的圖框和流程線來表示算法中的步驟和各種操

作。這是用傳統(tǒng)流程圖表示的求1X2X3X4X5X…X10的算法:

用流程圖表示算法直觀形象,邏輯清晰,但是占用篇幅較多,

尤其當算法比擬困難時,畫流程圖既費時又不便利,而且當算

法不斷改動時,流程圖的修改也特別費事,因此流程圖宜用于

表示一個完成的最終算法。

流程圖有許多種類型,最常見的是傳統(tǒng)流程圖和N-S流程圖。

傳統(tǒng)流程圖中由于對流程線的運用沒有嚴格限制,全部很簡潔

造成流程圖的混亂和無規(guī)律。

Q050>什么是根本程序構造?(程序構造)

A050>為了進步算法的質量,使算法設計和閱讀便利,必需限制傳統(tǒng)流程圖當中流程線的濫用,

即不允許無規(guī)律的使流程轉向,只能依次的進展下去。但是,一個算法當中難免會包含一些分支和

重復而不行能全部由一個一個步驟依次向下構成。為理解決這個問題,人們規(guī)定出幾種根本程序構

造,然后由這些根本程序構造按確定規(guī)律組成一個算法構造,整個算法的描繪則是由上而下的將各

個根本構造依次排列起來而成的。根本程序構造有三種,分別是依次構造、分支構造和重復構造。

流程圖如下。用這三種根本構造就可以表示任何困難的算法。

順序結構選擇結構循環(huán)結構

C語言程序設計根本學問點解答(二)

第三章數(shù)據(jù)類型、運算符和表達式

Q051>什么是“數(shù)據(jù)類型”?(數(shù)據(jù)類型)

A051>數(shù)據(jù)類型就是指數(shù)據(jù)在計算機中保存和運算時的組織和形式。實際問題當中原來就有若干

種不同類型的數(shù)據(jù),因此用來解決這些實際問題的計算機編程語言中自然應當有對應的數(shù)據(jù)類型來

描繪這些數(shù)據(jù)。比方最根本的數(shù)據(jù)類型就是整數(shù)、實數(shù),另外還有非數(shù)值型的數(shù)據(jù)類型,如字符串。

一個計算機程序中用到的全部數(shù)據(jù)都必需具有某種類型。

Q052>什么是“運算符”?(運算符)

A052>運算符是指一些具有規(guī)定運算功能的特定的符號。如+、-、*、/、%等等。這里的運算功能

可能是我們比擬熟識的運算比方算術運算(加減乘除)、邏輯運算(與或非)或比擬運算(大于小

于等于),也可能是其他一些在計算機語言當中特有的運算如加1減1運算、位運算等等。C語言

共有34種運算符。

Q053>什么是“表達式”?(表達式)(優(yōu)先級)(結合性)

A053>表達式是依據(jù)運算符的性質,用運算符把數(shù)據(jù)連接起來以到達數(shù)據(jù)運算目的而構成的式子。

寫表達式的最終目的是要進展計算它求出它的值。求解表達式的過程是由計算機完成的,因此,要

想得到正確的結果,就必需寫出正確的表達式。而一個表達式中往往包含多個運算符,所以必需熟

識每一種運算符的性質(優(yōu)先級別和結合性),才能寫出有正確求解結果的表達式。

Q054>C語言有哪些數(shù)據(jù)類型?(數(shù)據(jù)類型)

A054AC語言中的所以數(shù)據(jù)類型如下圖所示:

整型

'「單精度型

實型V

廣基本類型<I雙精度型

字符型

I枚舉類型

c的數(shù)組類型

據(jù)

數(shù)

類構造類型J結構體類型

〔共用體類型

指針類型

L空類型

Q055>什么是“常量”?(常量)

A055>程序運行期間,值不能被變更的量稱為常量。假設試圖去變更常量的值,就確定會出錯。

在C語言中,至少有兩種方法表示一個常量,即“干脆常量”和“符號常量二

Q056>什么是“干脆常量”?(常量)

AO56A干脆常量也叫字面常量,就是一看就知道的、干脆具有具體的固定的值的量。比方1、2、

3;0.1、10.0;'a','1';"hello”等。常量也是有類型的。前面所列舉的常量就分別是整型、實

型、字符型和字符串型的常量。

Q057>什么是“符號常量”?(常量)(符號常量)

A057>干脆常量的好處是一看就知道的它的值,但是缺點是讀程序的人無法便利的知道這個值原

委代表什么含義,即這個值傳達的信息是不完好不明確的。這樣的數(shù)經(jīng)常被稱之為“幻數(shù)(Magic

Number)"o假設我們可以給這些數(shù)值起一個有意義有具體含義的名字就可以解決這個問題了。符號

常量的目的就在此。它是用一些符號來代替程序當中出現(xiàn)的常量。從而使得程序的可讀性和可維護

性大大增加。

Q058>C語言中,如何實現(xiàn)“符號常量”?(常量)(符號常量)

AO58AC語言中,可以運用#define預處理囑咐來實現(xiàn)符號常量。例如下面的程序:

#definePI3.14159

intmain()

(

floatr,c,s,v;r=2;

printfCPI=%f\n”,PI);

c=2*PI*r;printf("周長=%f\nz,,c);

s=PI*r*r;printf("面積=%f\n”,s);

v=4*PI*r*r*r/3;printf("體積=%f\n”,v);

return0;

第一步,程序第一行用#define預處理囑咐定義了一個符號常量,其名字是PL代表的常量值是

3.14159。第二步,在本程序以下的代碼中,但凡原來干脆出現(xiàn)3.14159的地方,全部換成符號PI。

這樣修改后程序運行的結果和干脆運用字面常量是一樣的。

Q059>用#define實現(xiàn)符號常量的原理是什么?(符號常量)(define)

A059>事實上是一個在預處理階段的交換過程。在前述問題的程序中,第一行的含義就是定義了

一個符號名字叫做PI,它代替的一串字符是3.14159。然后,在對這個程序進展編譯時,編譯器首

先啟動預編譯器(preprocessor)對源程序進展預編譯處理。當預編譯器覺察程序中有諸如#define

這樣的預編譯囑咐時,就對它們進展相應囑咐指定的處理。比方,對于#define預編譯囑咐,預編

譯器就掃描整個源程序代碼,將其中全部出現(xiàn)的由#define定義的符號全部交換成在#define囑咐

行定義的符號后出現(xiàn)的字符串。因此,上述程序在預編譯處理后,就變成了

intmain()

floatr,c,s,v;r=2;

printfCPI=M\n”,3.14159);

c=2*3.14159*r;printf(“周長二研'、,c);

s=3.14159*r*r;printf("面積=財\11”,s);

v=4*3.14159*r*r*r/3;printf("體積=恥\4,v);

return0;

因此就猶如干脆運用字面常量一樣了。

Q060>運用“符號常量”的好處是什么?(符號常量)

A060>兩個主要的好處:

(1)從所起的符號名字中可以清晰地看出該常量的含義,從而做到“見名知意”,避開“幻數(shù)”。

比方上述程序中閱讀此程序的人很簡潔的由符號名PI知道這個常量的含義就是圓周率。當然要想

到達這樣的效果,前提是所起符號名稱必需和實際含義相符合。因為符號是可以隨意命名的,你完

全可以用這樣的#define囑咐#definePRICE3.14159來定義一個符號PRICE代替3.14159,但

是這樣作就失去符號常量的存在意義了。

(2)在需要修改常量的值時可以做到“一改全改”,削減工作量。假設一個常量的值發(fā)生了變更,

假設原來是用干脆常量實現(xiàn)的,那么很明顯程序的修改工作量就很大,尤其是當這個常量出現(xiàn)次數(shù)

許多的時候。但是,假設用符號常量來實現(xiàn)的話,那么只需要改動一個地方,就是#define囑咐這

個地方,而程序其它部分完全不需改動,因為在進展預編譯時新的常量值會被正確的交換進去。

Q061>為什么在Q058的程序中,第5行的第一個PI沒有被交換成3.14159?(符號常量)

A061>在預編譯器對源程序代碼當中出現(xiàn)的符號常量進展交換時,并不是但凡覺察有一樣的符號

名就無條件交換。至少有兩種狀況下,這個交換不會發(fā)生:

第一:這個符號出如今雙引號當中。雙引號括起來的叫做字符串常量,要的就是其中包含的原義字

符,所以不會被交換;

第二:這個符號不是單獨且完好出現(xiàn)的,而是另一個符號的一部分。比方,定義了符號常量PI,

那么代碼中假設有另一個符號叫API,,那么交換不會發(fā)生,即不會變成A3.14159。

Q062>什么是“預編譯”?(預編譯)

A062>預編譯也叫編譯預處理:是指在對源程序進展正式編譯之前所作的一些處理。這些處理是

由預處理囑咐指定的。源程序經(jīng)過預處理后,再由編譯程序進展正式的編譯。預處理囑咐雖然用在

C程序中,但它并不是C語言本身的組成部分,不能用C編譯器干脆對它進展編譯,必需由預編譯

器來處理。預處理囑咐都是以符號開頭的。

Q063>什么是“變量”?(變量)

A063>程序運行期間,值可以被變更的量稱為變量。C程序允許把數(shù)值存放在變量中,每個變量

都由一個變量名來標識。每個變量都必需有一個變量類型。每個變量依據(jù)它的類型不同,在內存中

占據(jù)確定數(shù)目的字節(jié)單元,該變量的值就存放在這些內存單元中。

Q064>“變量”的本質是什么?(變量)

A064A變量的本質就是命名的內存單元,因此它的值可以被變更。所謂變更變量的值事實上是變

更變量所占內存單元中的內容,因為變量名和內存單元的地址、變量值和內存單元的內容是相對應

的。如圖所示:

變量名prod實際內存單元

上是一個符號地址\Z的地址

prod

123是變量

123

prod的變量值V,

變量prod所占內存單元

據(jù)的內存單元的內容

Q065>變量的名字是否可以隨意命名?(變量)

A065>當然不是。任何計算機編程語言中,關于標記符號的命名總是有規(guī)定的。變量名就屬于標

記符的一種,其它的標記符還有符號常量名、數(shù)組名、函數(shù)名、構造類型名等等。C語言中,變量

(標識符)的命名規(guī)定是:

■只能由大小寫字母、下劃線和數(shù)字組成;

■開頭的第一個字符只能是大小寫字母或下劃線;

■大小寫是敏感的;

?不能與C語言中的關鍵字重復;

-名字在其作用范圍內必需是唯一的;

■名字的長度不能超過系統(tǒng)的規(guī)定。具體的長度限制隨系統(tǒng)不同而不同。

QO66A在A065中提到的“關鍵字”是什么?(關鍵字)

A066>關鍵字(Keyword),也叫保存字(Reserveword),是計算機語言當中具有預先固定的命名

的、能完成指定功能的符號。一種編程語言的很大一部分功能就是由關鍵字來完成的。C語言一共

有32個關鍵字。其中,部分是用于定義變量類型的,如int、long、float,char等,部分是用于

實現(xiàn)根本程序構造的,如if、switch,while,for等??梢赃@么說,關鍵字+運算符就等于一門

語言的絕大部分功能。

Q067>我聽別人說過“好的變量名”,這是指什么?(變量名)

A067>理論上將,變量命名只要滿意上述規(guī)定,任何名字都是可以的。但是,在給變量命名時,

除了規(guī)定之外,還有一個良好的命名習慣的問題。即是說,首先要起合法的名字,其次要起好的名

字。所謂好的變量名,最主要的要求就是要“見名知意二別人通過變量的名字就可知道這個變量

所保存信息的含義,這有助于增加程序的可讀性。關于命名習慣,有如下建議:

-避開運用無意義的名字,應嚴格做到“見名知意”;

■盡量運用代表變量實際含義的英文單詞或縮寫作標識符名;

■當名字包含多個單詞時,通常使每個單詞的首字母大寫;

■不運用以下劃線開頭的名字,因為這樣的名字通常是系統(tǒng)內部保存的標識符名;

■在整個程序中盡量保持統(tǒng)一的命名方式。

Q068>在編譯程序時,提示有錯,錯誤為"Error:Undefinedsymbol?",這是什么緣由?

(變量)(定義變量)

A068>"Undefinedsymbol"的意思是“為定義的符號”,就是說程序當中存在著還沒有定義就干

脆運用的變量。這是因為C語言語法上要求,任何一個變量在運用之前必需先定義它。所謂定義一

個變量,就是要在該變量被運用之前,告知編譯器該變量的名字、類型和存儲類別,這樣編譯器才

能正確編譯

Q069>那么,如何定義變量?(定義變量)

A069>變量定義具有三個目的:⑴定義變量名;⑵定義變量類型;⑶向程序員描繪該變量。

變量定義的一般格式是:typename;Acomment*/

類型名字;/*注釋*/

例如:

intage;/*theageofstudent*/

floatscore;/*thescoreofstudent*/

floataverage;/*theaverageofscore*/

longnumber;/*thenumberofstudent*/

doubledistance;/*betweenearth&moon*/

charUserSelection;/*keyuserhit*/

在程序運行時,系統(tǒng)將依據(jù)變量的定義為其支配相應大小的內存單元。

Q070>為什么在C語言中,整數(shù)017和17并不是一樣的?(整型)

A070>這是因為在C語言中,17是十進制的整數(shù),而017是八進制整數(shù),相當于十進制的15。C

語言中對于同一個整型常量,可以有三種不同的形式來表示,即分別用十進制、八進制、十六進制

來表示同一個數(shù)。為了區(qū)分不同進制的整型常量,也為了和其它的標記符區(qū)分,C語言中規(guī)定,以

數(shù)字“0”開頭的整型常量是八進制的,而以“Ox”開頭的整型常量的整型是十六進制的。比方十

進制整數(shù)18,就等價與八進制整數(shù)022,也等價與十六進制整數(shù)0x12。

Q071>在C語言中,整型變量是如何分類的?(整型)

A071>在C語言中,整型變量分為兩大類:有符號整型和無符號整型。而不管是有符號還是無符

號整型變量,又都分為根本整型、短整型和長整型三種。分類狀況如下表所示:

占字節(jié)數(shù)目

類型關鍵字

(TurboC)

根本整型signedint2字節(jié)

signedshortint

有符號短整型2字節(jié)

signed(signedshort)

signedlongint

長整型4字節(jié)

(signedlong)

根本整型unsignedint2字節(jié)

無符號

unsignedshortint

unsigned短整型2字節(jié)

(unsignedshort)

unsignedlongint

長整型4字節(jié)

(unsignedlong)

其中,有符號整型變量中,關鍵字signed可以省略。

Q072>為什么C語言中,整型變量要分許多種?(整型)

A072>一方面是因為實際問題當中的數(shù)據(jù)原來就是具有不同的類型的,更主要的是因為這些數(shù)據(jù)

的變更范圍是不同的。不同范圍的數(shù)據(jù)所需要的內存存儲單元也是不一樣的。因此,必需依據(jù)數(shù)據(jù)

的范圍來確定給它支配多大的存儲空間,而不致發(fā)生空間不夠或空間奢侈的問題。這就好比學校的

教學樓里,既有大教室,也有小教室,然后依據(jù)來上課的人數(shù)分協(xié)作適的教室。而不是全部都是大

教室,那樣就會產生教室缺乏或教室奢侈的問題。C語言供給了多種整型數(shù)據(jù)類型,不同類型的整

型數(shù)據(jù)占有的字節(jié)單元數(shù)目是不同的,所以不同類型的整型數(shù)據(jù)可表示的數(shù)的范圍也是不同的,這

樣有助于依據(jù)實際數(shù)據(jù)的最大值來確定其最適宜的類型。

Q073>那么,原委每種整型變量能保存的數(shù)據(jù)范圍是多少呢?(整型)

A073>由于每一種整型數(shù)據(jù)占有的字節(jié)單元數(shù)目都是有限的,所以每一種整型數(shù)據(jù)可表示的數(shù)的

范圍也是有限的。ANSIC標準定義的整型類型的表示范圍如下表所示:

類型字節(jié)數(shù)有效表示范圍

[signed]int2字節(jié)-32768?+32767

unsignedint2字節(jié)0?+65535

[signed]short[int]2字節(jié)-32768?+32767

unsignedshort[int]2字節(jié)0?+65535

[signed]long[int]4字節(jié)-2147483648?+2147483647

unsignedlong[int]4字節(jié)0?+4294967295

Q074>有符號和無符號的區(qū)分是什么?(整型)

A074>有符號和無符號的區(qū)分關鍵在于變量所占字節(jié)單元中“最高位”的性質。

?對于有符號變量:把最高位作為符號位保存數(shù)據(jù)的符號(0為正,1為負),其余位保存具體數(shù)

值,因此可以用于正確保存限值范圍內的正數(shù)或負數(shù)。比方有inta;那么a的有效數(shù)值保存

范圍為-32768?32767。

?對于無符號變量:最高位不作為符號位,全部的位都用來保存數(shù)據(jù)的數(shù)值,因此可以用于正確

保存限值范圍內的正數(shù)。比方有unsignedintb;那么b的有效數(shù)值范圍為0~65535。

Q075>為什么下面的程序中,輸出的結果是over=32768,而不是期望的over=32768(整型)

voidmain()

(

intmax,over;

max=32767;over=max+1;

printf("over=%d”,over);

A075>因為發(fā)生了整型數(shù)據(jù)的“溢出”問題。前面已經(jīng)說過,由于每一種整型數(shù)據(jù)占有的字節(jié)單

元數(shù)目都是有限的,所以每一種整型數(shù)據(jù)可表示的數(shù)的范圍也是有限的。程序中,max是int有符

號根本整型的變量,所以其有效的數(shù)據(jù)保存范圍就是-32768?+32767o當max等于32767時,實

際其所占兩個字節(jié)中的狀況如圖所示:

max是:32767

max+l后賦值給同樣的int有符號根本整型的變量over,則over中實際其所占兩個字節(jié)中的狀況

如圖所示,很明顯已經(jīng)變成了-32768的補碼了。

max+1-over是:-32768

1000000000000000

所以用printf函數(shù)依據(jù)%d格式顯示出來就是-32768。

Q076>那怎樣才不會出現(xiàn)“整型數(shù)據(jù)溢出"的問題呢?(整型)

A076>解決的方法就是,在定義變量時確定要指定適宜的類型,保證它所保存的數(shù)據(jù)在整個程序

運行過程中不會超出其可以有效表示的范圍。比方,上面的程序中,假設把over定義成unsigned

int或long型的變量就可以避開“溢出”的問題。

Q077>實型變量是如何分類的?(實型)

A077>實型變量的分類如下表所示:

類型單精度雙精度

關鍵字floatdouble

字節(jié)數(shù)4字節(jié)8字節(jié)

有效數(shù)字位數(shù)6~7位15-16位

數(shù)值范圍10"?10*381O-M7-1O-308

很明顯,由于不同的實型數(shù)據(jù)是用不同數(shù)目的有限字節(jié)單元保存的,所以它們能表示的數(shù)值范圍是

不同的,能保存的有效數(shù)字位數(shù)也是不同而且是有限的。

Q078>實型數(shù)據(jù)在內存中是如何存儲的?(實型)

A078>實型數(shù)據(jù)在內存中是以“尾數(shù)”和“階碼”的形式存放的。即在一個實型數(shù)據(jù)(浮點數(shù))

所占字節(jié)單元中,一部分位用來保存階碼,一部分位用來保存尾數(shù)。如圖所示:

±尾數(shù)部分±階碼部分

不同的編譯系統(tǒng)位數(shù)支配不同??傊?,尾數(shù)部分位數(shù)越多,可以表示的數(shù)的有效數(shù)字位數(shù)就越多,

精度就越高;階碼部分位數(shù)越多,可以表示的數(shù)的范圍就越大。

Q079>什么是字符型常量?(字符型)

A079>C的字符常量是用單引號(')括起來的一個字符。比方:‘a'、’A'、’d'、’D'、‘‘、’對、

,$,、,2'、’4'等等。留意兩點:第一,必需是單引號,第二,單引號里只能有一個字符。

Q080>為什么字符常量要用單引號括起來?(字符型)

A080>這是為了和程序中其它類型的數(shù)據(jù)區(qū)分開來。比方字符常量'A',假設不加單引號,只是一

個A,那么確定會被編譯器認為成一個符號的名字比方變量名。又比方字符常量’1',假設不加單

引號,只是一個1,那么確定會被編譯器認為成是一個整型常量1。因此,必需在所需要的字符四

周加上一些稱之為“界定符”的字符把它們包圍起來,才能和其它數(shù)據(jù)進展區(qū)分。

Q081>既然單引號里只能有一個字符,為什么有的程序中會出現(xiàn)‘\n','\101'這樣的字符?

(字符型)

A081>這是因為除了前面提到的“單引號括起來的一個字符”形式的字符常量,C語言還存在另

一種形式的特別的字符常量,叫“轉義字符常量”。它是用單引號括起來的以一個“\”字符開頭的

規(guī)定的字符序列。比方問題當中提到的‘\n',在轉義字符常量中,單引號里面確實是不止

一個字符,但事實上整個還是只代表一個字符,也是合法的字符常量。這也就是“轉義”之含義。

起到轉義作用的是單引號當中的“\",它被用來作為轉義字符序列的起始字符。假設單引號中起

始字符不是“\”,又多于一個字符,那么就不是合法的字符常量了。比方,‘nn','101'就不是合

法的字符常量。

Q082>為什么要用到“轉義字符常量”?(字符型)(轉義字符常量)

A082>因為除了鍵盤上的全部字符外

溫馨提示

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

評論

0/150

提交評論