第一章程序設(shè)計(jì)與C語(yǔ)言_第1頁(yè)
第一章程序設(shè)計(jì)與C語(yǔ)言_第2頁(yè)
第一章程序設(shè)計(jì)與C語(yǔ)言_第3頁(yè)
第一章程序設(shè)計(jì)與C語(yǔ)言_第4頁(yè)
第一章程序設(shè)計(jì)與C語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩28頁(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、2022-3-16C語(yǔ)言程序設(shè)計(jì)1 C語(yǔ)言程序設(shè)計(jì) 張芳 主編 (王維強(qiáng) 輔助設(shè)計(jì))北京:電子工業(yè)出版社出版2022-3-16C語(yǔ)言程序設(shè)計(jì)2C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì) C Programmer2022-3-16C語(yǔ)言程序設(shè)計(jì)3院樓二層軟件教研室院樓二層軟件教研室電話:電話MAIL:如何與老師聯(lián)系如何與老師聯(lián)系?2022-3-16C語(yǔ)言程序設(shè)計(jì)4第一章 程序設(shè)計(jì)與C語(yǔ)言 1.1 C語(yǔ)言 概述 1.2C語(yǔ)言的程序結(jié)構(gòu) 1.3 術(shù)語(yǔ) 1.4 C語(yǔ)言的上機(jī)步驟 1.5 算法簡(jiǎn)介習(xí)題(一)及參考答案與解析2022-3-16C語(yǔ)言程序設(shè)計(jì)51.1 C語(yǔ)言概述 程序設(shè)計(jì)語(yǔ)言現(xiàn)在已

2、經(jīng)發(fā)展到了第四代。它的發(fā)展過(guò)程大體上是這樣的:2022-3-16C語(yǔ)言程序設(shè)計(jì)6(1)機(jī)器語(yǔ)言 也有的稱為CPU的指令系統(tǒng)。大約在20世紀(jì)50年代,人們開(kāi)始用由二進(jìn)制數(shù)“0”、“1”構(gòu)成的指令碼編寫(xiě)程序。程序的可讀性很差,并且難于修改、擴(kuò)充和移植。因此,當(dāng)時(shí)的編程人員只是極少數(shù)計(jì)算機(jī)專業(yè)技術(shù)人員,并且程序只用于特定類型的計(jì)算機(jī)和特定的用途。這也使得其運(yùn)算效率是所有語(yǔ)言中最高的。人們習(xí)慣上把機(jī)器語(yǔ)言稱為第一代程序語(yǔ)言。(2)匯編語(yǔ)言 也稱為符號(hào)語(yǔ)言,是用諸如:“ADD”(代表加法)、“MOV”(代表數(shù)據(jù)傳送)等助記符號(hào)(一些簡(jiǎn)潔的英文字母、符號(hào)串)描述的指令系統(tǒng)。雖然與機(jī)器語(yǔ)言相比,有了較大的進(jìn)

3、步(減輕了使用機(jī)器語(yǔ)言編程的痛苦,人們很容易讀懂并理解程序在干什么,糾錯(cuò)及維護(hù)都變得方便了),但仍未完全擺脫具體機(jī)型的限制,且程序的可讀性比較差,也不容易修改、擴(kuò)充和移植。而此時(shí)人們?cè)O(shè)計(jì)出的具有用一條指令來(lái)描述若干條指令功能的宏匯編,是程序語(yǔ)言發(fā)展史上的一個(gè)巨大進(jìn)步。由于作為第二代程序語(yǔ)言的匯編語(yǔ)言和機(jī)器語(yǔ)言一樣,都是面向計(jì)算機(jī)硬件的,所以它們又被稱為面向機(jī)器的語(yǔ)言。(3)面向過(guò)程的高級(jí)語(yǔ)言 也有人稱之為算法語(yǔ)言,它主要面向解題的過(guò)程,這種語(yǔ)言接近于數(shù)學(xué)語(yǔ)言或人的自然語(yǔ)言,同時(shí)又不依賴于計(jì)算機(jī)硬件,編出的程序能在所有機(jī)器上通用。這些語(yǔ)言大約產(chǎn)生于20世紀(jì)60年代,主要有BASIC、C、FORT

4、RAN、PASCAL和C+等,人們稱之為第三代程序語(yǔ)言。(4)非過(guò)程化的高級(jí)語(yǔ)言 使用過(guò)程化的語(yǔ)言解題。隨著計(jì)算機(jī)圖形學(xué)的發(fā)展,面向?qū)ο蟮某绦蛟O(shè)計(jì)方法和可視化軟件開(kāi)發(fā)越來(lái)越流行,這為非計(jì)算機(jī)專業(yè)人員提供了極大地方便。象用C語(yǔ)言開(kāi)發(fā)的FOXBASE+等非過(guò)程化的高級(jí)語(yǔ)言,被稱之為第四代程序語(yǔ)言。 2022-3-16C語(yǔ)言程序設(shè)計(jì)7現(xiàn)在使用的大多數(shù)程序是用高級(jí)程序(過(guò)程)語(yǔ)言編寫(xiě)的,而C語(yǔ)言就是其中的“頂梁柱”。C語(yǔ)言是一種編譯型程序語(yǔ)言,其前身是60年代開(kāi)發(fā)的BSPC語(yǔ)言,當(dāng)時(shí)就能夠處理與機(jī)器本身數(shù)據(jù)類型相近的數(shù)據(jù),而且具有與內(nèi)存地址對(duì)應(yīng)的指針處理方式。到了1970年在繼承和發(fā)展BCPC語(yǔ)言這些

