![第一章程序設(shè)計(jì)與C語(yǔ)言_第1頁(yè)](http://file4.renrendoc.com/view11/M01/27/12/wKhkGWYAvg2AI-MeAADl5fqeKkk566.jpg)
![第一章程序設(shè)計(jì)與C語(yǔ)言_第2頁(yè)](http://file4.renrendoc.com/view11/M01/27/12/wKhkGWYAvg2AI-MeAADl5fqeKkk5662.jpg)
![第一章程序設(shè)計(jì)與C語(yǔ)言_第3頁(yè)](http://file4.renrendoc.com/view11/M01/27/12/wKhkGWYAvg2AI-MeAADl5fqeKkk5663.jpg)
![第一章程序設(shè)計(jì)與C語(yǔ)言_第4頁(yè)](http://file4.renrendoc.com/view11/M01/27/12/wKhkGWYAvg2AI-MeAADl5fqeKkk5664.jpg)
![第一章程序設(shè)計(jì)與C語(yǔ)言_第5頁(yè)](http://file4.renrendoc.com/view11/M01/27/12/wKhkGWYAvg2AI-MeAADl5fqeKkk5665.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)
張芳主編
(王維強(qiáng)輔助設(shè)計(jì))北京:電子工業(yè)出版社出版3/25/20241C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)
CProgrammer數(shù)學(xué)信息科學(xué)學(xué)院副教授青島大學(xué)張芳3/25/20242C語(yǔ)言程序設(shè)計(jì)
院樓二層軟件教研室
電話/p>
EMAIL:zhangfang@如何與老師聯(lián)系?3/25/20243C語(yǔ)言程序設(shè)計(jì)第一章程序設(shè)計(jì)與C語(yǔ)言
1.1C語(yǔ)言概述
1.2C語(yǔ)言的程序結(jié)構(gòu)
1.3
術(shù)語(yǔ)
1.4C語(yǔ)言的上機(jī)步驟
1.5算法簡(jiǎn)介習(xí)題(一)及參考答案與解析3/25/20244C語(yǔ)言程序設(shè)計(jì)1.1C語(yǔ)言概述
程序設(shè)計(jì)語(yǔ)言現(xiàn)在已經(jīng)發(fā)展到了第四代。它的發(fā)展過(guò)程大體上是這樣的:3/25/20245C語(yǔ)言程序設(shè)計(jì)(1)機(jī)器語(yǔ)言也有的稱(chēng)為CPU的指令系統(tǒng)。大約在20世紀(jì)50年代,人們開(kāi)始用由二進(jìn)制數(shù)“0”、“1”構(gòu)成的指令碼編寫(xiě)程序。程序的可讀性很差,并且難于修改、擴(kuò)充和移植。因此,當(dāng)時(shí)的編程人員只是極少數(shù)計(jì)算機(jī)專(zhuān)業(yè)技術(shù)人員,并且程序只用于特定類(lèi)型的計(jì)算機(jī)和特定的用途。這也使得其運(yùn)算效率是所有語(yǔ)言中最高的。人們習(xí)慣上把機(jī)器語(yǔ)言稱(chēng)為第一代程序語(yǔ)言。(2)匯編語(yǔ)言也稱(chēng)為符號(hào)語(yǔ)言,是用諸如:“ADD”(代表加法)、“MOV”(代表數(shù)據(jù)傳送)等助記符號(hào)(一些簡(jiǎn)潔的英文字母、符號(hào)串)描述的指令系統(tǒng)。雖然與機(jī)器語(yǔ)言相比,有了較大的進(jìn)步(減輕了使用機(jī)器語(yǔ)言編程的痛苦,人們很容易讀懂并理解程序在干什么,糾錯(cuò)及維護(hù)都變得方便了),但仍未完全擺脫具體機(jī)型的限制,且程序的可讀性比較差,也不容易修改、擴(kuò)充和移植。而此時(shí)人們?cè)O(shè)計(jì)出的具有用一條指令來(lái)描述若干條指令功能的宏匯編,是程序語(yǔ)言發(fā)展史上的一個(gè)巨大進(jìn)步。由于作為第二代程序語(yǔ)言的匯編語(yǔ)言和機(jī)器語(yǔ)言一樣,都是面向計(jì)算機(jī)硬件的,所以它們又被稱(chēng)為面向機(jī)器的語(yǔ)言。(3)面向過(guò)程的高級(jí)語(yǔ)言也有人稱(chēng)之為算法語(yǔ)言,它主要面向解題的過(guò)程,這種語(yǔ)言接近于數(shù)學(xué)語(yǔ)言或人的自然語(yǔ)言,同時(shí)又不依賴(lài)于計(jì)算機(jī)硬件,編出的程序能在所有機(jī)器上通用。這些語(yǔ)言大約產(chǎn)生于20世紀(jì)60年代,主要有BASIC、C、FORTRAN、PASCAL和C++等,人們稱(chēng)之為第三代程序語(yǔ)言。(4)非過(guò)程化的高級(jí)語(yǔ)言
使用過(guò)程化的語(yǔ)言解題。隨著計(jì)算機(jī)圖形學(xué)的發(fā)展,面向?qū)ο蟮某绦蛟O(shè)計(jì)方法和可視化軟件開(kāi)發(fā)越來(lái)越流行,這為非計(jì)算機(jī)專(zhuān)業(yè)人員提供了極大地方便。象用C語(yǔ)言開(kāi)發(fā)的FOXBASE+等非過(guò)程化的高級(jí)語(yǔ)言,被稱(chēng)之為第四代程序語(yǔ)言。
3/25/20246C語(yǔ)言程序設(shè)計(jì)現(xiàn)在使用的大多數(shù)程序是用高級(jí)程序(過(guò)程)語(yǔ)言編寫(xiě)的,而C語(yǔ)言就是其中的“頂梁柱”。C語(yǔ)言是一種編譯型程序語(yǔ)言,其前身是60年代開(kāi)發(fā)的BSPC語(yǔ)言,當(dāng)時(shí)就能夠處理與機(jī)器本身數(shù)據(jù)類(lèi)型相近的數(shù)據(jù),而且具有與內(nèi)存地址對(duì)應(yīng)的指針處理方式。到了1970年在繼承和發(fā)展BCPC語(yǔ)言這些特點(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):
3/25/20247C語(yǔ)言程序設(shè)計(jì)(1)C語(yǔ)言是處于匯編語(yǔ)言和高級(jí)語(yǔ)言之間的一種記述性程序語(yǔ)言,又被稱(chēng)為中級(jí)計(jì)算機(jī)語(yǔ)言。中級(jí)語(yǔ)言并沒(méi)有貶義,并不意味著它功能差,難以使用,或者比BASIC、PASCAL那樣的高級(jí)語(yǔ)言原始,也不意味著它與匯編語(yǔ)言相似,會(huì)給使用者帶來(lái)類(lèi)似的麻煩。C語(yǔ)言之所以被稱(chēng)為中級(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ǔ)言面向用戶(hù),容易記憶,便于閱讀和書(shū)寫(xiě)的優(yōu)點(diǎn)。(2)C語(yǔ)言具有簡(jiǎn)潔的程序表示和書(shū)寫(xiě)格式,以及強(qiáng)大的功能。用C語(yǔ)言編寫(xiě)的程序往往短小精悍,功能強(qiáng)大,不僅可以用于科學(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),十分利于把整體程序分割成若干相對(duì)獨(dú)立的功能模塊,并且為程序模塊間的相互調(diào)用以及數(shù)據(jù)傳遞提供了便利。這一特點(diǎn)也為把大型軟件模塊化,由多人同時(shí)進(jìn)行集體性開(kāi)發(fā)的軟件工程技術(shù)方法提供了強(qiáng)大的支持。3/25/20248C語(yǔ)言程序設(shè)計(jì)(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ǔ)言具有種類(lèi)豐富的運(yùn)算子。除一般高級(jí)語(yǔ)言中使用的“+”、“-”、“*”、“/”等四則運(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語(yǔ)言的數(shù)據(jù)類(lèi)型豐富。基本類(lèi)型有字節(jié)型(8bit),單精度整數(shù)(16bit),雙精度整數(shù)(32bit)和單、雙精度實(shí)數(shù)型,同時(shí)它還具有結(jié)構(gòu)體和聯(lián)合體(又稱(chēng)為共同體)兩種數(shù)據(jù)類(lèi)型。利用它們可以便利地處理包含著不同數(shù)據(jù)類(lèi)型的復(fù)雜數(shù)據(jù)類(lèi)型。因此,C語(yǔ)言具有較高的數(shù)據(jù)處理功能。(9)C語(yǔ)言程序執(zhí)行效率高。試驗(yàn)證明,針對(duì)同一問(wèn)題,用C語(yǔ)言編寫(xiě)的程序生成目標(biāo)代碼的質(zhì)量以及執(zhí)行的速度都比諸如FORTRAN、BASIC等其它高級(jí)語(yǔ)言編寫(xiě)的程序要好很多。C語(yǔ)言的以上特點(diǎn)使其得以廣泛普及和應(yīng)用。C語(yǔ)言又被稱(chēng)為“高級(jí)匯編語(yǔ)言”,使用它的趨勢(shì)日益增強(qiáng),最近呈現(xiàn)出C語(yǔ)言有可能取代匯編語(yǔ)言的發(fā)展趨向。
3/25/20249C語(yǔ)言程序設(shè)計(jì)1.2C語(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.2C語(yǔ)言的關(guān)鍵字autobreakcasecharconstcontinutedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsightsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile
C的關(guān)鍵字都是小寫(xiě)的。在C語(yǔ)言中區(qū)分大、小寫(xiě),如“else”是關(guān)鍵字,“ELSE”就不是關(guān)鍵字。在C語(yǔ)言中關(guān)鍵字不能用于其它目的,即不允許將關(guān)鍵字作為變量名或函數(shù)名使用。
3/25/202410C語(yǔ)言程序設(shè)計(jì)所有的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)用組成。雖然從技術(shù)上講,主函數(shù)不是C語(yǔ)言的一個(gè)成分,但它仍被看作是其一部分。這樣,如果“main()”用作變量名,會(huì)給編譯程序造成混亂。C語(yǔ)言程序的基本形式是:函數(shù)類(lèi)型函數(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ù)類(lèi)型。函數(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ě)在若干行上。C語(yǔ)言中的注釋語(yǔ)句要放在注釋符“/*”與“*/”之間。在“/”與“*”之間不允許有空格,并且一般來(lái)說(shuō),注釋部分允許出現(xiàn)在程序的任何位置。注釋的目的是增加程序的可讀性。因此,建議大家在編寫(xiě)程序時(shí)要寫(xiě)上必要的注釋。
3/25/202411C語(yǔ)言程序設(shè)計(jì)例1.2.1,如下完整的C語(yǔ)言程序用于輸出“WelcometolearningCprogram!”。/*文件名:print.c*/#include<stdio.h>/*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/main()/*主函數(shù)*/{
printf(“WelcometolearningprogramC!\n”);/*輸出語(yǔ)句*/}例1.2.2,如下完整的C語(yǔ)言程序用于輸出所輸入的兩個(gè)在-32768到32767之間的整數(shù)中的最小者。#include<stdio.h>/*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/main()/*主函數(shù)*/{
intx,y,z;/*聲名部分,說(shuō)明局部變量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é)果*/}
int
min(int
a,intb)/*定義函數(shù)min(),返回值為整型,行參a,b為整型*/{
intc;/*聲明部分,說(shuō)明局部變量c為整型*/if(a>b);/*通過(guò)條件語(yǔ)句把a(bǔ),b最小者賦給c*/c=b;elsec=a;return(c)/*文件名:min.c*//*返回c的值*/}3/25/202412C語(yǔ)言程序設(shè)計(jì)1.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è)大文件的形式出現(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ò)程稱(chēng)“鏈接”。某些C編譯程序帶有自己的鏈接程序,有些則使用操作系統(tǒng)提供的標(biāo)準(zhǔn)鏈接程序。最初,C語(yǔ)言被用于系統(tǒng)程序設(shè)計(jì),一個(gè)“系統(tǒng)程序”是一大類(lèi)程序的一個(gè)部分,這一大類(lèi)構(gòu)成了計(jì)算機(jī)操作系統(tǒng)及其實(shí)用程序。通常被稱(chēng)之為系統(tǒng)程序的有:操作系統(tǒng)、翻譯程序、編輯程序、匯編程序、編譯程序和數(shù)據(jù)庫(kù)管理程序。保存在函數(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)足夠了。
3/25/202413C語(yǔ)言程序設(shè)計(jì)1.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)一個(gè)文件中的代碼改變以后,并不必重新編譯全部程序。
3/25/202414C語(yǔ)言程序設(shè)計(jì)1.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)行檢查,當(dāng)出現(xiàn)錯(cuò)誤時(shí),就會(huì)在顯示器上顯示錯(cuò)誤的位置和種類(lèi),再次使用編譯程序進(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)行:直接輸入“C>cf”,再按回車(chē)鍵(用“↙”表示),當(dāng)執(zhí)行結(jié)果達(dá)到預(yù)期目的,則開(kāi)發(fā)工作到此完成,否則,從頭開(kāi)始執(zhí)行(1)、(2)、(3)、(4)。
3/25/202415C語(yǔ)言程序設(shè)計(jì)1.2.4用批命令編譯程序
將編輯、編譯、鏈接、調(diào)試、運(yùn)行全過(guò)程在窗口狀態(tài)下實(shí)現(xiàn),這就是TurboC,這要看操作系統(tǒng)中是否具備。
3/25/202416C語(yǔ)言程序設(shè)計(jì)1.3術(shù)語(yǔ)
(1)源代碼:用戶(hù)可以閱讀的程序正文(文本),通常也被成為源程序,它是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)存放可被用戶(hù)程序引用的標(biāo)準(zhǔn)函數(shù)的文件,這些函數(shù)包括所有I/O操作及其它有用的子程序。(5)編譯時(shí)間:程序被編譯時(shí)出現(xiàn)的事件。在編譯時(shí)間內(nèi)出現(xiàn)的錯(cuò)誤通常是語(yǔ)法錯(cuò)誤。(6)運(yùn)行時(shí)間:程序在運(yùn)行時(shí)出現(xiàn)的事件。
3/25/202417C語(yǔ)言程序設(shè)計(jì)1.4C語(yǔ)言的上機(jī)步驟
TurboC是目前應(yīng)用十分廣泛的編譯程序。下面簡(jiǎn)單介紹一下TurboC的一些情況。按裝并打開(kāi)TurboC后,大家會(huì)看到“主菜單”有8個(gè)“子菜單項(xiàng)”
(見(jiàn)表1.4),每個(gè)“子菜單項(xiàng)”又有若干“子菜單項(xiàng)”。
表1.4.1TurboC的菜單主菜單
FileEditRunCompileProjectOptionDebugBreak/watch含義
文件
編輯
運(yùn)行
編譯
項(xiàng)目
選項(xiàng)
調(diào)試
中斷/觀察操作
文件
3/25/202418C語(yǔ)言程序設(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)切換。用鍵盤(pán)的左移鍵“←”和右移鍵“→”進(jìn)行選擇菜單項(xiàng),按回車(chē)鍵(常用“↙”表示)選定當(dāng)前的一個(gè)菜單項(xiàng)。選定菜單項(xiàng)之后,再用上移鍵“↑”和下移鍵“↓”選擇所需項(xiàng),按回車(chē)鍵選定。3/25/202419C語(yǔ)言程序設(shè)計(jì)使用TurboC的一般步驟如下:(1)打開(kāi)TurboC后,系統(tǒng)會(huì)自動(dòng)建立一個(gè)新的C語(yǔ)言源程序。也可以通過(guò)選擇“File/New”新建一個(gè)C語(yǔ)言源程序。如果源程序已經(jīng)存在,則選擇“File/load”,在彈出的對(duì)話框中輸入所需的文件名并按“↙”,即可打開(kāi)文件。(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語(yǔ)言程序在DOS和UNIX操作系統(tǒng)下的運(yùn)行,請(qǐng)讀者參閱其它參考書(shū)。
3/25/202420C語(yǔ)言程序設(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)專(zhuān)業(yè)的基礎(chǔ)課。關(guān)于這方面,這里不再贅述。算法則是對(duì)某一個(gè)特定問(wèn)題求解步驟進(jìn)行描述的有序指令序列。它具有:有窮性、確定性、可行性以及輸入和輸出等5個(gè)重要特性。評(píng)價(jià)一個(gè)算法的優(yōu)劣則一般從正確性、可讀性、健壯性和算法效率等4個(gè)方面進(jìn)行考慮。一個(gè)算法常用偽碼和流程圖等描述。軟件專(zhuān)業(yè)人員則習(xí)慣使用偽碼。
3/25/202421C語(yǔ)言程序設(shè)計(jì)(1)偽碼用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之間的文字和符號(hào)來(lái)表示算法,書(shū)寫(xiě)格式自由。例1.5.1,任意輸入一個(gè)非零自然數(shù)n,求1+2+…+n的值。用偽碼表示如下:算法開(kāi)始:賦予x的初始值為0賦予y的初始值為n當(dāng)i<y時(shí)(循環(huán)執(zhí)行下列語(yǔ)句)
x=x+ii=i+1輸出x的值算法結(jié)束用偽碼也可以這樣表示:Begin0=>xn=>yfor(i<y+1,i+1=>i){x+i=>x}printxEnd自己嘗試寫(xiě)一下下例中算法的偽碼表示。例1.5.2,任意輸入一個(gè)非零自然數(shù),求的值。
3/25/202422C語(yǔ)言程序設(shè)計(jì)(2)普通流程圖用一些規(guī)定的圖標(biāo)以及一些文字和符號(hào)來(lái)表示算法,具有直觀性。AmericanNationalStandardInstitute(簡(jiǎn)稱(chēng):ANSI)對(duì)這些圖標(biāo)作了規(guī)定。其中一些常用的圖標(biāo)如下:表1.5.1普通流程圖的常用圖標(biāo)
名稱(chēng)起止輸入輸出處理判斷注釋方向結(jié)點(diǎn)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)圖標(biāo)3/25/202423C語(yǔ)言程序設(shè)計(jì)例1.5.3,任意輸入三個(gè)數(shù),按自小到大順序輸出。用普通流程圖表示為:開(kāi)始
輸入x,y,zNx>yx=>ny=>m
Yx=>yy=>n1m=>pz>nn=>mz=>n
Ym<z1z=>m2Yz=>p22
輸出p,m,n嘗試著寫(xiě)一下下例算法的普通流程圖表示。例1.5.4,任意輸入四個(gè)數(shù),按自大到小順序輸出。
3/25/202424C語(yǔ)言程序設(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)的算法表示(見(jiàn)表1.5.2)。表1.5.2N-S流程圖的基本結(jié)構(gòu)
再執(zhí)行B.A;否則執(zhí)行B。反復(fù)執(zhí)行A。P不成立。基本AYPNPA結(jié)構(gòu)BABAP名稱(chēng)順序結(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,直到條件3/25/202425C語(yǔ)言程序設(shè)計(jì)例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)輸入這類(lèi)顧客購(gòu)買(mǎi)的鞋子的雙數(shù)和上衣的件數(shù)時(shí),程序輸出顧客應(yīng)付的錢(qián)數(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的最大值。3/25/202426C語(yǔ)言程序設(shè)計(jì)習(xí)題(一)
1,
C語(yǔ)言程序以()為基本單位。A.子程序
B.過(guò)程
C.函數(shù)
D.函數(shù)和過(guò)程2,
一個(gè)C語(yǔ)言程序有且僅有一個(gè)()。A.includeB.函數(shù)
C.主函數(shù)
D.過(guò)程3,
下列說(shuō)法正確的是()。A.在C語(yǔ)言程序中,任何函數(shù)都可以被其它函數(shù)調(diào)用。B.C語(yǔ)言程序的執(zhí)行從main()函數(shù)開(kāi)始到該程序文件的最后一個(gè)函數(shù)結(jié)束。C.C語(yǔ)言程序中main()函數(shù)的位置必須放在最開(kāi)始。D.C語(yǔ)言程序本身沒(méi)有輸入、輸出語(yǔ)句。4,
下列說(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è)源程序文件組成。3/25/202427C語(yǔ)言程序設(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,編寫(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ù),輸出最大者。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ǔ)言程序的組成。
3/25/202428C語(yǔ)言程序設(shè)計(jì)答案與解析(答案僅供參考)1,C.2,C.3,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)然,main()函數(shù)可以放在程序最開(kāi)頭,也可以放在程序的最后,或一些函數(shù)的前面或后面;所以B、C項(xiàng)不正確;C語(yǔ)言程序本身沒(méi)有輸入、輸出語(yǔ)句,要完成輸入、輸出操作則需調(diào)用庫(kù)函數(shù)scanf()和printf()等。故正確答案為D。4,A.C語(yǔ)言程序書(shū)寫(xiě)格式自由,一行內(nèi)可以寫(xiě)多個(gè)語(yǔ)句,每個(gè)語(yǔ)句之間用分號(hào)“;”分開(kāi),一個(gè)語(yǔ)句也可以寫(xiě)在多行上。所以A項(xiàng)錯(cuò)誤,為所選項(xiàng)。5,C.A項(xiàng)把注釋放在printf()函數(shù)的格式說(shuō)明中了,程序?qū)⒃谄聊簧现苯虞敵觥白⑨尅?,而起不到注釋的作用,所以A項(xiàng)不正確;注釋不可以嵌套,所以B項(xiàng)不正確;D項(xiàng)把輸出函數(shù)printf()分開(kāi)了,所以不正確。3/25/202429C語(yǔ)言程序設(shè)計(jì)
6,
main()/*主函數(shù)*/{
intx,y,z;/*聲明部分,說(shuō)明局部變量x,y,z為整型*/
scanf(“%d,%d,%d”,&x,&y,&z);/*輸入x,y,z的值*/
printf(“Thesecondis%d.\n”,y);/*輸出語(yǔ)句*/}7,
/*文件名:max.c*/#include<stdio.h>/*插入標(biāo)準(zhǔn)I/O庫(kù)的頭文件*/main()/*主函數(shù)*/{
intx,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,intb)/*定義函數(shù)max(),返回值為整型,形參a,b為整型*/{
intc;/*聲明部分,說(shuō)明局部變量c為整型*/if(a>b)/*通過(guò)條件語(yǔ)句把a(bǔ),b最大者賦給c*/c=a;elsec=b;return(c);/*返回c的值*/}3/25/202430C語(yǔ)言程序設(shè)計(jì)
8,/*文件名:maxtr.c*/#include<stdio.h>/*插入I/O庫(kù)文件頭*/main()/*主函數(shù)*/{
intx,y,z,m;/*聲明部分,說(shuō)明局部變量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);/*輸出語(yǔ)句*/}
int
max(int
a,int
b,intc)/*定義函數(shù)max(),其返回值為整型,形參a,b,c為整型*/{
intn;/*說(shuō)明局部變量n為整型*/if(a>b)n=max0(a,c);/*通過(guò)條件語(yǔ)句,當(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的最大值(即:a,b,c的最大值)賦予n*/
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)水噴汽霧式防火卷簾門(mén)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)車(chē)載視頻監(jiān)控系統(tǒng)市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)紫外線凈化器市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)導(dǎo)爆管擊發(fā)器市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)固定天輪市場(chǎng)調(diào)查研究報(bào)告
- 2025至2030年中國(guó)空氣綜合治理超濃縮液數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)空調(diào)裝配生產(chǎn)線數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年新法克毒靈項(xiàng)目可行性研究報(bào)告
- 2025至2030年中國(guó)三層減震墊鐵數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)網(wǎng)箱托盤(pán)市場(chǎng)調(diào)查研究報(bào)告
- 小學(xué)六年級(jí)數(shù)學(xué)上冊(cè)《簡(jiǎn)便計(jì)算》練習(xí)題(310題-附答案)
- 2024年河南省《輔警招聘考試必刷500題》考試題庫(kù)及答案【全優(yōu)】
- 安全隱患報(bào)告和舉報(bào)獎(jiǎng)勵(lì)制度
- 2024年中國(guó)養(yǎng)老產(chǎn)業(yè)商學(xué)研究報(bào)告-銀發(fā)經(jīng)濟(jì)專(zhuān)題
- 高教版2023年中職教科書(shū)《語(yǔ)文》(基礎(chǔ)模塊)下冊(cè)教案全冊(cè)
- 人教版英語(yǔ)七年級(jí)上冊(cè)閱讀理解專(zhuān)項(xiàng)訓(xùn)練16篇(含答案)
- 古樹(shù)名木保護(hù)建設(shè)項(xiàng)目可行性研究報(bào)告
- DB50-T 867.36-2022 安全生產(chǎn)技術(shù)規(guī)范+第36+部分:倉(cāng)儲(chǔ)企業(yè)
- 幼小銜接學(xué)拼音
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第九章運(yùn)動(dòng)技能學(xué)習(xí)概述
- 在全縣生豬生產(chǎn)統(tǒng)計(jì)監(jiān)測(cè)工作會(huì)議的講話范文(通用3篇)
評(píng)論
0/150
提交評(píng)論