




已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
. C語言程序設(shè)計(jì)能力標(biāo)準(zhǔn):1 了解C語言的作用;2 熟悉C程序結(jié)構(gòu);3 掌握TC集成調(diào)試環(huán)境的使用。知識點(diǎn):1 C語言是人和計(jì)算機(jī)交流的一種工具;2 C語言程序的執(zhí)行過程。模塊一 認(rèn)識C語言1C語言的發(fā)展計(jì)算機(jī)語言是計(jì)算機(jī)和人交流的工具,必須遵守一定的規(guī)則,具有一定的書寫格式。C語言就是一種計(jì)算機(jī)語言,誕生于1972年,是由美國電話電報(bào)公司(AT&T)貝爾實(shí)驗(yàn)室的Dennis.M.Ritchie設(shè)計(jì)。C語言誕生至今已30多年,其發(fā)展經(jīng)歷了ALGOL(1960年)CPL(1963年)B(1970年)C(1972年)的演變過程。2人機(jī)交流人和計(jì)算機(jī)交流可以采用對話形式的一問一答方式,也可采用任務(wù)方式,即把需要交流的內(nèi)容集中在一起,一次性完成。前者的專業(yè)述語叫解釋方式,后者叫編譯方式。用C語言進(jìn)行人和計(jì)算機(jī)交流采用的是編譯方式。具體過程如下:#include main() float m,k,j;k=5;m=1;for(j=1;j=k;j+) m=m*j;printf(“%f !=%fn”,k,m); 編程 首先人將和計(jì)算機(jī)交流的內(nèi)容按要求,用C語言寫成任務(wù),如要計(jì)算機(jī)計(jì)算5!,則需要寫出以下任務(wù):上述用C語言表示的任務(wù),稱為程序。所謂程序指由一系指令組成,完成某個(gè)具體功能的指令集合。 編譯 計(jì)算機(jī)本身是一堆零件,它只知道高低電平,對應(yīng)到二進(jìn)制就是“0”和“1”這兩個(gè)符號,當(dāng)然它是不認(rèn)識我們用上述符號寫成的程序,因此我們需要將上述程序進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換成由“0”和“1”的組合來表示的二進(jìn)制程序,也就是機(jī)器語言程序。我們把這樣的轉(zhuǎn)換稱之為編譯。 連接 為了方便程序的編寫,專業(yè)人員已經(jīng)將許多常用的功能寫成了固定的程序,并已進(jìn)行編譯,我們在編寫實(shí)際應(yīng)用程序時(shí)可以直接使用現(xiàn)成的功能程序,這些功能程序要和用戶編寫的程序連接起來,形成最終計(jì)算機(jī)能夠執(zhí)行的機(jī)器語言程序。 執(zhí)行 經(jīng)過上述三步之后生成的機(jī)器語言程序,在Turbo C系統(tǒng)中稱為目標(biāo)程序,把目標(biāo)程序交給計(jì)算機(jī),計(jì)算機(jī)在操作系統(tǒng)的支持下,就能按人的要求實(shí)現(xiàn)相應(yīng)的功能,就是執(zhí)行程序,并把執(zhí)行的結(jié)果輸出在輸出設(shè)備上,供人來閱讀,從而實(shí)現(xiàn)人機(jī)交流。編程.c編譯.exe.obj連接執(zhí)行輸出結(jié)果鍵盤輸入圖1.1 人機(jī)交流的過程為了區(qū)別不同過程中生成的不同對象,計(jì)算機(jī)中用不同的文件擴(kuò)展名來表示,編程階段生成的文件擴(kuò)展名是.c,編譯階段生成的文件擴(kuò)展名是.obj,連接階段生成的文件擴(kuò)展名是.exe。以上過程可用圖1.1表示。3C語言程序的基本結(jié)構(gòu)/*求圓的面積*/#include main() float r,s; /*定義變量r,s表示圓的半徑和面積*/r=5.365; /*給半徑賦值*/s=3.14*r*r; /*計(jì)算面積*/printf(“s=%fn”,s); /*輸出面積*/ 下面通過幾個(gè)C語言程序的實(shí)例,介紹C語言程序的基本構(gòu)成和書寫格式?!纠?-1】已知圓的半徑,請編程求圓的面積。【例1-2】/*求兩個(gè)整數(shù)中的大數(shù)*/#include main() int num1,num2,m; /*定義變量num1,num2和m*/scanf(“%d%d”,&num1,&num2); /*輸入兩個(gè)整數(shù)*/m=max (num1,num2); /*調(diào)用max函數(shù)求大數(shù)存入m變量*/printf(“max=%dn”,m); /*輸出大數(shù)*/ /*用戶設(shè)計(jì)的函數(shù)max*/int max(int x,int y)if(xy)return x; /*比較返回大數(shù)*/ else return y; 請編程求兩個(gè)整數(shù)中的大數(shù)。結(jié)合以上示例,可見C語言程序由以下幾部分組成:1 C語言程序由函數(shù)組成,每個(gè)函數(shù)完成相對獨(dú)立的功能,函數(shù)是C語言程序的基本模塊單元。main和max是函數(shù)名,x,y是函數(shù)max的形式參數(shù);2 一個(gè)C語言程序總是從main函數(shù)開始執(zhí)行,main函數(shù)執(zhí)行結(jié)束,程序執(zhí)行即結(jié)束;3 C語言程序的開頭部分一般是編譯預(yù)處理命令(如#include,#define命令)和全局變量的定義語句。4C語言程序的書寫格式1 C語言的語句以分號“;”作為語句結(jié)束標(biāo)志;2 每行通常寫一條語句,一行也可寫多條語句,長語句也可分在多行書寫;3 為了使程序更加清晰,便于閱讀,采取縮進(jìn)書寫格式,不同一層次的語句依次縮進(jìn)兩個(gè)字符或者一個(gè)水平制表符;4 注釋由“/*”開始,由“*/”結(jié)束;5 復(fù)合語句由“”括起來;6 編譯預(yù)處理命令后不加“;”。5人機(jī)交流過程的演示(TC集成調(diào)試環(huán)境的使用)Turbo C 是美國Borland 公司的產(chǎn)品,Borland公司是一家專門從事軟件開發(fā)、研制的大公司。該公司在1987年首次推出Turbo C 1.0 產(chǎn)品,其中使用了全然一新的集成開發(fā)環(huán)境,即使用了一系列下拉式菜單,將文本編輯、程序編譯、連接以及程序運(yùn)行一體化,大大方便了程序的開發(fā)。Turbo C 2.0 則是該公司1989年出版的,Turbo C 2.0在原來集成開發(fā)環(huán)境的基礎(chǔ)上增加了查錯(cuò)功能,并可以在Tiny模式下直接生成.com (數(shù)據(jù)、代碼、堆棧處在同一64K 內(nèi)存中) 文件,還可對數(shù)學(xué)協(xié)處理器 (支持8087/80287/80387等)進(jìn)行仿真。使用Turbo C 2.0可以進(jìn)行C語言源程序的編輯、編譯、連接和運(yùn)行,方便用戶程序的調(diào)試。5.1 Turbo C 2.0基本配置要求 Turbo C 2.0可運(yùn)行于IBM-PC系列微機(jī),包括XT,AT及IBM 兼容機(jī)。 此時(shí)要求DOS 2.0或更高版本支持,并至少需要448K的RAM,可在任何彩、單色80列監(jiān)視器上運(yùn)行。支持?jǐn)?shù)學(xué)協(xié)處理器芯片,也可進(jìn)行浮點(diǎn)仿真,這將加快程序的執(zhí)行。5.2 Turbo C 2.0的啟動 在DOS系統(tǒng)下Turbo C 2.0安裝完畢,將在C盤根目錄下建立一個(gè)TC子目錄,TC下還建立了兩個(gè)了目錄LIB和INCLUDE,LIB子目錄中存放庫文件,INCLUDE子目錄中存放所有頭文件。運(yùn)行Turbo C 2.0時(shí),只要在TC子目錄下鍵入TC并回車即可進(jìn)入Turbo C 2.0集成開發(fā)環(huán)境。5.3 Turbo C 2.0窗口介紹 進(jìn)入Turbo C 2.0集成開發(fā)環(huán)境中后,屏幕上顯示如圖1.2的TC工作窗口。其中頂上一行為Turbo C 2.0 主菜單,中間窗口為編輯區(qū),接下來是信息窗口,最底下一行為參考行。這四個(gè)窗口構(gòu)成了Turbo C 2.0的主屏幕,以后的編程、編譯、調(diào)試以及運(yùn)行都將在這個(gè)主屏幕中進(jìn)行。5.4 C語言程序的編輯1編輯一個(gè)新文件圖1.2 TC工作窗口主菜單編輯區(qū)信息窗口參考行如果要輸入或編輯一個(gè)新的C語言程序,應(yīng)該先選File菜單,然后選擇子菜單new,編輯窗口被清空,光標(biāo)定位在左上角(Line 1、Col 1),這時(shí)注意默認(rèn)的文件名為“NONAME.C”。用戶可以開始輸入和編輯源程序了。輸入和編輯程序的操作類似于通常的字處理軟件,通過Insert鍵進(jìn)行插入和改寫狀態(tài)的切換,如果有“Insert”顯示,表示處于插入狀態(tài)。程序輸入完畢要及時(shí)進(jìn)行保存,保存文件操作應(yīng)選擇File菜單的子菜單Save,這時(shí)會彈出一個(gè)對話框如圖1.3所示,要求用戶輸入文件名及其路徑來修改默認(rèn)的路徑和文件名。注意文件的擴(kuò)展名“.c”不可省略。一旦用新的文件名保存文件后,編輯窗口默認(rèn)的文件名“NONAME.C”被改為新的文件名。2. 編輯一個(gè)已存在的文件如果要重新編輯一個(gè)已經(jīng)存在的文件,應(yīng)選擇File菜單下的子菜單Load,這時(shí)會彈出一個(gè)類似于圖1.3的對話框,當(dāng)用戶輸入要打開的文件名和路徑后,即打開了此文件,這時(shí)用戶就可對其進(jìn)行重新編輯并保存。編輯窗口這時(shí)會顯示打開的文件名。3重命名一個(gè)文件如果要對正在編輯的文件重命名,請選擇File菜單下的子菜單Write to,這時(shí)會彈出一個(gè)同樣類似圖1.3的對話框,要求用戶輸入新的文件名和路徑。完成之后編輯窗口將以新的文件名顯示。5.5 C語言程序的編譯和連接圖1.3編輯好源程序并存盤后,應(yīng)當(dāng)對源程序進(jìn)行編譯、連接和運(yùn)行。在Turbo C集成環(huán)境中,進(jìn)行編譯、連接和運(yùn)行是十分方便的,既可以將編譯、連接和運(yùn)行分三個(gè)步驟進(jìn)行,也可以將編譯和連接合起來作為一步進(jìn)行,然后再運(yùn)行;還可以三者合在一起一次完成。既可對單個(gè)模塊的程序進(jìn)行編譯、連接和運(yùn)行,也可以一次對多個(gè)文件模塊的程序進(jìn)行編譯、連接和運(yùn)行。1對單文件程序的編譯和連接(1) 編譯 選擇Compile菜單下的子菜單Complie to OBJ,此時(shí)系統(tǒng)顯示默認(rèn)的目標(biāo)文件名。編譯后,目標(biāo)文件將保存在當(dāng)前工作目錄或配置文件TCCONFIG.TC所指定的輸出目錄中。(2) 連接 有了目標(biāo)文件后,還不能直接運(yùn)行,還要將目標(biāo)文件與系統(tǒng)提供的庫函數(shù)和包含文件等連接成一個(gè)可執(zhí)行文件(擴(kuò)展名為.exe),才能運(yùn)行這個(gè).exe文件。選擇Compile菜單的子菜單Link EXE file,就可執(zhí)行連接操作,在當(dāng)前工作目錄或者配置文件TCCONFIG.TC所指定的輸出目錄中生成一個(gè)可執(zhí)行文件。應(yīng)注意的是,必須是在編譯沒有錯(cuò)誤的情況下才能進(jìn)行連接。圖1.4(3)一次完成編譯和連接 選擇Compile菜單下的子菜單Make EXE file,即可一次完成編譯和連接,從而在當(dāng)前工作目錄或者配置文件TCCONFIG.TC所指定的輸出目錄中生成一個(gè)目標(biāo)文件和一個(gè)可執(zhí)行文件。注:在選擇相關(guān)菜單時(shí),請注意有些菜單后面跟有快捷鍵提示,也就是說可以直接按對應(yīng)的快捷鍵實(shí)現(xiàn)菜單的功能。如進(jìn)行存盤操作,需要選擇File菜單的子菜單Save,也可以直接按F2鍵,相當(dāng)于進(jìn)行了上面的選擇。2對多個(gè)程序文件進(jìn)行編譯和連接如果一個(gè)源程序包含多個(gè)文件模塊,則應(yīng)當(dāng)對各文件分別進(jìn)行編譯,得到多個(gè)目標(biāo)文件,然后將這些目標(biāo)文件和庫函數(shù)、包含文件等連接成一個(gè)可執(zhí)行文件。Turbo C提供了多個(gè)程序文件進(jìn)行編譯和連接的簡便方法,即將這些文件組成一個(gè)“項(xiàng)目”,為此要建立一個(gè)“項(xiàng)目文件”,以.prj作為擴(kuò)展名,項(xiàng)目文件中包含這些文件,然后將該項(xiàng)目文件交付編譯和連接,就可以得到可執(zhí)行文件了。具體步驟如下:(1)在Turbo C 編輯環(huán)境中,輸入各源文件名,如有兩個(gè)文件需要進(jìn)行編譯和連接,則.prj文件內(nèi)容見圖1.4所示。(2)將上述編輯的內(nèi)容保存成項(xiàng)目文件。選擇File菜單的子菜單Save或Write to,輸入項(xiàng)目文件名包括路徑,并且注意一定要包含擴(kuò)展名.prj,以表示建立的是項(xiàng)目文件。(3)建立項(xiàng)目。選擇Project菜單的子菜單Project name,輸入剛建立的項(xiàng)目文件名。(4)編譯和連接。選擇Compile菜單下的子菜單Make EXE file,系統(tǒng)就會對此項(xiàng)目文件進(jìn)行編譯和連接,并生成兩個(gè)目標(biāo)文件和一個(gè)可執(zhí)行文件,生成的可執(zhí)行文件名同項(xiàng)目文件名。注:在選擇Make EXE file菜單進(jìn)行編譯和連接時(shí),系統(tǒng)首先查找有無項(xiàng)目文件,如果在Project name中指定了項(xiàng)目文件,則系統(tǒng)優(yōu)先編譯該項(xiàng)目文件,而不是編譯編輯窗口中的文件。應(yīng)特別注意,在處理完一個(gè)多程序文件的編譯和連接后,應(yīng)及時(shí)將Project name清空,否則就會在編譯連接時(shí)仍然把項(xiàng)目文件當(dāng)做編譯對象,而不是編譯編輯窗口中的源文件。3. 編譯和連接過程中的顯示信息(1)編譯過程中出現(xiàn)的信息如圖1.5所示,窗口最上方的Compiling表示是編譯階段的信息;第一行表示編譯的主文件是HELLO.C;第二行正在編譯的是正在編輯的文件HELLO.C;接下來表示編譯的行數(shù)是220,警告0個(gè),錯(cuò)誤1個(gè);下面一行表示占用的存儲空間為299KB;最后一行表示編譯成功(Success)或者有錯(cuò)誤(Errors),請用戶按任意鍵繼續(xù)。需要解釋的是,只有編譯沒有錯(cuò)誤時(shí),才可以進(jìn)行連接,否則仍需要進(jìn)行編輯,再編譯。(2)連接過程中出現(xiàn)的信息如圖1.6所示,連接過程出現(xiàn)的信息和編譯的信息類似,只有警告和錯(cuò)誤都為0,才表示連接成功,并且最下面也有文字提示Success。只有連接成功才能生成可執(zhí)行文件。圖1.6圖1.55.6 C語言程序的運(yùn)行經(jīng)過成功的編譯和連接之后,就生成了可執(zhí)行文件,這時(shí)就可以運(yùn)行了。運(yùn)行一個(gè)程序,可采用以下幾種方法:1. 在TC的集成環(huán)境中運(yùn)行 選擇Run菜單下的子菜單Run,即可運(yùn)行程序。2. 在DOS環(huán)境下運(yùn)行在DOS提示符下,輸入可執(zhí)行文件的文件名和路徑,即可運(yùn)行程序。3. 在WINDOWS環(huán)境下運(yùn)行(1)選擇WINDOWS開始菜單中的運(yùn)行子菜單,然后輸入文件名及路徑。(2)在資源管理器中雙擊所生成的可執(zhí)行文件名。5.7 在TC集成環(huán)境中查看運(yùn)行結(jié)果在TC集成環(huán)境中有一個(gè)用戶屏幕(User Screen),程序運(yùn)行結(jié)果將顯示在用戶屏幕,從編輯窗口切換到用戶屏幕,選擇Run菜單下的子菜單User Screen,或用快捷鍵Alt+F5即可進(jìn)入用戶屏幕,從用戶屏幕按任意鍵即可進(jìn)入編輯窗口。6C語言學(xué)習(xí)要求1按時(shí)上課及上機(jī);2勤于思考,多查閱資料;3多進(jìn)行實(shí)踐;4具有團(tuán)隊(duì)協(xié)作精神;5分組學(xué)習(xí)。7實(shí)驗(yàn)一 TC集成調(diào)試環(huán)境的初識7.1 實(shí)驗(yàn)?zāi)康?. 熟悉TC集成調(diào)試環(huán)境;2. 掌握在TC環(huán)境下編輯、編譯、連接和運(yùn)行C語言程序的過程;3. 熟悉C語言程序的組成及書寫格式。7.2 實(shí)驗(yàn)要求1. 普通微機(jī);2. TC集成調(diào)試環(huán)境。7.3 實(shí)驗(yàn)內(nèi)容及步驟1. TC集成調(diào)試環(huán)境的熟悉1.1啟動TC集成調(diào)試環(huán)境;1.2熟悉各菜單項(xiàng);1.3熟悉各功能鍵;1.4熟悉編輯窗口各部分的意義;1.5退出TC集成環(huán)境。2. 調(diào)試【例1.1】程序并記錄相關(guān)信息2.1輸入【例1.1】程序,輸入時(shí)省略注釋部分。源程序:2.2用program1.c文件名保存文件在自己的目錄下。2.3編譯program1.c源程序文件,生成program1.obj目標(biāo)文件(該步可能需要反復(fù)進(jìn)行)。編譯提示信息: 修改情況記錄:錯(cuò)誤原因分析:2.4連接程序,生成可執(zhí)行文件program1.exe(2.3和2.4兩步可能需要反復(fù)進(jìn)行)。連接提示信息: 修改情況記錄:錯(cuò)誤原因分析:2.5執(zhí)(運(yùn))行program1.exe文件,記錄輸出結(jié)果。運(yùn)行結(jié)果:2.6修改【例1.1】程序,求半徑為6.2圓的面積,重復(fù)2.12.5步驟,并記錄每一步相關(guān)信息。3. 調(diào)試【例1.2】程序并記錄相關(guān)信息,用program2.c文件名保存源程序。調(diào)試步驟同2. 。4. 編程求5!,并調(diào)試該程序,記錄每一步相關(guān)信息。7.4思考題1. 請總結(jié)C語言程序調(diào)試的步驟。2. 為什么程序修改后需要重新進(jìn)行編譯、連接和運(yùn)行?3. TC為什么稱為集成調(diào)試環(huán)境?8課后練習(xí)(要求所有程序必須上機(jī)運(yùn)行通過)1 模仿講議中C語言程序,編寫程序求圓的周長。2 模仿講議中C語言程序,編寫程序求兩個(gè)整數(shù)中的小數(shù)。3 上機(jī)運(yùn)行下列程序,并記錄輸出結(jié)果。#include main() printf(“Hello C program world !n”);printf(“I am an university student !n”); 4 請參照第3題的程序,編程輸出下列圖形。* * * * * * * *5 請參照第4題的程序,編程輸出下列圖形。(可選做)* * * * * * * * * * * *6 C語言程序由哪幾部分組成?其程序的基本單位是什么?9補(bǔ)充閱讀9.1計(jì)算機(jī)語言的發(fā)展過程1第一代語言-機(jī)器語言(低級語言)機(jī)器語言是由0、1組成的機(jī)器指令集合,是面向機(jī)器的語言。要使計(jì)算機(jī)按人的意圖工作,就必須使計(jì)算機(jī)懂得人的意圖,接收人向它發(fā)出的命令和信息。人要和機(jī)器交換信息就要解決一個(gè)“語言”的問題。計(jì)算機(jī)并不懂人類的語言(無論是中文或英文),例如,我們要寫y=2x+3,機(jī)器不能接受。它只能識別0和1兩種狀態(tài),如光電輸入機(jī)中紙帶有孔的地方代表1,無孔的地方代表0。由0和1組成各種排列組合,通過線路轉(zhuǎn)變成電信號,讓計(jì)算機(jī)執(zhí)行各種不同的操作。這種直接用0和1 組成的機(jī)器指令編寫程序,就是機(jī)器語言源程序。對計(jì)算機(jī)來說,這是它唯一能直接讀懂的語言,所以,通常稱之為機(jī)器語言。但是,對于使用計(jì)算機(jī)的人來說,這是十分難懂的語言,它難讀、難記、難寫,容易出錯(cuò),不同的機(jī)型又不通用,顯然人和機(jī)器之間的通信存在巨大的鴻溝,只有填補(bǔ)上這個(gè)鴻溝,才能讓用戶使用起來方便容易,機(jī)器又能懂,計(jì)算機(jī)才能發(fā)揮更大的作用,為此,人們研究了一種匯編語言。2第二代語言-匯編語言(低級語言)LDA A 取出AADD B A和B相加STA C 存入CPRINT C 打印CSTOP 停止匯編語言也叫符號語言,它是把用二進(jìn)制數(shù)表示的指令,用一些符號來表示,例如,用表示操作的英文縮寫來代替匯編語言指令代碼。下面是一段匯編語言代碼。這種用符號代替二進(jìn)制代碼的指令,就叫匯編語言。像LDA、ADD這類符號稱之為指令符號或助記符。用匯編語言編寫的程序,稱為匯編語言程序。這種語言,相對于機(jī)器語言來說容易讀、容易記,但是,機(jī)器卻不能識別。因此,計(jì)算機(jī)是無法執(zhí)行的。為了讓機(jī)器能執(zhí)行匯編語言程序,這時(shí)就需要一個(gè)翻譯,正如一個(gè)不懂漢語的外國人到中國來無法同中國人直接交流,需要借助于翻譯一樣,借助于翻譯,將匯編語言程序翻譯成機(jī)器語言程序,這個(gè)翻譯過程叫做“匯編”。匯編后產(chǎn)生的機(jī)器代碼稱為目標(biāo)程序。翻譯可由人手工完成,也可用計(jì)算機(jī)來完成,用計(jì)算機(jī)來做翻譯,實(shí)際上是研制了翻譯程序,把這個(gè)翻譯程序稱為匯編程序。匯編過程如圖1.7所示。匯編語言源程序機(jī)器指令目標(biāo)程序計(jì)算機(jī)執(zhí)行結(jié)果輸出匯編程序(事先放入計(jì)算機(jī))(匯編)(執(zhí)行)(輸入)圖1.7 匯編過程匯編語言使程序設(shè)計(jì)工作前進(jìn)了一大步,但是仍然存在很多缺點(diǎn):第一,不便于我們求解問題過程的描述,如一個(gè)數(shù)學(xué)公式,匯編語言的表達(dá)式與人們的習(xí)慣表達(dá)形式差距很大;第二,它仍然是面向機(jī)器的語言,不同機(jī)型,匯編語言也不一樣,因此用它編制程序,沒有通用性。為了克服這些不足之處,人們進(jìn)一步研制開發(fā)出了高級語言。3第三代語言-算法語言(高級語言)算法語言是更接近人的自然語言和數(shù)學(xué)表達(dá)式的一種語言,由表達(dá)不同意義的“關(guān)鍵字”和“表達(dá)式”按照一定的語法語義規(guī)則組成、完全不依賴機(jī)器的指令系統(tǒng)。這樣的高級語言為人們提供了很大的方便,編制出來的程序易讀易記,也便于修改、調(diào)試,大大提高了編制程序的效率和程序的通用性,便于推廣交流,從而極大地推動了計(jì)算機(jī)的普及與應(yīng)用。常見的BASIC、FORTRAN、ALGOL、COBOL、C等都是高級語言。高級語言更接近人的習(xí)慣,便于人的理解與使用,可計(jì)算機(jī)卻更難理解與接受,計(jì)算機(jī)不能直接理解那些英語單詞、數(shù)學(xué)表達(dá)式。所以,為了填補(bǔ)計(jì)算機(jī)和人之間的鴻溝,還得求助于翻譯。這種翻譯通常分為兩種形式,一種叫解釋方式,另一種叫編譯方式。編譯方式是事先編好一個(gè)稱為編譯程序的機(jī)器指令程序,并放在計(jì)算機(jī)中,把用高級語言編寫的源程序輸入計(jì)算機(jī),編譯程序就把源程序整個(gè)翻譯成用機(jī)器指令表示的目標(biāo)程序,然后執(zhí)行該目標(biāo)程序,得到計(jì)算結(jié)果。其過程如圖1.8所示。高級語言源程序機(jī)器指令目標(biāo)程序計(jì)算機(jī)執(zhí)行結(jié)果輸出編譯程序(事先放入計(jì)算機(jī))(匯編)(執(zhí)行)(輸入)圖1.8 編譯過程解釋方式是事先編好一個(gè)稱為解釋程序的機(jī)器指令程序,并放在計(jì)算機(jī)中,把用高級語言編寫的源程序輸入計(jì)算機(jī),它并不像編譯方式那樣把源程序整個(gè)翻譯成用機(jī)器指令表示的目標(biāo)程序,而是逐句地翻譯,譯出一句立即執(zhí)行,即邊解釋邊執(zhí)行。其過程如圖1.9所示。C語言采用的是編譯方式。高級語言的用戶可以完全不顧機(jī)器指令,也不必深入懂得計(jì)算機(jī)內(nèi)部結(jié)構(gòu)和工作原理,就能方便地使用高級語言編寫程序進(jìn)行各種科學(xué)計(jì)算和事務(wù)處理,并且由于采用編譯(解釋)程序代替人工翻譯,大大降低了人們的工作量,因此,有人說,高級語言的出現(xiàn)是計(jì)算機(jī)發(fā)展中“最驚人的成就”。目前,世界上已有100多種高級語言,比較流行的有幾十種之多,比如: FORTRAN(Formula Translator的縮寫)語言是世界上最早出現(xiàn)的高級語言,從1954年問世以來,經(jīng)過幾次大的發(fā)展,功能有很大的增強(qiáng),它特別適用于科學(xué)計(jì)算和工程計(jì)算。 COBOL(Common Business Language的縮寫)語言適用于非數(shù)值計(jì)算的商業(yè)、管理領(lǐng)域。 PASCAL語言是最早出現(xiàn)的結(jié)構(gòu)化語言,適用于計(jì)算機(jī)教學(xué)。 PL/1語言是一種大型語言,功能強(qiáng),適用于數(shù)值計(jì)算和數(shù)據(jù)處理。 Ada語言是一種工程化的大型語言,適用于大型軟件工程。 C語言是近年來廣泛推廣的結(jié)構(gòu)化語言,適用于編寫系統(tǒng)軟件。 BASIC語言是一種簡單會話式語言,在世界上應(yīng)用最廣泛。4第四代語言-非過程化語言(高生產(chǎn)率語言)非過程化語言就是目前比較流行的面向?qū)ο笳Z言,該語言只需要編程人員對問題進(jìn)行描述。比如C+/Visual C+,JAVA語言等。高級語言源程序計(jì)算機(jī)執(zhí)行結(jié)果輸出解釋程序(事先放入計(jì)算機(jī))(解釋并執(zhí)行)(輸入)圖1.9 解釋過程目前也出現(xiàn)了智能化語言,主要用于人工智能等領(lǐng)域。比較有代表性的有LISP語言和PROLOG語言。9.2 C語言的特點(diǎn)C語言是一種出現(xiàn)比較晚的高級語言,它吸取了早期高級語言的長處,克服了某些不足,形成了自己的風(fēng)格和特點(diǎn)??偟膩碚f,C語言是一種簡潔、功能強(qiáng)大、可移植性好的結(jié)構(gòu)化程序設(shè)計(jì)語言。C語言具有如下特點(diǎn): C語言簡潔、緊湊; C語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言; C語言具有豐富的數(shù)據(jù)類型; C語言提供了豐富的運(yùn)算符; C語言可以直接對硬件進(jìn)行操作; 雖然C語言具有靈活簡煉的特點(diǎn),但在有些方面也存在不足,了解其不足有助于使用,避免出現(xiàn)錯(cuò)誤。其不足簡單概括如下: 運(yùn)算符多,難于記憶; C語言類型轉(zhuǎn)換比較靈活,在許多情況下不做檢查,對類型要求不夠嚴(yán)格; C語言中對數(shù)組進(jìn)行初始化主要是判定是否越界,越界時(shí)會發(fā)生編譯錯(cuò)誤,但在動態(tài)賦值時(shí)不判定越界,這樣容易造成數(shù)據(jù)存儲方面的混亂??傊?,C語言有誘人的優(yōu)點(diǎn),也有值得注意的不足,使用時(shí)應(yīng)特別加以注意。.模塊二 C語言程序設(shè)計(jì)入門能力標(biāo)準(zhǔn):1. 能編寫、分析基本的C語言程序;2. 熟練掌握程序的多種調(diào)試方法。知識點(diǎn):1. 基本數(shù)據(jù)類型;2. 各種運(yùn)算符及表達(dá)式;3. 三種基本的程序結(jié)構(gòu)。案例一 一個(gè)經(jīng)典C語言入門程序 helloworld.c教學(xué)目的:1. 鞏固C語言程序結(jié)構(gòu);2. 掌握printf函數(shù)輸出字符串的功能;3. 掌握clrscr函數(shù)的功能與使用;4. 熟悉用編譯預(yù)處理命令#include命令包含頭文件。在模塊一中,我們已經(jīng)知道C語言程序由函數(shù)構(gòu)成,并且任何一個(gè)程序有且只有一個(gè)main函數(shù),程序的執(zhí)行總是從main函數(shù)開始的,由main函數(shù)的第一條語言開始執(zhí)行,到main函數(shù)的最后一條語句結(jié)束。下面是一個(gè)最簡單的C語言程序,我們將對該程序的每一行進(jìn)行分析。/* Hello world! */#include main() printf(“Hello world!n”); 一、案例分析1“/*Hello world!*/”行是一個(gè)注釋行,用來說明該段程序的功能。一般如果在程序的開頭加上這樣的注釋行,便于用戶閱讀與分析程序。注釋可以用中文或英文,如果操作系統(tǒng)是英文的,則中文字符在編譯時(shí)是不認(rèn)識的符號,建議使用英文注釋,便于和國際接軌。2.“#include ”行是一個(gè)編譯預(yù)處理命令行,其中“#include”是編譯預(yù)處理命令,其作用是將一個(gè)C語言源程序文件的全部內(nèi)容包含到當(dāng)前這段程序中,“”是指定被包含的文件。一個(gè)#include命令只能包含一個(gè)文件,需要多個(gè)文件包含時(shí),必須用多個(gè)#include命令。#include命令行應(yīng)放在程序的開頭位置,故有時(shí)也把被包含的文件稱為頭文件,常以“.h”作為擴(kuò)展名(后綴),如stdio.h文件,事實(shí)上可以用“.c”或其它的擴(kuò)展名。被包含文件可以用雙引號和尖括號括起來,其區(qū)別在于用尖括號時(shí),系統(tǒng)先到存放C庫函數(shù)頭文件所在的目錄尋找要包含的文件,稱為標(biāo)準(zhǔn)方式;用雙引號時(shí),系統(tǒng)先在用戶當(dāng)前目錄中尋找要包含的文件,若找不到,再按標(biāo)準(zhǔn)方式查找。一般地,如果是調(diào)用庫函數(shù)而用#include命令來包含相關(guān)的頭文件時(shí),用尖括號,以節(jié)省查找時(shí)間;如果要包含的是用戶自己編寫的文件(通常存放在當(dāng)前目錄中),則用雙引號。stdio.h文件是C語言的標(biāo)準(zhǔn)輸入輸出頭文件,該文件主要是對輸入輸出函數(shù)進(jìn)行定義。例如printf函數(shù)、scanf函數(shù)、getchar函數(shù)、putchar函數(shù)。函數(shù)返回類型 函數(shù)名( 形式參數(shù)定義) /*函數(shù)的首部*/ 函數(shù)體; /*函數(shù)的實(shí)現(xiàn)部分*/ 3從“main()”行開始,直到“”為止是主函數(shù)main的定義部分。其中“main()”行是函數(shù)定義的頭(首)部,用于說明函數(shù)返回值的類型、函數(shù)名及形式參數(shù)的定義。主函數(shù)main是一個(gè)特殊的函數(shù),它的首部標(biāo)準(zhǔn)格式是 int main(int argc,int *argv),用“”括起來的部分表示是可選項(xiàng),“int”說明main函數(shù)的返回值是整型,“main”是函數(shù)名,“int argc,int *argv”是main函數(shù)的形式參數(shù)定義,“()”是函數(shù)定義不可缺少的部分。在目前我們的使用中只需要使用main函數(shù)最簡單的定義形式,即“main()”。從“”起到“”止是函數(shù)的實(shí)現(xiàn)部分,也就是實(shí)現(xiàn)函數(shù)功能的語句組合,通常稱為函數(shù)體。因此函數(shù)的通常定義格式如下:本例中的main的函數(shù)體只有一條語句,即“printf(“Hello world!n”);”,其作用是向輸出設(shè)備輸出字符串“Hello world!”。二、C語言函數(shù)簡介C語言函數(shù)分為庫函數(shù)和用戶自定義函數(shù)兩類,庫函數(shù)由系統(tǒng)提供,編程者只需要直接使用,用戶自定義函數(shù)需要編程者自己編寫。比如我們前面見過的printf函數(shù)就是庫函數(shù),main函數(shù)就是用戶自定義的函數(shù)。任何一個(gè)函數(shù)都需要先定義,然后被調(diào)用。函數(shù)的定義同上述main函數(shù)的定義,函數(shù)的調(diào)用格式如下:函數(shù)名(實(shí)際參數(shù))對于庫函數(shù)printf,其定義包含在stdio.h頭文件中,因此我們要使用它時(shí),需要用#include命令把stdio.h文件包含到當(dāng)前的程序中,然后才能調(diào)用printf函數(shù)。printf函數(shù)的一種調(diào)用格式如下:printf(“字符串”)其作用是將“字符串”輸出到顯示器上,對上例來說就是將“Hello world!”輸出到顯示器上,顯示器上將顯示“Hello world!”字符串。請注意“n”字符的作用是換行,即下一個(gè)printf函數(shù)的輸出內(nèi)容將另起一行。字符串在計(jì)算機(jī)中是指用雙引號括起來的一串字符序列,如“1234”、“student”。三、顯示學(xué)生管理系統(tǒng)的主菜單在未講到C語言圖形函數(shù)時(shí),我們所設(shè)計(jì)應(yīng)用程序的用戶界面都是字符型的。如一個(gè)學(xué)生管理系統(tǒng),我們需要提供以下的主菜單界面,供用戶根據(jù)菜單選擇相應(yīng)的功能,從而調(diào)用對應(yīng)的函數(shù)。*student management system menu* 1. Input student records * 2. Output student records * 3. Insert a new student * 4. Delete a student * 5. Find a student on name or number * 6. Sort on score * 7. Save to file * 8. Import file * 0. Exit * Please input your choice(08): *根據(jù)上述要求,我們需要編程輸出這樣的菜單,通過我們已學(xué)的知識,可以寫一個(gè)主函數(shù),函數(shù)體就是用printf輸出每一行即可。程序如下:/*學(xué)生管理系統(tǒng)輸出主菜程序*/#include main()printf(“*student management system menu*n”);printf(“* 1. Input student records *n”);printf(“* 2. Output student records *n”);printf(“* 3. Insert a new student *n”);printf(“* 4. Delete a student *n”);printf(“* 5. Find a student on name or number *n”);printf(“* 6. Sort on score *n”);printf(“* 7. Save to file *n”);printf(“* 8. Import file *n”);printf(“* 0. Exit *n”);printf(“* Please input your choice(08): *n”);printf(“*n”);通過這個(gè)實(shí)例我們可以看到,在實(shí)際應(yīng)用中,要輸出系統(tǒng)菜單,主要是調(diào)用printf函數(shù),一行一行輸出字符串。四、clrscr函數(shù)如果在TC系統(tǒng)中,重復(fù)執(zhí)行上例程序,可以看到顯示器上連續(xù)重復(fù)顯示主菜單,而實(shí)際使用中我們希望不管理執(zhí)行多少次,主菜單總是顯示在屏幕的上方。為此我們需要在主菜單顯示前,先擦除原來的屏幕,然后再輸出主菜單,這樣不管重輸出多少次,主菜單總是在屏幕上方。擦除屏幕,可以調(diào)用庫函數(shù)clrscr函數(shù),它的定義在conio.h頭文件中,因此將前述的程序作如下修改如下(斜體部分):斜體部分是新增加的語句行,“#include ”行是將clrscr函數(shù)的定義文件包含進(jìn)當(dāng)前程序,“clrscr();”行是通過調(diào)用庫函數(shù)clrscr擦除當(dāng)前屏幕,該函數(shù)沒有參數(shù),也不需要返回值。五、實(shí)驗(yàn)二 printf和clrscr函數(shù)5.1實(shí)驗(yàn)?zāi)康? 進(jìn)一步熟悉TC集成調(diào)試環(huán)境;2 熟悉C語言程序的構(gòu)成;3 熟悉C語言函數(shù)的定義;4 掌握用printf函數(shù)輸出字符串;5 熟悉clrscr函數(shù)。/*學(xué)生管理系統(tǒng)輸出主菜程序*/#include #include main()clrscr();printf(“*student management system menu*n”);printf(“* 1. Input student records *n”);printf(“* 2. Output student records *n”);printf(“* 3. Insert a new student *n”);printf(“* 4. Delete a student *n”);printf(“* 5. Find a student on name or number *n”);printf(“* 6. Sort on score *n”);printf(“* 7. Save to file *n”);printf(“* 8. Import file *n”);printf(“* 0. Exit *n”);printf(“* Please input your choice(08): *n”);printf(“*n”);5.2實(shí)驗(yàn)內(nèi)容及步驟1.調(diào)試“Hello world!”程序,并做以下記錄。 程序: 編譯結(jié)果: 修改記錄: 運(yùn)行結(jié)果:2.連續(xù)運(yùn)行三次上述程序,記錄輸出結(jié)果。 運(yùn)行結(jié)果:3. 如果去除printf(“Hello world!n”);語句中的“n”,請連續(xù)運(yùn)行三次,記錄輸出結(jié)果,并與2.1.1運(yùn)行結(jié)果進(jìn)行比較,分析不同的原因。4. 調(diào)試“學(xué)生管理系統(tǒng)輸出主菜”程序,并記錄程序:編譯結(jié)果: 修改記錄:輸出結(jié)果:5.連續(xù)運(yùn)行三次,記錄輸出結(jié)果。輸出結(jié)果:6.調(diào)試添加clrscr函數(shù)后的“顯示學(xué)生管理系統(tǒng)主菜單”程序,連續(xù)運(yùn)行三次,記錄結(jié)果并與5運(yùn)行結(jié)果比較,分析輸出結(jié)果不同的原因。輸出結(jié)果:7.編程輸出下圖。* * * * * * * 程序: 編譯結(jié)果: 修改記錄: 輸出結(jié)果:5.3思考題(1) clrscr函數(shù)有沒有將屏幕全部擦干凈?為什么有時(shí)屏幕的下部擦不干凈?六、習(xí)題1 編程輸出下列圖形。88888888(d)8888888888(c) 8888888888888888(b)8 888888888(a)2 請編程輸出下列表頭。*常州輕工職業(yè)技術(shù)學(xué)院學(xué)生成績表*學(xué)號姓名 班級語文數(shù)學(xué)英語政治計(jì)算機(jī)總分名次案例二 求任意兩個(gè)數(shù)之和(差、積、商)教學(xué)目的:1. 掌握整型和實(shí)型變量的定義;2. 掌握整型和實(shí)型變量的數(shù)據(jù)范圍;3. 掌握用scanf函數(shù)輸入整型和實(shí)型數(shù)據(jù);4. 掌握用printf函數(shù)輸出整型和實(shí)型數(shù)據(jù)。/*求兩個(gè)整數(shù)的和*/#include #include main()int num1,num2,sum; /*定義三個(gè)整型變量*/clrscr(); /*清除屏幕*/sum=0; /*和的初值置為0*/printf(“Please input two integers:”); /*顯示提示字符*/scanf(“%d”,&num1); /*輸入第一個(gè)整數(shù)*/scanf(“%d”,&num2); /*輸入第二個(gè)整數(shù)*/sum=num1+num2; /*求兩個(gè)整數(shù)的和,并存入變量sum中*/printf(“num1 and num2 is: %dn”,sum); /*輸出和值*/C語言將數(shù)分為整型和實(shí)型兩種類型,不同的類型,在程序編寫上有所區(qū)別,因此案例二要求的兩個(gè)整數(shù)之和,我們先給出求兩個(gè)整型數(shù)據(jù)和的程序,如下:一、案例分析1 上述程序的功能是通過鍵盤輸入兩個(gè)整數(shù),然后求兩個(gè)整數(shù)的和。這段程序也只有一個(gè)主函數(shù)。2 “int num1,num2,sum;”行根據(jù)注釋可知是定義了三個(gè)整型的變量。 變量 就是如同數(shù)學(xué)中用到的x、y等,可以改變它們的值,在C語言中給變量取名字時(shí)要求只能用數(shù)字、字母和下劃線組成,且第一個(gè)符號不能是數(shù)字。如“_sum,num,score”等都是合法的變量名,而“1a,2_b”等是不合法的變量名。 常量 如123,-7,34.6,-0.76等都是常量,前兩個(gè)稱為整型常量,后兩個(gè)稱為實(shí)型常量。 整型變量的定義 C語言中整型變量又分為基本整型(int)、短整型(short int 或short)、長整型(long int 或long)及無符號整型(unsigned int、unsigned short int/ unsigned short、unsigned long int/ unsigned long)。如:int num1,num2,sum; 表示定義了三個(gè)基本的整型變量;short a;或者short int a;表示定義了短整型變量a;long int c;或者long c;表示定義了長整型變量c; unsinged int d;表示定義了基本的無符號整型變量d;各種整型變量在不同的計(jì)算機(jī)機(jī)型中存放的數(shù)的范圍不同,也即表示數(shù)所用的字節(jié)數(shù)不同,見表2-1。表2-1 整型變量所占用字節(jié)數(shù)和數(shù)的范圍數(shù)據(jù)類型所占字節(jié)數(shù)(二進(jìn)制位數(shù))數(shù)的范圍int 2(16)-3276832767 即-215(215-1)short int /short2(16)-3276832767 即-215(215-1)long int /long4(32)-21474836482147483647即-231(231-1)unsigned int2(16)065535即(0216-1)unsigned short int/ unsigned short2(16)065535即(0216-1)unsigned long int/ unsigned long4(32)04294967295即0(232-1)3 “ sum=0;”行是給存放和值的變量賦初值0。4 “printf(“Please input two integers:”);”行是在屏幕上輸出“Please input two integers:”字符串,以提示用戶輸入兩個(gè)整數(shù)。5 “scanf(“%d”,&num1);”行的作用是等待用戶從鍵盤輸入一個(gè)整數(shù),并存入變量num1中。 scanf函數(shù) scanf函數(shù)是標(biāo)準(zhǔn)庫函數(shù),其作用是等待用戶從鍵盤給變量輸入值。scanf函數(shù)的定義包含在stdio.h頭文件中。 scanf函數(shù)調(diào)用格式scanf(格式串,地址列表)“%d”就是格式串,其表示的意思是等待從鍵盤輸入的必須是一個(gè)整型數(shù)據(jù)。scanf函數(shù)的格式串是由“%”開始,其后跟不同的類型格式符。具體格式符見表2-2。表2-2 scanf函數(shù)的格式符格式符說 明d,i輸入有符號十進(jìn)制整數(shù)u輸入無符號十進(jìn)制整數(shù)o輸入無符號八進(jìn)制整數(shù)X,x輸入無符號十六進(jìn)制整數(shù)(大小寫作用相同)c輸入單個(gè)字符s輸入字符串,將字符串送到一個(gè)起始地址起的存儲單元中,輸入時(shí)以非空格字符開始,以第一個(gè)非空格字符結(jié)束。字符串存儲時(shí)以0作為結(jié)束標(biāo)志f輸入實(shí)數(shù),可以是小數(shù)形式及指數(shù)形式e與f作用相同,可以互換“&num1”表示一個(gè)地址,這個(gè)地址就是變量num1在內(nèi)存中分配的存儲單元的首地址,“&”在變量名前表示取該變量的地址。如果是地址列表,則各地址之間用“,”隔開?!皊canf(“%d”,&num2);”行同“scanf(“%d”,&num1);”行的作用,等待用戶從鍵盤給變量num2輸入值。上述兩條語句也可合并為一條語句scanf(“%d%d”,&num1,&num2); ,這時(shí)在輸入兩個(gè)數(shù)據(jù)時(shí),可以用空格、回車或制表符進(jìn)行分隔。6“sum=num1+num2;”行是求num1和num2兩個(gè)變量值的和,并把
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 敘事結(jié)構(gòu)對作品的影響試題及答案
- 2025年現(xiàn)代漢語考試邏輯推理試題及答案
- 漢語考試的復(fù)習(xí)資料收集試題及答案
- 全面解析法學(xué)概論試題及答案的關(guān)鍵要素
- 2025年稅法考試多維度試題及答案
- 網(wǎng)絡(luò)流量監(jiān)測試題及答案
- 應(yīng)試心態(tài)2025年稅法考試試題及答案
- 漢語音韻學(xué)基礎(chǔ)知識試題及答案
- 文學(xué)概論考試準(zhǔn)備的注意事項(xiàng)試題及答案
- 提升寫作質(zhì)量的現(xiàn)代漢語指導(dǎo)試題及答案
- 2023年版-腫瘤內(nèi)科臨床路徑
- (完整版)水電工安全技術(shù)交底
- 《中國傳統(tǒng)文化心理學(xué)》課件第五章 傳統(tǒng)文化與心理治療(修)
- 幼兒園各類檔案借閱登記表
- 蒸汽疏水閥性能監(jiān)測斯派莎克工程中國有限公司-Armstrong
- 機(jī)械創(chuàng)新設(shè)計(jì)技術(shù)結(jié)課論文
- 公路工程項(xiàng)目環(huán)境保護(hù)措施及其可行性論證
- 普通車床的主軸箱設(shè)計(jì)機(jī)械外文文獻(xiàn)翻譯、中英文翻譯、外文翻譯
- 神經(jīng)外科各種引流管的護(hù)理精品課件
- 湘教版初中地理會考重點(diǎn)圖復(fù)習(xí)匯集
- 隧道CRD法施工工法
評論
0/150
提交評論