5、特點(diǎn)的基礎(chǔ)上,又提出了“B語(yǔ)言”,小型機(jī)的UNIX操作系統(tǒng)就是使用B語(yǔ)言記述和開(kāi)發(fā)的。此后在進(jìn)行UNIX操作系統(tǒng)的開(kāi)發(fā)工作中,對(duì)B語(yǔ)言做了進(jìn)一步完善,美國(guó)AT&T公司貝爾實(shí)驗(yàn)室的D.M.Ritchie在1972年推出了一種新型的程序語(yǔ)言,這就是C語(yǔ)言。自從C語(yǔ)言問(wèn)世以來(lái),就表現(xiàn)出了較強(qiáng)的生命力。它從最初的UNIX操作系統(tǒng)的記述語(yǔ)言,已迅速發(fā)展成為廣泛應(yīng)用的通用程序語(yǔ)言。過(guò)去僅在小型機(jī)領(lǐng)域中使用的C語(yǔ)言,隨著16位和32位微機(jī)的發(fā)展和普及,正成長(zhǎng)為微機(jī)的主要程序語(yǔ)言之一,當(dāng)前某些機(jī)大中型中也在使用C語(yǔ)言。C語(yǔ)言有以下幾個(gè)基本特點(diǎn): 2022-3-16C語(yǔ)言程序設(shè)計(jì)8(1)C語(yǔ)言是處于匯編

6、語(yǔ)言和高級(jí)語(yǔ)言之間的一種記述性程序語(yǔ)言,又被稱為中級(jí)計(jì)算機(jī)語(yǔ)言。中級(jí)語(yǔ)言并沒(méi)有貶義,并不意味著它功能差,難以使用,或者比BASIC、PASCAL那樣的高級(jí)語(yǔ)言原始,也不意味著它與匯編語(yǔ)言相似,會(huì)給使用者帶來(lái)類似的麻煩。C語(yǔ)言之所以被稱為中級(jí)語(yǔ)言,是因?yàn)樗迅呒?jí)語(yǔ)言的成分同匯編語(yǔ)言的功能結(jié)合起來(lái)了,也就是說(shuō)C語(yǔ)言是比較靠近面向硬件和系統(tǒng)的語(yǔ)言,象匯編語(yǔ)言那樣可以直接訪問(wèn)硬件的功能。允許對(duì)位,字節(jié)和地址這些計(jì)算機(jī)中的基本成分進(jìn)行操作,又有高級(jí)語(yǔ)言面向用戶,容易記憶,便于閱讀和書(shū)寫(xiě)的優(yōu)點(diǎn)。(2)C語(yǔ)言具有簡(jiǎn)潔的程序表示和書(shū)寫(xiě)格式,以及強(qiáng)大的功能。用C語(yǔ)言編寫(xiě)的程序往往短小精悍,功能強(qiáng)大,不僅可以用于

7、科學(xué)計(jì)算、信息處理,還可以用于系統(tǒng)軟件和應(yīng)用軟件的開(kāi)發(fā)。(3)C語(yǔ)言程序具有較強(qiáng)的可移植性,也就是說(shuō)可將編寫(xiě)的軟件不需要做較大修改就可以從一種機(jī)型移到另一種機(jī)型上運(yùn)行。由于C語(yǔ)言的語(yǔ)句中,沒(méi)有依存于硬件的輸入輸出(I/O)語(yǔ)句。程序的I/O功能是通過(guò)調(diào)用I/O函數(shù)來(lái)實(shí)現(xiàn)的,而這些函數(shù)是由系統(tǒng)提供的獨(dú)立于C語(yǔ)言的程序模塊庫(kù)。因此C語(yǔ)言本身并不依存于機(jī)器的硬件系統(tǒng),從而便于在硬件結(jié)構(gòu)不同的機(jī)型間實(shí)現(xiàn)程序的移植。(4)C語(yǔ)言是一種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,即:程序的邏輯結(jié)構(gòu)可以用順序,選擇和循環(huán)三種基本結(jié)構(gòu)組成。(5)C語(yǔ)言是便于模塊化軟件設(shè)計(jì)的程序語(yǔ)言。C語(yǔ)言程序的函數(shù)結(jié)構(gòu),十分利于把整體程序分割成若

