c語言-新版實驗教材_第1頁
c語言-新版實驗教材_第2頁
c語言-新版實驗教材_第3頁
c語言-新版實驗教材_第4頁
免費預(yù)覽已結(jié)束,剩余222頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

C語言程序沒計)LIZD1-J編著劉成王亞杰邱虹坤等審閱魯墨武沈陽航空工業(yè)學(xué)院',—?—

刖百《C語言程序設(shè)計》是ー門實踐性非常強的課程,只有通過上機實驗、提高動手能力,才能夠真正理解書本上的知識點,從而全面把握程序設(shè)計語言。為了滿足教學(xué)需要,并使C語言的初學(xué)者能夠很快進入角色,作者根據(jù)教學(xué)大綱和國家計算機等級考試(二級C語言)的相關(guān)內(nèi)容,對原來的上機實驗教程在內(nèi)容上作了較大調(diào)整,使新版指導(dǎo)書更具實用性和現(xiàn)實性。調(diào)整后的實驗指導(dǎo)教程包括三大方面的內(nèi)容:①編程工具的使用說明。通過實例,分別說明了如何使用VC和TC編程工具去運行程序、調(diào)試程序。讀者如果初步掌握了這些工具的使用,將大大降低學(xué)習(xí)本課程的難度,起到事半功倍的效果。對于這部分內(nèi)容,讀者可以沒有任何計算機語言基礎(chǔ)(零起點),就可以順利閱讀。②程序設(shè)計實驗內(nèi)容,是學(xué)員所提交的實驗報告的題目來源,是本教程的核心內(nèi)容。根據(jù)其綜合性和深入性,實驗內(nèi)容可以劃分為基礎(chǔ)實驗部分和提高實驗部分。前者包括順序結(jié)構(gòu)的使用、選擇結(jié)構(gòu)的使用、循環(huán)結(jié)構(gòu)的使用、數(shù)組等實驗:后者包括函數(shù)的使用、指針的使用、結(jié)構(gòu)體與共用體、鏈表、文件等。在實驗內(nèi)容中,沒有任何特殊標(biāo)記的題目是必須掌握的基本題目,標(biāo)有"*"符號的題目較難,是選作題。③練習(xí)題。“熟能生巧”,通過多作習(xí)題,廣泛接觸不同類型的題冃,會明顯提高對程序的理解、判斷能力。這不但是學(xué)好本課程的需要,也是通過全國計算機等級考試所必備的能力。鑒于此,作者不但針對各個章節(jié)給出了一些專門練習(xí)題,還收集了一些全國計算機等級考試的模擬題和以前的考題,使讀者在學(xué)習(xí)過程中有個參照標(biāo)準(zhǔn),自覺地校驗自己的學(xué)習(xí)質(zhì)量和學(xué)習(xí)水平。總之,本教程與學(xué)員所使用的教材之間具有很好的互補性:教材側(cè)重概念、理論;實驗指導(dǎo)教程側(cè)重實際操作。全書由計算機基礎(chǔ)教研室的多名教師參加編寫,其中:熟悉編程工具、實驗四、六、七、八、九、附錄四、附錄五、附錄六由劉成編寫;實驗ー、二、三、五,綜合實驗ー、二、三,附錄二,由王亞杰編寫;附錄ー、附錄三,由邱虹坤編寫。在編寫過程中,還得到吳杰宏、王曉巖、尹航、孫玉霞等同事的支持,在此表示感謝。由于時間倉促和水平的關(guān)系,本書肯定有錯誤和不足之處,請廣大讀者批評指正,使之不斷完善。編者(―)(二)(三)(四) (―)(二)(三)(四) 、、四、五、六、七、ハ、九、 2 11 15 15 38 44 46 53 59 62 72 79 81 88 91 91 94 97 101 111 115 120 125 129 135 139 139 148 157熟悉編程工具 ー、TurboC2.0集成開發(fā)環(huán)境的使用 在TC中運行程序的基本步驟 如何在TC中調(diào)試程序 關(guān)于TC的幫助系統(tǒng) 使用TC的其它技巧 二、VC集成開發(fā)環(huán)境的使用 (-)在VC中運行程序的基本步驟(二)如何在VC中調(diào)試程序 (三)如何使用幫助系統(tǒng) 三、上機實驗要求 實驗ー上機實驗基礎(chǔ)及順序結(jié)構(gòu)的使用 實驗ニ選擇結(jié)構(gòu)的使用 實驗三循環(huán)結(jié)構(gòu)的使用 綜合實驗ー 實驗四數(shù)組的使用 實驗五函數(shù)的使用 綜合實驗 實驗六指針的使用 實驗七結(jié)構(gòu)體與共用體 實驗ハ鏈表 實驗九文件 綜合實驗三 附錄ー練習(xí)題 附錄ー基本概念與數(shù)據(jù)類型C程序設(shè)計基礎(chǔ) 順序程序設(shè)計 選擇結(jié)構(gòu)程序設(shè)計 循環(huán)結(jié)構(gòu)程序設(shè)計 數(shù)組 函數(shù) 指針 預(yù)處理命令 十、結(jié)構(gòu)體與公用體 H-ー、文件 附錄二自測題 期中自測題 期末自測題 附錄三全國計算機等級考試二級c語言筆試模擬題

