版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語言程序設(shè)計(jì)
張芳主編
(王維強(qiáng)輔助設(shè)計(jì))北京:電子工業(yè)出版社出版2/4/20231C語言程序設(shè)計(jì)C語言程序設(shè)計(jì)
CProgrammer數(shù)學(xué)信息科學(xué)學(xué)院副教授青島大學(xué)張芳2/4/20232C語言程序設(shè)計(jì)
院樓二層軟件教研室
電話/p>
EMAIL:zhangfang@如何與老師聯(lián)系?2/4/20233C語言程序設(shè)計(jì)第一章程序設(shè)計(jì)與C語言
1.1C語言概述1.2C語言的程序結(jié)構(gòu)1.3術(shù)語1.4C語言的上機(jī)步驟1.5算法簡(jiǎn)介習(xí)題(一)及參考答案與解析2/4/20234C語言程序設(shè)計(jì)1.1C語言概述
程序設(shè)計(jì)語言現(xiàn)在已經(jīng)發(fā)展到了第四代。它的發(fā)展過程大體上是這樣的:2/4/20235C語言程序設(shè)計(jì)(1)機(jī)器語言也有的稱為CPU的指令系統(tǒng)。大約在20世紀(jì)50年代,人們開始用由二進(jìn)制數(shù)“0”、“1”構(gòu)成的指令碼編寫程序。程序的可讀性很差,并且難于修改、擴(kuò)充和移植。因此,當(dāng)時(shí)的編程人員只是極少數(shù)計(jì)算機(jī)專業(yè)技術(shù)人員,并且程序只用于特定類型的計(jì)算機(jī)和特定的用途。這也使得其運(yùn)算效率是所有語言中最高的。人們習(xí)慣上把機(jī)器語言稱為第一代程序語言。(2)匯編語言也稱為符號(hào)語言,是用諸如:“ADD”(代表加法)、“MOV”(代表數(shù)據(jù)傳送)等助記符號(hào)(一些簡(jiǎn)潔的英文字母、符號(hào)串)描述的指令系統(tǒng)。雖然與機(jī)器語言相比,有了較大的進(jìn)步(減輕了使用機(jī)器語言編程的痛苦,人們很容易讀懂并理解程序在干什么,糾錯(cuò)及維護(hù)都變得方便了),但仍未完全擺脫具體機(jī)型的限制,且程序的可讀性比較差,也不容易修改、擴(kuò)充和移植。而此時(shí)人們?cè)O(shè)計(jì)出的具有用一條指令來描述若干條指令功能的宏匯編,是程序語言發(fā)展史上的一個(gè)巨大進(jìn)步。由于作為第二代程序語言的匯編語言和機(jī)器語言一樣,都是面向計(jì)算機(jī)硬件的,所以它們又被稱為面向機(jī)器的語言。(3)面向過程的高級(jí)語言也有人稱之為算法語言,它主要面向解題的過程,這種語言接近于數(shù)學(xué)語言或人的自然語言,同時(shí)又不依賴于計(jì)算機(jī)硬件,編出的程序能在所有機(jī)器上通用。這些語言大約產(chǎn)生于20世紀(jì)60年代,主要有BASIC、C、FORTRAN、PASCAL和C++等,人們稱之為第三代程序語言。(4)非過程化的高級(jí)語言
使用過程化的語言解題。隨著計(jì)算機(jī)圖形學(xué)的發(fā)展,面向?qū)ο蟮某绦蛟O(shè)計(jì)方法和可視化軟件開發(fā)越來越流行,這為非計(jì)算機(jī)專業(yè)人員提供了極大地方便。象用C語言開發(fā)的FOXBASE+等非過程化的高級(jí)語言,被稱之為第四代程序語言。
2/4/20236C語言程序設(shè)計(jì)現(xiàn)在使用的大多數(shù)程序是用高級(jí)程序(過程)語言編寫的,而C語言就是其中的“頂梁柱”。C語言是一種編譯型程序語言,其前身是60年代開發(fā)的BSPC語言,當(dāng)時(shí)就能夠處理與機(jī)器本身數(shù)據(jù)類型相近的數(shù)據(jù),而且具有與內(nèi)存地址對(duì)應(yīng)的指針處理方式。到了1970年在繼承和發(fā)展BCPC語言這些特點(diǎn)的基礎(chǔ)上,又提出了“B語言”,小型機(jī)的UNIX操作系統(tǒng)就是使用B語言記述和開發(fā)的。此后在進(jìn)行UNIX操作系統(tǒng)的開發(fā)工作中,對(duì)B語言做了進(jìn)一步完善,美國(guó)AT&T公司貝爾實(shí)驗(yàn)室的D.M.Ritchie在1972年推出了一種新型的程序語言,這就是C語言。自從C語言問世以來,就表現(xiàn)出了較強(qiáng)的生命力。它從最初的UNIX操作系統(tǒng)的記述語言,已迅速發(fā)展成為廣泛應(yīng)用的通用程序語言。過去僅在小型機(jī)領(lǐng)域中使用的C語言,隨著16位和32位微機(jī)的發(fā)展和普及,正成長(zhǎng)為微機(jī)的主要程序語言之一,當(dāng)前某些機(jī)大中型中也在使用C語言。C語言有以下幾個(gè)基本特點(diǎn):
2/4/20237C語言程序設(shè)計(jì)(1)C語言是處于匯編語言和高級(jí)語言之間的一種記述性程序語言,又被稱為中級(jí)計(jì)算機(jī)語言。中級(jí)語言并沒有貶義,并不意味著它功能差,難以使用,或者比BASIC、PASCAL那樣的高級(jí)語言原始,也不意味著它與匯編語言相似,會(huì)給使用者帶來類似的麻煩。C語言之所以被稱為中級(jí)語言,是因?yàn)樗迅呒?jí)語言的成分同匯編語言的功能結(jié)合起來了,也就是說C語言是比較靠近面向硬件和系統(tǒng)的語言,象匯編語言那樣可以直接訪問硬件的功能。允許對(duì)位,字節(jié)和地址這些計(jì)算機(jī)中的基本成分進(jìn)行操作,又有高級(jí)語言面向用戶,容易記憶,便于閱讀和書寫的優(yōu)點(diǎn)。(2)C語言具有簡(jiǎn)潔的程序表示和書寫格式,以及強(qiáng)大的功能。用C語言編寫的程序往往短小精悍,功能強(qiáng)大,不僅可以用于科學(xué)計(jì)算、信息處理,還可以用于系統(tǒng)軟件和應(yīng)用軟件的開發(fā)。(3)C語言程序具有較強(qiáng)的可移植性,也就是說可將編寫的軟件不需要做較大修改就可以從一種機(jī)型移到另一種機(jī)型上運(yùn)行。由于C語言的語句中,沒有依存于硬件的輸入輸出(I/O)語句。程序的I/O功能是通過調(diào)用I/O函數(shù)來實(shí)現(xiàn)的,而這些函數(shù)是由系統(tǒng)提供的獨(dú)立于C語言的程序模塊庫(kù)。因此C語言本身并不依存于機(jī)器的硬件系統(tǒng),從而便于在硬件結(jié)構(gòu)不同的機(jī)型間實(shí)現(xiàn)程序的移植。(4)C語言是一種結(jié)構(gòu)化的程序設(shè)計(jì)語言,即:程序的邏輯結(jié)構(gòu)可以用順序,選擇和循環(huán)三種基本結(jié)構(gòu)組成。(5)C語言是便于模塊化軟件設(shè)計(jì)的程序語言。C語言程序的函數(shù)結(jié)構(gòu),十分利于把整體程序分割成若干相對(duì)獨(dú)立的功能模塊,并且為程序模塊間的相互調(diào)用以及數(shù)據(jù)傳遞提供了便利。這一特點(diǎn)也為把大型軟件模塊化,由多人同時(shí)進(jìn)行集體性開發(fā)的軟件工程技術(shù)方法提供了強(qiáng)大的支持。2/4/20238C語言程序設(shè)計(jì)(6)C語言程序中可以使用如#define、#include等編譯預(yù)處理語句,能夠進(jìn)行字符串或特定參數(shù)的宏定義,以及實(shí)現(xiàn)對(duì)外部文本文件的讀取和合并。同時(shí)還具有#if、#else等條件編譯預(yù)處理語句,提高了軟件開發(fā)的工作效率,并為程序的組織和編譯提供了便利。(7)C語言具有種類豐富的運(yùn)算子。除一般高級(jí)語言中使用的“+”、“-”、“*”、“/”等四則運(yùn)算以及“AND”、“OR”、“NOT”等邏輯運(yùn)算符外,還可以實(shí)現(xiàn)以二進(jìn)制位(bit)為單位的位與(&)、位或(|)、位非(~)、位異或(^)以及移位操作(>>,<<)等位運(yùn)算,并且具有“a++”、“b--”等單項(xiàng)運(yùn)算和“+=”、“-=”、“*=”、“/=”等復(fù)合運(yùn)算功能。(8)C語言的數(shù)據(jù)類型豐富?;绢愋陀凶止?jié)型(8bit),單精度整數(shù)(16bit),雙精度整數(shù)(32bit)和單、雙精度實(shí)數(shù)型,同時(shí)它還具有結(jié)構(gòu)體和聯(lián)合體(又稱為共同體)兩種數(shù)據(jù)類型。利用它們可以便利地處理包含著不同數(shù)據(jù)類型的復(fù)雜數(shù)據(jù)類型。因此,C語言具有較高的數(shù)據(jù)處理功能。(9)C語言程序執(zhí)行效率高。試驗(yàn)證明,針對(duì)同一問題,用C語言編寫的程序生成目標(biāo)代碼的質(zhì)量以及執(zhí)行的速度都比諸如FORTRAN、BASIC等其它高級(jí)語言編寫的程序要好很多。C語言的以上特點(diǎn)使其得以廣泛普及和應(yīng)用。C語言又被稱為“高級(jí)匯編語言”,使用它的趨勢(shì)日益增強(qiáng),最近呈現(xiàn)出C語言有可能取代匯編語言的發(fā)展趨向。
2/4/20239C語言程序設(shè)計(jì)1.2C語言的程序結(jié)構(gòu)
C語言具有32個(gè)關(guān)鍵字(見表1.2),它們與標(biāo)準(zhǔn)C句法結(jié)合形成了程序設(shè)計(jì)語言C。
表1.2C語言的關(guān)鍵字autobreakcasecharconstcontinutedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsightsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile
C的關(guān)鍵字都是小寫的。在C語言中區(qū)分大、小寫,如“else”是關(guān)鍵字,“ELSE”就不是關(guān)鍵字。在C語言中關(guān)鍵字不能用于其它目的,即不允許將關(guān)鍵字作為變量名或函數(shù)名使用。
2/4/202310C語言程序設(shè)計(jì)所有的C程序都是由一個(gè)或多個(gè)函數(shù)構(gòu)成,其中必須只能有一個(gè)主函數(shù)“main()”,它是程序運(yùn)行開始時(shí)被調(diào)用的第一個(gè)函數(shù),無論它的位置如何。在編制完整的C代碼中,“main()”實(shí)質(zhì)上包含著程序要完成動(dòng)作的輪廓,這個(gè)輪廓由函數(shù)調(diào)用組成。雖然從技術(shù)上講,主函數(shù)不是C語言的一個(gè)成分,但它仍被看作是其一部分。這樣,如果“main()”用作變量名,會(huì)給編譯程序造成混亂。C語言程序的基本形式是:函數(shù)類型函數(shù)名(形式參數(shù))形式參數(shù)說明;{數(shù)據(jù)說明部分;語句部分;}函數(shù)頭包括函數(shù)說明、函數(shù)名和小括弧“()”中的形式參數(shù)。如果函數(shù)調(diào)用無參數(shù)傳遞,小括號(hào)中形式參數(shù)為空。形式參數(shù)說明指定函數(shù)調(diào)用傳遞參數(shù)的數(shù)據(jù)類型。函數(shù)體指大括號(hào)“{}”內(nèi)的部分,包括其內(nèi)使用的數(shù)據(jù)說明和執(zhí)行函數(shù)功能的語句。大括號(hào)“{”和“}”表示函數(shù)體的開始和結(jié)束。C語言書寫格式自由,允許一行內(nèi)寫若干個(gè)語句,每個(gè)語句和數(shù)據(jù)定義的后面必須跟上一個(gè)分號(hào)“;”。當(dāng)然,也可以把一個(gè)語句寫在若干行上。C語言中的注釋語句要放在注釋符“/*”與“*/”之間。在“/”與“*”之間不允許有空格,并且一般來說,注釋部分允許出現(xiàn)在程序的任何位置。注釋的目的是增加程序的可讀性。因此,建議大家在編寫程序時(shí)要寫上必要的注釋。
2/4/202311C語言程序設(shè)計(jì)例1.2.1,如下完整的C語言程序用于輸出“WelcometolearningCprogram!”。/*文件名:print.c*/#include<stdio.h>/*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/main()/*主函數(shù)*/{printf(“WelcometolearningprogramC!\n”);/*輸出語句*/}例1.2.2,如下完整的C語言程序用于輸出所輸入的兩個(gè)在-32768到32767之間的整數(shù)中的最小者。#include<stdio.h>/*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/main()/*主函數(shù)*/{intx,y,z;/*聲名部分,說明局部變量x,y為整型*/scanf(“%d,%d”,&x,&y);/*輸入變量x,y的值*/z=min(x,y);/*調(diào)用函數(shù)min(),將得到的值賦給z*/printf(“Theminorbetween%dand%dis%d.\n”,x,y,z);/*輸出結(jié)果*/}intmin(inta,intb)/*定義函數(shù)min(),返回值為整型,行參a,b為整型*/{intc;/*聲明部分,說明局部變量c為整型*/if(a>b);/*通過條件語句把a(bǔ),b最小者賦給c*/c=b;elsec=a;return(c)/*文件名:min.c*//*返回c的值*/}2/4/202312C語言程序設(shè)計(jì)1.2.1函數(shù)庫(kù)和鏈接
從技術(shù)上講,純粹由程序員自己編寫的語句構(gòu)成C語言程序是可以的,但這也是罕見的。因?yàn)镃語言在它的定義中沒有執(zhí)行輸入、輸出操作的任何方法。因此大多數(shù)C語言程序都含對(duì)C語言種種標(biāo)準(zhǔn)庫(kù)函數(shù)的調(diào)用。所有的C編譯程序都是和標(biāo)準(zhǔn)C函數(shù)庫(kù)一起提供的,后者含有完成各種常用任務(wù)的函數(shù)。在C語言的某些實(shí)現(xiàn)中,函數(shù)庫(kù)以一個(gè)大文件的形式出現(xiàn);在另一些C語言的實(shí)現(xiàn)中,它卻被分成幾個(gè)小文件,以提高效率和實(shí)用性。為了簡(jiǎn)單起見,我們討論函數(shù)庫(kù)時(shí),都采用單一文件形式。C編譯程序的實(shí)現(xiàn)者已經(jīng)編寫了大部分常用的通用函數(shù)。當(dāng)我們調(diào)用一個(gè)別人編寫的函數(shù)時(shí),編譯程序“記憶”它的名字。隨后,“鏈接程序”把我們編寫的程序同標(biāo)準(zhǔn)函數(shù)庫(kù)中找到的目標(biāo)碼結(jié)合起來,這個(gè)過程稱“鏈接”。某些C編譯程序帶有自己的鏈接程序,有些則使用操作系統(tǒng)提供的標(biāo)準(zhǔn)鏈接程序。最初,C語言被用于系統(tǒng)程序設(shè)計(jì),一個(gè)“系統(tǒng)程序”是一大類程序的一個(gè)部分,這一大類構(gòu)成了計(jì)算機(jī)操作系統(tǒng)及其實(shí)用程序。通常被稱之為系統(tǒng)程序的有:操作系統(tǒng)、翻譯程序、編輯程序、匯編程序、編譯程序和數(shù)據(jù)庫(kù)管理程序。保存在函數(shù)庫(kù)中的函數(shù)是可適定位的,這意味著其中機(jī)器碼指令的內(nèi)存地址并沒絕對(duì)確定,只有偏移量是確定的,當(dāng)把程序與標(biāo)準(zhǔn)函數(shù)庫(kù)中的函數(shù)連接時(shí),內(nèi)存偏移量被用來產(chǎn)生實(shí)際地址。某些技術(shù)手冊(cè)和參考書中更為詳細(xì)地講述了這一處理過程,但是,以上對(duì)適定位的了解對(duì)于運(yùn)行C語言程序來說已經(jīng)足夠了。
2/4/202313C語言程序設(shè)計(jì)1.2.2分別編譯
大部分以C語言編寫的短程序都可以完全放于一個(gè)源文件中。然而隨著程序長(zhǎng)度的增加,編譯時(shí)間也會(huì)增加,因此C允許將一個(gè)程序分解為若干塊,每一個(gè)文件可單獨(dú)編譯,一旦所有的文件編譯完畢,就可以將它們與庫(kù)函數(shù)中的函數(shù)鏈接,形成一個(gè)完整的目標(biāo)代碼程序。分別編譯的優(yōu)點(diǎn)是,當(dāng)一個(gè)文件中的代碼改變以后,并不必重新編譯全部程序。
2/4/202314C語言程序設(shè)計(jì)1.2.3編譯一個(gè)C語言程序
編譯一個(gè)C語言程序包括以下四步:(1)程序設(shè)計(jì)(程序編輯):用編輯程序產(chǎn)生一個(gè)后綴為“.C”的C源程序文件。如:“cf.c”。C程序習(xí)慣上使用小寫英文字母,常量和其他用途的符號(hào)可用大寫字母。C語言對(duì)大、小寫字母是有區(qū)別的。關(guān)鍵字必須小寫。(2)程序編譯:將存盤的C源程序翻譯成二進(jìn)制目標(biāo)代碼,在MS-DOS下是后綴為“.obj”的文件。這個(gè)過程是使用系統(tǒng)提供的編譯程序(編譯器)運(yùn)行的。不同操作系統(tǒng)下的各種編譯程序的啟動(dòng)命令不同。編譯的同時(shí)對(duì)源文件的語法和邏輯結(jié)構(gòu)等進(jìn)行檢查,當(dāng)出現(xiàn)錯(cuò)誤時(shí),就會(huì)在顯示器上顯示錯(cuò)誤的位置和種類,再次使用編譯程序進(jìn)行排錯(cuò)修正。(3)鏈接過程:編譯后產(chǎn)生的目標(biāo)文件是浮動(dòng)的程序模塊,不能被直接用于執(zhí)行。經(jīng)過鏈接后,才生成可以運(yùn)行的可執(zhí)行文件。鏈接過程就是把目標(biāo)文件和其他分別進(jìn)行編譯生成的目標(biāo)程序模塊(如果有的話)及系統(tǒng)提供的標(biāo)準(zhǔn)庫(kù)函數(shù)鏈接在一起,生成可以運(yùn)行的可執(zhí)行文件的過程。UNIX下名字為“cf.out”,而在MS-DOS下名字為“cf.exe”。(4)程序運(yùn)行:直接輸入“C>cf”,再按回車鍵(用“↙”表示),當(dāng)執(zhí)行結(jié)果達(dá)到預(yù)期目的,則開發(fā)工作到此完成,否則,從頭開始執(zhí)行(1)、(2)、(3)、(4)。
2/4/202315C語言程序設(shè)計(jì)1.2.4用批命令編譯程序
將編輯、編譯、鏈接、調(diào)試、運(yùn)行全過程在窗口狀態(tài)下實(shí)現(xiàn),這就是TurboC,這要看操作系統(tǒng)中是否具備。
2/4/202316C語言程序設(shè)計(jì)1.3術(shù)語
(1)源代碼:用戶可以閱讀的程序正文(文本),通常也被成為源程序,它是C編譯程序的輸入。(2)目標(biāo)碼:由源代碼轉(zhuǎn)換而來的機(jī)器碼,計(jì)算機(jī)可直接讀入并執(zhí)行,目標(biāo)碼是鏈接程序的輸入。(3)鏈接程序:可以把分別編譯的函數(shù)鏈接為一個(gè)完整的程序,它能夠把C的標(biāo)準(zhǔn)函數(shù)與程序開發(fā)人員編寫的代碼結(jié)合起來。鏈接程序的輸出是可執(zhí)行代碼。(4)函數(shù)庫(kù):一個(gè)用來存放可被用戶程序引用的標(biāo)準(zhǔn)函數(shù)的文件,這些函數(shù)包括所有I/O操作及其它有用的子程序。(5)編譯時(shí)間:程序被編譯時(shí)出現(xiàn)的事件。在編譯時(shí)間內(nèi)出現(xiàn)的錯(cuò)誤通常是語法錯(cuò)誤。(6)運(yùn)行時(shí)間:程序在運(yùn)行時(shí)出現(xiàn)的事件。
2/4/202317C語言程序設(shè)計(jì)1.4C語言的上機(jī)步驟
TurboC是目前應(yīng)用十分廣泛的編譯程序。下面簡(jiǎn)單介紹一下TurboC的一些情況。按裝并打開TurboC后,大家會(huì)看到“主菜單”有8個(gè)“子菜單項(xiàng)”
(見表1.4),每個(gè)“子菜單項(xiàng)”又有若干“子菜單項(xiàng)”。
表1.4.1TurboC的菜單主菜單FileEditRunCompileProjectOptionDebugBreak/watch含義
文件
編輯
運(yùn)行
編譯
項(xiàng)目
選項(xiàng)
調(diào)試
中斷/觀察操作
文件
2/4/202318C語言程序設(shè)計(jì)
表1.4.2TurboC的一些快捷鍵
快捷鍵操作相當(dāng)于*F3File/LoadAlt+F3File/Pick*F2File/SaveAlt+XFile/QuitCtrl+F9Run/RunCtrl+F2Run/ProgramresetF4Run/GotocursorF7Run/TraceintoF8Run/Seepover*F9Compile/MakeEXEfile*Alt+F5Run/UserscreenCtrl+f4Debug/EvaluateCtrl+F3Debug/CallstackCtrl+F7Break/watch/Addwatch注:加“*”的為常用快捷鍵。加號(hào)“+”表示同時(shí)按鍵。另外“F10”常用于狀態(tài)切換。用鍵盤的左移鍵“←”和右移鍵“→”進(jìn)行選擇菜單項(xiàng),按回車鍵(常用“↙”表示)選定當(dāng)前的一個(gè)菜單項(xiàng)。選定菜單項(xiàng)之后,再用上移鍵“↑”和下移鍵“↓”選擇所需項(xiàng),按回車鍵選定。2/4/202319C語言程序設(shè)計(jì)使用TurboC的一般步驟如下:(1)打開TurboC后,系統(tǒng)會(huì)自動(dòng)建立一個(gè)新的C語言源程序。也可以通過選擇“File/New”新建一個(gè)C語言源程序。如果源程序已經(jīng)存在,則選擇“File/load”,在彈出的對(duì)話框中輸入所需的文件名并按“↙”,即可打開文件。(2)在“Edit”編輯狀態(tài)下,輸入或修改源文件后,選擇“Compile/CompiletoOBJ”進(jìn)行編譯,再選擇“Compile/LinkEXEfile”進(jìn)行鏈接。也可以直接選擇“Compile/MakeEXEfile”,將編譯和鏈接同時(shí)進(jìn)行。(3)按“F10”進(jìn)行狀態(tài)轉(zhuǎn)換,選擇“Run/Run”執(zhí)行程序。當(dāng)源程序有誤時(shí),返回(2);否則,選擇“Run/Userscreen”,便可以看到程序的輸出結(jié)果??紤]到絕大多數(shù)高校、培訓(xùn)機(jī)構(gòu)以及個(gè)人使用TurboC,對(duì)于C語言程序在DOS和UNIX操作系統(tǒng)下的運(yùn)行,請(qǐng)讀者參閱其它參考書。
2/4/202320C語言程序設(shè)計(jì)1.5算法簡(jiǎn)介
計(jì)算機(jī)大師NikilausWirth提出了一個(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è)特定問題求解步驟進(jìn)行描述的有序指令序列。它具有:有窮性、確定性、可行性以及輸入和輸出等5個(gè)重要特性。評(píng)價(jià)一個(gè)算法的優(yōu)劣則一般從正確性、可讀性、健壯性和算法效率等4個(gè)方面進(jìn)行考慮。一個(gè)算法常用偽碼和流程圖等描述。軟件專業(yè)人員則習(xí)慣使用偽碼。
2/4/202321C語言程序設(shè)計(jì)(1)偽碼用介于自然語言和計(jì)算機(jī)語言之間的文字和符號(hào)來表示算法,書寫格式自由。例1.5.1,任意輸入一個(gè)非零自然數(shù)n,求1+2+…+n的值。用偽碼表示如下:算法開始:賦予x的初始值為0賦予y的初始值為n當(dāng)i<y時(shí)(循環(huán)執(zhí)行下列語句)x=x+ii=i+1輸出x的值算法結(jié)束用偽碼也可以這樣表示:Begin0=>xn=>yfor(i<y+1,i+1=>i){x+i=>x}printxEnd自己嘗試寫一下下例中算法的偽碼表示。例1.5.2,任意輸入一個(gè)非零自然數(shù),求的值。
2/4/202322C語言程序設(shè)計(jì)(2)普通流程圖用一些規(guī)定的圖標(biāo)以及一些文字和符號(hào)來表示算法,具有直觀性。AmericanNationalStandardInstitute(簡(jiǎn)稱:ANSI)對(duì)這些圖標(biāo)作了規(guī)定。其中一些常用的圖標(biāo)如下:表1.5.1普通流程圖的常用圖標(biāo)
名稱起止輸入輸出處理判斷注釋方向結(jié)點(diǎn)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)2/4/202323C語言程序設(shè)計(jì)例1.5.3,任意輸入三個(gè)數(shù),按自小到大順序輸出。用普通流程圖表示為:開始
輸入x,y,zNx>yx=>ny=>m
Yx=>yy=>n1m=>pz>nn=>mz=>n
Ym<z1z=>m2Yz=>p22
輸出p,m,n嘗試著寫一下下例算法的普通流程圖表示。例1.5.4,任意輸入四個(gè)數(shù),按自大到小順序輸出。
2/4/202324C語言程序設(shè)計(jì)(3)N-S流程圖由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)按程序執(zhí)行的順序構(gòu)成的放在一個(gè)矩形內(nèi)的算法表示(見表1.5.2)。表1.5.2N-S流程圖的基本結(jié)構(gòu)
再執(zhí)行B.A;否則執(zhí)行B。反復(fù)執(zhí)行A。P不成立。基本AYPNPA結(jié)構(gòu)BABAP名稱順序結(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,直到條件2/4/202325C語言程序設(shè)計(jì)例1.5.5,某超市規(guī)定:一次購(gòu)物在1000元人民幣以上者,打9.5折;一次購(gòu)物在5000元以上者,打8.5折;一次購(gòu)物在10000元以上者,打7折。一位顧客只購(gòu)買單價(jià)為280元的皮鞋和單價(jià)為150元的上衣。編寫一個(gè)程序,當(dāng)輸入這類顧客購(gòu)買的鞋子的雙數(shù)和上衣的件數(shù)時(shí),程序輸出顧客應(yīng)付的錢數(shù)。用N-S流程圖表示為:輸入m,n280╳m+150╳n=>xYx>10000NYx>5000N7╳x=>x8.5╳x=>xYx>1000N9.5╳x=>x
輸出x試著用N-S流程圖表示下例中的算法。例1.5.6,求解“1+2+……+n<100”的n的最大值。2/4/202326C語言程序設(shè)計(jì)習(xí)題(一)
1,
C語言程序以()為基本單位。A.子程序B.過程C.函數(shù)D.函數(shù)和過程2,
一個(gè)C語言程序有且僅有一個(gè)()。A.includeB.函數(shù)C.主函數(shù)D.過程3,
下列說法正確的是()。A.在C語言程序中,任何函數(shù)都可以被其它函數(shù)調(diào)用。B.C語言程序的執(zhí)行從main()函數(shù)開始到該程序文件的最后一個(gè)函數(shù)結(jié)束。C.C語言程序中main()函數(shù)的位置必須放在最開始。D.C語言程序本身沒有輸入、輸出語句。4,
下列說法不正確的是()。A.C語言程序一行內(nèi)只能寫一條語句。B.C語言源程序只能轉(zhuǎn)換為目標(biāo)代碼后才可以執(zhí)行。C.分號(hào)“:”是C語言程序的一部分。D.一個(gè)完整的C語言程序可以由一個(gè)或多個(gè)源程序文件組成。2/4/202327C語言程序設(shè)計(jì)
5,指出下列程序片段中程序注釋正確的是()。
A.#include<stdio.h>B.#include<stdio.h>main()main(){{intx=1;floatx/*初始化/*把1.00賦給x*/*/=1.00;printf(“%d/*整型*/”,x);printf(“%f”,x);}}
C.#include<stdio.h>D.#include,stdio.h>main(/*主函數(shù)*/)main(){{intx/*初始化*/=1;printf(“%d\n”,x);print/*打印*/f(“OK!”);}}6,參照本章例題1.2.1,編寫一個(gè)C語言程序:任意輸入三個(gè)-32768到32767之間的整數(shù),輸出輸入的第二個(gè)數(shù)。7,參照本章例題1.2.2,編寫一個(gè)C語言程序:任意輸入兩個(gè)-32768到32767之間的整數(shù),輸出最大者。8*,參照本章例題1.2.2,編寫一個(gè)C語言程序:任意輸入三個(gè)-32768到32767之間的整數(shù),輸出最大者。9*,編寫一個(gè)程序,求解“”的根(提示:“開平方根”運(yùn)算用函數(shù)“sqrt()”)。10,用偽碼表示題6,7,8,9中的算法。11,任選一種流程圖,表示題6,7,8,9中的算法。12,簡(jiǎn)述C語言程序的主要特點(diǎn)。13,簡(jiǎn)述C語言程序的組成。
2/4/202328C語言程序設(shè)計(jì)答案與解析(答案僅供參考)1,C.2,C.3,D.在C語言程序中,main()函數(shù)只能自身調(diào)用,不可被其它函數(shù)調(diào)用,除函數(shù)main()外,其它任何函數(shù)都可以被調(diào)用,所以A項(xiàng)不正確;一個(gè)C語言程序的執(zhí)行總是從main()函數(shù)開始,無論main()函數(shù)在整個(gè)程序中的位置如何,到該main()函數(shù)結(jié)束。當(dāng)然,main()函數(shù)可以放在程序最開頭,也可以放在程序的最后,或一些函數(shù)的前面或后面;所以B、C項(xiàng)不正確;C語言程序本身沒有輸入、輸出語句,要完成輸入、輸出操作則需調(diào)用庫(kù)函數(shù)scanf()和printf()等。故正確答案為D。4,A.C語言程序書寫格式自由,一行內(nèi)可以寫多個(gè)語句,每個(gè)語句之間用分號(hào)“;”分開,一個(gè)語句也可以寫在多行上。所以A項(xiàng)錯(cuò)誤,為所選項(xiàng)。5,C.A項(xiàng)把注釋放在printf()函數(shù)的格式說明中了,程序?qū)⒃谄聊簧现苯虞敵觥白⑨尅?,而起不到注釋的作用,所以A項(xiàng)不正確;注釋不可以嵌套,所以B項(xiàng)不正確;D項(xiàng)把輸出函數(shù)printf()分開了,所以不正確。2/4/202329C語言程序設(shè)計(jì)6,main()/*主函數(shù)*/{intx,y,z;/*聲明部分,說明局部變量x,y,z為整型*/scanf(“%d,%d,%d”,&x,&y,&z);/*輸入x,y,z的值*/printf(“Thesecondis%d.\n”,y);/*輸出語句*/}7,/*文件名:max.c*/#include<stdio.h>/*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/main()/*主函數(shù)*/{intx,y,z;/*聲名部分,說明局部變量x,y為整型*/scanf(“%d,%d”,&x,&y);/*輸入變量x,y的值*/z=max(x,y);/*調(diào)用函數(shù)max(),將得到的值賦給z*/printf(“Max=%d.\n”,z);/*輸出結(jié)果*/}intmax(inta,intb)/*定義函數(shù)max(),返回值為整型,形參a,b為整型*/{intc;/*聲明部分,說明局部變量c為整型*/if(a>b)/*通過條件語句把a(bǔ),b最大者賦給c*/c=a;elsec=b;return(c);/*返回c的值*/}2/4/202330C語言程序設(shè)計(jì)8,/*文件名:maxtr.c*/#include<stdio.h>/*插入I/O庫(kù)文件頭*/main()/*主函數(shù)*/{intx,y,z,m;/*聲明部分,說明局部變量x,y,z,m為整型*/scanf(“%d,%d,%d”,&x,&y&z);/*輸入x,y,z的值*/m=max(x,y,z);/*調(diào)用max()函數(shù),把其值賦予m*/printf(“max=%d.\n”,m);/*輸出語句*/}intmax(inta,intb,intc)/*定義函數(shù)max(),其返回值為整型,形參a,b,c為整型*/{intn;/*說明局部變量n為整型*/if(a>b)n=max0(a,c);/*通過條件語句,當(dāng)a>b是,調(diào)用函數(shù)max0(),把a(bǔ),c的最大值(即:a,b,c的最大值)賦予n*/elsen=max0(b,c);/*當(dāng)a<=b時(shí),調(diào)用函數(shù)max0(),把b,c的最大值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 有關(guān)幼兒園的小班月工作計(jì)劃總結(jié)計(jì)劃
- 2024年物流合作保險(xiǎn)法律保障詳盡協(xié)議版B版
- 買賣合同錦集六篇
- 2024年?duì)I養(yǎng)強(qiáng)化劑項(xiàng)目深度研究分析報(bào)告
- 服裝銷售店長(zhǎng)工作計(jì)劃
- 九年級(jí)計(jì)劃作文600字
- 家長(zhǎng)會(huì)發(fā)言稿集錦15篇
- 管理類實(shí)習(xí)經(jīng)驗(yàn)報(bào)告畢業(yè)生
- 一周工作計(jì)劃模板
- 年產(chǎn)12000噸十二烷基苯磺酸鈉(濃縮洗衣粉)提升改造項(xiàng)目環(huán)評(píng)報(bào)告表
- 理論力學(xué)(浙江大學(xué))知到智慧樹章節(jié)答案
- 征信知識(shí)測(cè)試題及答案
- JJF 1629-2017 烙鐵溫度計(jì)校準(zhǔn)規(guī)范(高清版)
- 理想系列一體化速印機(jī)故障代碼
- 檢驗(yàn)科各專業(yè)組上崗輪崗培訓(xùn)考核制度全6頁(yè)
- 部編版二年級(jí)下冊(cè)語文拼音練習(xí)
- 工程停止點(diǎn)檢查管理(共17頁(yè))
- 建筑施工危大工程監(jiān)理實(shí)施細(xì)則
- 六年級(jí)上冊(cè)數(shù)學(xué)單元測(cè)試第七單元檢測(cè)卷∣蘇教版
- 爬架安裝檢查驗(yàn)收記錄表1529
- 2021年全國(guó)煙草工作會(huì)議上的報(bào)告
評(píng)論
0/150
提交評(píng)論