8、干相對(duì)獨(dú)立的功能模塊,并且為程序模塊間的相互調(diào)用以及數(shù)據(jù)傳遞提供了便利。這一特點(diǎn)也為把大型軟件模塊化,由多人同時(shí)進(jìn)行集體性開(kāi)發(fā)的軟件工程技術(shù)方法提供了強(qiáng)大的支持。2022-3-16C語(yǔ)言程序設(shè)計(jì)9(6)C語(yǔ)言程序中可以使用如#define、#include等編譯預(yù)處理語(yǔ)句,能夠進(jìn)行字符串或特定參數(shù)的宏定義,以及實(shí)現(xiàn)對(duì)外部文本文件的讀取和合并。同時(shí)還具有#if、#else等條件編譯預(yù)處理語(yǔ)句,提高了軟件開(kāi)發(fā)的工作效率,并為程序的組織和編譯提供了便利。(7)C語(yǔ)言具有種類豐富的運(yùn)算子。除一般高級(jí)語(yǔ)言中使用的“+”、“-”、“*”、“/”等四則運(yùn)算以及“AND”、“OR”、“NOT”等邏輯運(yùn)算符外,

9、還可以實(shí)現(xiàn)以二進(jìn)制位(bit)為單位的位與(&)、位或()、位非()、位異或()以及移位操作(,)等位運(yùn)算,并且具有“a+”、“b-”等單項(xiàng)運(yùn)算和“+=”、“-=”、“*=”、“/=”等復(fù)合運(yùn)算功能。(8)C 語(yǔ)言的數(shù)據(jù)類型豐富?;绢愋陀凶止?jié)型(8bit),單精度整數(shù)(16bit),雙精度整數(shù)(32bit)和單、雙精度實(shí)數(shù)型,同時(shí)它還具有結(jié)構(gòu)體和聯(lián)合體(又稱為共同體)兩種數(shù)據(jù)類型。利用它們可以便利地處理包含著不同數(shù)據(jù)類型的復(fù)雜數(shù)據(jù)類型。因此,C語(yǔ)言具有較高的數(shù)據(jù)處理功能。(9)C語(yǔ)言程序執(zhí)行效率高。試驗(yàn)證明,針對(duì)同一問(wèn)題,用C語(yǔ)言編寫(xiě)的程序生成目標(biāo)代碼的質(zhì)量以及執(zhí)行的速度都比諸如FO

10、RTRAN、BASIC等其它高級(jí)語(yǔ)言編寫(xiě)的程序要好很多。C語(yǔ)言的以上特點(diǎn)使其得以廣泛普及和應(yīng)用。C語(yǔ)言又被稱為“高級(jí)匯編語(yǔ)言”,使用它的趨勢(shì)日益增強(qiáng),最近呈現(xiàn)出C語(yǔ)言有可能取代匯編語(yǔ)言的發(fā)展趨向。 2022-3-16C語(yǔ)言程序設(shè)計(jì)101.2 C語(yǔ)言的程序結(jié)構(gòu) C語(yǔ)言具有32個(gè)關(guān)鍵字(見(jiàn)表1.2),它們與標(biāo)準(zhǔn)C句法結(jié)合形成了程序設(shè)計(jì)語(yǔ)言C。 表1.2 C語(yǔ)言的關(guān)鍵字auto break case char const continute default dodouble else enum extern float for goto ifint long register return shor

11、t sight sizeof staticstruct switch typedef union unsigned void volatile while C的關(guān)鍵字都是小寫(xiě)的。在C語(yǔ)言中區(qū)分大、小寫(xiě),如“else”是關(guān)鍵字,“ELSE”就不是關(guān)鍵字。在C語(yǔ)言中關(guān)鍵字不能用于其它目的,即不允許將關(guān)鍵字作為變量名或函數(shù)名使用。 2022-3-16C語(yǔ)言程序設(shè)計(jì)11所有的C程序都是由一個(gè)或多個(gè)函數(shù)構(gòu)成,其中必須只能有一個(gè)主函數(shù)“main()”,它是程序運(yùn)行開(kāi)始時(shí)被調(diào)用的第一個(gè)函數(shù),無(wú)論它的位置如何。在編制完整的C代碼中,“main( )”實(shí)質(zhì)上包含著程序要完成動(dòng)作的輪廓,這個(gè)輪廓由函數(shù)調(diào)用組成。雖