第一?套 第二套 附錄四全國計算機等級考試二級C語言上機考試部分題型近年上機考試編程題目部分題型 近年上機考試改錯題目部分題型 附錄五全國計算機等級考試二級C語言筆試考試資料????????2004年4月筆試試卷 2004年9月筆試試卷 2005年9月筆試試卷 附錄六認(rèn)識TC中常見的出錯信息 TC中常見的出錯信息 出錯信息中的重要詞匯 157 157 164 172 172 177 183 183 197 207 219 220 220熟悉編程工具我們編寫的C程序需要用編程工具來運行,所以學(xué)會使用編程工具,是我們學(xué)習(xí)C程序設(shè)計的第?步。本教程首先將分別簡要介紹TC和VC的使用。只有熟悉了編程工具,才能夠順利地把自己的程序設(shè)計設(shè)想轉(zhuǎn)化為具體的程序,進而逐漸提高程序設(shè)計水平、培養(yǎng)實際動手能力。當(dāng)然,這也是能夠較好地完成老師所指定的程序設(shè)計任務(wù)的基本保證。上機實驗意義重大。計算機科學(xué)本來就是一種實驗科學(xué),而對計算機語言的學(xué)習(xí)更是離不開大量的上機實驗,這是本門課程區(qū)別于其它課程的最顯著的特征之一。如果說每門課程都有一套學(xué)習(xí)方法的話,那么本課程的最好學(xué)習(xí)方法就是上機實驗。實際上,學(xué)習(xí)計算機語言的過程可以歸結(jié)為兩個互相推動的方面:理論學(xué)習(xí)和上機實驗。老師在課堂上主要是給學(xué)員講授理論知識,而上機實驗的學(xué)習(xí)過程只能依靠學(xué)員自己,并且這ー過程是任何人都無法替代的。上機實驗是《C語言程序設(shè)計》課程的重要組成部分,本課程的總學(xué)時為56學(xué)時,其中課堂理論學(xué)習(xí)為36學(xué)時,課后上機為20學(xué)時。實踐證明,如果要取得較好的學(xué)習(xí)效果,理論學(xué)習(xí)與上機實驗的學(xué)時比例應(yīng)保持在1:2左右??梢?計劃的上機學(xué)時是遠(yuǎn)不夠的,需要學(xué)員自己多利用課余時間上機。衡量一個人的計算機應(yīng)用能カー般從兩個方面認(rèn)定:理論水平和實際操作。單強調(diào)ー個方面是片面的、沒有意義的。比如,在全國計算機等級考試中,絕大多數(shù)等級和科目的考試不但有筆試考試,還有上機考試。只有當(dāng)兩個考試成績都合格オ能獲得國家頒發(fā)的等級證書。目前,可以編寫、運行C程序的集成環(huán)境(編程工具)有多種,在此簡要介紹比較流行的兩種:Turt50c2.0和VC++6.0。在大家實際編程序時,選擇哪種工具都可以,不過作者推薦使用后者,原因主要有兩個:①VC++6.0是美國微軟公司九十年代的軟件產(chǎn)品,是面向?qū)ο蟮目梢暬绦蜷_發(fā)工具,在其中不但可以開發(fā)標(biāo)準(zhǔn)C程序,還可以開發(fā)C++程序。當(dāng)然VC++6.0還支持其它更多的軟件技術(shù);相比較而言,TuiboC2.0是美國Borland公司八十年代的產(chǎn)品,其中僅能編寫面向結(jié)構(gòu)的C程序,不支持某些重要的軟件新技術(shù)。②VC++6.0的用戶界面友好,對于英文和中文的處理都方便;但TurboC2.0在輸出漢字時非常不易,只能方便地輸出英文。值得注意的是,在全國計算機等級考試中,《二級C語言》的上機考試則采用TurboC2.0;而《二級C++》則采用VC++6.0。作者認(rèn)為,當(dāng)以VC++6.0為平臺掌握了C語言的編程技能以后,熟悉一下TurboC2.0的集成環(huán)境也只是大約幾個小時的事情。下面首先通過編寫ー個很簡單的小程序,分別說明如何在TurboC2.0和VC++6.0的集成環(huán)境中編寫、運行程序。這個小程序的功能是在屏幕上打?。ㄝ敵觯﹩柡蛘Z"Hello,World.",,后續(xù)內(nèi)容將把TurboC2.0和VC++6.0分別簡稱為TC和VC。一般地,編寫程序很難ー揮而就,總會存在一些錯誤和問題,因此還將詳細(xì)介紹如何單步運行程序,以監(jiān)視程序中各個變量的狀態(tài),從而找出問題所在,即所謂的調(diào)試程序。ー、TurboC2.0集成開發(fā)環(huán)境的使用(一)在TC中運行程序的基本步驟1.啟動1.啟動TC|1Z^^我的文檔0豪杰超級DVD2.1憐)回收站卷InternetExplorer.□驅(qū)我的電腦網(wǎng)上鄰居附件|TC2.01有兩種途徑可以啟動TC:①在桌面雙擊快捷方式圖標(biāo)(參見圖1-!中的右下角圖標(biāo))。②在資源管理器中先找到安裝TC的文件夾,用鼠標(biāo)雙擊該文件夾中的TC.EXE文件(參見圖1-2)。TC啟動后的界面如圖1-3所示。圖1-1TC在桌面的快捷方式圖標(biāo)D:\tc20,1□!X|文件(E)編輯@查看(り夂藏@工具①幫助⑻t?3后退,"??國 0捜索ら文件夾」歷史は史》地址(8gD:\tc20▼1ゼ轉(zhuǎn)到文件夾引國SSIGNAL.C剣TCHELP.TQ由〇javajiuc由〇oracle百日tc20SQiINCLUDE〇LIBS〇tc30Jtemp□tcinst.exe噩TC 酉TEST.PPT□tcc.exe 3ZJtcconfig.exe nthelp.doc國TCCONFIG.TC 3tHB.EXE勺 」 ?類型:應(yīng)用程序大小:283KB283KB|日我的電腦圖1-2在資源管理器中雙擊TC.EXE國TCFileEditRunCompileProjectOptionsDebugBreak/watchEditLine1Col1InsertIndentTabFillUnindentD:NONAME.CMessage圖1-3TC程序主界面.編輯源程序啟動TC后,宜接在編輯窗n輸入圖1W所示的代碼。圖1N在編輯窗口輸入源程序.保存程序編輯的源程序應(yīng)及時保存,防止丟失。按下F2鍵,在彈出的對話框中輸入D:\03031000\hello.c(假設(shè)在D盤已經(jīng)創(chuàng)建了03031000文件夾),然后回車(參見圖1-5)。注意:(DTC僅支持不超過8個字符的主文件名或文件夾名。②TC默認(rèn)的源程序擴展名為?.c..運行程序

按下Alt鍵,同時按下R鍵,打開Run菜單;用t鍵或I鍵選中Run菜單項,然后回車,程序便開始運行,并瞬間運行完畢。.觀看運行結(jié)果F^tcHello,World..11圖1-6用戶屏幕是輸出的場所按下Alt鍵,同時按下F5鍵,則TC切換到用戶屏幕,可以見到英文的問候語已經(jīng)打印在屏幕上了(參見圖1-6)〇觀察完畢后,按ESC鍵切換到原來的TC主界面。至此,我們已經(jīng)經(jīng)歷了程序從編輯,到運行,再觀看輸出結(jié)果的F^tcHello,World..11圖1-6用戶屏幕是輸出的場所6.可以按照以上步驟不斷修改、運行程序,并觀察結(jié)果。需要注意的是,在退出TC時,一般不要用鼠標(biāo)單擊窗口右上角的X按鈕,而是執(zhí)行File菜單中的Quit菜單項退出TC,其原因是:TC窗口并不是標(biāo)準(zhǔn)的Window窗口,宜接用X按鈕關(guān)閉TC窗口,容易丟失尚未保存的源程序。(二)如何在TC中調(diào)試程序運行c程序主要經(jīng)歷如下步驟:編輯程序(Edit)f編譯(Compile)-連接(Link)—運行(Run)。一般來說,剛編輯好的源程序可能存在錯誤,本書根據(jù)這些錯誤的性質(zhì)將其劃分為兩大類:語法錯誤,算法錯誤。使程序不能編譯或不能連接的錯誤,稱為語法錯誤。必需修改此類錯誤才能最終運行程序;程序雖然能夠運行,但運行結(jié)果令人無法接受,則說明存在算法錯誤。在程序中查找、修改錯誤,使其能夠運行并有理想的運行結(jié)果的過程稱為程序調(diào)試。與錯誤類型相對應(yīng),程序調(diào)試分為2個階段:語法調(diào)試和算法調(diào)試。即,先修改語法錯誤,后修改算法錯誤。一般地,語法錯誤容易處理(編譯器會給出錯誤提示),而算法錯誤的隱蔽性相對較強,處理起來不如前者容易。調(diào)試程序的能力是程序設(shè)計能力的主要表現(xiàn)之ー。下面舉例說明TC程序的調(diào)試步驟。問題:1+2+3+…+5的值是多少?

1.語法調(diào)試階段按照圖1-7所示在TC中編輯程序,并以add.c為文件名保存到D的根下(假設(shè)學(xué)員由于馬虎,在i=l之后忘了加分號,還把printf錯寫成了print)o執(zhí)行Run命令(或按Qrl+F9快捷鍵)。程序不運行,彈出編譯出錯對話框,告知發(fā)現(xiàn)1個錯誤和1個警告(參見圖1-8)。實際上,在編譯時只要發(fā)現(xiàn)1條錯誤編譯就無法通過;但另一方面,警告不管有多少個,只要沒有錯誤,是可以通過編譯的,進而是可以運行的。所以警告并不阻礙編譯,只是提醒我們應(yīng)該注意的事情。錯誤信息對話框還提示,按任意鍵(Pressanykey)查看進一步的提示。FileEditRunCompileProjectOptionsDebugBreak/watcjhEdit Line1Col11nsertIndentTabFillUnindent*D:ADD.C■include"stdio.^RmainOCompilingintsum-i;i=lwhile<i<=5>sum=sum+i;i=i+l;printぐシd\n".s&Mainfile:\ADD.CCompiling:EDITORFileEditRunCompileProjectOptionsDebugBreak/watcjhEdit Line1Col11nsertIndentTabFillUnindent*D:ADD.C■include"stdio.^RmainOCompilingintsum-i;i=lwhile<i<=5>sum=sum+i;i=i+l;printぐシd\n".s&Mainfile:\ADD.CCompiling:EDITORLinescompiledWarningsErrors-ADD.CTotal:224:1:114.12F211Availablememory:249KErrorsPressanyke圖1-7準(zhǔn)備運行的程序國TC-1□1國TCIFl-HelpP5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu圖1-8編譯時出現(xiàn)錯誤

>按下空格鍵(按回車鍵也行),對話框消失,TC在編輯欄中加亮顯示錯誤行;同時,在信息欄中給出了更詳細(xì)的錯誤提示(參見圖1-9),其屮的錯誤提示的大意是:程序的第6行(在main函數(shù)內(nèi))缺少分號。國TC|FileEditRunCompileProjectOptionsDebugBreak/watch Edit ==Line1Col1InsertIndentTabFillUnindent*D:ADD.Cttinclude"stdio.h"mainOintsum,i;printぐシintsum,i;printぐシdヽn".sum〉;Message「FileEditRunCompileProjectOptionsDebugBreak/watch?include"stdioノエmainOLinkingEXEfile:\TEMP\ADD.EXEintsum,i;i=l;while<i<Message「FileEditRunCompileProjectOptionsDebugBreak/watch?include"stdioノエmainOLinkingEXEfile:\TEMP\ADD.EXEintsum,i;i=l;while<i<=5)sum=sum+i;i=i+l;>print<"Nd'n”Linking:LIBXCS.LIBTotalLinescompiled:0Warnings:0Errors:1Auailablememory:249KErrorsPress.sUiLinkPASS201CompilingD:\ADD.C:?ErrorD:\ADD.C6:Statementmissing;infunctionmainWarningD:\ADD.C12:*i*isassignedaualuewhichisneuerusedinfunctionIFl-HeIpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu圖1-9按下空格鍵之后顯示詳細(xì)的編譯錯誤提示經(jīng)認(rèn)定,確實在前一行缺少分號。按下F6鍵,則切換回編輯狀態(tài)。在i=l的后面加上分號。再次運行程序,但程序不運行,彈出連接出錯對話框,告知發(fā)現(xiàn)1個錯誤(參見圖1-10)?對話框提示按任意鍵查看進ー步的提示信息?;豑C^==^=^=—Edit“? —Line1Col1InsertIndentTabFillUnindent*D:ADD.CMessageCompilingD:\ADD.C:?ErrorD:\ADD.C6:Statementmissing;infunctionmainWarningD:\ADD-C12:'isassignedaualuewhichisneuerusedinfunctionIFl-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu

圖!-10出現(xiàn)連接錯誤國TC>按下空格鍵,對話框消失,TC在信息欄中加亮顯示錯誤信息(參見圖其中的錯誤提示的大意是:程序中的print標(biāo)識符沒有定義,TC國TCIFileEditRunCompileProjectOptions~-DebugBreak/watch一Edit==Line1Col1InsertIndentTabFillUnindent*D:ADD.C■include"stdio.h"mainO<intsum,i;i=l;while<i<=5><sun=sun?i;i=i*l;>printぐシdヽn'sum〉;>, ,Me〇〇ユge ,LinkingD:\TEMP\ADD.EXE:ILinkerError:Undefinedsynbol9jrint*inmoduleADD.C|

広1-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeFl0-Menu

圖1-11按下空格鍵之后顯示詳細(xì)的連接錯誤提示經(jīng)認(rèn)定,應(yīng)將print改為printル按下F6鍵,則切換回編輯狀態(tài)。將print修改為printsBJTC再次運行。程序終于運行,井瞬間完成。按Alt+F5切換至用戶屏幕觀看輸出結(jié)果(參見圖1-12)。遺憾的是,結(jié)果為2275,并不合理。需要繼續(xù)調(diào)試ー算法調(diào)試。請繼續(xù)閱讀“算法調(diào)試階段”部分。BJTC-1□1x5275 7jJ I圖!-12運行的結(jié)果不合理2.算法調(diào)試階段所謂的“算法調(diào)試”是指由于程序的運行結(jié)果令人無法接受,而不得不查找錯誤原因的調(diào)試過程。具體方法為單步跟蹤程序的運行,同時監(jiān)視相關(guān)變量值的變化。需要說明的是,只有當(dāng)程序沒有語法錯誤時(完成了語法調(diào)試),才能夠單步運行程序(算法調(diào)試)。調(diào)試步驟如下:>按下F7鍵,main所在行高亮顯示,表示將進入main函數(shù)執(zhí)行語句(參見

圖1-13)?!案吡溜@示”的語句是下ー個將要被執(zhí)行的語句。|Fl-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10—Menu圖1-13對于此程序,只要搞清楚sum和i的演化過程,就能夠找到問題所在。按AH+B鍵,展開Break/watch菜單,選中Addwatch菜單項,然后回車,出現(xiàn)Addwatch對話框,在Addwatch對話框中鍵入sum(參見圖1-14)?圖1-14鍵入1個觀察變量名回車。按照同樣方法在Addwatch對話框中鍵入i,回車(參見圖1-15).此時,在觀察框屮,sum和i均被認(rèn)為是未知的(Undefined),原因是程序還未開始執(zhí)行。按下F7鍵,開始執(zhí)行main函數(shù),i=l;語句髙亮顯示(參見圖!-16)〇此時的Watch欄中,sum和i都顯示了值,但都是隨機數(shù),沒有實際意義。按下ド7鍵,執(zhí)行了i=l;語句,i的值變?yōu)?,while所在行高亮顯示(參

見圖!-17)?A按下F7鍵,進入了while循環(huán)體,sum=sum+i;語句高亮顯示。(參見圖1-18).再按F7,sum累積了1之后由2260變?yōu)?261。可見,以隨機數(shù)為基礎(chǔ)進行和的累積是錯誤的,在累積之前將sum置為〇〇,1□!x|「FileEditRunCompileProjectOptionsDebugBreak/watch因TC>選擇Run-Programreset菜單,恢復(fù)到編輯狀態(tài),在程序中加入sum=0;再次運行(或,1□!x|「FileEditRunCompileProjectOptionsDebugBreak/watch因TC=Edit-=======^^==1Line1Col1InsertIndentTabFillUnindent*D:ADD.CItincludeMstdio.h0nainOintsun,i;clrscr<>;i=l;while<i<=5><sun=sun+i;i=i+l;>printf<uzd\n'\sun>;? Watch ?i:Undefinedsymbol*i*sun:Undefinedsunbo1'sun’IFl-HeIpF5-ZoonF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu圖1-15加入2個觀察變量Etc 二回兇EtcIFileEditRunConpileProjectOptionsDebugBreak/watch 一 = 一Editーーー= 一?一 Line1Col1InsertIndentTabFillUnindent*D:ADD.Cttinclude"stdio.h"mainく)<i=l;_intsum「エJ i=l;while<i<=5><sun=sun+i;i=i+l;>printFぐシdヽn".sum〉;> Watch?i:1125sum:2260IFl-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu圖1-16sum和i的初始值是隨機數(shù)圖1-17i的值被置為1圖1-18sum的第1次累積就是錯的|F'tcIFileEditRunConpileProjectOptionsDebugBreak/watch Edit Line1Col1InsertIndentTabFillUnindent*D:ADD.CItinclude"stdio?h”mainく)<intsum,i;i=l;sum=0;while<i<=5><sum=sum*i;i=i+l; watcni:6sum:15IFl-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu1-19正確程序在輸出之前的變量情況至此,整個程序正確無誤。需要補充的是,在單步運行調(diào)試程序時,對變量值的監(jiān)視除了使用Break/watch-*AddWatch方法外,還可以使用DebugfEvaluate方法,請讀者自己實驗。