12、然從技術(shù)上講,主函數(shù)不是C語(yǔ)言的一個(gè)成分,但它仍被看作是其一部分。這樣,如果“main()” 用作變量名,會(huì)給編譯程序造成混亂。C語(yǔ)言程序的基本形式是:函數(shù)類型 函數(shù)名(形式參數(shù))形式參數(shù)說(shuō)明;數(shù)據(jù)說(shuō)明部分;語(yǔ)句部分;函數(shù)頭包括函數(shù)說(shuō)明、函數(shù)名和小括弧“()”中的形式參數(shù)。如果函數(shù)調(diào)用無(wú)參數(shù)傳遞,小括號(hào)中形式參數(shù)為空。形式參數(shù)說(shuō)明指定函數(shù)調(diào)用傳遞參數(shù)的數(shù)據(jù)類型。函數(shù)體指大括號(hào)“”內(nèi)的部分,包括其內(nèi)使用的數(shù)據(jù)說(shuō)明和執(zhí)行函數(shù)功能的語(yǔ)句。大括號(hào)“”和“”表示函數(shù)體的開(kāi)始和結(jié)束。C語(yǔ)言書(shū)寫(xiě)格式自由,允許一行內(nèi)寫(xiě)若干個(gè)語(yǔ)句,每個(gè)語(yǔ)句和數(shù)據(jù)定義的后面必須跟上一個(gè)分號(hào)“;”。當(dāng)然,也可以把一個(gè)語(yǔ)句寫(xiě)在若干行

13、上。C語(yǔ)言中的注釋語(yǔ)句要放在注釋符“/*”與“*/”之間。在“/”與“*”之間不允許有空格,并且一般來(lái)說(shuō),注釋部分允許出現(xiàn)在程序的任何位置。注釋的目的是增加程序的可讀性。因此,建議大家在編寫(xiě)程序時(shí)要寫(xiě)上必要的注釋。 2022-3-16C語(yǔ)言程序設(shè)計(jì)12例1.2.1,如下完整的C語(yǔ)言程序用于輸出“Welcome to learning C program!”。/*文件名:print.c*/ #include /*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/main() /*主函數(shù)*/ printf(“Welcome to learning program C!n”); /*輸出語(yǔ)句*/例1.2.2,如下完整的C

14、語(yǔ)言程序用于輸出所輸入的兩個(gè)在-32768到32767之間的整數(shù)中的最小者。 #include /*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/ main() /*主函數(shù)*/ int x,y,z; /*聲名部分,說(shuō)明局部變量x,y為整型*/ scanf(“%d,%d”,&x,&y); /*輸入變量x,y的值*/ z=min(x,y); /*調(diào)用函數(shù)min(),將得到的值賦給z*/ printf(“The minor between %d and %d is %d .n”,x,y,z); /*輸出結(jié)果*/ int min(int a,int b) /*定義函數(shù)min(),返回值為整型,行參a,b

15、為整型*/ int c; /*聲明部分,說(shuō)明局部變量c為整型*/ if(ab) ; /*通過(guò)條件語(yǔ)句把a(bǔ),b最小者賦給c*/ c=b; else c=a; return (c) /*文件名:min.c*/ /*返回c的值*/ 2022-3-16C語(yǔ)言程序設(shè)計(jì)131.2.1 函數(shù)庫(kù)和鏈接 從技術(shù)上講,純粹由程序員自己編寫(xiě)的語(yǔ)句構(gòu)成C語(yǔ)言程序是可以的,但這也是罕見(jiàn)的。因?yàn)镃語(yǔ)言在它的定義中沒(méi)有執(zhí)行輸入、輸出操作的任何方法。因此大多數(shù)C語(yǔ)言程序都含對(duì)C語(yǔ)言種種標(biāo)準(zhǔn)庫(kù)函數(shù)的調(diào)用。 所有的C編譯程序都是和標(biāo)準(zhǔn)C函數(shù)庫(kù)一起提供的,后者含有完成各種常用任務(wù)的函數(shù)。在C語(yǔ)言的某些實(shí)現(xiàn)中,函數(shù)庫(kù)以一個(gè)大文件的形

16、式出現(xiàn);在另一些C語(yǔ)言的實(shí)現(xiàn)中,它卻被分成幾個(gè)小文件,以提高效率和實(shí)用性。為了簡(jiǎn)單起見(jiàn),我們討論函數(shù)庫(kù)時(shí),都采用單一文件形式。 C編譯程序的實(shí)現(xiàn)者已經(jīng)編寫(xiě)了大部分常用的通用函數(shù)。當(dāng)我們調(diào)用一個(gè)別人編寫(xiě)的函數(shù)時(shí),編譯程序“記憶”它的名字。隨后,“鏈接程序”把我們編寫(xiě)的程序同標(biāo)準(zhǔn)函數(shù)庫(kù)中找到的目標(biāo)碼結(jié)合起來(lái),這個(gè)過(guò)程稱“鏈接”。某些C編譯程序帶有自己的鏈接程序,有些則使用操作系統(tǒng)提供的標(biāo)準(zhǔn)鏈接程序。 最初,C語(yǔ)言被用于系統(tǒng)程序設(shè)計(jì),一個(gè)“系統(tǒng)程序”是一大類程序的一個(gè)部分,這一大類構(gòu)成了計(jì)算機(jī)操作系統(tǒng)及其實(shí)用程序。通常被稱之為系統(tǒng)程序的有:操作系統(tǒng)、翻譯程序、編輯程序、匯編程序、編譯程序和數(shù)據(jù)庫(kù)管理

17、程序。 保存在函數(shù)庫(kù)中的函數(shù)是可適定位的,這意味著其中機(jī)器碼指令的內(nèi)存地址并沒(méi)絕對(duì)確定,只有偏移量是確定的,當(dāng)把程序與標(biāo)準(zhǔn)函數(shù)庫(kù)中的函數(shù)連接時(shí),內(nèi)存偏移量被用來(lái)產(chǎn)生實(shí)際地址。某些技術(shù)手冊(cè)和參考書(shū)中更為詳細(xì)地講述了這一處理過(guò)程,但是,以上對(duì)適定位的了解對(duì)于運(yùn)行C語(yǔ)言程序來(lái)說(shuō)已經(jīng)足夠了。 2022-3-16C語(yǔ)言程序設(shè)計(jì)141.2.2分別編譯 大部分以C語(yǔ)言編寫(xiě)的短程序都可以完全放于一個(gè)源文件中。然而隨著程序長(zhǎng)度的增加,編譯時(shí)間也會(huì)增加,因此C允許將一個(gè)程序分解為若干塊,每一個(gè)文件可單獨(dú)編譯,一旦所有的文件編譯完畢,就可以將它們與庫(kù)函數(shù)中的函數(shù)鏈接,形成一個(gè)完整的目標(biāo)代碼程序。分別編譯的優(yōu)點(diǎn)是,當(dāng)

18、一個(gè)文件中的代碼改變以后,并不必重新編譯全部程序。 2022-3-16C語(yǔ)言程序設(shè)計(jì)151.2.3 編譯一個(gè)C語(yǔ)言程序 編譯一個(gè)C語(yǔ)言程序包括以下四步: (1)程序設(shè)計(jì)(程序編輯):用編輯程序產(chǎn)生一個(gè)后綴為“.C”的C源程序文件。如:“cf.c”。C程序習(xí)慣上使用小寫(xiě)英文字母,常量和其他用途的符號(hào)可用大寫(xiě)字母。C語(yǔ)言對(duì)大、小寫(xiě)字母是有區(qū)別的。關(guān)鍵字必須小寫(xiě)。 (2)程序編譯:將存盤(pán)的C源程序翻譯成二進(jìn)制目標(biāo)代碼,在MS-DOS下是后綴為“.obj”的文件。這個(gè)過(guò)程是使用系統(tǒng)提供的編譯程序(編譯器)運(yùn)行的。不同操作系統(tǒng)下的各種編譯程序的啟動(dòng)命令不同。編譯的同時(shí)對(duì)源文件的語(yǔ)法和邏輯結(jié)構(gòu)等進(jìn)行檢查,

19、當(dāng)出現(xiàn)錯(cuò)誤時(shí),就會(huì)在顯示器上顯示錯(cuò)誤的位置和種類,再次使用編譯程序進(jìn)行排錯(cuò)修正。 (3)鏈接過(guò)程:編譯后產(chǎn)生的目標(biāo)文件是浮動(dòng)的程序模塊,不能被直接用于執(zhí)行。經(jīng)過(guò)鏈接后,才生成可以運(yùn)行的可執(zhí)行文件。鏈接過(guò)程就是把目標(biāo)文件和其他分別進(jìn)行編譯生成的目標(biāo)程序模塊(如果有的話)及系統(tǒng)提供的標(biāo)準(zhǔn)庫(kù)函數(shù)鏈接在一起,生成可以運(yùn)行的可執(zhí)行文件的過(guò)程。UNIX下名字為“cf.out”,而在MS-DOS下名字為“cf.exe”。 (4)程序運(yùn)行:直接輸入“Ccf”,再按回車鍵(用“”表示),當(dāng)執(zhí)行結(jié)果達(dá)到預(yù)期目的,則開(kāi)發(fā)工作到此完成,否則,從頭開(kāi)始執(zhí)行(1)、(2)、(3)、(4)。 2022-3-16C語(yǔ)言程序設(shè)

20、計(jì)161.2.4用批命令編譯程序 將編輯、編譯、鏈接、調(diào)試、運(yùn)行全過(guò)程在窗口狀態(tài)下實(shí)現(xiàn),這就是Turbo C,這要看操作系統(tǒng)中是否具備。 2022-3-16C語(yǔ)言程序設(shè)計(jì)171.3 術(shù)語(yǔ) (1)源代碼:用戶可以閱讀的程序正文(文本),通常也被成為源程序,它是C編譯程序的輸入。 (2)目標(biāo)碼:由源代碼轉(zhuǎn)換而來(lái)的機(jī)器碼,計(jì)算機(jī)可直接讀入并執(zhí)行,目標(biāo)碼是鏈接程序的輸入。 (3)鏈接程序:可以把分別編譯的函數(shù)鏈接為一個(gè)完整的程序,它能夠把C的標(biāo)準(zhǔn)函數(shù)與程序開(kāi)發(fā)人員編寫(xiě)的代碼結(jié)合起來(lái)。鏈接程序的輸出是可執(zhí)行代碼。 (4)函數(shù)庫(kù):一個(gè)用來(lái)存放可被用戶程序引用的標(biāo)準(zhǔn)函數(shù)的文件,這些函數(shù)包括所有I/O操作及其