ONAME[FileEditRunCompile"Project_3J?DebugBreak/watchCompiles*LinkerEnvironmentIFl-HeIpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeFl0-Menu(三)關(guān)于TC的幫助系統(tǒng)在編輯欄屮,將ONAME[FileEditRunCompile"Project_3J?DebugBreak/watchCompiles*LinkerEnvironmentIFl-HeIpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeFl0-Menu(三)關(guān)于TC的幫助系統(tǒng)在編輯欄屮,將插入點(光標(biāo))定位到感興趣的TC關(guān)鍵字或函數(shù)名,按下Ctri+Fl鍵,則TC將顯示英文聯(lián)機幫助信息,不過,TC的幫助系統(tǒng)內(nèi)容比較單調(diào),使用也不太方便,與其它軟件的幫助系統(tǒng)相比(如,TC3.0,VC等)則遜色得多。(四)使用TC的其它技巧1.TC的安裝與設(shè)置圖1-20某TC系統(tǒng)的文件夾(目錄)的設(shè)置情況在展開Directories后,又出現(xiàn)了下ー級菜単,其中包括6個菜單項,在此僅介紹前4個菜單項,后2個不常用,就不介紹了。>在前4個菜單項中,第1、2、4項,描述了安裝TC系統(tǒng)的真實路徑,請參看圖1-20和1-21?>第3項,描述了存放臨時文件的文件夾。TC程序運行時,編譯完畢后將產(chǎn)生?.。切文件,連接完成后將產(chǎn)生?.exe文件,即,產(chǎn)生2個臨時文件。第3項則描述了存放這些臨時文件的、實際存在的文件夾。安裝TC很簡單。假設(shè)A計算機中的TC是已經(jīng)安裝好的,現(xiàn)打算在B計算機中也要安裝TC,則只需將A中的TC文件夾,整個復(fù)制到B計算機的任何硬盤即可。如何運行TC,請參看前面的“如何啟動TC”部分。在TC啟動后,一般需要簡單的設(shè)置,TC就能正常工作。常用的設(shè)置是在Options—,Directories菜單項中進行,是對有關(guān)文件夾(在DOS中被稱為目錄,即,Directory)的設(shè)置。圖1-20是某臺微機TC系統(tǒng)按照OptionsfDirectoriesf回車步驟展開菜單項后的情景。Includedirectories:Librarydirectories:TurboCdirectory:Pickfilename:Currentpickfile:\TC20\INCLUDE\TC20\LIB\TC20IndentDirectories\TEMPLine1Col1InsertItinclude"stdionainOprintf<°\nH總之,這些設(shè)置都應(yīng)與實際情況相符合,否則應(yīng)該修改這些設(shè)置。如果需要修改,則繼續(xù)回車,便可在彈出的對話框屮修改。|£1D:\tc20-IExj文件(E)編輯?查看M收藏⑷工具(D幫助ユ ,Jシ后退,一?図1◎搜索ら文件夾ぜ?xì)v史1用電メヰ》地址(の|日D:\tc20▼IF轉(zhuǎn)到文件夾 XコINCLUDE國CGA.BGIBmDISK1_VOL2(D:) jJ2]LIB□ONSTXFREQ]gasnetmanager0ATT.BGIg|CPASDEMOB〇Gasnetmanager_old目BC.OUTi]CPASDEMO.PASEQ]Gasysf)BGIDEMOコCPPE〇javajiucコBGIOBJ回cropAS.TCEdoraclet]build-co回EGAVGA.BGIE00@3Qco.asm回EMUVAR5,A5IB日DISK1_VOL3(E:)回CALNDVLBAK回FILEOOOOE〇liuc爲(wèi)CALNDVI國GETOPTE〇MSDN98?:::xS]CBAR回GOTH.CHRE|_JmywebEOtemp ▼|. ; _ 一“二,—Lj_|21圖1-21某臺微機資源管理器的實際情況.常用的菜單項及其功能所在菜單菜單項功能簡述FileLoad加載(打開)已存在的?.C源程序Save保存當(dāng)前源程序Writeto將當(dāng)前源程序另存為……Quit退出TCRunRun運行(實際包括編譯、連接、運行3個過程)Programreset結(jié)束單步調(diào)試,返回編輯狀態(tài)Gotocursor運行到光標(biāo)處停止,以便于單步運行(調(diào)試)Ttraceinto單步運行(可跟蹤到自定義函數(shù)內(nèi)部)Stepover單步運行(只在當(dāng)前函數(shù)體內(nèi))Userscreen切換到用戶屏幕,查看輸出的結(jié)果ProjectRemovemessages清除信息欄中的提示信息OptionsDirectories設(shè)置TC的工作目錄(參見"TC的安裝與設(shè)置”)SaveOptions保存對TC的工作目錄的設(shè)置DebugEvaluate單步運行時,查看變量的值Break/watchAddwatch單步運行時,添加?個觀察變量(參見"算法調(diào)試”部分)Deletewatch單步運行時,刪除ー個觀察變量

.常用的功能鍵功能鍵作用F2保存當(dāng)前源程序F3加載(打開)已存在的?.C源程序F4運行到光標(biāo)處停止,以便于單步運行(調(diào)試)F6在編輯狀態(tài)和信息提示狀態(tài)之間切換F7單步運行(可跟蹤到自定義函數(shù)內(nèi)部)F8單步運行(只在當(dāng)前函數(shù)體內(nèi))F10激活主菜單.常用的熱鍵熱鍵功能Ctri+F9、運行(實際包括編譯、連接、運行3個過程)Alt+F5切換到用戶屏幕,查看輸出的結(jié)果Alt+回車將TC在“窗口"和"全屏顯示"的兩種顯示方式之間切換.TC窗口的常用屬性設(shè)置TC的界面窗口不是標(biāo)準(zhǔn)的Windows窗口,其窗口有特殊的屬性。在Windows平臺上適當(dāng)?shù)卦O(shè)置TC窗口的某些屬性,能夠為使用TC提供ー些方便。屬性的設(shè)置在屬性對話框中進行。彈出屬性對話框的方法:在Windows的任務(wù)欄中,對TC圖標(biāo)單擊右鍵,單擊菜單中的屬性(參見圖1-22),便彈出屬性對話框(參見圖1-23)?Line4include<st(mainく〉printf<°\nWLine4include<st(mainく〉printf<°\nW最小化(由最大化(冷X關(guān)閉(Q編輯?默U值(9

神林靜CL)—標(biāo)神林靜CL)—標(biāo)不中大項光dr選顯示選項6窗口世)r全屏顯示(U)圖1-23TC窗口的屬性對話框在圖1-23所示的對話框中,共有4個標(biāo)簽頁面,可分別設(shè)置某方面屬性。例如在“選項”頁面中,可以指定TC是以窗口顯示,還是以全屏幕方式顯示;在“字體”頁面中,可以指定字體的大小等。值的注意的是,在“窗口”和“全屏顯示”的兩種方式切換時,用Alt+回車熱鍵最方便。二、VC集成開發(fā)環(huán)境的使用(一)在VC中運行程序的基本步驟1.準(zhǔn)備工作啟動Windows98或windows2000系統(tǒng)后,打開資源管理器,在D盤中(當(dāng)然也可以是其它所允許的磁盤)創(chuàng)建200403031000(假設(shè)是你的學(xué)號)文件夾,再在200403031000中創(chuàng)建下ー級文件夾hello(參見圖!-24),以便于存放源程序。臼〇DISK1_VOL2(D:)

臼口200403031000〇hello圖!-24先創(chuàng)建存放源程序的文件夾2.VC6.0的啟動用鼠標(biāo)單擊開始按鈕,在逐級展開的菜單中選擇“程序fMicmsoftVisualStudio6.0-^MicrosoftVisualC++6.0",就啟動了VC。VC啟動后,它的初始界面如圖1-25所示。有的版本由于經(jīng)過了一定程度的漢化,ー些菜單是用漢字表示的,但其功能與英語表達(dá)的菜單是ー樣的。VC啟動后的初始界面沒有實質(zhì)性內(nèi)容,這是因為目前還沒有作實際工作。.生成源程序文件單擊File菜單,單擊其中的New—菜單項,出現(xiàn)了如圖1-26所示的New對話框。在對話框屮選擇Files標(biāo)簽,再用鼠標(biāo)單擊選擇C++SourceFile;單擊對話框右側(cè)Location處的封按鈕彈出ChooseDirectory對話框,在此對話框中選擇D:\200403031000\hello文件夾,單擊OK按鈕,路徑便顯示在New對話框的Location欄中;在File欄屮輸入要創(chuàng)建的源程序文件名hello,,New山區(qū)Files|Projects|Workspaces|ActiveServerPage芻BinaryFile的BitmapFile后C/C++HeaderFile「Addtoproject:1 dFile畫C++SourceFile汾CursorFile>]HTMLPage□iconFilea"MacroFile円ResourceScript岑ResourceTemplate圖SQLScriptFile[=1TextFile|helloLocation:|D:12004030310001HELLO...IOKCancel圖1-26“新建文件”對話框單擊OK按鈕,關(guān)閉New對話框。在D:\200403031006hello文件夾中就有了程序源文件hello.cpp;同時VC窗口的標(biāo)題顯示出hello.cpp字樣,而編輯區(qū)域有光標(biāo)在閃爍,表示可以編寫源程序了。在編輯窗口輸入以下代碼,輸入完畢以后的界面如圖1-27所示。#include"stdio.h"main(){printf("Hello.World.\n");printf("你好,編程世界。\n");

,,IDIx|E)FileEditViewInsertProjectBuildToolsWindowHelp ,|g|x|窗ほ扇博|區(qū)船里エ!▼に▼如因官噺ー二I?(\BuildXDebug\FindinFiles1~\FindinFile卜||>|~~Ready Ln6,Col2圖1-27輸入了代碼的VC界面.運行程序單擊Build菜單的CompileHello.cpp菜單項,編譯程序。彈出了圖!-28的對話框,單擊“是”按鈕,以產(chǎn)生工程。MicrosoftVisualC++Thisbuildcommandreauiresanactiveprojectworkspace.Wouldyouliketocreateadefaultprojectworkspace?圖1-28“產(chǎn)生工程”對話框>單擊Build菜單的Excecutehello.exe菜單項,運行程序。如圖!-290

.1□1x|-|g|x|BuildToolsWindowHelp?ヲC加…匡]Fil…h(huán)ello.obj-0.1□1x|-|g|x|BuildToolsWindowHelp?ヲC加…匡]Fil…h(huán)ello.obj-0error(s]SetActiveConfiguration..,Configurations...Profile...尊Compilehello.cppBuildhello.exe國RebuildAllBatchBuild...Clean(AUcHintmair—ェStartDebugDebuggerRemoteConnection...ExecutestheprogramLn1,Col19|rec|col|o^圖1-29運行程序FindinFiles1XFindm>觀看程序運行結(jié)果。程序在瞬間運行結(jié)束后,自動用DOS窗口顯示程序的輸出(運行結(jié)果),參見圖l-30o,"D:200403031000\hello\Debug\hello.exe"WbETOC\o"1-5"\h\zHello,World. ゝ1\o"CurrentDocument"你好,編程世界。 づPressanykeytocontinue.?I I ン圖!-30在DOS窗口顯示運行結(jié)果>按任意鍵將自動關(guān)閉DOS窗ロ,結(jié)束觀看。.可以按照以上步驟不斷修改、運行程序,并觀察結(jié)果。當(dāng)然,如果所編寫的程序存在語法錯誤,則程序是不能運行的,自然也不存在運行結(jié)果。需要說明的是,在程序編譯或者運行后,D:\200403031000\hello文件夾中除了hello.cpp文件外,還新產(chǎn)生了一些其它的臨時性文件和文件夾,不必關(guān)心:如果打算把編好的程序拷貝到其它磁盤,則僅拷貝hello.cpp文件即可。BmDI5K1_VOL2(D:)SO200403031000QiaddBmDI5K1_VOL2(D:)SO200403031000Qiadd由。hello1+2+3+-+5的值是多少?圖1-31創(chuàng)建add文件夾>如果未啟動VC,則按照前述步驟啟動VC:如果VC已經(jīng)啟動,并正在使用ー個工作空間(workspace),則象圖1-32所示那樣關(guān)閉工作空間。(二)如何在VC中調(diào)試程序關(guān)于調(diào)試程序的基本含義,請參見前面的“如何在TC中調(diào)試程序”的內(nèi)容。VC和TC在調(diào)試技巧方面有很多是類似的。下面舉例說明如何進行程序的兩種調(diào)試。問題:.準(zhǔn)備工作打開資源管理器,在D盤的200403031000文件夾中創(chuàng)建下ー級文件夾add,參見圖1-31。.生成源程序文件圖1-32關(guān)閉當(dāng)前工作空間>按照前述步驟新建D:\200403031000\add\add.cpp源程序文件,并在編輯窗口輸入圖!-33所示的代碼(假設(shè)學(xué)員由于馬虎,在i=l之后忘了加分號,還把printf錯寫成了print)〇@FileEditViewInsertProjectBuildToolsWindowHelp ?網(wǎng)x|窗gテ名船亀窗gテ名船亀I夕▼た▼|厄?qū)質(zhì)聃「J(Globals) ▼](Allglobalmembers?mainConfiguration:add-Win32Debug--'XJlCompiling..add.cpp :\200403031880\add\add,cpp(6):errorC2143:syntaxeD:\2O04O30310OO\add\add.cpp(11):errorC2065:*print'D:\200403031000\add\add.cpp(12):warningC4508:'mainErrorexecutingcl.exe.add.obj-2error(s),1warning(s)FindinFiles1ヽFindinReadyLn10,Col1REC[COL圖!-33編譯時發(fā)現(xiàn)了錯誤和警告.語法調(diào)試階段執(zhí)行Build菜單的Compileadd.cpp菜單項,編譯沒有通過(參見圖!-33),原因是源程序存在2處錯誤,并且被描述在集成環(huán)境的output窗口:①D:\200403031000\add\add.cpp(6):errorC2143:syntaxerror:missingbefore'while'②D:\200403031000\add\add.cpp(11):errorC2065:'print':undeclaredidentifier錯誤①的大意為:句法錯誤,在,while,之前缺少(;(符號。錯誤②的大意為:標(biāo)識符,print,沒有被聲明,VC不能識別。實際上,這些錯誤確實存在,因此首先修改第一個錯誤,在i=l之后加上分號:然后修改第二處錯誤,將print改為printf,重新編譯,則編譯通過。一般地,我們總是重視并修改第一個錯誤,因為其它錯誤有可能是由第一個錯誤導(dǎo)致、派生出來的。需要補充說明的是,原先無法通過編譯時,除了在output窗口輸出2條錯誤信息外,還有1條警告信息:D:\2OO4O3O31000\add\add.cpp(12):warningC4508:'main':functionshouldreturnavalue;'void"returntypeassumed其大致意思為:函數(shù),main,最好返回一個值。但我們不用理會。實際上,不論有多少警告都不阻礙程序的編譯;但另一方面,即使只有1條錯誤,程序也無法編譯,更談不上運行。編譯通過后,再次運行程序(成功運行并瞬間結(jié)束),所求的5項之和被輸出到DOS窗口(參見圖1-34),但結(jié)果顯然是錯誤的。這就需要繼續(xù)調(diào)試ー算法調(diào)試。按任意鍵關(guān)閉DOS窗口。4.算法調(diào)試階段程序是由系列有序的指令構(gòu)成的。計算機執(zhí)行程序雖然速度很快(瞬間結(jié)束),但也是一條條指令執(zhí)行的。我們可以人為地控制執(zhí)行速度,一條條語句地去分解運行,同時觀察運行中各變量的值,找出不合理的語句并作修改,此過程為“單步調(diào)試”,在VC中用F10鍵實現(xiàn)。讓我們接著進行“算法調(diào)試”。按下F10鍵,VC便進入了單步調(diào)試狀態(tài),同時界面上的文本編輯器窗口出現(xiàn)中符號。在調(diào)試狀態(tài)下,此符號指示將要執(zhí)行的語句?,F(xiàn)在它正指示著main函數(shù)的大括弧,表示準(zhǔn)備執(zhí)行main函數(shù)的ー些初始化工作。再次按下F10鍵,main函數(shù)的初始化工作結(jié)束,準(zhǔn)備執(zhí)行第一條賦值語句(定義變量的語句屬于初始化范疇,已經(jīng)執(zhí)行完畢)。參見圖1-35。從圖1-35中的變量窗ロ可以看出,變量i和sum的初始值是很小的負(fù)數(shù)。這些值沒有任何實際意義,是隨機數(shù)。箇オd辭I3電喧q▼コ▼n因官聃[|(Globals)ヨI|(Globals)ヨI(Allglobalmembers|?main0FileEditViewInsertProjectDebugToolsWindowHelp-|g|x|圈后!?l0FileEditViewInsertProjectDebugToolsWindowHelp-|g|x|圈后!?l四^include"stdio.h*'nain()intsumvi;中i=1;while(i<=5)文本編輯器窗口sun=sun+i;i=i+1;口II變量窗uprintfC^dXn'^sun);口II變量窗uprintfC^dXn'^sun);Ready Ln5,Col1|REC|COL圖1-35再次按下F10鍵,i被置為1;再次按下F10鍵,將對sum作第一次累積(參見圖1-36)?此時sum的初始值是仍然是隨機數(shù)。求和的累積問題本應(yīng)該從〇開始,但對于sum來說,以這樣的初始值為基礎(chǔ)計算各項的累加和顯然是錯誤的。解決方法是取。作為sum的初始值,而不是隨機值。單擊Debud菜單的StopDebugging菜單項,結(jié)束調(diào)試狀態(tài)。"include"stdio.h""include"stdio.h""include"stdio.h"nain()main()main()<<<intsun,i;intsum9i;intsum,i;i=1;i=1;i=1;<>while(i<=5)while(l<-5)while(i<=5)<<<sun=sun+i;(>sum=sum+i;sum=sum+i;i=i+1;i=i+1;(>i=i+1;}>>printF(''%d'n"?sum);printf("%d\n",sum);printf("%d\n"?sum)>>}NameValueNameValueNameValuei1i1i1sum-858993460sum-858993460sum-858993459圖1-36sum的第一次累積就是錯的>在程序中添加一條sum的賦值語句。完整、正確的程序參見圖L37。"include<stdio.h> —main。 ーintsum9i;i=1;sum=O;while(i<=5)sun=sun+i;i=i*1;printfC^dXn",sun);回 _対圖I-37完整、正確的程序(三)如何使用幫助系統(tǒng)在編寫程序的過程中,開發(fā)者經(jīng)常需要查閱ー些幫助性文檔,例如一些程序設(shè)計語言的語法規(guī)則,或者查閱關(guān)于ー些新技術(shù)的論述等。這些幫助信息一般都被集成到開發(fā)環(huán)境中,稱為聯(lián)機幫助,以方便程序開發(fā)者的查閱。在VC的集成環(huán)境中就很容易啟動ー種幫助系統(tǒng):MSDNLibrary(參見圖1-38)。它是微軟公司的軟件產(chǎn)品,專門用于查閱開發(fā)程序可能需要的電子技術(shù)文檔。其中不僅查閱與VC相關(guān)的幫助信息,還可以查閱與VB、VF等更多開發(fā)工具相關(guān)的技術(shù)文檔。IpMSDNLibraryVisualStudio6.0文件⑹編輯?查看⑼跳轉(zhuǎn)⑥幫助?S具咼盤盤盤牆よ龍活動子集也)S具咼盤盤盤牆よ龍活動子集也)|7全部集合)]MSDNLibraryVisual.?歡迎進入MSDNLi]VisualStudioD<」VisualBasic文スj Visual C++Docunj Visual FoxPro文J Visual InterDev]VisualJ++Docunj Visual SourceSal:?工具和技術(shù)MicrosoftOffice1?平臺SDK」SDKDocumentatic;DDKDocumentaticj WindowsResource]Specifications;KnowledgeBase \ TechnicalArtic]J Backgrounders]Books ▼]Ld J2J目錄I索引I搜索Iル£. ▲MSDNLibrary是VisualStudio6.0系列開發(fā)產(chǎn)品之ー,該系列產(chǎn)品包括:VisualBasicVi_sualC++VisualFoxProVisualInterDevVisualJ++VisualSourceSafe.BSD!LibraryGU1醫(yī)生咖啡館GU!醫(yī)生介紹了MSDNLibrary的VisualStudio6.0版本.Librar匕的新內(nèi)容單擊此處可獲得有關(guān)此版本中新內(nèi)容的熱點燃接清單。 」作者之角在此可閱讀MSDN寫作小組的新技術(shù)文章和示例.MSDNOnline可找出MSDNOnline成員中的新內(nèi)容,閱讀選定的特性文章,并可檢查GUI醫(yī)生的Online欄?查找Readme文件Readme文件提供了有關(guān)安裝的重要信息以及耳他此版本中較為研±r4I圖!-38MSDN的主界面實際上,MSDN是基于微軟開發(fā)工具開發(fā)各種應(yīng)用的全方位的電子幫助系統(tǒng),具有資料全、例子多、敘述詳細(xì)、使用方便等優(yōu)點,早已成為大多數(shù)Windows程序開發(fā)者的第一手資料庫(從網(wǎng)上查找資料是另一回事)。其缺點是,由于比較龐大,很多電子文檔仍然是用英文表述的,而不是漢語。盡管如此,VC中的MSDN對于我們的學(xué)習(xí)將有很大的幫助,因為C語言的全部語法知識都可以從中查到,盡管是用英文表述的,但由于所涉及的知識較少,而且這些英文的詞匯都是簡單的初級詞匯,因此完全能夠被學(xué)員們采用。實際上,我們推薦菜用VC編寫C語言程序的ー個市要原因就是因為這個優(yōu)秀的MSDN聯(lián)機幫助系統(tǒng)。下面舉例說明MSDN的簡單使用。假設(shè)要查閱關(guān)于primf的幫助信息,經(jīng)過2步操作即可:①在文本編輯器中選中printf(參見圖!-39)〇②按下F1鑲則MSDN