21、它有用的子程序。 (5)編譯時(shí)間:程序被編譯時(shí)出現(xiàn)的事件。在編譯時(shí)間內(nèi)出現(xiàn)的錯(cuò)誤通常是語(yǔ)法錯(cuò)誤。 (6)運(yùn)行時(shí)間:程序在運(yùn)行時(shí)出現(xiàn)的事件。 2022-3-16C語(yǔ)言程序設(shè)計(jì)181.4 C語(yǔ)言的上機(jī)步驟 Turbo C是目前應(yīng)用十分廣泛的編譯程序。下面簡(jiǎn)單介紹一下Turbo C的一些情況。 按裝并打開(kāi)Turbo C后,大家會(huì)看到“主菜單”有8個(gè)“子菜單項(xiàng)” (見(jiàn)表1.4),每個(gè)“子菜單項(xiàng)”又有若干“子菜單項(xiàng)”。 表1.4.1 Turbo C的菜單主菜單 File Edit Run Compile Project Option Debug Break/watch含義 文件 編輯 運(yùn)行 編譯 項(xiàng)目

22、選項(xiàng) 調(diào)試 中斷/觀察 操作 文件 2022-3-16C語(yǔ)言程序設(shè)計(jì)19 表1.4.2 Turbo C的一些快捷鍵 快捷鍵操作 相當(dāng)于 *F3 File/Load Alt+F3 File/Pick *F2 File/Save Alt+X File/Quit Ctrl+F9 Run/Run Ctrl+F2 Run/Program reset F4 Run/Go to cursor F7 Run/Trace into F8 Run/Seep over *F9 Compile/Make EXE file *Alt+F5 Run/User screen Ctrl+f4 Debug/Evaluate C

23、trl+F3 Debug/Call stack Ctrl+F7 Break/watch/Add watch 注:加“*”的為常用快捷鍵。加號(hào)“+”表示同時(shí)按鍵。另外“F10”常用于狀態(tài)切換。 用鍵盤(pán)的左移鍵“”和右移鍵“”進(jìn)行選擇菜單項(xiàng),按回車鍵(常用“”表示)選定 當(dāng)前的一個(gè)菜單項(xiàng)。選定菜單項(xiàng)之后,再用上移鍵“”和下移鍵“”選擇所需項(xiàng),按回車鍵選定。2022-3-16C語(yǔ)言程序設(shè)計(jì)20使用Turbo C的一般步驟如下:(1)打開(kāi)Turbo C后,系統(tǒng)會(huì)自動(dòng)建立一個(gè)新的C語(yǔ)言源程序。也可以通過(guò)選擇“File/New”新建一個(gè)C語(yǔ)言源程序。如果源程序已經(jīng)存在,則選擇“File/load”,在彈出

24、的對(duì)話框中輸入所需的文件名并按“”,即可打開(kāi)文件。(2)在“Edit”編輯狀態(tài)下,輸入或修改源文件后,選擇“Compile/Compile to OBJ”進(jìn)行編譯,再選擇“Compile/Link EXE file”進(jìn)行鏈接。也可以直接選擇“Compile/Make EXE file”,將編譯和鏈接同時(shí)進(jìn)行。(3)按“F10”進(jìn)行狀態(tài)轉(zhuǎn)換,選擇“Run/Run”執(zhí)行程序。當(dāng)源程序有誤時(shí),返回(2);否則,選擇“Run/User screen”,便可以看到程序的輸出結(jié)果。考慮到絕大多數(shù)高校、培訓(xùn)機(jī)構(gòu)以及個(gè)人使用Turbo C,對(duì)于C語(yǔ)言程序在DOS和UNIX操作系統(tǒng)下的運(yùn)行,請(qǐng)讀者參閱其它參考書(shū)

25、。 2022-3-16C語(yǔ)言程序設(shè)計(jì)211.5 算法簡(jiǎn)介 計(jì)算機(jī)大師Nikilaus Wirth提出了一個(gè)著名的公式: 程序設(shè)計(jì)=數(shù)據(jù)結(jié)構(gòu)+算法 數(shù)據(jù)結(jié)構(gòu)是程序?qū)?shù)據(jù)的描述。它是絕大多數(shù)計(jì)算機(jī)及其相關(guān)專業(yè)的基礎(chǔ)課。關(guān)于這方面,這里不再贅述。算法則是對(duì)某一個(gè)特定問(wèn)題求解步驟進(jìn)行描述的有序指令序列。它具有:有窮性、確定性、可行性以及輸入和輸出等5個(gè)重要特性。評(píng)價(jià)一個(gè)算法的優(yōu)劣則一般從正確性、可讀性、健壯性和算法效率等4個(gè)方面進(jìn)行考慮。 一個(gè)算法常用偽碼和流程圖等描述。軟件專業(yè)人員則習(xí)慣使用偽碼。 2022-3-16C語(yǔ)言程序設(shè)計(jì)22(1)偽碼 用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之間的文字和符號(hào)來(lái)表示算法,

26、書(shū)寫(xiě)格式自由。例1.5.1,任意輸入一個(gè)非零自然數(shù)n,求1+2+n的值。用偽碼表示如下: 算法開(kāi)始: 賦予x的初始值為0賦予y的初始值為n當(dāng)ix n=y for(ii) x+i=xprint xEnd自己嘗試寫(xiě)一下下例中算法的偽碼表示。例1.5.2,任意輸入一個(gè)非零自然數(shù),求的值。 n12112022-3-16C語(yǔ)言程序設(shè)計(jì)23(2)普通流程圖 用一些規(guī)定的圖標(biāo)以及一些文字和符號(hào)來(lái)表示算法,具有直觀性。American National Standard Institute(簡(jiǎn)稱:ANSI)對(duì)這些圖標(biāo)作了規(guī)定。其中一些常用的圖標(biāo)如下: 表1.5.1 普通流程圖的常用圖標(biāo) 名稱 起止 輸入輸出

27、處理 判斷 注釋 方向 結(jié)點(diǎn) 圖標(biāo) 圖標(biāo) 圖標(biāo) 圖標(biāo) 圖標(biāo) 圖標(biāo) 圖標(biāo) 圖 標(biāo)2022-3-16C語(yǔ)言程序設(shè)計(jì)24例1.5.3,任意輸入三個(gè)數(shù),按自小到大順序輸出。用普通流程圖表示為: 開(kāi)始 輸入x,y,z N xy x=n y=m Y x=y y=n 1 m=p zn n=m z=n Y mm 2 Y z=p 2 2 輸出p,m,n 嘗試著寫(xiě)一下下例算法的普通流程圖表示。例1.5.4,任意輸入四個(gè)數(shù),按自大到小順序輸出。 2022-3-16C語(yǔ)言程序設(shè)計(jì)25(3)N-S流程圖由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)按程序執(zhí)行的順序構(gòu)成的放在一個(gè)矩形內(nèi)的算法表示(見(jiàn)表1.5.2)。 表1.5

28、.2 N-S流程圖的基本結(jié)構(gòu) 再執(zhí)行B. A;否則執(zhí)行B。 反復(fù)執(zhí)行A。 P不成立?;?A Y P N P A結(jié)構(gòu) B A B A P名稱 順序結(jié)構(gòu) 選擇結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)含義 先執(zhí)行A, 條件P成立,執(zhí)行 當(dāng)條件P成立, 執(zhí)行A,直到條件2022-3-16C語(yǔ)言程序設(shè)計(jì)26例1.5.5,某超市規(guī)定:一次購(gòu)物在1000元人民幣以上者,打9.5折;一次購(gòu)物在5000元以上者,打8.5折;一次購(gòu)物在10000元以上者,打7折。一位顧客只購(gòu)買(mǎi)單價(jià)為280元的皮鞋和單價(jià)為150元的上衣。編寫(xiě)一個(gè)程序,當(dāng)輸入這類顧客 購(gòu)買(mǎi)的鞋子的雙數(shù)和上衣的件數(shù)時(shí),程序輸出顧客應(yīng)付的錢(qián)數(shù)。用N-S流程圖

29、表示為:輸入m,n280m+150n=xY x10000 N Y x5000 N 7 x=x 8.5 x=x Y x1000 N 9.5 x=x 輸出x試著用N-S流程圖表示下例中的算法。例1.5.6,求解“1+2+n100”的n的最大值。2022-3-16C語(yǔ)言程序設(shè)計(jì)27習(xí)題(一) n1, C語(yǔ)言程序以()為基本單位。A. 子程序 B. 過(guò)程 C. 函數(shù) D. 函數(shù)和過(guò)程n2, 一個(gè)C語(yǔ)言程序有且僅有一個(gè)()。A. include B. 函數(shù) C. 主函數(shù) D. 過(guò)程n3, 下列說(shuō)法正確的是()。A. 在C語(yǔ)言程序中,任何函數(shù)都可以被其它函數(shù)調(diào)用。B. C語(yǔ)言程序的執(zhí)行從main()函數(shù)開(kāi)

30、始到該程序文件的最后一個(gè)函數(shù)結(jié)束。C. C語(yǔ)言程序中main()函數(shù)的位置必須放在最開(kāi)始。D. C語(yǔ)言程序本身沒(méi)有輸入、輸出語(yǔ)句。n4, 下列說(shuō)法不正確的是()。A. C語(yǔ)言程序一行內(nèi)只能寫(xiě)一條語(yǔ)句。B. C語(yǔ)言源程序只能轉(zhuǎn)換為目標(biāo)代碼后才可以執(zhí)行。C. 分號(hào)“:”是C語(yǔ)言程序的一部分。D. 一個(gè)完整的C語(yǔ)言程序可以由一個(gè)或多個(gè)源程序文件組成。2022-3-16C語(yǔ)言程序設(shè)計(jì)28 5,指出下列程序片段中程序注釋正確的是()。 A. #include B. #include main() main() int x=1; float x/*初始化/*把1.00賦給x*/*/=1.00;printf