自動啟動,并顯示關(guān)于printf的幫助信息(參見圖14))。此幫助信息闡述了printf函數(shù)的參數(shù)和返回值,并且還給出ー個例子(拖動滾動條可以瀏覽到,并且可以用鼠標(biāo)選中拷貝至VC屮運行)。ttinclude"stdio.h"main()intsun9i;i=1;sum=0;while(i<=5)sum=sun+i;i=i+1;printf(",printf(",%d\n"?sun)圖!-39選中關(guān)鍵詞,!□!x|吆,!□!x|文件(E)編輯@查看(ウ跳轉(zhuǎn)⑥幫助?!金咼為嘉愈猛蠶急活動子集色)「全部集合)1.M—bj活動子集色)「全部集合)1.M—bj貶a.?包」a包包ユキilmiuuuuuuu良?LK^SSSSSSSf-n^vvvvvvvt-mMSD??0??????企printf,wprintfPrintformattedoutputtothestandardoutputprintf(constcharformat[,argument]...);intwprintf(constwchar_t*format[,argument]...);RoutineRequiredHeaderCompatibilityprintf<stdio.h>ANSI,Win95,WinNTwprintf<stdio.h>or<wchar.h>ANSI,Win95,WinNT1~~11圖14)按下Fl后MSDN自動顯示相關(guān)幫助三、上機實驗要求《C語言程序設(shè)計》上機實驗安排20學(xué)時。必須完成老師規(guī)定的所有實驗內(nèi)容后,オ有資格參加考試。總體上機實驗的要求是:.明確上機實驗?zāi)康纳蠙C實驗不單是為了驗證程序的正確與否,而更重要的是:①加深對講授內(nèi)容的理解,使理論知識和實際操作互相滲透、互相推動,最大限度提髙學(xué)習(xí)效率。僅片面地強調(diào)ー個方面是錯誤的,這是本課程區(qū)別于其它課程的最大特點。②學(xué)會上機調(diào)試程序,提高動手能力。從某個角度講,調(diào)試程序的能力代表了程序的設(shè)計能力。調(diào)試程序的經(jīng)驗,主要是通過臼己的直接實踐來累積,而且有的經(jīng)驗只能“意會”無法“言傳”的。因此,調(diào)試程序需要自己動手上機實驗,這是任何人、任何其它方法都無法取代的。.預(yù)習(xí)實驗內(nèi)容,準(zhǔn)備好上機程序。按照老師指定的實驗,預(yù)習(xí)實驗內(nèi)容,要理解、掌握實驗中預(yù)備知識的內(nèi)容。為了提高上機效率,要先編寫好源程序,并經(jīng)過人工檢查無誤后,再上機調(diào)試。對程序中有疑問的地方,應(yīng)作出標(biāo)記,以便在上機時給予注意。在上機前設(shè)計好上機調(diào)試用例(即所用的測試數(shù)據(jù)),并作好調(diào)試程序的記錄,用以分析程序設(shè)計的正確與否。3,提倡獨立思考。上機過程中出現(xiàn)的問題,除了系統(tǒng)中的問題以外,一般應(yīng)該獨立處理,尤其對"出錯信息”應(yīng)該善于自己分析判斷,這是學(xué)習(xí)調(diào)試程序的良好機會,是提高調(diào)試能カ的訓(xùn)練過程。.多編程序,多上機調(diào)試除了完成規(guī)定的上機學(xué)時外,還要再安排課外上機時間,才能達(dá)到本課程的教學(xué)要求。在完成指定實驗內(nèi)容的基礎(chǔ)上,鼓勵同學(xué)多做帶"*"的題冃及上機調(diào)試自己設(shè)計的程序。.保存好上機實驗的程序作好上機程序的存盤工作。每個上機實驗的程序應(yīng)保存在軟盤或優(yōu)盤ho程序名的命名規(guī)則是:實驗號ー題目號.C例如,實驗一的第1題的源程序文件名是:SY1-1.C,實驗一的第2題的源程序文件名是:SY1-2.C根據(jù)任課教師的要求,再將上機作業(yè)保存在軟盤上或通過郵件發(fā)送給老師,以備檢査。.寫出實驗報告上機結(jié)朿后,應(yīng)整理數(shù)據(jù),寫出實驗報告,實驗報告應(yīng)包括如下內(nèi)容:(1)實驗?zāi)康蘑泼總€實驗內(nèi)容的程序框圖(按實驗中的要求做)、程序清單和運行結(jié)果。⑶分析與討論。對程序的運行情況進行分析與討論:本次調(diào)試程序所取得的經(jīng)驗、體會,如果程序未能通過,應(yīng)分析其原因;完成指定實驗中給定的分析與討論實驗ー上機實驗基礎(chǔ)及順序結(jié)構(gòu)的使用一.實驗?zāi)康?了解ー個簡單C程序的構(gòu)成。.熟悉C語言程序的運行環(huán)境及運行過程。.掌握C語言中數(shù)據(jù)類型、常用運算符的意義。.掌握C語言表達(dá)式的運算規(guī)則和C程序的輸入輸出方法。二.預(yù)備知識.ー個C程序是由函數(shù)構(gòu)成的,而且必須有一個main函數(shù)(也稱為主函數(shù)),也可以包含若干個其它函數(shù),ー個C程序總是從主函數(shù)開始執(zhí)行的。C語言的許多功能是通過調(diào)用C的庫函數(shù)來完成的,例如:printf(),它就是一個實現(xiàn)輸出數(shù)據(jù)功能的函數(shù)。但當(dāng)我們在庫函數(shù)中找不到所需功能的函數(shù)時,便要動手設(shè)計自己所需的函數(shù),即自定義函數(shù)。.C程序的書寫規(guī)則:⑴使用ー對大括號來表示函數(shù)體的范圍,或程序的結(jié)構(gòu)層次范圍。⑵書寫格式自由,一般使用英文小寫字母書寫,區(qū)分大小寫字母。一行可以寫多個語句,ー個語句也可以寫在多行上。⑶每個語句的后面必須有一個分號(;)?⑷為了增加程序的可讀性,可以使用空格和空行,但函數(shù)名和變量名中間不能有空格,還可以用/*...*/的形式對程序中的任何部分作注釋。.在計算機上運行一個C程序的標(biāo)準(zhǔn)步驟:編輯將編制好的源程序輸入到計算機,再將輸入或修改后的源程序保存到磁盤中,建立一個源程序文件,通常擴展名為.c,源程序文件是以ASCII代碼的形式存儲的,不能被計算機直接執(zhí)行。編譯。將編輯好的源程序翻譯成二進制的目標(biāo)代碼。在編譯時還要對源程序進行語法檢查,如發(fā)現(xiàn)有錯,則在屏幕上顯示出錯信息,此時應(yīng)重新進入編輯狀態(tài),對源程序進行修改后再看新編譯,直到通過編譯為止。編譯后得到的二進制代碼文件的擴展名為Qbj,稱作目標(biāo)文件,目標(biāo)文件還不能直接執(zhí)行。連接將各模塊的二進制目標(biāo)代碼與系統(tǒng)標(biāo)準(zhǔn)模塊經(jīng)連接處理后得到可執(zhí)行文件,擴展名為.exe。運行。執(zhí)行ー個經(jīng)過編譯和連接后生成的可執(zhí)行目標(biāo)文件。需要說明的是,在實際上機時,不必按照上述步驟逐步操作,因為太煩瑣,而是使用系統(tǒng)提供的運行程序的快捷命令。比如,在VC環(huán)境下,對當(dāng)前源程序只要編譯過一次,則單單執(zhí)行一個菜單命令就可以運行(例如“Excecutehello.exe”菜單,參見“熟悉編程工具”的“在VC中運行程序的基本步驟”部分);在TC環(huán)境下則更簡單,單單執(zhí)行‘‘Run”菜單中的“Run”命令就可以運行。當(dāng)然,其它步驟并非不存在,而是由系統(tǒng)自動處理罷了。.數(shù)據(jù)類型C語言規(guī)定,在程序中使用的每個數(shù)據(jù)都屬于一?種類型。本次實驗,要求掌握整型、實型和字符型數(shù)據(jù)的使用。數(shù)據(jù)類型的具體分類及每種數(shù)據(jù)類型所占內(nèi)存的字節(jié)數(shù)見教材有關(guān)內(nèi)容。.常量和變量常量就是值不變的量,它有不同的數(shù)據(jù)類型。變量就是其值可以改變的量。因為不同類型的數(shù)據(jù)所占的存儲空間不同及數(shù)據(jù)存放形式不同,因此在程序中使用的每ー個變量必須先用聲明語句指定變量的類型,編譯時根據(jù)其類型分配一定的存儲空間。例如:inta,b;/?聲明a、b為整型變量,ー個整型變量一般占兩個字節(jié)(16位)*/charchl,ch2;/?聲明chi、ch2為字符型變量,ー個字符型變量占ー個字節(jié)?/floatx,y; /?聲明x、y為實型變量,ー個單精度實型變量一般占四個字節(jié)?/注意:(1)由于數(shù)據(jù)存放形式不同及所占內(nèi)存字節(jié)數(shù)不同,所以不同類型的變量表示的數(shù)的范圍也不同。例如,整型變量占用內(nèi)存2個字節(jié),可表示的整數(shù)范圍為-32768-32767,長整型變量占用內(nèi)存4個字節(jié),可表示的整數(shù)范圍較大,為-2147483648-2147483647i單精度變量雖然也用4個字節(jié)存放ー個實數(shù),但是由于采用了特殊的數(shù)據(jù)存放形式,所以用float語句聲明的實型變量所能夠表達(dá)的數(shù)的范圍比長整型要大的多。因此要根據(jù)實際需要聲明不同類型的變量去存儲不同類型的數(shù)據(jù)。(2)變量必須賦值后才能參與運算,否則它的初值是個隨機數(shù),運算的最后結(jié)果無實際意義。.不同數(shù)據(jù)類型的轉(zhuǎn)換當(dāng)整型、實型、字符型等多種類型的數(shù)據(jù)間進行混合運算時,不同數(shù)據(jù)的類型要先轉(zhuǎn)換成同一類型,然后進行運算,運算后其值的類型保持同類型。數(shù)據(jù)類型的轉(zhuǎn)換分為兩種形式:顯式(強制)和隱式(自動)轉(zhuǎn)換。例如,若有inta=9;,則算術(shù)表達(dá)式3.28+a/5的值是多少?如何計算?答:該算術(shù)表達(dá)式的值為4.28,其計算步驟如下:[3.28+a/5]——.28+9/5|-「3.28+”-「3.28+1.0|-「4.28]在上述運算過程中,由于“除”的優(yōu)先級比“加"高(參看教材附錄IH,運算符和結(jié)合性),所以局部表達(dá)式9/5首先計算:但由于參與計算的9和5均為整型,則商也只能是整型的水平:后來當(dāng)整型的1要和實型的3.28進行加運算時,由于實型表達(dá)數(shù)據(jù)相對整型比較精準(zhǔn),則1將自動由整型的1轉(zhuǎn)換為實型的1.0,然后進行加運算;當(dāng)運算3.28+1.0時,由于兩個運算對象都是實型,則直接相加。1的類型轉(zhuǎn)換就屬于“隱式轉(zhuǎn)換”。再如,若有inta=9;,則算術(shù)表達(dá)式3.28+(float)a/5的值是5.08,計算步驟:|3.28+(float)a/5~|—|3.28+9.0/5]—丨3.28+9.0/5.0f|3.28+1.8|—5.08|在上述運算過程中,整型數(shù)據(jù)a被臨時轉(zhuǎn)換成實型,這種轉(zhuǎn)換就屬于“顯式轉(zhuǎn)換”;整型數(shù)據(jù)5為了和9.0進行“除”運算,則隱式轉(zhuǎn)換為實型。補充說明:①是否給予顯式轉(zhuǎn)換,要看問題的需要。例如對于9/5的問題,如果想舍棄小數(shù)部分,則不必給予顯式轉(zhuǎn)換。比如,為了表達(dá)91分和98分都屬于優(yōu)秀水平,用91/10和98/10即可,因為兩個表達(dá)式的值都是9:相反,如果重視數(shù)據(jù)的精度,則應(yīng)給予顯式轉(zhuǎn)換。比如,計算多項式1-1/2+1/3-1/4+……的和時,若不顯式轉(zhuǎn)換,則和永遠(yuǎn)是k②不論是隱式轉(zhuǎn)換,還是顯式轉(zhuǎn)換,都是在臨時場所進行的,并不影響變量的原有性質(zhì),比如上例中的(float)a,參與轉(zhuǎn)換的只是a的值,但a并沒有變?yōu)閒loat型變量,而仍然是占用2個字節(jié)的整型變量。.數(shù)據(jù)的輸入和輸出數(shù)據(jù)的輸入和輸出通過函數(shù)來實現(xiàn)的,在此應(yīng)掌握的函數(shù)為:scanf。、printf。、getchar(),putchar(),著重掌握前兩個函數(shù)。三.實驗內(nèi)容.選擇填空(1)表達(dá)式18/4*sqrt(4.0)/8值的數(shù)據(jù)類型為 。(sqr!的功能是求平方根)A)intB)floatC)doubleD)不確定⑵ー個int型數(shù)據(jù)在內(nèi)存中占2個字節(jié),則unsingedint型數(shù)據(jù)的取值范圍為:A)0-255B)0-32767 C)0~65535D)0-2147483647TOC\o"1-5"\h\z(3)設(shè)有說明:charw;intx;floaty;doublez;則表達(dá)式w*x+z-y值的數(shù)據(jù)類型為 。A)floatB)charC)intD)double⑷設(shè)i=3j=4,程序段中執(zhí)行i++;++j后,primf("%d”,i+j);的輸出結(jié)果為 〇A)9 B)7 C)8 D)6⑸在C語言中,要求運算數(shù)必須是整型的運算符是ー〇A)/ B)++C)!=D)%.編程序求下列表達(dá)式的值,并與手工計算結(jié)果相比較。(1)若有inta=7;floatx=2.5,y=4.7;求x+a%3*(int)(x+y)%2/4o(參考程序如下:)main(){inta=7;floatx=2.5,y=4.7;printf(',%f,,x+a%3*(int)(x+y)%2/4);(2)若有inta=2,b=3;floatx=3.5,y=2.5i求(float)(a+b)/2+(int)x%(int)yo*(3)若有intx=3,y=4,z=5;求(x&&y)==(xllz)o*(4)若有intx=3,y=4,z=5;求!(x>y)+(y!=z)ll(x+y)&&(y?z)。.上機調(diào)試程序,找出錯誤并改正。#include<stdio.h>main()floatx,y,a;scanf("%x,%y”,&x,&y);a=(x+y)/2;printf(*Theaverageisa");.運行程序。main()inta;floatb;longc;scanf("%d%f%ldn,&a,&b,&c);printf(W);printf(,,a=%d,b=%f,c=%ld\n';a,b,c);分別使用下面的一種輸入方式(數(shù)據(jù)相同,而輸入的方式不同),來測試上面的程序,分析運行結(jié)果為什么不相同,指出哪種數(shù)據(jù)的輸入方式正確。第一種輸入方式:12367.52174506/第二種輸入方式:67.5,2174506/第三種輸入方式:123/67.5/2174506/ (/代表回車).程序調(diào)試。已知矩形的面積為a,長為b,求寬c。某人寫的程序如下。main()inta,b,c;scanf('1%d%d,\&a,&b);c=a/b;printf(,'c=%d",c);分別用下面的兩組數(shù)據(jù)來測試上面的程序,你的評價如何?你認(rèn)為該程序應(yīng)如何編寫?輸入第一組測試數(shù)據(jù):2Z輸入第二組測試數(shù)據(jù):6.42/ (/代表回車).編寫程序,求ー個圓的面積和周長,用scanf()函數(shù)輸入圓的半徑,文件名為SYl-5.Co.有兩個變量a=2;b=5,編寫程序,把它們的值交換過來(參考下圖)。aEbE*8.模擬SYQ2.C編寫?個程序?qū)崿F(xiàn)求下面表達(dá)式的值。a+y/b*9.輸入一個字符,找出它的前驅(qū)字符和后繼字符,并按ASCII碼值,從小到大順序輸出這三個字符及其對應(yīng)的ASCII值。注:一個字符的前驅(qū)字符是指在ASCII碼表中,排列在該字符前面的一個字符,即比該字符的ASCII碼值小1的字符,而后繼字符是排列在該字符后面的一個字符。*10.輸入一個學(xué)生三門課的成績,計算并輸出其總成績sum、平均成績ave和總成績除以3的余數(shù)rem。四.分析與討論.總結(jié)C程序的結(jié)構(gòu)和書寫規(guī)則。.寫出編寫好一個C程序在計算機上運行一般需經(jīng)過哪幾個步驟?生成哪幾個文件?指出你所用機器的Outputdirectory是什么?.小結(jié)你完成實驗ー上機內(nèi)容后的最深體會是什么?.第2題的輸入函數(shù)寫成scanf("%7.2f,%7.2f,&x,&y);可以嗎?為什么?實驗ニ選擇結(jié)構(gòu)的使用一.實驗?zāi)康牧私鈼l件語句與程序流程的關(guān)系。熟練掌握if語句和switch語句。了解不同的測試數(shù)據(jù)將使程序的流程覆蓋不同的語句、分支和路徑,學(xué)會程序的調(diào)試方法。二.預(yù)備知識選擇也稱之為判斷,它的求解規(guī)則:在不同的條件下所應(yīng)進行的相應(yīng)操作。在書寫選擇結(jié)構(gòu)時,應(yīng)先確定判斷的條件,然后根據(jù)不同的情況應(yīng)執(zhí)行什么樣的操作。C提供的選擇結(jié)構(gòu)大致分為二種:.if…else二路分支選擇結(jié)構(gòu)二路分支選擇結(jié)構(gòu)是最基本的選擇結(jié)構(gòu),工作流程為:首先對條件表達(dá)式進行判斷,條件成立(為真),就執(zhí)行if與else之間的語句,否則(為假),執(zhí)行else后的語句。if,?,else的形式:if(條件表達(dá)式)語句1else語句2例題:編寫程序,要求整數(shù)a、b為整型變量,若a4bユ大于100,則輸出a?+b2百位以上的數(shù)字,否則輸出兩數(shù)之和。程序如下:a,b;printf(''pleaseentera,b\nM);scanf(u%d%dM,&a,&b);if(a*a+b*b>100)printf(,'%d\n',,(a*a+b*b)/100);elseprintf(,"%d\n",a+b);.多分支選擇結(jié)構(gòu)某些事物的變化存在多種情況,需要多種條件進行判斷。此時,二路分支選擇結(jié)構(gòu)已不能滿足要求,必須使用多分支選擇結(jié)構(gòu)來完成。多分支分為switch結(jié)構(gòu)和if…elseif結(jié)構(gòu)兩種。if…elseif結(jié)構(gòu)用于多條件并列測試,從中取一的情況;switch結(jié)構(gòu)用于單條件測試,從多種結(jié)果中取一種的情形。(1)if…elseif語句的結(jié)構(gòu)if(條件表達(dá)式!)語句1elseif(條件表達(dá)式2)語句2else語句n⑵switch多分支結(jié)構(gòu)switch(表達(dá)式){case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2case常量表達(dá)式3:語句3case常量表達(dá)式n:語句ndefault:語句n+1例題:高考錄取考生,600分以上錄取到A類學(xué)校,500分以上錄取到B類學(xué)校,400分以上錄取到C類學(xué)校,400分以下不錄取(用D表示)。main()intscore,n;printf("pleaseenterthescore:n);scanf('*%d",&score);n=score/100;switch(n)case7:case6:printf(AtA\n");break;case5:printf(AtB\n");break;case4:printf(AtC\n");break;3.使用選擇結(jié)構(gòu)應(yīng)注意的幾點:⑴else子句不能單獨使用,它屬于if語句的一部分,必須與if配對使用。當(dāng)有多個else出現(xiàn)在程序中時,它總是與離它最近的且尚未配對的if進行配對。(2)switch結(jié)構(gòu)的執(zhí)行部分由一一個或ー些case子結(jié)構(gòu)與一個可缺省的default子結(jié)構(gòu)組成的復(fù)合語句。要特別注意寫ー對花括號。⑶switch結(jié)構(gòu)中條件表達(dá)式應(yīng)是整型或字符型表達(dá)式,與之相應(yīng),case后面應(yīng)是ー個整數(shù)常量或字符常量。⑷switch結(jié)構(gòu)最多有一個入口和一個出口。⑸要注意break的使用。當(dāng)滿足某入口條件而進入switch結(jié)構(gòu)后,switch將從入口處開始順序執(zhí)行每個case,只到遇到break為至(參見上個例題)。三.實驗內(nèi)容.編寫程序:由鍵盤輸入任意三個數(shù),按降序打印此三個數(shù)。.將輸入的百分制的分?jǐn)?shù),要求按下列分?jǐn)?shù)段輸出成績等級:90分以上為A,80—89分為B,70—79分為C,60—69分為D,小于60分為E。(要求:用switch語句實現(xiàn)??蓞⒖急緦嶒炛?預(yù)備知識2.多分支選擇結(jié)構(gòu)"中的"例題”來做)。.從鍵

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論