31、(“%d/*整型*/”,x); printf(“%f”,x); C. #include D. #include,stdio.h main(/*主函數(shù)*/) main() int x/*初始化*/=1; printf(“%dn”,x); print/*打印*/f(“OK!”); 6,參照本章例題1.2.1,編寫(xiě)一個(gè)C語(yǔ)言程序:任意輸入三個(gè)-32768到32767之間的整數(shù),輸出輸入的第二個(gè)數(shù)。7,參照本章例題1.2.2,編寫(xiě)一個(gè)C語(yǔ)言程序:任意輸入兩個(gè)-32768到32767之間的整數(shù),輸出最大者。8*,參照本章例題1.2.2,編寫(xiě)一個(gè)C語(yǔ)言程序:任意輸入三個(gè)-32768到32767之間的整數(shù),

32、輸出最大者。9*,編寫(xiě)一個(gè)程序,求解“”的根(提示:“開(kāi)平方根”運(yùn)算用函數(shù)“sqrt()”)。10,用偽碼表示題6,7,8,9中的算法。11,任選一種流程圖,表示題6,7,8,9中的算法。12,簡(jiǎn)述C語(yǔ)言程序的主要特點(diǎn)。13,簡(jiǎn)述C語(yǔ)言程序的組成。 02Cxx2022-3-16C語(yǔ)言程序設(shè)計(jì)29答案與解析(答案僅供參考)n1,Cn2,Cn3,D在C語(yǔ)言程序中,main()函數(shù)只能自身調(diào)用,不可被其它函數(shù)調(diào)用,除函數(shù)main()外,其它任何函數(shù)都可以被調(diào)用,所以A項(xiàng)不正確;一個(gè)C語(yǔ)言程序的執(zhí)行總是從main()函數(shù)開(kāi)始,無(wú)論main()函數(shù)在整個(gè)程序中的位置如何,到該main()函數(shù)結(jié)束。當(dāng)然,

33、main()函數(shù)可以放在程序最開(kāi)頭,也可以放在程序的最后,或一些函數(shù)的前面或后面;所以B、C項(xiàng)不正確;C語(yǔ)言程序本身沒(méi)有輸入、輸出語(yǔ)句,要完成輸入、輸出操作則需調(diào)用庫(kù)函數(shù)scanf()和printf()等。故正確答案為D。n4,AC語(yǔ)言程序書(shū)寫(xiě)格式自由,一行內(nèi)可以寫(xiě)多個(gè)語(yǔ)句,每個(gè)語(yǔ)句之間用分號(hào)“;”分開(kāi),一個(gè)語(yǔ)句也可以寫(xiě)在多行上。所以A項(xiàng)錯(cuò)誤,為所選項(xiàng)。n5,CA項(xiàng)把注釋放在printf()函數(shù)的格式說(shuō)明中了,程序?qū)⒃谄聊簧现苯虞敵觥白⑨尅?,而起不到注釋的作用,所以A項(xiàng)不正確;注釋不可以嵌套,所以B項(xiàng)不正確;D項(xiàng)把輸出函數(shù)printf()分開(kāi)了,所以不正確。2022-3-16C語(yǔ)言程序設(shè)計(jì)30

34、 6, main() /*主函數(shù)*/ int x,y,z; /*聲明部分,說(shuō)明局部變量x,y,z為整型*/ scanf(“%d,%d,%d”,&x,&y,&z); /*輸入x,y,z的值*/ printf(“The second is %d.n”,y); /*輸出語(yǔ)句*/ 7, /*文件名:max.c*/ #include /*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/ main() /*主函數(shù)*/ int x,y,z; /*聲名部分,說(shuō)明局部變量x,y為整型*/ scanf(“%d,%d”,&x,&y); /*輸入變量x,y的值*/ z=max(x,y); /*調(diào)用函數(shù)max(),將得到的值賦給z*/ printf(“Max= %d .n”,z); /*輸出結(jié)果*/ int max(int a,int b) /*定義函數(shù)max(),返回值為整型,形參a,b為整型*/ int c; /*聲明部分,說(shuō)明局部變量c為整型*/ if(ab) /*通過(guò)條件語(yǔ)句把a(bǔ),b最大者賦給c*/ c=a; else c=b; return (c); /*返回c的值*/ 2022-3-16C語(yǔ)言程序設(shè)計(jì)31 8,/*文件名:maxtr.c*/ #include /*插入I/O庫(kù)文件頭*/ main() /*主函數(shù)*/ int x,y,z,m; /*聲明部分,

溫馨提示

  • 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)論