第一篇:測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
測繪程序設(shè)計(jì)(C版)
實(shí)習(xí)報(bào)告
學(xué)號:201420050138
姓名: 李陽靖
班級:1420501Z
專業(yè): 測繪工程
課程名稱:測繪程序設(shè)計(jì)(C及Matlab)指導(dǎo)老師:肖根如
2015年12月
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
目錄
前言1
一、實(shí)驗(yàn)?zāi)康?
二、實(shí)驗(yàn)環(huán)境2
三、Turbo C 3.0與VC++6.0的熟悉與操作2
四、實(shí)驗(yàn)內(nèi)容梗概3
五、實(shí)驗(yàn)具體內(nèi)容4 實(shí)驗(yàn)一算法4 實(shí)驗(yàn)二數(shù)據(jù)類型、運(yùn)算符和表達(dá)式5 實(shí)驗(yàn)三控制語句6 實(shí)驗(yàn)四函數(shù)9 實(shí)驗(yàn)五數(shù)組11 實(shí)驗(yàn)六結(jié)構(gòu)體與共用體12
六、常見錯(cuò)誤及分析14
七、程序調(diào)試15
八、實(shí)驗(yàn)心得與體會(huì)17
九、附錄:實(shí)習(xí)程序設(shè)計(jì)清單21
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
前言
現(xiàn)代科學(xué)飛速發(fā)展,世界也不斷的變化,人類的生活隨著科技的發(fā)展也發(fā)生著驚天動(dòng)地的變化。作為新時(shí)代的大學(xué)生,我們應(yīng)該不斷努力學(xué)習(xí)科學(xué)文化知識,以適應(yīng)社會(huì)的發(fā)展要求,以現(xiàn)代化的科學(xué)知識為祖國做貢獻(xiàn)。而C語言作為一種計(jì)算機(jī)語言,無疑是我們將來工作不可缺少的一門技能,所以我們應(yīng)該認(rèn)真學(xué)好C語言。但只是課本上的知識是不夠的,我們應(yīng)該將從課本上學(xué)到的理論知識應(yīng)用到實(shí)踐中,通過不斷的實(shí)踐,在實(shí)踐中發(fā)現(xiàn)錯(cuò)誤解決錯(cuò)誤,并不斷創(chuàng)新,最后能熟練的運(yùn)用所學(xué)的知識,充分掌握這種工具。C語言知識博大精深,有必要對C語言的專著進(jìn)行研究學(xué)習(xí),多閱讀別人的程序代碼、多動(dòng)手實(shí)踐操作與設(shè)計(jì),這樣便對程序算法精簡改進(jìn)提供了可能。想學(xué)的更深更透徹的話就必須進(jìn)一步掌握運(yùn)用C進(jìn)行程序設(shè)計(jì)的能力;進(jìn)一步理解和運(yùn)用面向過程程序設(shè)計(jì)的思想和方法;初步掌握開發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法;學(xué)會(huì)調(diào)試一個(gè)較長程序的基本方法;學(xué)會(huì)利用互聯(lián)網(wǎng)查找相關(guān)的知識并學(xué)習(xí);學(xué)海之路何其寬廣,有必要讓我們孜孜不倦的求索下去。
一、實(shí)驗(yàn)?zāi)康?/p>
C語言程序設(shè)計(jì)實(shí)習(xí)是在學(xué)習(xí)《C語言程序設(shè)計(jì)》理論知識的基礎(chǔ)上進(jìn)行的實(shí)踐教學(xué)環(huán)節(jié),其目的是培養(yǎng)我們具有初步的C語言程序設(shè)計(jì)、編程、調(diào)試和排除C語言程序語法、邏輯錯(cuò)誤的能力。
全面熟悉、掌握C語言基本知識,掌握C程序設(shè)計(jì)中的順序、分支、循環(huán)三種結(jié)構(gòu)及數(shù)組、函數(shù)和C語言基本圖形編程等方法,把編程和實(shí)際結(jié)合起來,增強(qiáng)對不同的問題運(yùn)用和靈活選擇合適的數(shù)據(jù)結(jié)構(gòu)以及算法描述的本領(lǐng),熟悉編制和調(diào)試程序的技巧,掌握分析結(jié)果的若干有效方法,進(jìn)一步提高上機(jī)動(dòng)手能力,培養(yǎng)使用計(jì)算機(jī)解決實(shí)際問題的能力,養(yǎng)成提供文檔資料的習(xí)慣和規(guī)范編程的思想,為以后在專業(yè)課程中應(yīng)用計(jì)算機(jī)系統(tǒng)解決計(jì)算、分析、實(shí)驗(yàn)和設(shè)計(jì)等學(xué)習(xí)環(huán)節(jié)打下較扎實(shí)的基礎(chǔ)。
在實(shí)習(xí)過程中,我們要認(rèn)真復(fù)習(xí)基本概念,獨(dú)立編寫程序,并上機(jī)調(diào)試運(yùn)行,培養(yǎng)自己發(fā)現(xiàn)程序中的錯(cuò)誤、改正錯(cuò)誤以使程序能正確運(yùn)行的能力。經(jīng)驗(yàn)豐富的人,當(dāng)編譯時(shí)出現(xiàn)“出錯(cuò)信息”時(shí),能很快地判斷出錯(cuò)誤所在,并改正之。而缺乏經(jīng)驗(yàn)的人即使在系統(tǒng)給出明確出錯(cuò)提示信息下也往往找不出錯(cuò)誤而求救于別人。對于我們來說,不僅要了解和熟悉有關(guān)理論和方法,還要求自己動(dòng)手實(shí)現(xiàn),要求會(huì)編寫程序并上機(jī)調(diào)試通過。因此調(diào)試程序本身是程序設(shè)計(jì)課程的一個(gè)重要內(nèi)容和基本要求,應(yīng)給予充分的重視。調(diào)試程序的經(jīng)驗(yàn)固然可以借鑒他人的現(xiàn)成經(jīng)驗(yàn),但更重要的是通過自己的直接實(shí)踐來積累,而且有些經(jīng)驗(yàn)是只能“意會(huì)”難以“言傳”。
調(diào)試程序的能力,是學(xué)完《C語言程序設(shè)計(jì)》之后,我們應(yīng)當(dāng)掌握的一項(xiàng)基本功。因此,千萬不要在程序通過后就認(rèn)為完成任務(wù)了,而應(yīng)當(dāng)在已通過的程序基礎(chǔ)上作一些改動(dòng)(例如修改一些參數(shù)、增加程序一些功能、改變輸入數(shù)據(jù)的方法等,甚至于“自設(shè)障礙”,即把正確的程序改為有錯(cuò)的,如用scanf函數(shù)輸入變量時(shí),漏寫“&”符號,使數(shù)組下標(biāo)越界,使整數(shù)溢出等),觀察和分析所出現(xiàn)的情況,并認(rèn)真、及時(shí)總結(jié)。這樣的學(xué)習(xí)是靈活主動(dòng)的學(xué)習(xí)而不是呆板被動(dòng)的學(xué)習(xí),才會(huì)有真正的收獲。
因此,我們的實(shí)習(xí)目的可綜合的概括為:
1.熟悉TC20、TC30和VC++6.0的運(yùn)行環(huán)境。
2.了解在TC20、TC30和VC++6.0上如何編輯、編譯、連接和運(yùn)行一個(gè)C程序。3.熟練使用各種C語言的數(shù)據(jù)結(jié)構(gòu)及類型、運(yùn)算符與表達(dá)式。4.熟練掌握格式輸入與格式輸出函數(shù)的使用。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
5.通過運(yùn)行簡單的C程序,初步了解C源程序的特點(diǎn),初步掌握查錯(cuò)和排錯(cuò)的技能。
二、實(shí)驗(yàn)環(huán)境
PC微機(jī)
Windows 操作系統(tǒng)
Turbo C 3.0與VC++6.0程序集成環(huán)境
三、Turbo C 3.0與VC++6.0的熟悉與操作
(一)Turbo C 3.0 1.在安裝Turbo C編譯系統(tǒng)基礎(chǔ)上,則在DOS命令狀態(tài)下鍵入命令tc。進(jìn)入Turbo C集成環(huán)境后,首先在屏幕上顯示Turbo C主菜單窗口。在該窗口,有8個(gè)菜單條目。每一個(gè)菜單的意義如下:
File 處理文件(包括裝入、存盤、選擇、建立、換名寫盤),目錄操作(包括列表、改變工作目錄),退出系統(tǒng)及調(diào)用DOS。
Edit 建立、編輯源文件。
Run 控制運(yùn)行程序。如果程序已經(jīng)編譯連接好,且Debug/Source Debugging以及Option/Compiler/Code generation/OBJ Debug Information開關(guān)置為On,則可以用此菜單初始化調(diào)試階段。
Compile 編譯并生成目標(biāo)程序與可執(zhí)行文件。
Project 允許說明程序中包含哪些文件的管理?xiàng)l目。
Options 可以選擇集成環(huán)境任選項(xiàng)(如存儲模式、編譯時(shí)的任選項(xiàng)、診斷及連接任選項(xiàng))及定義宏;也可以記錄Include Output及Library文件目錄,保存編譯任選項(xiàng)和從配置文件加載任選。
Debug 檢查、改變變量的值,查找函數(shù),程序運(yùn)行時(shí)查看調(diào)用棧。選擇程序編譯時(shí)是否在執(zhí)行行代碼中插入調(diào)試信息。
Break/Watch 增加、刪除、編輯監(jiān)視表達(dá)式,及設(shè)置、清除、執(zhí)行至斷點(diǎn)。
2.特別要指出的是,除了Edit項(xiàng)外,每一個(gè)菜單又有對應(yīng)的子菜單。而選擇Edit項(xiàng)目后,只是進(jìn)入編輯器。
為了從主菜單中選擇所需要的功能,可以用以下兩種方式之一:
(1)按F10鍵后,可以看到屏幕上部主菜單中有反白顯示,此時(shí),利用左、右光標(biāo)移動(dòng)鍵(←與→)選擇需要的菜單,然后按回車(Enter)鍵。
(2)直接按Alt+主菜單條目中的首字母(分別為F,E,R,C,P,O,D,B),此時(shí)就會(huì)出現(xiàn)相應(yīng)的子菜單。例如,按Alt+F表示選擇文件子菜單(File)。當(dāng)出現(xiàn)子菜單時(shí),其中某個(gè)條目是高亮度的,此時(shí)可以利用上、下光標(biāo)移動(dòng)鍵(↑與↓)來移動(dòng)該高亮度線,從而選擇所需要的功能。在菜單調(diào)用時(shí),按Esc鍵后將直接返回到活動(dòng)窗口。
(二)VC++6.0 1.安裝和啟動(dòng)
運(yùn)行Visual Studio軟件中的setup.exe程序,選擇安裝Visual C++ 6.0,然后按照安裝程序的指導(dǎo)完成安裝過程。2.創(chuàng)建工程項(xiàng)目
用Visual C++6.0系統(tǒng)建立C語言應(yīng)用程序,首先要?jiǎng)?chuàng)建一個(gè)工程項(xiàng)目(project),用來存放
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
C程序的所有信息。創(chuàng)建一個(gè)工程項(xiàng)目的操作步驟如下:
進(jìn)入Visual C++6.0環(huán)境后,選擇主菜單“文件(File)”中的“新建(New)”選項(xiàng),在彈出的對話框中單擊上方的選項(xiàng)卡“工程(Projects)”,選擇“Win32 Console Application”工程類型,在“工程(Project name)”一欄中填寫工程名。3.新建C源程序文件
選擇主菜單“工程(Project)”中的“添加工程(Add to Project)? 新 建(New)”選項(xiàng),為工程添加新的C源文件。
4.打開已存在的工程項(xiàng)目,編輯C源程序
進(jìn)入Visual C++6.0環(huán)境后,選擇主菜單“打開工作區(qū)(Open Workspace)”命令,在“Open Workspace”對話框內(nèi)找到并選擇要打開的工作區(qū)文件,單擊“確定(OK)”按鈕,打開工作區(qū)。
5.在工程項(xiàng)目中添加已經(jīng)存在的C源程序文件
選擇主菜單“打開工作區(qū)(Open Workspace)”命令,在“Open Workspace”對話框內(nèi)找到并選擇要打開的工作區(qū)文件,單擊“確定(OK)”按鈕打開工作區(qū)。6.編譯、連接和運(yùn)行(1)編譯
選擇主菜單“編譯(Build)”中的“編譯(Compile)”命令,或單擊工具條上的圖標(biāo),系統(tǒng)只編譯當(dāng)前文件而不調(diào)用鏈接器或其它工具。輸出(Output)窗口將顯示編譯過程中檢查出的錯(cuò)誤或警告信息,在錯(cuò)誤信息處單擊鼠標(biāo)右鍵或雙擊鼠標(biāo)左鍵,可以使輸入焦點(diǎn)跳轉(zhuǎn)到引起錯(cuò)誤的源代碼處大致位置以進(jìn)行修改。(2)構(gòu)建
選擇主菜單“編譯(Build)”中的“構(gòu)建(Build)”命令,或單擊工具條上的圖標(biāo),對最后修改過的源文件進(jìn)行編譯和連接。7.調(diào)試程序
在編寫較長的程序時(shí),能夠一次成功而不含有任何錯(cuò)誤決非易事,對于程序中的錯(cuò)誤,系統(tǒng)提供了易用且有效的調(diào)試手段。調(diào)試是一個(gè)最基本的技能,不會(huì)調(diào)試就意味著即使學(xué)會(huì)了一門語言,卻不能編制出任何好的軟件。我們在前期進(jìn)行編寫程序時(shí),經(jīng)常會(huì)犯一些語句上的錯(cuò)誤,熟練了過后,會(huì)犯一些邏輯上的錯(cuò)誤,而這些錯(cuò)誤往往是不易察覺的。
四、實(shí)驗(yàn)內(nèi)容梗概
(一)算法
算法是編寫程序的靈魂,數(shù)據(jù)是加工的對象,語言是工具。在編譯任何程序前,我們必須認(rèn)真地進(jìn)行思考和設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)及操作步驟。
(二)數(shù)據(jù)類型、運(yùn)算符和表達(dá)式
在計(jì)算及高級語言中,數(shù)據(jù)的表現(xiàn)形式有常量和變量。在實(shí)習(xí)過程中,我們應(yīng)當(dāng)掌握數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,并且能在C語言實(shí)現(xiàn)過程中熟練的定義變量以及明確各種運(yùn)算符之間的計(jì)算。
(三)三種基本結(jié)構(gòu)
順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等三種結(jié)構(gòu)是C語言程序設(shè)計(jì)的三種基本結(jié)構(gòu),嚴(yán)格來說,所有的C程序都應(yīng)由這三種基本結(jié)構(gòu)組成。開始就著重這三種基本結(jié)構(gòu)的應(yīng)用練習(xí),旨在使我們對于這三種結(jié)構(gòu)有一個(gè)更加深刻的理解,能夠根據(jù)處理問題的需要選擇不同的結(jié)構(gòu)進(jìn)行處理。由于順序結(jié)構(gòu)在這三種結(jié)構(gòu)中是最基本的,實(shí)際上當(dāng)我們把程序中的選擇結(jié)構(gòu)部分和循環(huán)結(jié)構(gòu)部分看作一個(gè)整體時(shí),那么,整個(gè)程序就總是由順序結(jié)構(gòu)組成的了。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
(四)函數(shù)
我們?nèi)绻肅語言進(jìn)行大程序設(shè)計(jì),一般采用模塊化的思想。其基本思想是將一個(gè)大的程序按照功能進(jìn)行分割成一些模塊,使每一個(gè)模塊都成為功能單
一、結(jié)構(gòu)清晰、接口簡單、容易理解的小程序。C語言是用函數(shù)來實(shí)現(xiàn)這種模塊化功能的。我們用C語言設(shè)計(jì)程序,任務(wù)只有一種,就是編寫函數(shù),至少也要編寫一個(gè)main()函數(shù)。根據(jù)程序的復(fù)雜程度,還可以編寫多個(gè)子函數(shù)。在這一部分我們就通過練習(xí)進(jìn)一步掌握用子函數(shù)來進(jìn)行模塊化程序設(shè)計(jì)的方法,熟悉子函數(shù)的調(diào)用和執(zhí)行過程。
(五)數(shù)組應(yīng)用
數(shù)組是一種構(gòu)造數(shù)據(jù)類型,指的是一組同類型數(shù)據(jù)組成的序列,運(yùn)用數(shù)組可以高效地處理很多問題。
五、實(shí)驗(yàn)具體內(nèi)容 【實(shí)驗(yàn)一】算法
(一)實(shí)驗(yàn)?zāi)康?/p>
1.熟悉和掌握用SmartDraw軟件進(jìn)行流程圖的繪制 2.了解流程圖的格式 3.明確算法的目的
(二)實(shí)驗(yàn)內(nèi)容
1.用流程圖來表示算法
2.檢查流程圖的語句錯(cuò)誤與邏輯錯(cuò)誤
(三)實(shí)驗(yàn)步驟
我們以水準(zhǔn)測量為例
1.我們在進(jìn)行水準(zhǔn)測量前,我們應(yīng)該確定測量路線以及選取測量方向,然后就將水準(zhǔn)儀整平準(zhǔn)備測量;
2.在測量過程中,我們要對數(shù)據(jù)的可靠程度進(jìn)行判斷,所以在判斷框中輸入“d>5?”,表示判斷視距差是否在誤差范圍之內(nèi);
3.當(dāng)測量站數(shù)大于1后,就需要對視距差之和進(jìn)行判斷,如果前幾站視距差之和大于限差,則需重測。所以,在后面加上一個(gè)判斷框,寫上“D>10?”;
3.如果滿足了兩個(gè)判斷框的條件,則進(jìn)行下一站的測量;如果不滿足其中的一個(gè)條件,就需要重新進(jìn)行數(shù)據(jù)測量及輸入;
4.最后判斷是否將整個(gè)測區(qū)測完,如果沒有則繼續(xù)測量,直至測完為止。測量完成且滿足限差要求,就可停止運(yùn)行計(jì)算。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
(四)實(shí)驗(yàn)總結(jié)
1.程序設(shè)計(jì)反映了利用計(jì)算機(jī)解決實(shí)際問題的全過程,具體要經(jīng)過以下四個(gè)基本步驟:分析問題,確定數(shù)學(xué)模型或方法;設(shè)計(jì)算法,畫出流程圖;選擇編程工具,按算法編寫程序;調(diào)試程序,分析輸出結(jié)果。
2.為解決一個(gè)問題而采取的方法和步驟,就算法。算法是程序設(shè)計(jì)的核心。
3.算法具有5個(gè)特性:有窮性、確定性、有效性、要有數(shù)據(jù)輸入、要有結(jié)果輸出。算法的評價(jià)標(biāo)準(zhǔn)包括:正確性、可讀性、通用性、高效率。算法效率的度量分為時(shí)間度量和空間度量。
4.描述算法有多種不同的工具,常用的有:流程圖、結(jié)構(gòu)化流程圖和偽代碼等。實(shí)用結(jié)構(gòu)化流程圖能幫助培養(yǎng)良好的程序設(shè)計(jì)風(fēng)格,提倡用結(jié)構(gòu)化流程圖表示算法。
【實(shí)驗(yàn)二】數(shù)據(jù)類型、運(yùn)算符和表達(dá)式
(一)實(shí)驗(yàn)?zāi)康?/p>
1.掌握C語言的數(shù)據(jù)類型,了解C語言中數(shù)據(jù)類型的意義,熟悉如何定義整型、字符型和實(shí)型的變量,以及對它們賦值的方法。2.掌握不同類型的數(shù)據(jù)之間賦值的規(guī)律。
3.學(xué)會(huì)用C的有關(guān)算術(shù)運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式,特別是是++和—運(yùn)算符的使用。
4.掌握C語言中使用最多的一種語句——賦值語句的使用方法。
5.掌握scanf()函數(shù)、printf()函數(shù)的調(diào)用方法,掌握各種類型數(shù)據(jù)的輸入輸出的方 法,能正確使用各種格式轉(zhuǎn)換符。
6.掌握字符輸入輸出函數(shù)getchar()、putchar()函數(shù)的調(diào)用方法。(二)實(shí)驗(yàn)內(nèi)容
1.用printf函數(shù)來輸入表達(dá)式運(yùn)行結(jié)果。2.觀察實(shí)驗(yàn)步驟中表達(dá)式的結(jié)果。(三)實(shí)驗(yàn)步驟
以方位角的計(jì)算為例:
1.在明確該程序算法以及熟知各種數(shù)據(jù)類型的基礎(chǔ)上,先確定三個(gè)變量,然后聲明它們的數(shù)據(jù)類型
2.賦予那兩個(gè)已經(jīng)聲明變量各自的初值
3.根據(jù)變量,執(zhí)行判斷語句,判斷b是否大于180度
4.根據(jù)算法,寫出表達(dá)式,并根據(jù)判斷結(jié)果運(yùn)行不同的表達(dá)式
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
5.最后用printf輸出計(jì)算結(jié)果
輸入程序: int main(){ int a12,a23,b;a12=100,b=50;if(b<180)a23=a12+b-180;else a23=a12-b+180;printf(“a23=%dn”,a23);} 運(yùn)行結(jié)果為:
(四)實(shí)驗(yàn)總結(jié)
1.C語言數(shù)據(jù)類型有:基本類型(整型、字符型、實(shí)型)、構(gòu)造類型(結(jié)構(gòu)體類型、公用體類型、枚舉類型)、指針類型和空類型。整型又分為段整形、基本整型和長整型三種。整型還可以分為有符號型和無符號型。實(shí)型分為單精度型和雙精度型。
2.變量是一個(gè)用于存放數(shù)值的內(nèi)存存儲區(qū),根據(jù)變量的類型不同,該存儲區(qū)被分配不同字節(jié)的內(nèi)存安源。變量用標(biāo)識符命名。C程序中用到的任何變量都必須在使用前進(jìn)行定義。
3.整形變量可以用十進(jìn)制、八進(jìn)制、和十六進(jìn)制來表示。4.轉(zhuǎn)義字符占一個(gè)字節(jié),分為以下三類:
(1)控制輸出格式的轉(zhuǎn)義字符:n、t、b、r、f等。(2)控制三個(gè)特殊符號輸出的轉(zhuǎn)義字符:、’、” 5.C語言的運(yùn)算符
(1)基本算術(shù)運(yùn)算符:+-* / %,先乘除、求余,后加減;對于/運(yùn)算,兩個(gè)整數(shù)相除結(jié)果仍為整數(shù);%運(yùn)算符只對整型數(shù)據(jù)有效。
(2)逗號運(yùn)算符的運(yùn)算規(guī)則:從左向右依次運(yùn)算每一個(gè)表達(dá)式,逗號表達(dá)式的結(jié)果就是最后一個(gè)表達(dá)式的值。
6.++或—可以卸載變量之前,也可以寫在變量之后。如果對變量施加了前綴或后綴運(yùn)算,并參與其他運(yùn)算,則前綴運(yùn)算是先改變變量的值再做運(yùn)算,而后綴運(yùn)算是先參與運(yùn)算后改變變量的值。自增和自減運(yùn)算符的運(yùn)算對象只能是變量,而不能是表達(dá)式或常量。
7.當(dāng)表達(dá)式中含有不同類型的數(shù)據(jù)時(shí),運(yùn)算的數(shù)據(jù)類型默認(rèn)按隱式類型轉(zhuǎn)換,即從精度低的類型自動(dòng)轉(zhuǎn)換成精度高的類型,否則會(huì)造成精度損失。
8.C語言中沒有提供輸入輸出語句,在其庫函數(shù)中提供了一組輸入輸出函數(shù)。其中對標(biāo)準(zhǔn)輸入輸出設(shè)備進(jìn)行格式化輸入輸出的函數(shù)是scanf和printf。
9.輸入函數(shù)scanf()的功能是接受鍵盤輸入的數(shù)據(jù)給變量輸出函數(shù)printf()的功能是將數(shù)據(jù)以一定格式顯示輸出。
(1)輸出函數(shù)的一般形式為: printf(“格式控制字符串“,輸入項(xiàng)表)其中格式控制字符串由格式說明符、轉(zhuǎn)義序列和普通字符組成。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
而一個(gè)格式說明符將引起一個(gè)輸出參數(shù)項(xiàng)的轉(zhuǎn)換與顯示。格式說明符是由%引出并以一個(gè)類型描述符結(jié)束的字符串,中間是一些可選的附加說明項(xiàng)。
(2)輸入函數(shù)的一般形式為: Scanf(“格式控制字符串“,輸入項(xiàng)表)
其中格式控制字符與printf()函數(shù)中的類似,不過一般只含有簡單的格式說明符;輸入項(xiàng)表至少有一個(gè)輸入項(xiàng),且必須是變量的地址(用變量名前加&表示)
Printf()和scanf()都要求格式轉(zhuǎn)換說明符與輸入項(xiàng)在個(gè)數(shù)、順序、類型上一一對應(yīng)。
【實(shí)驗(yàn)三】控制語句
(一)實(shí)驗(yàn)?zāi)康?/p>
1.熟練掌握if、if?else、if?elseif語句和switch語句格式及使用方法,掌握if語句中的嵌套關(guān)系和匹配原則,利用if語句和switch語句實(shí)現(xiàn)分支選擇結(jié)構(gòu)。
2.熟練掌握while語句、do …while語句和for語句格式及使用方法,掌握三種循環(huán)控制語句的循環(huán)過程以及循環(huán)結(jié)構(gòu)的嵌套,利用循環(huán)語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。
3.掌握簡單、常用的算法,并在編程過程中體驗(yàn)各種算法的編程技巧。進(jìn)一步學(xué)習(xí)調(diào)試程序,掌握語法錯(cuò)誤和邏輯錯(cuò)誤的檢查方法。
(二)實(shí)驗(yàn)內(nèi)容
1.選擇結(jié)構(gòu)程序設(shè)計(jì); 2.if語句的使用;
3.使用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu); 4.三種循環(huán)語句的應(yīng)用; 5.循環(huán)結(jié)構(gòu)的嵌套;
6.break和continue語句的使用。(三)實(shí)驗(yàn)步驟 以帶號計(jì)算為例
1.根據(jù)所需計(jì)算的方法分為三度帶和六度帶,確定程序的結(jié)構(gòu)
2.定義變量,之后確定其數(shù)據(jù)類型,用scanf進(jìn)行輸入經(jīng)度和判斷標(biāo)志
3.我們需要選擇計(jì)算方式,如果選用三度帶進(jìn)行計(jì)算,則將判斷標(biāo)志設(shè)為0,如果選用六度帶進(jìn)行計(jì)算,則判斷標(biāo)志設(shè)為費(fèi)0的數(shù)
4.用if…else…進(jìn)行選擇后,就進(jìn)行計(jì)算 5.計(jì)算完畢后,用printf輸出結(jié)果 輸入程序: int main(){ int n,m,l;scanf(“%d%d”,&l,&m);if(m==0)n=(l+3)/6;else
n=l/3;printf(“該點(diǎn)位于第%d帶n”,n);} 輸出結(jié)果為:
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
以素?cái)?shù)對的計(jì)算為例
1.在明確素?cái)?shù)對的定義及算法的基礎(chǔ)上,我們先確定變量個(gè)數(shù)及名稱,并且聲明它們的數(shù)據(jù)類型
2.然后確定用for的嵌套結(jié)構(gòu)對素?cái)?shù)對進(jìn)行循環(huán)的判斷、選擇
3.用if結(jié)構(gòu)進(jìn)行判斷,判斷的依據(jù)是首先這個(gè)數(shù)必須是素?cái)?shù),即不能被除了1與它本身外的數(shù)整除,其次,需要滿足的條件是這兩個(gè)素?cái)?shù)必須相差2,所以先尋找“k=(int)sqrt(j)”作為除數(shù),然后執(zhí)行“if(j%i==0)”進(jìn)行判斷其是否為素?cái)?shù),在執(zhí)行”if(k2-k1==2)”判斷它們是否為素?cái)?shù)對,不滿足其中的一個(gè)判斷條件,則執(zhí)行”break”,跳出循環(huán)
4.找出素?cái)?shù)對之后,用printf進(jìn)行輸出 程序輸入:
for(j=2;j<=lyj;j++){ prime=1;k=(int)sqrt(j);for(i=2;i<=k;i++){
if(j%i==0){
prime=0;
break;
} } if(prime){
k2=j;
{
printf(“%ld %ld is prime pairsn”,k1,k2);
}
k1=k2;} } 輸出結(jié)果為:
(四)實(shí)驗(yàn)總結(jié)
1.根據(jù)某種條件的成立與否而采用不同的程序段進(jìn)行處理的程序結(jié)構(gòu)稱為選擇結(jié)構(gòu)。選擇結(jié)構(gòu)又可以分為單分支、雙分支和多分支三種情況。一般采用if語句實(shí)現(xiàn)單分支、雙分支或多分支結(jié)構(gòu)程序
2.采用嵌套if語句還可以實(shí)現(xiàn)較為復(fù)雜的多分支結(jié)構(gòu)程序。在嵌套if語句中,一定要弄清楚else與哪個(gè)if結(jié)合。書寫嵌套if語句往往采用縮進(jìn)的階梯式寫法,目的是便于看清e(cuò)lse與if結(jié)合的邏輯關(guān)系,但折后總寫法并不能改變if語句的邏輯關(guān)系。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
3.循環(huán)結(jié)構(gòu)又稱為重復(fù)結(jié)構(gòu),它可以控制某些語句重復(fù)執(zhí)行,重復(fù)執(zhí)行的語句稱為循環(huán)體,而決定循環(huán)是否繼續(xù)執(zhí)行的是循環(huán)條件。循環(huán)結(jié)構(gòu)是程序設(shè)計(jì)總應(yīng)用最多的結(jié)構(gòu)形式,在C語言中,可用while語句、do…while語句和for語句來實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。
一般情況下,用某種循環(huán)語句寫的程序段,業(yè)內(nèi)呢個(gè)用另外兩種循環(huán)語句實(shí)現(xiàn)。While語句和for語句屬于當(dāng)型循環(huán),即先判斷,后執(zhí)行;而do…while語句屬于直到型循環(huán),即先執(zhí)行,后判斷,而無法確定循環(huán)次數(shù)的問題采用while語句或do…while語句比較自然。
4.有時(shí)候需要用到多重循環(huán),又稱為循環(huán)嵌套,即在循環(huán)語句的循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)。循環(huán)嵌套不允許交叉。
5.為了避免出現(xiàn)無終止的循環(huán),要注意循環(huán)結(jié)束條件的使用,也就是說在循環(huán)執(zhí)行中,要修改循環(huán)變量,還要注意循環(huán)的初始條件。分析循環(huán)第一次和最后一次執(zhí)行時(shí)的情況有助于寫出正確程序。
【實(shí)驗(yàn)四】函數(shù)
(一)實(shí)驗(yàn)?zāi)康?/p>
1.掌握C函數(shù)的定義方法、函數(shù)的調(diào)用方法、參數(shù)說明以及返回值 2.掌握實(shí)參與形參的對應(yīng)關(guān)系以及參數(shù)之間的“值傳遞”的方式; 3.掌握函數(shù)的嵌套調(diào)用及遞歸調(diào)用的設(shè)計(jì)方法;
4.掌握全局變量和局部變量、動(dòng)態(tài)變量與靜態(tài)變量的概念和使用方法; 5.在編程過程中加深理解函數(shù)調(diào)用的程序設(shè)計(jì)思想。
(二)實(shí)驗(yàn)內(nèi)容
1.多模塊的程序設(shè)計(jì)與調(diào)試的方法; 2.函數(shù)的定義和調(diào)用的方法; 3.用遞歸方法進(jìn)行程序設(shè)計(jì)。(三)實(shí)驗(yàn)步驟
以前方交會(huì)測量為例
1.明確前房交會(huì)測量的原理及算法
2.定義所需的變量,并確定它們的數(shù)據(jù)類型
3.用scanf輸入角度、距離等數(shù)據(jù),并且需要進(jìn)行角度的判斷,以保證兩角之和要大于30度小于150度
4.滿足條件后,就根據(jù)計(jì)算公式進(jìn)行計(jì)算 5.然后用printf輸出結(jié)果
6.然后再熟悉函數(shù)形式的基礎(chǔ)上,將該程序算法的主要部分改為函數(shù)形式 7.最后運(yùn)行、調(diào)試,直至輸出正確的結(jié)果為止 原程序輸入:
scanf(“%d%d%d%d%d%d”,&x1,&y1,&x2,&y2,&a1,&a2);if((a1+a2)>150 &&(a1+a2)<30)printf(“overrun!”);else xp=(x1*tan(a1*PI/180)+x2*tan(a2*PI/180)+(y2-y1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1*PI/180)+tan(a2*PI/180));yp=(y1*tan(a1*PI/180)+y2*tan(a2*PI/180)+(x2-x1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1*PI/180)+tan(a2*PI/180));printf(“p=(%d,%d)n”,xp,yp);
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
} 改為函數(shù)形式程序輸入為:
double m(double x1, double x2, double x3, double x4,double x5,double x6,double x7,double x8,double x9,double x10){double l;l=(x1*tan(x2*PI/180)+x3*tan(x4*PI/180)+(x5-x6)*tan(x7*PI/180)*tan(x8*PI/180))/(tan(x9*PI/180)+tan(x10*PI/180));return(l);} main(){ double x1,x2,xp,y1,y2,yp,a1,a2;scanf(“%d%%d%d%d%d”,&x1,&y1,&x2,&y2,&a1,&a2);if((a1+a2)>150||(a1+a2)<30)printf(“overrun!”);else xp=m(x1,a1,x2,a2,y2,y1,a1,a2,a1,a2);yp=m(y1,a1,y2,a2,x2,x1,a1,a2,a1,a2);printf(“p=%dn,%dn”,xp,yp);} 結(jié)果輸出為:
以坐標(biāo)正算為例
1.明確坐標(biāo)正算的算法
2.聲明變量PI(圓周率)以及其他變量,并確定它們的數(shù)據(jù)類型 3.用scanf輸入第一個(gè)點(diǎn)的坐標(biāo)以及兩點(diǎn)之間的距離和角度
4.然后進(jìn)行“x2=x1+d*cos(a*PI/180)y2=y1+d*sin(a*PI/180)”的計(jì)算 5.計(jì)算完成后用printf輸出計(jì)算結(jié)果
6.然后將程序算法的主要部分“x2=x1+d*cos(a*PI/180)y2=y1+d*sin(a*PI/180)”改為函數(shù)的形式
7.最后運(yùn)行、調(diào)試,直至輸出正確的結(jié)果為止
原程序輸入為: main(){
float x1,y1,d,a;float x2,y2;scanf(“%f%f%f%f”,&x1,&y1,&d,&a);
x2=x1+d*cos(a*PI/180);y2=y1+d*sin(a*PI/180);printf(“第二個(gè)點(diǎn)的坐標(biāo)是:(%f,%f)n”,x2,y2);} 改為函數(shù)形式程序輸入為:
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
double w(double x,double y,double z){double k;k=x+y*cos(z*PI/180);return(k);} main(){ float x1,x2,y1,y2,d,a;scanf(“%f%f%f%f”,&x1,&y2,&d,&a);
x2=w(x1,d,a);y2=w(y2,d,a);printf(“第二個(gè)點(diǎn)的坐標(biāo)是:(%fn,%fn)”,x2,y2);} 輸出結(jié)果為:
(四)實(shí)驗(yàn)總結(jié)
1.函數(shù)是利用C語言進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)的最基本的概念,C程序是由函數(shù)組成的。可以把一個(gè)復(fù)雜的程序分成多個(gè)模塊進(jìn)行設(shè)計(jì),而每個(gè)模塊是一個(gè)函數(shù)。main()是C程序中最重要的函數(shù),程序運(yùn)行從函數(shù)main()開始,也在函數(shù)main()結(jié)束。
2.函數(shù)定義的一般形式為:
函數(shù)符 函數(shù)名([形式參數(shù)說明]){ 聲明與定義部分 語句部分 }
類型符指明函數(shù)返回值的類型。如果函數(shù)定義是不指明類型,系統(tǒng)隱含指定為int型。形式參數(shù)有兩個(gè)作用:其一表示將從主調(diào)函數(shù)中接收哪些類型的信息,其二在函數(shù)體中形式參數(shù)可以被引用。
3.函數(shù)返回值由return語句實(shí)現(xiàn),return語句的格式為: return 表達(dá)式;
函數(shù)先將表達(dá)式的值轉(zhuǎn)換為所定義的類型,然后返回到主調(diào)函數(shù)中的調(diào)用表達(dá)式。
4.函數(shù)調(diào)用是通過函數(shù)調(diào)用表達(dá)式進(jìn)行,當(dāng)函數(shù)被調(diào)用時(shí),計(jì)算機(jī)才為形參分配存儲空間。在調(diào)用函數(shù)時(shí),函數(shù)之間的參數(shù)傳遞也稱為虛實(shí)結(jié)合。形參從相應(yīng)的實(shí)參得到值,稱為傳值調(diào)用方式。實(shí)參與形參在個(gè)數(shù)、類型上要匹配。
5.函數(shù)調(diào)用前應(yīng)該已經(jīng)定義或聲明。
6.函數(shù)的形參及函數(shù)內(nèi)定義的變量稱為局部變量,其作用范圍在定義它的函數(shù)或復(fù)合語句內(nèi)。在函數(shù)外部定義的變量稱為全局變量,其作用域是從定義或聲明處到整個(gè)程序結(jié)束。
7.一個(gè)函數(shù)被調(diào)用的過程中可以調(diào)用另一個(gè)函數(shù),即函數(shù)調(diào)用允許嵌套。
【實(shí)驗(yàn)五】數(shù)組
(一)實(shí)驗(yàn)?zāi)康?/p>
1.掌握數(shù)組的基本概念,包括:數(shù)組的定義、數(shù)組的類型、數(shù)組的初始化、數(shù)組的賦值、數(shù)組元素下標(biāo)的范圍、數(shù)組元素的正確以及引用數(shù)組元素的輸入/輸出。
2.掌握字符數(shù)組與字符串的使用方法。理解字符數(shù)組與其它數(shù)組的區(qū)別、理解字符串及其特點(diǎn)。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
3.掌握常用的字符串處理庫函數(shù)的用法并清楚對字符串的簡單處理。4.掌握與數(shù)組相關(guān)的算法,包括排序算法和查找算法等。
(二)實(shí)驗(yàn)內(nèi)容 有關(guān)數(shù)組的程序設(shè)計(jì)
(三)實(shí)驗(yàn)步驟 以坐標(biāo)反算為例
1.明確坐標(biāo)反算的算法 2.聲明變量PI(圓周率),并用普通程序?qū)⑵浔硎境鰜?3.最后將其改編為函數(shù)形式的程序
原程序輸入為: void main(){ float x1,x2,y1,y2,d,a;scanf(“%f%f%f%f”,&x1,&y1,&x2,&y2);a=atan((y2-y1)/(x2-x1))*180/PI;
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));printf(“a=%fnd=%fn”,a,d);} 改為數(shù)組形式程序輸入為: void main(){ int i;float a[4],d,m;for(i=1;i<5;i++)scanf(“%d”,&a[i]);m=atan((a[4]-a[3])/(a[2]-a[1]));
d=sqrt((a[2]-a[1])*(a[2]-a[1])+(a[3]-a[4])*(a[4]-a[3]));printf(“a=%fnd=%fn”,m,d);} 輸出結(jié)果為:
(四)實(shí)驗(yàn)總結(jié)
1.數(shù)組命名要符合標(biāo)識符的命名規(guī)則。
2.數(shù)組名后的括號必須是方括號,不能是圓括號。
3.數(shù)組長度必須是正整數(shù),可以是個(gè)表達(dá)式,但不能有變量,C語言不支持動(dòng)態(tài)數(shù)組。4.數(shù)組長度表示數(shù)組中元素的個(gè)數(shù)。
5.數(shù)組元素的下標(biāo)從0開始數(shù),所以最大下標(biāo)是數(shù)組的長度減1。
6.C語言中沒有字符串變量,字符串是靠字符數(shù)組實(shí)現(xiàn)的,所謂字符數(shù)組就是元素的數(shù)據(jù)類型為字符型的數(shù)組。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
【實(shí)驗(yàn)六】結(jié)構(gòu)體與共用體
(一)實(shí)驗(yàn)?zāi)康?/p>
1.理解結(jié)構(gòu)體類型的含義;掌握結(jié)構(gòu)體類型變量的定義方法和使用;結(jié)構(gòu)體類型變量的說明以及初始化方法。
2.理解結(jié)構(gòu)體與數(shù)組的區(qū)別;掌握結(jié)構(gòu)體類型數(shù)組的概念、定義和使用方法。
3.熟悉鏈表的概念,初步學(xué)會(huì)對鏈表進(jìn)行操作。4.初步了解共用體的概念與使用。
(二)實(shí)驗(yàn)內(nèi)容
有關(guān)結(jié)構(gòu)與共同體的程序設(shè)計(jì)
(三)實(shí)驗(yàn)步驟 以三角高程計(jì)算為例
1.明確三角高程計(jì)算的算法
2.聲明變量,用scanf進(jìn)行輸入,并用普通程序的結(jié)構(gòu)將其算法表示出來 3.將原程序改編為結(jié)構(gòu)體形式 原程序輸入為: main(){ double HAB,HB,S,i,v,a,HA;scanf(“%lf%lf%lf%lf%lf”,&S,&i,&v,&a,&HA);HAB=S*tan(a*PI/180)+i-v;HB=HA+S*tan(a*PI/180)+i-v;printf(“HAB=%fnHA=%fn”,HAB,HB);} 改為結(jié)構(gòu)體形式程序輸入為: struct X
{double S;double i;double v;double a;double HA;}N={100,1,2,45,200};main(){ double S,i,v,a,HA,HAB,HB;HAB=S*tan(a*PI/180)+i-v;HB=HA+S*tan(a*PI/180)+i-v;printf(“HAB=%dnHA=%dn”,HAB,HB);} 輸出結(jié)果為:
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
(四)實(shí)驗(yàn)總結(jié) 1.結(jié)構(gòu)體類型定義
結(jié)構(gòu)體類型的形式為:
struct結(jié)構(gòu)體類型名 { 數(shù)據(jù)類型成員名1;...數(shù)據(jù)類型成員名n; };2.結(jié)構(gòu)體變量的定義
結(jié)構(gòu)體變量有三種定義形式:
(1)先定義結(jié)構(gòu)體類型,后定義結(jié)構(gòu)體變量。(2)定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量。
(3)不定義結(jié)構(gòu)體類型名,直接定義結(jié)構(gòu)體變量。3.結(jié)構(gòu)體變量的引用(1)結(jié)構(gòu)體變量的初始化:許多C版本規(guī)定對外部或靜態(tài)存儲類型的結(jié)構(gòu)體變量可以進(jìn)行初始化,而對局部的結(jié)構(gòu)體變量則不可以,新標(biāo)準(zhǔn)C無此限制,允許在定義時(shí)對自動(dòng)變量初始化。
(2)結(jié)構(gòu)體成員的引用:由于C語言一般不允許對結(jié)構(gòu)體變量的整體引用,所以對結(jié)構(gòu)體的引用只能是對分量的引用,結(jié)構(gòu)體變量中的任一分量可以表示為:結(jié)構(gòu)體變量名.成員名
4.結(jié)構(gòu)體與數(shù)組
C語言中數(shù)組的成員可以是結(jié)構(gòu)體變量,結(jié)構(gòu)體變量的成員也可以是數(shù)組。結(jié)構(gòu)體數(shù)組有三種定義形式:
(1)先定義結(jié)構(gòu)體類型,后定義結(jié)構(gòu)體數(shù)組。(2)定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體數(shù)組。(3)不定義結(jié)構(gòu)體類型名,直接定義結(jié)構(gòu)體變量。
六、常見錯(cuò)誤及分析
C語言的最大特點(diǎn)是:功能強(qiáng)、使用方便靈活。C編譯的程序?qū)φZ法檢查并不象其它高級語言那么嚴(yán)格,這就給編程人員留下“靈活的余地”,但還是由于這個(gè)靈活給程序的調(diào)試帶來了許多不便,尤其對我們這些初學(xué)C語言的人來說,經(jīng)常會(huì)出一些連自己都不知道錯(cuò)在哪里的錯(cuò)誤。
有時(shí)候看著有錯(cuò)的程序,不知該如何改起,通過對C的學(xué)習(xí)與實(shí)踐,我積累了一些C編程時(shí)常犯的錯(cuò)誤:
1.書寫標(biāo)識符時(shí),忽略了大小寫字母的區(qū)別。main(){ int a=5;printf(“%d”,A);} 編譯程序把a(bǔ)和A認(rèn)為是兩個(gè)不同的變量名,而顯示出錯(cuò)信息。C認(rèn)為大寫字母和小寫字母是兩個(gè)不同的字符。習(xí)慣上,符號常量名用大寫,變量名用小寫表示,以增加可讀性。
2.忽略了變量的類型,進(jìn)行了不合法的運(yùn)算。main(){ float a,b;printf(“%d”,a%b);} “%”是求余運(yùn)算,得到a/b的整余數(shù)。整型變量a和b可以進(jìn)行求余運(yùn)算,而實(shí)型變量則不允許進(jìn)行“求余”運(yùn)算。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
3.將字符常量與字符串常量混淆。char c;c=“a”;在這里就混淆了字符常量與字符串常量,字符常量是由一對單引號括起來的單個(gè)字符,字符串常量是一對雙引號括起來的字符序列。C規(guī)定以“”作字符串結(jié)束標(biāo)志,它是由系統(tǒng)自動(dòng)加上的,所以字符串“a”實(shí)際上包含兩個(gè)字符:‘a(chǎn)'和‘',而把它賦給一個(gè)字符變量是不行的。
4.忽略了“=”與“==”的區(qū)別。
在許多高級語言中,用“=”符號作為關(guān)系運(yùn)算符“等于”。如在BASIC程序中可以寫 if(a=3)then ? 但C語言中,“=”是賦值運(yùn)算符,“==”是關(guān)系運(yùn)算符。如: if(a==3)a=b;前者是進(jìn)行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。由于習(xí)慣問題,初學(xué)者往往會(huì)犯這樣的錯(cuò)誤。
5.忘記加分號。
分號是C語句中不可缺少的一部分,語句末尾必須有分號。a=1 b=2 編譯時(shí),編譯程序在“a=1”后面沒發(fā)現(xiàn)分號,就把下一行“b=2”也作為上一行語句的一部分,這就會(huì)出現(xiàn)語法錯(cuò)誤。改錯(cuò)時(shí),有時(shí)在被指出有錯(cuò)的一行中未發(fā)現(xiàn)錯(cuò)誤,就需要看一下上一行是否漏掉了分號。
{ z=x+y;t=z/100;printf(“%f”,t);} 對于復(fù)合語句來說,最后一個(gè)語句中最后的分號不能忽略不寫。以及在包含結(jié)構(gòu)體的程序中,很多時(shí)候會(huì)忘記花括號后面的那個(gè)分號,如果忘記了加分號,程序就不能運(yùn)行,如:
struct Student {char name;} 6.多加分號。
對于一個(gè)復(fù)合語句,如: { z=x+y;t=z/100;printf(“%f”,t);};復(fù)合語句的花括號后不應(yīng)再加分號,否則將會(huì)畫蛇添足。又如: if(a%3==0);i++;本是如果3整除a,則I加1。但由于if(a%3==0)后多加了分號,則if語句到此結(jié)束,程序?qū)?zhí)行I++語句,不論3是否整除a,I都將自動(dòng)加1。再如:
for(i=0;i<5;i++);{scanf(“%d”,&x);printf(“%d”,x);} 本意是先后輸入5個(gè)數(shù),每輸入一個(gè)數(shù)后再將它輸出。由于for()后多加了一個(gè)分號,使循環(huán)體變?yōu)榭照Z句,此時(shí)只能輸入一個(gè)數(shù)并輸出它。
7.輸入變量時(shí)忘記加地址運(yùn)算符“&”。int a,b;scanf(“%d%d”,a,b);這是不合法的。Scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進(jìn)去?!?a”指a在內(nèi)存中的地址。
在表示并列的時(shí)候,要同時(shí)使用兩個(gè)“&”,即“&&”否則程序調(diào)試過程會(huì)出現(xiàn)錯(cuò)誤,如:
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
if(x>2 & x<5)8.輸入數(shù)據(jù)的方式與要求不符。scanf(“%d%d”,&a,&b);輸入時(shí),不能用逗號作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法: 3,4
七、程序調(diào)試 調(diào)試概述
調(diào)試是編程過程中不可忽視的問題,對于一個(gè)復(fù)雜的程序來說,從編寫到能夠通過編譯,只是完成了一小部分而已。然后還要不斷的調(diào)試、修改、再調(diào)試、再修改、?直到將發(fā)現(xiàn)的問題都解決,程序能夠穩(wěn)定正確的運(yùn)行為止。調(diào)試在程序設(shè)計(jì)中的地位是十分重要的。調(diào)試是一個(gè)最基本的技能,其重要性甚至超過學(xué)習(xí)一門語言。不會(huì)調(diào)試程序就意味著即使會(huì)一門語言,卻不能編制出任何好的軟件。
常見的錯(cuò)誤類型
(1)語法錯(cuò)誤:拼寫錯(cuò),括號不匹配,漏寫分號……對于查出的錯(cuò)誤(Error)必須排除,否則程序無法運(yùn)行;而警告(Warning)則應(yīng)根據(jù)情況處理,否則可能產(chǎn)生運(yùn)算誤差等。
(2)邏輯錯(cuò)誤:編譯無誤,有時(shí)也有執(zhí)行結(jié)果,但結(jié)果不符合題意。例如scanf的參數(shù)中漏寫地址符,if語句、for語句花括號位置錯(cuò)誤等,都會(huì)導(dǎo)致此類錯(cuò)誤。
(3)運(yùn)行錯(cuò)誤:運(yùn)行結(jié)果錯(cuò)誤也可能是由于輸入數(shù)據(jù)錯(cuò)誤、類型不匹配等造成的。例如用戶沒有按照scanf規(guī)定的格式輸入數(shù)據(jù)就會(huì)造成此類錯(cuò)誤。
查錯(cuò)的方法
(1)先進(jìn)行人工檢查,即靜態(tài)檢查。在寫好一個(gè)程序以后,不要匆匆忙忙上機(jī),而應(yīng)對紙面上的程序進(jìn)行人工檢查。這一步是十分重要的,它能發(fā)現(xiàn)程序設(shè)計(jì)人員由于疏忽而造成的多數(shù)錯(cuò)誤。而這一步驟往往容易被人忽視。
為了更有效地進(jìn)行人工檢查,所編的程序應(yīng)注意力求做到以下幾點(diǎn): A、應(yīng)當(dāng)采用結(jié)構(gòu)化程序方法編程,以增加可讀性; B、并盡可能多加注釋,以幫助理解每段程序的作用;
C、在編寫復(fù)雜的程序時(shí)不要將全部語句都寫在main函數(shù)中,而要多利用函數(shù),用一個(gè)函數(shù)來實(shí)現(xiàn)一個(gè)單獨(dú)的功能。這樣既易于閱讀也便于調(diào)試,便于分別檢查和處理。
(2)在人工檢查無誤后,才可以上機(jī)調(diào)試。通過上機(jī)發(fā)現(xiàn)錯(cuò)誤稱動(dòng)態(tài)檢查。在編譯時(shí)給出語法錯(cuò)誤的信息,可以根據(jù)提示的信息具體找出程序中出錯(cuò)之處并改正之。應(yīng)當(dāng)注意的是有時(shí)提示的出錯(cuò)并不是真正出錯(cuò)的行,如果在提示出錯(cuò)的行上找不到錯(cuò)誤的話應(yīng)當(dāng)?shù)缴弦恍性僬摇S袝r(shí)提示出錯(cuò)的類型并非絕對準(zhǔn)確,由于出錯(cuò)的情況繁多各種錯(cuò)誤互有關(guān)聯(lián),要善于分析,找出真正的錯(cuò)誤,而不要只從字面意義上找出錯(cuò)信息,鉆牛角尖。
如果系統(tǒng)提示的出錯(cuò)信息多,應(yīng)當(dāng)從上到下一一改正。有時(shí)顯示出一大片出錯(cuò)信息往往使人感到問題嚴(yán)重,無從下手。其實(shí)可能只有一二個(gè)錯(cuò)誤。例如,對使用的變量未定義,編譯時(shí)就會(huì)對所有含該變量的語句發(fā)出出錯(cuò)信息;有的是少了“}”或多了“}”有的是書寫語句時(shí)忘記寫“;”或是全角的“;”了,只要加上一個(gè)變量定義,或填加“};”就所有錯(cuò)誤都消除了。養(yǎng)成寫程序習(xí)慣,如輸入“{”時(shí),中間先不寫代碼,后面緊接輸入”}”,就不會(huì)漏了或多了匹配符號。
(3)在改正語法錯(cuò)誤后,程序經(jīng)過連接就得到可執(zhí)行的目標(biāo)程序。運(yùn)行程序,輸入程序所需數(shù)據(jù),就可得到運(yùn)行結(jié)果。應(yīng)當(dāng)對運(yùn)行結(jié)果作分析??此欠穹弦?。有的人看到運(yùn)行結(jié)果就認(rèn)為沒問題了,就不作分析,這是不好的。
有時(shí),數(shù)據(jù)比較復(fù)雜,難以立即判斷結(jié)果是否正確??梢允孪瓤紤]好一批“試驗(yàn)數(shù)據(jù)”,測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
輸入這些數(shù)據(jù)可以得出容易判斷正確與否的結(jié)果。例如,if語句有兩個(gè)分支,有可能在流程經(jīng)過其中一個(gè)分支時(shí)結(jié)果正確,而經(jīng)過其它一個(gè)分支時(shí)結(jié)果不對等。必須考慮周全。
事實(shí)上,當(dāng)程序復(fù)雜時(shí)很難把所有的可能方案全部都試到,選擇典型的情況作試驗(yàn)即可。(4)運(yùn)行結(jié)果不對,大多屬于邏輯錯(cuò)誤。對這類錯(cuò)誤往往需要仔細(xì)檢查和分析才能發(fā)現(xiàn)??梢圆捎靡韵罗k法:
A 將程序與流程圖仔細(xì)對照,如果流程圖是正確的話,程序?qū)戝e(cuò)了,是很容易發(fā)現(xiàn)的。例如,復(fù)合語句忘記寫花括弧,只要一對照流程圖就能很快發(fā)現(xiàn)。
B 如果實(shí)在找不到錯(cuò)誤,可以采用“分段檢查”的方法。在程序不同的位置設(shè)幾個(gè)printf函數(shù)語句,輸出有關(guān)變量的值,往下檢查。直到找到在哪一段中數(shù)據(jù)不對為止。這時(shí)就已經(jīng)把錯(cuò)誤局限在這一段中了。不斷減小“查錯(cuò)區(qū)”,就可能發(fā)現(xiàn)錯(cuò)誤所在。
用printf函數(shù)語句測試未能發(fā)現(xiàn)所有問題,則可用系統(tǒng)提供的調(diào)試工具,跟蹤流程并給出相應(yīng)信息,使用更為方便。
總之,程序調(diào)試是一項(xiàng)細(xì)致、較為繁瑣的工作,需要下功夫,動(dòng)腦子,善于累積經(jīng)驗(yàn)。在程序調(diào)試過程中往往反映出一個(gè)人的學(xué)習(xí)態(tài)度,以前學(xué)習(xí)C語言時(shí)基礎(chǔ)不太好,但我也不灰心,多寫程序,“掌握調(diào)試的方法和技術(shù)”,要學(xué)會(huì)自己找問題,這樣慢慢自己就會(huì)寫出錯(cuò)誤較少的實(shí)用的程序。
常用快捷鍵
工欲善其事,必先利其器”,為了加速調(diào)試的過程,避免調(diào)試的時(shí)候鼠標(biāo)點(diǎn)來點(diǎn)去,這里簡要介紹一下調(diào)試時(shí)常用的快捷鍵,熟練掌握這些快捷鍵,可以大大加速調(diào)試工作的進(jìn)度。當(dāng)然,開始的時(shí)候不可能記住全部的快捷鍵,可以隨著自己調(diào)試需要用到的功能的增加,逐漸熟悉這些快捷鍵,盡量使用它們。首先應(yīng)該熟悉編譯、運(yùn)行、窗口切換相關(guān)的操作。然后再逐步熟悉Debug用到的檢查、觀察、單步跟蹤等操作。
VC6.0中常用的快捷鍵:
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
八、實(shí)驗(yàn)心得與體會(huì)
在這個(gè)學(xué)期里,在老師的帶領(lǐng)下進(jìn)行了《C語言程序設(shè)計(jì)》學(xué)習(xí)。在這之前,我們已經(jīng)對VB這門課程學(xué)習(xí)了一個(gè)學(xué)期,對程序設(shè)計(jì)有了一定的了解,但是也僅僅是停留在了解的范圍,對里面的好多東西還是很陌生,更多的在運(yùn)用起來的時(shí)候還是感到很棘手,畢竟,萬事開頭難。
上機(jī)進(jìn)行實(shí)習(xí)是學(xué)習(xí)程序語言設(shè)計(jì)必不可少的實(shí)踐環(huán)節(jié),特別是C語言靈活、簡潔,更需要通過編程的實(shí)踐來真正掌握它。對于程序設(shè)計(jì)語言的學(xué)習(xí)目的,可以概括為學(xué)習(xí)語法規(guī)定、掌握程序設(shè)計(jì)方法、提高程序開發(fā)能力,這些都必須通過充分的實(shí)際上機(jī)操作才能完成。學(xué)習(xí)C程序設(shè)計(jì)語言除了課堂講授以外,必須保證有不少于課堂講授學(xué)時(shí)的上機(jī)時(shí)間,所以,老師希望我們能有效地利用課余時(shí)間進(jìn)行上機(jī)練習(xí),盡快掌握用C語言開發(fā)程序的能力,為今后的繼續(xù)學(xué)習(xí)打下一個(gè)良好的基礎(chǔ)。
C語言是計(jì)算機(jī)程序設(shè)計(jì)的重要理論基礎(chǔ),在我們以后的學(xué)習(xí)和工作中都有著十分重要的地位。要學(xué)好這種語言,僅僅學(xué)習(xí)課本上的知識是不夠的,還要經(jīng)常自己動(dòng)手,有較強(qiáng)的實(shí)踐能力。只有多動(dòng)手,經(jīng)常編寫程序,才能發(fā)現(xiàn)我們學(xué)習(xí)上的漏洞和自己的不足,并在實(shí)踐中解決這些問題,不斷提高自己轉(zhuǎn)化知識的能力。
通過上機(jī)實(shí)習(xí),我也從中發(fā)現(xiàn)了自己不少的問題,這都是只看書上的程序而沒有自己親身上機(jī)編寫程序而無法得知的,假如我們只因看熟書上的程序就以為自己已經(jīng)掌握了C語言那就大錯(cuò)特錯(cuò)了。
我主要存在以下的這些缺點(diǎn):
1、學(xué)習(xí)耐心與細(xì)心不足,如scanf(“%d”,&n);中的“&”有時(shí)候會(huì)忘了。而在最后輸出時(shí)又錯(cuò)寫成printf(“%d”,&n);從而錯(cuò)誤得輸出了地址而不是我原來想要的答案。
2、編程思想不夠發(fā)散,看著題目有時(shí)想不出解答的方法,更不用說編寫程序來解題了。
3、基本功不夠,有些函數(shù)的表達(dá)不太精通,需要看書來核實(shí),以致耗時(shí)較多。
4、知識不夠廣,有些內(nèi)容沒有學(xué)好,不能要用到時(shí)及時(shí)反映出來,認(rèn)識程度不夠深刻。
5、有時(shí)候不夠精簡,有一點(diǎn)用處不大或者說沒有也可以的文字存在。
6、由于我的英語水平較差,調(diào)試程序時(shí),錯(cuò)誤的地方雖然電腦有顯示,但由于是英文,理解上還是存在一點(diǎn)問題。
我認(rèn)為上機(jī)編程的目的,不僅僅是驗(yàn)證教材和講課的內(nèi)容、檢查自己所編的程序是否正確,上機(jī)實(shí)驗(yàn)的目的可以概括為如下幾個(gè)方面:
1、加深對課堂講授內(nèi)容的理解
課堂上要講授許多關(guān)于C語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用C語言這個(gè)工具解決實(shí)際問題,又必須掌握它。通過多次上機(jī)練習(xí),對于語法知識有了感性的認(rèn)識,加深對它的理解,在理解的基礎(chǔ)上就會(huì)自然而然地掌握C語言的語法規(guī)定。對于一些內(nèi)容自己認(rèn)為在課堂上聽懂了,但上機(jī)實(shí)踐中會(huì)發(fā)現(xiàn)原來理解的偏差,這是由于大部分學(xué)生是初次接觸程序設(shè)計(jì),缺乏程序設(shè)計(jì)的實(shí)踐所致。
學(xué)習(xí)C語言不能停留在學(xué)習(xí)它的語法規(guī)則,而是利用學(xué)到的知識編寫C語言程序,解決實(shí)際問題。即把C語言作為工具,描述解決實(shí)際問題的步驟,由計(jì)算機(jī)幫助我們解題。只有通過上機(jī)才能檢驗(yàn)自己是否掌握c語言、自己編寫的程序是否能夠正確地解題。
通過上機(jī)實(shí)驗(yàn)來驗(yàn)證自己編制的程序是否正確,恐怕是大多數(shù)同學(xué)在完成老師作業(yè)時(shí)的心態(tài)。但是在程序設(shè)計(jì)領(lǐng)域里這是一定要克服的傳統(tǒng)的、錯(cuò)誤的想法。因?yàn)樵谶@種思想支配下,可能你會(huì)想辦法去“掩蓋”程序中的錯(cuò)誤,而不是盡可能多地發(fā)現(xiàn)程序中存在的問題。自
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
己編好程序上機(jī)調(diào)試運(yùn)行時(shí),可能有很多你想不到的情況發(fā)生,通過解決這些問題,可以逐步提高自己對C語言的理解和程序開發(fā)能力。
2、熟悉程序開發(fā)環(huán)境、學(xué)習(xí)計(jì)算機(jī)系統(tǒng)的操作方法
一個(gè)C語言程序從編輯、編譯、連接到運(yùn)行,都要在一定的外部操作環(huán)境下才能進(jìn)行。所謂“環(huán)境”就是所用的計(jì)算機(jī)系統(tǒng)硬件、軟件條件,只有學(xué)會(huì)使用這些環(huán)境,才能進(jìn)行程序開發(fā)工作。通過上機(jī)實(shí)驗(yàn),熟練地掌握C語言開發(fā)環(huán)境,為以后真正編寫計(jì)算機(jī)程序解決實(shí)際問題打下基礎(chǔ)。同時(shí),在今后遇到其它開發(fā)環(huán)境時(shí)就會(huì)觸類旁通,很快掌握新系統(tǒng)的使用。
3、學(xué)習(xí)上機(jī)調(diào)試程序
完成程序的編寫,決不意味著萬事大吉。你認(rèn)為萬無一失的程序,實(shí)際上機(jī)運(yùn)行時(shí)可能不斷出現(xiàn)麻煩。如編譯程序檢測出一大堆錯(cuò)誤。有時(shí)程序本身不存在語法錯(cuò)誤,也能夠順利運(yùn)行,但是運(yùn)行結(jié)果顯然是錯(cuò)誤的。開發(fā)環(huán)境所提供的編譯系統(tǒng)無法發(fā)現(xiàn)這種程序邏輯錯(cuò)誤,只能靠自己的上機(jī)經(jīng)驗(yàn)分析判斷錯(cuò)誤所在。程序的調(diào)試是一個(gè)技巧性很強(qiáng)的工作,對于初學(xué)者來說,盡快掌握程序調(diào)試方法是非常重要的。有時(shí)候一個(gè)消耗你幾個(gè)小時(shí)時(shí)間的小小錯(cuò)誤,調(diào)試高手一眼就看出錯(cuò)誤所在。
快臨近學(xué)期期末了,現(xiàn)在回想起來當(dāng)初剛開始學(xué)習(xí)的時(shí)候老是感覺力不從心。雖然認(rèn)真聽課了,但是并不能理解它。這種情況到了后來才有所改變。
之所以能有所改變,是因?yàn)楸救苏业搅藢W(xué)習(xí)C語言的一些方法。由于C語言對于剛接觸的學(xué)子,會(huì)感到很陌生。因?yàn)镃語言所要用到的思維邏輯與我們平時(shí)的思維邏輯有所不一樣。其顯得更抽象。所以學(xué)習(xí)C語言,一定要打好基礎(chǔ)。要把基礎(chǔ)理解透徹。需要用到的語句要牢記,這樣,在以后的運(yùn)用當(dāng)中,就能比較得心應(yīng)手了。
學(xué)習(xí)C語言的起步就是學(xué)習(xí)它的方法規(guī)則,如果把它學(xué)習(xí)得好在學(xué)習(xí)后面的時(shí)候就比較容易理。比如變量,首先要了解變量的定義方式(格式),其意義是什么(定義變量有什么用);其次就是要我要怎么去運(yùn)用它(我要用什么型式去應(yīng)用它)。在C語言的命令行中所有的語句都是有它自己的一定格式和形式出現(xiàn)在我們面前,所以在學(xué)習(xí)某種語句或命令時(shí)你首先要了解的就是它的規(guī)則是什么、有什么用、怎么實(shí)現(xiàn)等。這些都是語法基礎(chǔ),如果把它們都了解很好了,那么編起程序來就很得心應(yīng)手。比如說if語句和switch語句,這兩種條件語句都是用來執(zhí)行判斷功能的,那什么時(shí)侯用if什么時(shí)侯用switch,如果很好地了解它們的結(jié)構(gòu)和作用的話那么就能靈活運(yùn)用:若它的條件分支是多個(gè)而且條件的值是一個(gè)確定的值時(shí)就可以選用switch。反之,在大多數(shù)情況下就用if。
掌握了語言法規(guī)則,不一定就能編出程序來,其實(shí)學(xué)習(xí)編程就是要學(xué)習(xí)一種思想,一種思維方法,首先要確定一種算法,如從1加到100,判斷潤年等,我認(rèn)為這些算法都是一種思維方法。
畫流程圖就是在構(gòu)建編寫程序思路的過程,當(dāng)畫好一個(gè)流程圖時(shí)編程思想也就出來了,程序也差不多了,再結(jié)合掌握的語言的方法規(guī)則,在計(jì)算機(jī)里實(shí)現(xiàn)就可以了。任何程序只要有思維,有想法,那么實(shí)現(xiàn)程序時(shí)就不會(huì)覺得無從下手。而要學(xué)習(xí)這種思維方法就是多做題,多讀程序,學(xué)習(xí)別人好的思維方法,多想想一個(gè)程序還可不可以有另外一種方法來實(shí)現(xiàn)它。這樣久而久之,自然會(huì)形成一種自己的思維方法。因此我認(rèn)為不管學(xué)什么語言都是這樣。
另外,良好的編程習(xí)慣也是學(xué)好C語言的重要因素。例如編寫程序時(shí)用縮進(jìn)的方式、寫注釋、程序?qū)懙揭欢ǖ碾A段時(shí)要做一下測試等。這些工作可以幫我們在調(diào)試程序時(shí)有很大的幫助。程序代碼實(shí)現(xiàn)后,錯(cuò)誤是難免的,所以也要鍛煉自己的調(diào)試查錯(cuò)能力,而良好的編程習(xí)慣可以使我們在調(diào)試時(shí)減小工作量和提高調(diào)試效率,也有助于形成自己的編程風(fēng)格。
在學(xué)習(xí)的時(shí)候,我遇到過這么個(gè)情況。覺得C語言學(xué)起來很枯燥,很悶。后來才發(fā)現(xiàn)學(xué)習(xí)語言,是要有目的性。如果沒有目的,你會(huì)發(fā)現(xiàn)自己在學(xué)習(xí)的過程中會(huì)很枯燥,會(huì)漸漸失
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
去對C語言的學(xué)習(xí)興趣。所以我們要有一個(gè)遠(yuǎn)大而又容易實(shí)現(xiàn)的目的,我要用C語言來做什么?再把這個(gè)最終的目的分成部分,讓我們慢慢的一點(diǎn)一點(diǎn)的來完成它,這樣在學(xué)習(xí)C語言的過程中,我們就會(huì)始終陶醉在一個(gè)又一個(gè)成功的喜悅里,讓我們的學(xué)習(xí)越來越有興趣。有一天,我們會(huì)發(fā)現(xiàn):原來學(xué)習(xí)C語言真的是一件很有意思的事兒,而且學(xué)好C語言也不是很難么!
學(xué)習(xí)C語言只看書也是不夠的,我們要一邊看書,一邊上機(jī)做練習(xí),或者在你學(xué)習(xí)了C語言的基礎(chǔ)知識以后就可以找一些別人的程序來看,遇到不明白的函數(shù)可以再翻一下書,如果查書也理解不了,我們可以把他的程序輸入到計(jì)算機(jī)里,情況好的話能夠順利通過編譯,如果不能順利執(zhí)行,我們也同樣可以學(xué)習(xí)到一些C語言調(diào)試方面的知識。課堂上要講授許多關(guān)于c語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住。
然而要使用C語言這個(gè)工具解決實(shí)際問題,又必須掌握它。通過多次上機(jī)練習(xí),對于語法知識有了感性的認(rèn)識,加深對它的理解,在理解的基礎(chǔ)上就會(huì)自然而然地掌握C語言的語法規(guī)定。對于一些內(nèi)容自己認(rèn)為在課堂上聽懂了,但上機(jī)實(shí)踐中會(huì)發(fā)現(xiàn)原來理解的偏差,這是由于大部分學(xué)生是初次接觸程序設(shè)計(jì),缺乏程序設(shè)計(jì)的實(shí)踐所致。
學(xué)習(xí)C語言不能停留在學(xué)習(xí)它的語法規(guī)則,而是利用學(xué)到的知識編寫C語言程序,解決實(shí)際問題。即把C語言作為工具,描述解決實(shí)際問題的步驟,由計(jì)算機(jī)幫助我們解題。只有通過上機(jī)才能檢驗(yàn)自己是否掌握C語言、自己編寫的程序是否能夠正確地解題。通過上機(jī)實(shí)驗(yàn)來驗(yàn)證自己編制的程序是否正確,恐怕是大多數(shù)同學(xué)在完成老師作業(yè)時(shí)的心態(tài)。但是在程序設(shè)計(jì)領(lǐng)域里這是一定要克服的傳統(tǒng)的、錯(cuò)誤的想法。因?yàn)樵谶@種思想支配下,可能你會(huì)想辦法去“掩蓋”程序中的錯(cuò)誤,而不是盡可能多地發(fā)現(xiàn)程序中存在的問題。自己編好程序上機(jī)調(diào)試運(yùn)行時(shí),可能有很多你想不到的情況發(fā)生,通過解決這些問題,可以逐步提高自己對C語言的理解和程序開發(fā)能力。
總之一句話,在學(xué)習(xí)C語言中,一定要多動(dòng)手。不要老是鉆牛角尖,不斷的在那左思右想。用時(shí)候只要肯動(dòng)手,編譯錯(cuò)了再改。你會(huì)發(fā)現(xiàn)慢慢的就能夠找到答案了。而且也能從中學(xué)習(xí)到很多東西,常言道失敗是成功之母。只要不怕失敗,不斷的鉆研、嘗試,總會(huì)能夠把困難解決的。
在學(xué)習(xí)C語言的過程中會(huì)遇到許多困難與挫折。但通過自己的努力,最終能克服種種的困難。所得到的成就感是無法用言語去形容的。從中學(xué)到的堅(jiān)韌精神對于我今后的生活也有很大的影響。
C語言是一種抽象的語言,相對于我們平時(shí)用的語言,所以學(xué)習(xí)起來會(huì)用點(diǎn)吃力。但是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本要素是抽象,程序員是需要通過抽象來管理復(fù)雜性.面向?qū)ο蟪绦蛟O(shè)計(jì)的本質(zhì):這些抽象的對象可以被看作具體的實(shí)體,這些實(shí)體對用來告訴我們作什么的消息進(jìn)行響應(yīng).學(xué)習(xí)C語言可以讓我們更好的鍛煉自己的邏輯思維能力,還可以讓你掌握更好的計(jì)算機(jī)知識,在不斷學(xué)習(xí)的過程中讓自己真正的自信起來!學(xué)習(xí)C語言,對于以后的工作也是有所幫助的,它也可以結(jié)合其他的科目,來靈活運(yùn)用。例如單片機(jī)的運(yùn)用。用C語言去編輯單片機(jī)的主程序,會(huì)發(fā)現(xiàn)程序簡潔多了。而且發(fā)現(xiàn)C語言的實(shí)用性很強(qiáng)。并且,C語言和我們測繪專業(yè)有很緊密的聯(lián)系,我們可以自己進(jìn)行測繪程序的編寫,幫助我們進(jìn)行計(jì)算等等。
雖然測繪程序設(shè)計(jì)這門課程結(jié)束了,但在以后的學(xué)習(xí)過程中,我仍會(huì)不斷的鉆研、學(xué)習(xí),希望學(xué)得更多,能更好的在以后的工作中廣泛運(yùn)用。
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
九、附錄:程序設(shè)計(jì)作業(yè)清單
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
#include
double a,x,y,Y;printf(“Input a1,a2,a3,s,x1 and y1n”);scanf(“%d%d%d%f%lf%lf%fn”,&a1,&a2,&a3,&s,&x1,&y1);
a=(a1*3600+a2*60+a3)/(PI/(180*3600));
num.xz=xadd(s,a);y=yadd(s,a);num.xz1=add(x1,x);Y=add(y1,y);printf(“%f%fn”,x,y);printf(“X=%f,Y=%fn”,num.xz,Y);return 0;} double xadd(double sn,double an){ double xn;
xn=sn*cos(an);return xn;}
double yadd(double sn,double an){ double yn;yn=sn*sin(an);return yn;} double add(double xn,double yn){ double z;
z=xn+yn;
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
return z;}
#include
int a;
int b;
int c;}num;
int jf(int x,int y);int a1,a2,a3,b1,b2,b3,e,f;char angle;printf(“Input left angle or right anglen”);
scanf(“%c%d%d%d%d%d%dn”,&angle,&a1,&a2,&a3,&b1,&b2,&b3);printf(“Angle is:”);num.a=jf(b1,a1);num.b=jf(b2,a2);num.c=jf(b3,a3);
e=num.a*3600+num.b*60+num.c-180*3600;
f=num.a*3600+num.b*60+num.c+180*3600;switch(angle){
case'l':printf(“%dn”,e);break;
case'r':printf(“%dn”,f);break;
default:printf(“enter date error!n”);}
return 0;} int jf(int x,int y){ int z;z=x-y;return z;}
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
#include
double s;
double a;}num;
double pfh(float n,float m);
float jf(float n,float m);float X,Y,x,y,x1,y1;printf(“Input x,y,X,Yn”);scanf_s(“%f%f%f%f%fn”,&x,&y,&X,&Y);x1=jf(X,x);y1=jf(Y,y);num.s=sqrt(pfh(x1,y1));
num.a=tan(y1/x1);printf(“%f%f%f%fn”,num.a,num.s,x1,y1);return 0;} float jf(float n,float m){ float z;z=n-m;return z;} double pfh(float n,float m){ double z;z=n*n+m*m;return z;}
#include
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
{
double X;
double Y;}num;
double xx(float x11,float x21,float b1,float a1, float y21,float y11);
double yy(float y11,float y21,float b1,float a1, float x21,float x11);float x,x1,y1,x2,y2,a,b;double yy(float y11,float y21,float b1,float a1, float x21,float x11);int a1,a2,a3,b1,b2,b3;printf(“Input x1,y1,x2,y2,a1,a2,a3,b1,b2 and b3n”);scanf(“%f%f%f%f%d%d%d%d%d%dn”,&x1,&y1,&x2,&y2,&a1,&a2,&a3,&b1,&b2,&b3);a=(a1*3600+a2*60+a3)/(PI/(180*3600));b=(b1*3600+b2*60+b3)/(PI/(180*3600));num.X=(x1,x2,b,y2,y1);
num.Y=(y1,y2,b,a,x2,x1);
printf(“%f%fn”,num.X,num.Y);return 0;} double xx(float x11,float x21,float b1,float a1, float y21,float y11){ double X1;
X1=(x11*(1/tan(b1))+x21*(1/tan(a1))-(y21-y11))/((1/tan(a1))+(1/tan(b1)));return X1;} double yy(float y11,float y21,float b1,float a1, float x21,float x11){
double Y1;
Y1=(y11*(1/tan(b1))+y21*(1/tan(a1))-(x21-x11))/((1/tan(a1))+(1/tan(b1)));
return Y1;}
#include
float dh(float x1);
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
char daihao;printf(“Input daihao and Ln”);scanf(“%c%f”,&daihao,&num.L);num.n=dh(num.L);num.N=0.5+num.n/2;switch(daihao)
{ case'3':printf(“%lfn”,num.n);break;
case'6':printf(“%lfn”,num.N);break;default:printf(“enter date error!n”);} return 0;} float dh(float x1){ float x2;x2=(x1)/3;return x2;}
#include
struct date {
float H1;
float H2;
float H3;
float H4;}num;
float sum(float x1,float x2,float x3,float x4);
float gaocheng(float x1,float x2,float x3,float x4,float x5);float h,h1,h2,h3,h4,s1,s2,s3,s4,S,l;
printf(“Input h1,h2,h3,h4,s1,s2,s3 and s4n”);scanf(“%f%f%f%f%f%f%f%f%fn”,&h,&h1,&h2,&h3,&h4,&s1,&s2,&s3,&s4);
l=-sum(h1,h2,h3,h4);S=sum(s1,s2,s3,s4);num.H1=h;num.H2=gaocheng(h,h1,s2,S,l);num.H3=gaocheng(num.H2,h2,s3,S,l);
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
num.H4=gaocheng(num.H3,h3,s4,S,l);printf(“%f%f%f%fn”,num.H1,num.H2,num.H3,num.H4);return(0);} float sum(float x1,float x2,float x3,float x4){ float x5;x5=x1+x2+x3+x4;return x5;} float gaocheng(float x1,float x2,float x3,float x4,float x5){ float x6;x6=x1+x2+(x3/x4)*x5;return(x6);}
#include
double s;
double s1;
double s2;
}num;
double jf(double x11,double x21);double x1,y1,x2,y2,x3,y3,x4,y4;double a,b,c,d,e;double k,h;printf(“x1,y1,x2,y2,x3,y3,x4,y4n”);scanf(“%f%f%f%f%f%f%f%fn”,&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);a=sqrt(jf(x2,x1)*jf(x2,x1)+jf(y2,y1)*jf(y2,y1));b=sqrt(jf(x3,x2)*jf(x3,x2)+jf(y3,y2)*jf(y3,y2));c=sqrt(jf(x4,x3)*jf(x4,x3)+jf(y4,y3)*jf(y4,y3));d=sqrt(jf(x4,x1)*jf(x4,x1)+jf(y4,y1)*jf(y4,y1));e=sqrt(jf(x3,x1)*jf(x3,x1)+jf(y3,y1)*jf(y3,y1));k=0.5*(a+d+e);
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
h=0.5*(b+c+e);num.s1=sqrt(k*jf(k,a)*jf(k,d)*jf(k,e));num.s2=sqrt(h*jf(h,b)*jf(h,c)*jf(h,e));num.s=num.s1+num.s2;printf(“%llfn”,num.s);return(0);} double jf(double x11,double x21){ double x31;x31=x11-x21;return(x31);}
#include
/* a1,a2為瞄準(zhǔn)第1,2點(diǎn)的讀數(shù) b1,b2為瞄準(zhǔn)第2,1點(diǎn)的讀數(shù) */ d1=a2-a1;d2=b2-b1;if(abs(d2-d1)>40/3600)printf(“overrun!”);else ds=(d1+d2)/2;printf(“ds=%4.2fn”,ds);return 0;}
#include
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
else d1=(a1+b1)/2;d2=(a2+b2)/2;d3=(a3+b3)/2;d4=(x1+x2)/2;printf(“d1=%fnd2=%fnd3=%fnd4=%fn”,d1,d2,d3,d4);return 0;}
#include
#include
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
#include
/* a1,a2為瞄準(zhǔn)第1,2點(diǎn)的讀數(shù) b1,b2為瞄準(zhǔn)第2,1點(diǎn)的讀數(shù) */ scanf(“%lf%lf%lf%lf”,&a1,&a2,&b1,&b2);d1=a2-a1;d2=b2-b1;if(abs(d2-d1)>40/3600)printf(“overrun!”);else ds=(d1+d2)/2;printf(“ds=%4.2fn”,ds);return 0;}
#include
#include
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
main(){ double h1,h2,h3,q1,q2,q3,br,hz,fr,dz,dq;/* h1,h2,h3為后尺黑面上、中、下絲讀數(shù) q1,q2,q3為前尺黑面上、中、下絲的讀數(shù) br為后尺紅面中絲讀數(shù) fr為前尺紅面中絲讀數(shù) dz為視距差之和 dq為上一測站視距差之和 hz為高差中數(shù) */
scanf(“%lf%lf%lf%lf%lf%lf%lf%lf”,&h1,&h2,&h3,&q1,&q2,&q3,&br,&fr,&dq);dz=dq+(h3-h1)-(q3-q1);if(abs((h3-h1)-(q3-q1))>5 & abs((h2+4787)-q2)>3 & abs((br+4687)-fr)>3 & abs((h2-br)-(q2-fr))>5 & dz>10)printf(“overrun!”);else hz=((h2-br)+(q2-fr))/2;printf(“hz=%4.3fn”,hz);return 0;}
#include
/*前房交會(huì)測量_201420050138.c*/ #include
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
else xp=(x1*tan(a1*PI/180)+x2*tan(a2*PI/180)+(y2-y1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1*PI/180)+tan(a2*PI/180));yp=(y1*tan(a1*PI/180)+y2*tan(a2*PI/180)+(x2-x1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1*PI/180)+tan(a2*PI/180));printf(“p=%7.3fn,%f7.3n”,xp,yp);
return 0;}
/*方位角的計(jì)算_201420050138-11.c*/ #include
a23=a12+b-180;else
a23=a12-b+180;printf(“a23=%fn”,a23);return 0;}
/*閉合水準(zhǔn)路線閉合差計(jì)算_201420050138-12.c*/ #include
scanf(“%d”,c);
i=i+c;d=j-i;
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
w=abs(d-i);printf(“閉合差=%fn”,w);return 0;}
/*坐標(biāo)正算_201420050138-13.c*/ #include
x2=x1+d*cos(a*PI/180);y2=y1+d*sin(a*PI/180);printf(”第二個(gè)點(diǎn)的坐標(biāo)是:(%f,%f)/n“,x2,y2);}
/*坐標(biāo)反算_201420050138-14.c*/ #include
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));printf(”a=%fn,d=%fn“,a,d);}
/*多邊形面積計(jì)算_201420050138-15.c*/ #include
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
{ double a,h,n,r,s,S;scanf(”%f%f“,&r,&n);a=2*r*sin(PI/n);h=r*cos(PI/n);s=a*h/2;S=n*s;printf(”多邊形的面積=%fn“,S);return 0;}
/*帶號計(jì)算_201420050138-16*/ #include
n=(l+3)/6;else
n=l/3;printf(”該店位于第 %fn 帶“,n);}
/*GPS測量中兩相鄰點(diǎn)間的距離要求*/ #include
printf(”平均距離為:5-2,等級:E“);if(m>=2 & n<=10)
printf(”平均距離為:10-5,等級:D“);if(m>=5 & n<=10)
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
}
printf(”平均距離為:15-10,等級:C“);if(m>=15 & n<=10)printf(”平均距離為:70,等級:B“);if(m>=100 & n<=10)printf(”平均距離為:300,等級:A“);return 0;/*各等級水準(zhǔn)測量精度*/ #include
printf(”M1<=+0.45 或 M1>=-0.45,MW<=+1.0 或 MW>=-1.0“);if(char dj='B')
printf(”M1<=+1.O 或 M1>=-1.0,MW<=+2.0 或 MW>=-2.0“);
if(char dj='C')
printf(”M1<=+3.0 或 M1>=-3.0,MW<=+6.0 或 MW>=-6.0“);
if(char dj='D')
printf(”M1<=+5.0 或 M1>=-5.0,MW<=+10.0 或 MW>=-10.0“);return 0;}
/*地形圖的基本等高距_201420050138-19.c*/ #include
printf(”基本等高距:平坦地--0.5 丘陵地--0.5 山地--1 高山地--1“);if(blc==1/1000)printf(”基本等高距:平坦地--0.5 丘陵地--1 山地--2 高山地--2“);
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
if(blc==1/2000)
printf(”基本等高距:平坦地--1 丘陵地--2 山地--2 高山地--2“);
if(blc==1/5000)
printf(”基本等高距:平坦地--5 丘陵地--5 山地--5 高山地--5“);}
/*每天努力一點(diǎn)與每天頹廢一點(diǎn)的區(qū)別_201420050138-20.c*/ #include
int i;
float k=0.01,effort=1,depra=1;
for(i=1;i<366;i++)
{
effort*=1.01;
depra*=0.99;
}
printf(”effort=%5.2fndepra=%5.2fn“,effort,depra);}
#include
prime=1;
k=(int)sqrt(j);
for(i=2;i<=k;i++){
if(j%i==0){
prime=0;
break;
}
}
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
if(prime){
k2=j;
if(k2-k1==2){
printf(”%ld %ld is prime pairsn“,k1,k2);
}
k1=k2;
} } }
int xj(int x,int y){ int ds;ds=y-x;return(ds);}
#include
/* a1,a2為瞄準(zhǔn)第1,2點(diǎn)的讀數(shù) b1,b2為瞄準(zhǔn)第2,1點(diǎn)的讀數(shù) */ scanf(”%d%d%d%d“,&a1,&a2,&d1,&d2);d1=a2-a1;d2=b2-b1;if(int(abs(xj(d2,d1)))>40/3600)printf(”overrun!n“);else ds=xj(d2,d1)/2;printf(”ds=%4.2fn“,ds);return 0;}
int xj(int x,int y){ int z;z=y-x;return(z);}
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
#include
scanf(”%d%d%d%d%d%d“,&a1,&a2,&a3,&b1,&b2,&b3,&x1,&x2);if(int(abs(a1+a2+a3+x1-360))>18/3600 && int(abs(b1+b2+b3+x2-360))>18/3600)printf(”overrun!n“);else d1=xj(a1,b1)/2;d2=xj(a2,b2)/2;d3=xj(a3,b3)/2;d4=xj(x1,x2)/2;printf(”d1=%fnd2=%fnd3=%fnd4=%fn“,d1,d2,d3,d4);return 0;}
#include
double u;u=x*tan(y*PI/180)+z-w;return(u);}
main(){ double HAB,HB=1283,S=235,i=2,v=1.5,a=45,HA=1234;HAB=h(S,a,i,v);HB=HA+h(S,a,i,v);printf(”HAB=%fnHA=%fn“,HAB,HB);return 0;}
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
double xj(double x,double y){ double z;z=y-x;return(z);}
#include
/* a1,a2為瞄準(zhǔn)第1,2點(diǎn)的讀數(shù) b1,b2為瞄準(zhǔn)第2,1點(diǎn)的讀數(shù) */ scanf(”%lf%lf%lf%lf“,&a1,&a2,&b1,&b2);d1=xj(a2,a1);d2=xj(b2,b1);if(abs(xj(d2,d1))>40/3600)printf(”overrun!“);else ds=(d1+d2)/2;printf(”ds=%4.2fn“,ds);return 0;}
double xj(double x,double y){ double z;z=y+x;return(z);}
#include
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
printf(”overrun!“);else d1=xj(a1,b1)/2;d2=xj(a2,b2)/2;d3=xj(a3,b3)/2;d4=xj(x1,x2)/2;printf(”d1=%fnd2=%fnd3=%fnd4=%fn“,d1,d2,d3,d4);return 0;}
double xj(double x,double y){ double z;z=y+x;return(z);}
/*前房交會(huì)測量_201420050138.c*/ #include
double m(double x1, double x2, double x3, double x4,double x5,double x6,double x7,double x8,double x9,double x10){ double l;
l=(x1*tan(x2*PI/180)+x3*tan(x4*PI/180)+(x5-x6)*tan(x7*PI/180)*tan(x8*PI/180))/(tan(x9*PI/180)+tan(x10*PI/180));return(l);}main(){ double x1,x2,xp,y1,y2,yp,a1,a2;scanf(”%f%f%f%f%f%f“,&x1,&y1,&x2,&y2,&a1,&a2);if((a1+a2)>150||(a1+a2)<30)printf(”overrun!“);
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
else xp=m(x1,a1,x2,a2,y2,y1,a1,a2,a1,a2);yp=m(y1,a1,y2,a2,x2,x1,a1,a2,a1,a2);printf(”p=%7.3fn,%f7.3n“,xp,yp);
return 0;}
/*坐標(biāo)正算_201420050138-13.c*/ #include
x2=w(x1,d,a);y2=w(y2,d,a);printf(”第二個(gè)點(diǎn)的坐標(biāo)是:(%fn,%fn)“,x2,y2);}
/*坐標(biāo)正算_201420050138-13.c*/ #include
double w;
w=x+y*cos(z*PI/180);
return(w);}
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
double s(double x,double y,double z){
double w;
w=x+y*sin(z*PI/180);
return(w);} void main(){ double x1,x2,y1,y2,d,a;scanf(”%f%f%f%f“,&x1,&y2,&d,&a);
x2=z(x1,d,a);y2=s(y1,d,a);printf(”第二個(gè)點(diǎn)的坐標(biāo)是:(%fn,%fn)“,x2,y2);}
/*帶號計(jì)算_201420050138-16*/ double z(double l){ double p;
p=(l+3)/6;return(p);}
double t(double l){ double q;
q=l/3;return(q);}
#include
n=z(l);else
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
n=t(l);printf(”該點(diǎn)位于第 %fn 帶“,n);}
/*帶號計(jì)算_201420050138-16*/ double z(double l){ double p;
p=(l+3)/6;return(p);} double t(double l){ double q;
q=l/3;return(q);}
#include
n=z(l);else
n=t(l);printf(”該點(diǎn)位于第 %fn 帶“,n);}
/*坐標(biāo)反算_201420050138-14.c*/ #include
測繪程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
double z;
z=y-x;
return(z);}
void main(){ double x1,x2,y1,y2,d,a;scanf(”%f%f%f%f“,&x1,&y1,&x2,&y2);a=atan(xj(y2,y1)/xj(x2,x1));
d=sqrt(xj(x2,x1)*xj(x2,x1)+xj(y2,y1)*xj(y2,y1));printf(”a=%fn,d=%fn“,a,d);}
/*方位角的計(jì)算_201420050138-11.c*/ double x(double x,double y){ double z;z=x+y-180;return(z);}
double j(double x,double y){ double z;z=x-y+180;return(z);}
#include
a23=x(a12,b);else
第二篇:《計(jì)算機(jī)程序設(shè)計(jì)》實(shí)驗(yàn)報(bào)告
《計(jì)算機(jī) 程序設(shè)計(jì)》 實(shí)驗(yàn)報(bào)告
姓名:
學(xué)號 :
實(shí)驗(yàn)日期:
****年**月**日
實(shí)驗(yàn)名稱
控制結(jié)構(gòu)與基本算法 一、實(shí)驗(yàn)?zāi)康囊?1.熟練掌握 if 語句和 switch 語句 2.循環(huán)控制結(jié)構(gòu)的使用 二、實(shí)驗(yàn)內(nèi)容 1.實(shí)驗(yàn)教材 P86 第四題。
2.實(shí)驗(yàn)教材 P87 第八題。
3.實(shí)驗(yàn)教材 P108 第一題。
4.實(shí)驗(yàn)教材 108 頁的第四題。
5.選做題:參考實(shí)驗(yàn)教材 P104 第六題,做課件上題目:
科大有 4 位同學(xué)中的一位做了好事不留名,表揚(yáng)信來了之后,校長問這四位是誰做的好事.A 說:不是我.B 說:是 C.C 說:是 D.D 說:他(C)胡說
? 文件名格式:學(xué)號-姓名-實(shí)驗(yàn) 5.doc
? 序號 1-23:tmf77@mail.ustc.edu.cn ? 序號 24-45:yunmeng@mail.ustc.edu.cn ? 序號 46-67:cys1024@mail.ustc.edu.cn
三、上機(jī)程序(算法設(shè)計(jì)思想)
四、運(yùn)行結(jié)果
五、調(diào)試中的問題及解決方法
第三篇:分支程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告[范文模版]
實(shí)驗(yàn)二 二 分支程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康? 1、學(xué)習(xí)分支程序得設(shè)計(jì)方法 2、熟悉在 PC 機(jī)上建立、匯編、連接、調(diào)試與運(yùn)行匯編語言程序得過程 二、實(shí)驗(yàn)環(huán)境:
硬件環(huán)境
IBM/ PC 及其兼容機(jī) 軟件環(huán)境
統(tǒng) 操作系統(tǒng) DO S
編輯程序 EDIT 或其她編輯程序
序程編匯? 匯編程序 M ASM、E XE
連接程序LIN K、EXE 序 調(diào)試程序 DEB UG、EXE 三、實(shí)驗(yàn)內(nèi)容:
:、在屏幕上顯示如下信息:—-— —- ------—-—---— — ------—-Panda
2— —- --— — ---—-—-———-----— —-—--Cat
?
3-——--------------———- -——-Ra bbit
4— — -— —-— — -— —--— — --- —- --——------Pig—— ------—--—--—-—---— —- --—EXI T
(Pl(wèi)ea se
ch oo se 1, 2, 3,4or 5)—- ----入 若輸入 1, 顯示“I like e
p panda ”后程序結(jié)束;若輸入 2, 顯示“I
lik e cat” ”后程序結(jié)束;若輸入 3,顯示“I
lik e rab bit t入 ”后程序結(jié)束;若輸入 4, 顯示“I do n’t l like pig ”后程序結(jié)束;若輸入 5,程序直接結(jié)束;若輸入其它字符,顯示“You
pr ess an error key!“ 后程序結(jié)束.1)流程圖
2)源程序 DATA SEGMENT
INFOR1 DB 0AH,0DH,”1-—-—----—-—Panda:$"
INFOR2 DB 0AH,0DH,”2—-—-——--———Cat:$”
INFOR3 DB 0AH,0DH,"3---—---——-—Rabbit;$”
INFOR4 DB 0AH,0DH,"4---—------—pig:$“
INFOR5 DB 0AH,0DH,”5--—--——--—-EXIT:$"
INFOR6 DB 0AH,0DH,”(please choose 1,2,3,4 or 5——-):$“
INFOR7 DB 0AH,0DH,”I like Panda:$“
INFOR8 DB 0AH,0DH,"I like Cat:$”
INFOR9 DB 0AH,0DH,"I like Rabbit;$"
INFOR10 DB 0AH,0DH,”I like pig:$"
INFOR11 DB 0AH,0DH,”you press an error key?。骸纭?DATA ENDS
;數(shù)據(jù)段結(jié)束 CODE SEGMENT
;代碼段開始 Y Y Y Y N N N N N 開始 選項(xiàng) 用戶輸入 Al=1 Al=2 Al=3 Al=4 Al=5 You press an error key 結(jié)束 I like panda I like cat I like rabbit I like do not
ASSUME
CS:CODE,DS:DATA
;段尋址 START: MOV AX,DATA
;將 dat(yī)a 得數(shù)據(jù)存入ax 中
MOV DS,AX
;為 ds 賦值
MOV DX,OFFSET
INFOR1
;返回變量 INFOR1 段內(nèi)偏移地址【運(yùn)行后在屏幕上顯示字符 1--——--—--—-Panda:】
MOV AH,09H
INT 21H
;執(zhí)行九號功能調(diào)用
MOV DX,OFFSET
INFOR2
MOV AH,09H
INT 21H
MOV DX,OFFSET
INFOR3
MOV AH,09H
INT 21H
MOV DX,OFFSET
INFOR4
MOV AH,09H
INT 21H
MOV DX,OFFSET
INFOR5
;返回變量 INFOR5 段內(nèi)偏移地址【運(yùn)行后在屏幕上顯示字符 5—-—--——----EXIT:】
MOV AH,09H
INT 21H
MOV DX,OFFSET
INFOR6
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,“1’
JE
Panda
CMP AL,'2’
JE
Cat
CMP AL,”3’
JE
Rabbit
CMP AL,’4'
JE Pig
CMP AL,’5’
JE PEND
JMP Other Panda:
MOV DX,OFFSET INFOR7
MOV AH,09H
INT 21H
JMP PEND Cat:
8ROFNI TESFFO,XD VOM? H90,HA VOM? H12 TNI? JMP PEND Rabbit:
MOV DX,OFFSET INFOR9
MOV AH,09H
H12 TNI?
JMP PEND Pig:
MOV DX,OFFSET INFOR10
H90,HA VOM? INT 21H
JMP PEND Other:
MOV DX,OFFSET INFOR11
MOV AH,09H
H12 TNI?
JMP PEND PEND:
MOV AH,4CH
INT 21H CODE
ENDS
END START
2、、從鍵盤輸入一字符,判斷該字符就是小寫字母、大寫字母、數(shù)字或其它字符.若輸入為小寫字母, 顯示“Y You
I nput a Lo wer case Letter!”;若輸入為大寫字母, 顯示“You Inp ut a Uppercase L et ter!”;若輸入為數(shù)字,顯示“Yo ou Input a Digit!“;
若輸入為其它字符,顯示“You Inpu t
Ot her Let tt er!”。、編程指導(dǎo) 字 數(shù)字 0? ? 9得ASC II 碼為30H? ?39H;大寫字母得 ASCII 碼為 4 1H? ? 5AH,小寫字母得AS CI I碼為61H? ?7AH。本題目將字符分為小寫字母、大寫字母、數(shù)字及其它字符,得 根據(jù)鍵入字符得 AS CII 碼值判斷其所屬類型, 并顯示相應(yīng)得信息 息.字符串顯示使用功能號為 09H 得 得 DOS 功能調(diào)用, 接收鍵盤輸入得單個(gè)字符使為 用功能號為 01H 得 得 DOS 功能調(diào)用。
2、流程圖及程序框圖 1)流程圖 2)源程序 DATA SEGMENT
INFOR1 DB 0AH,0DH,”Please Press Any Key to input a letter:$"
INFOR2 DB 0AH,0DH,”You input a lowercase letter!$”
INFOR3 DB 0AH,0DH,“You input a Uppercase letter!
$”
INFOR4 DB 0AH,0DH,"You input a Digit!
$”
INFOR5 DB 0AH,0DH,“You input Other letter!$” DATA ENDS CODE SEGMENT
ASSUME
CS:CODE,DS:DATA START:
MOV AX,DATA
; 顯示信息“Please Press Any Key to input a letter”得指令序列以及接收從鍵盤輸入一個(gè)字符得指令序列
MOV DS,AX
MOV
DX,OFFSET
INFOR1
H90,HA
VOM?
INT
21H
MOV AH,01H
INT 21H Y Y Y Y Y Y 顯示提示信息“Please Press Any Key to input a letter” 及功能號為 1 得接收鍵盤輸入單個(gè)字符得指令序列 開始 結(jié)束(AL)<’0’(AL)<=’9’(AL)<’A’(AL)<=’Z’(AL)<’a’(AL)<=’z’ 輸入得就是小寫字母,顯示信息 輸入得就是大寫字母,顯示信息 輸入得就是數(shù)字,顯示有關(guān)信息 輸入得就是其它字符,顯示信息
CMP
AL,’0’
JB
OTHER
CMP
AL,’9’
JBE
DIGIT
CMP
AL,’A“
REHTO(shè)
BJ? ”Z',LA
PMC? REPPU
EBJ? CMP
AL,’a’
JB
OTHER
“z',LA
PMC? JBE
LOWER
JMP
PEND LOWER:
;顯示“You Input a Lowercase Letter!”得指令序列
MOV DX,OFFSET INFOR2
H90,HA VOM? INT 21H
出跳序程使應(yīng)后支分個(gè)一完行執(zhí)意注;
DNEP PMJ?UPPER:
; 顯示“You Input a Uppercase Letter”得指令序列 MOV DX,OFFSET INFOR3
H90,HA VOM? H12 TNI? DNEP PMJ?DIGIT:
; 顯示“You Input a Digit!”得指令序列 MOV DX,OFFSET INFOR4
H90,HA VOM? INT 21H
JMP PEND OTHER:
; 顯示“You Input Other Letter!”得指令序列
5ROFNI TESFFO,XD VOM? MOV AH,09H
H12 TNI?PEND:
MOV AH,4CH
H12 TNI?CODE
ENDS
END START
四、心得 通過這次上機(jī)實(shí)驗(yàn), 我掌握了分支程序額設(shè)計(jì)方法, 宏定義及宏調(diào)用得基本方法,了解了小寫字母與大寫字母得ASCII 碼表示及其轉(zhuǎn)換方法,了解了數(shù)字及其她得 字符得 AS CII 碼表示方法, 進(jìn)一步掌握了調(diào)試工具得 使用方法。
第四篇:C#程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)報(bào)告書寫要求
實(shí)驗(yàn)報(bào)告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點(diǎn)需打印的,標(biāo)題采用四號黑體,正文采用小四號宋體,單倍行距。紙張一律采用A4的紙張。
實(shí)驗(yàn)報(bào)告書寫說明
實(shí)驗(yàn)報(bào)告中實(shí)驗(yàn)?zāi)康暮鸵?、?shí)驗(yàn)儀器和設(shè)備、實(shí)驗(yàn)內(nèi)容與過程、實(shí)驗(yàn)結(jié)果與分析這四項(xiàng)內(nèi)容為必需項(xiàng)。教師可根據(jù)學(xué)科特點(diǎn)和實(shí)驗(yàn)具體要求增加項(xiàng)目。
填寫注意事項(xiàng)
(1)細(xì)致觀察,及時(shí)、準(zhǔn)確、如實(shí)記錄。(2)準(zhǔn)確說明,層次清晰。
(3)盡量采用專用術(shù)語來說明事物。
(4)外文、符號、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號。(5)應(yīng)獨(dú)立完成實(shí)驗(yàn)報(bào)告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。
實(shí)驗(yàn)報(bào)告批改說明
實(shí)驗(yàn)報(bào)告的批改要及時(shí)、認(rèn)真、仔細(xì),一律用紅色筆批改。實(shí)驗(yàn)報(bào)告的批改成績采用五級記分制或百分制,按《金陵科技學(xué)院課堂教學(xué)實(shí)施細(xì)則》中作業(yè)批閱成績評定要求執(zhí)行。
實(shí)驗(yàn)報(bào)告裝訂要求
實(shí)驗(yàn)批改完畢后,任課老師將每門課程的每個(gè)實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報(bào)告以自然班為單位、按學(xué)號升序排列,裝訂成冊,并附上一份該門課程的實(shí)驗(yàn)大綱。
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)項(xiàng)目名稱: C#基礎(chǔ)編程 實(shí)驗(yàn)學(xué)時(shí): 6 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 1318 實(shí)驗(yàn)日期: 10月5日-10月19日 實(shí)驗(yàn)成績: 批改教師: 批改時(shí)間:
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)1 C#基礎(chǔ)編程
一、實(shí)驗(yàn)?zāi)康?/p>
1、熟悉Visual Studio.NET開發(fā)環(huán)境。
2、掌握C#應(yīng)用程序的基本操作過程。
3、掌握C#的數(shù)據(jù)類型,運(yùn)算符以及表達(dá)式的使用。
4、掌握分支和循環(huán)語句的使用方法。
5、掌握一維數(shù)組,二維數(shù)組及數(shù)組型數(shù)組的使用。
二、實(shí)驗(yàn)要求
(1)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄(2)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。
三、實(shí)驗(yàn)設(shè)備、環(huán)境
安裝有Visual Studio.NET軟件。
四、實(shí)驗(yàn)步驟
1、分析題意。
2、根據(jù)題目要求,新建項(xiàng)目。
3、編寫并輸入相關(guān)的程序代碼。
5、運(yùn)行與調(diào)試項(xiàng)目。
6、保存項(xiàng)目。
五、實(shí)驗(yàn)內(nèi)容
1、編寫一個(gè)簡單的控制臺應(yīng)用程序,打印一行文字(如你的姓名)。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace one.first {
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(“我叫王蕾!”);
}
} }
2、編寫一個(gè)簡單的Windows應(yīng)用程序,在窗體Load事件中書寫代碼,標(biāo)簽中顯示你的姓名。
using System;using System.Collections.Generic;using System.ComponentModel;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace one.second {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Text = “Windows 程序”;
Label lblShow = new Label();
lblShow.Location = new Point(20, 30);
lblShow.AutoSize = true;
lblShow.Text = “王蕾!”;
this.Controls.Add(lblShow);
}
} }
3、編寫一個(gè)一個(gè)程序,用來判斷輸入的是大寫字母,小寫字母,數(shù)字還是其他的字符。
using System;using System.Collections.Generic;using System.Text;
namespace one.third {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“請輸入一個(gè)字符:”);
char c = Convert.ToChar(Console.ReadLine());
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
Console.WriteLine(“這是一個(gè)字母”);
if(char.IsDigit(c))
Console.WriteLine(“這是一個(gè)數(shù)字”);
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
}
} }
4、分別用while,do-while,for循環(huán)求1到100的和。
using System;using System.Collections.Generic;using System.Text;
namespace one.forth.one {
class Program
{
static void Main(string[] args)
{
int i = 1, sum = 0;
while(i <= 100)
{
sum = sum + i;
i++;
}
Console.WriteLine(“1到100的自然數(shù)之和為:” + sum);
}
} } using System;using System.Collections.Generic;using System.Text;
namespace one.forth.two {
class Program
{
static void Main(string[] args)
{
int i = 1, sum = 0;
do
{
sum = sum + i;
i++;
}
while(i <= 100);
Console.WriteLine(“1到100的自然數(shù)的和為:” + sum);
}
}
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
} using System;using System.Collections.Generic;using System.Text;
namespace one.forth.three {
class Program
{
static void Main(string[] args)
{
int i , sum = 0;
for(i = 1;i <= 100;i++)
{
sum = sum + i;
}
Console.WriteLine(“1到100的自然數(shù)的和為:” + sum);
}
} }
5、定義一個(gè)一維數(shù)組,用隨機(jī)數(shù)為此賦值,用foreach循環(huán)輸出其中的內(nèi)容。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace first.five {
class Program
{
static void Main(string[] args)
{
int[] a = {0,1,2,3,4};
foreach(int i in a)
{
Console.WriteLine(a[i]);
}
}
} }
6、實(shí)現(xiàn)二維數(shù)組的輸入和輸出。
using System;using System.Collections.Generic;using System.Linq;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
using System.Text;
namespace first.six {
class Program
{
static void Main(string[] args)
{
int[,] a = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
{
for(int i = 0;i < 2;i++)
{
for(int j = 0;j < 3;j++)
{ Console.WriteLine(a[i, j]);}
}
}
}
} }
7、實(shí)現(xiàn)數(shù)組型數(shù)組的輸入和輸出。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace first.seven {
class Program
{
static void Main(string[] args)
{
int[][] a = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 } };
for(int i = 0;i < a.Length;i++)
{
for(int j = 0;j < a[i].Length;j++)
{
Console.WriteLine(a[i][j]);
}
}
}
} }
六、實(shí)驗(yàn)體會(huì)(遇到問題及解決辦法,編程后的心得體會(huì))
剛開始編程的時(shí)候覺得無從下手,盡管我們已經(jīng)學(xué)了好幾種高級編程語言,但每個(gè)都
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
有其獨(dú)特的地方,稍不留神就會(huì)混淆。
通過這次實(shí)驗(yàn),我體會(huì)到課后復(fù)習(xí)鞏固的重要性。在編程的時(shí)候,很多內(nèi)容都不記得,需要去翻書。不得不說,實(shí)驗(yàn)是鞏固課程的好方法!本次實(shí)驗(yàn),我熟悉Visual Studio.NET開發(fā)環(huán)境;掌握了C#應(yīng)用程序的基本操作過程;掌握了C#的數(shù)據(jù)類型,運(yùn)算符以及表達(dá)式的使用;掌握了分支和循環(huán)語句的使用方法以及一維數(shù)組,二維數(shù)組及數(shù)組型數(shù)組的使用。
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)項(xiàng)目名稱: 類與對象 實(shí)驗(yàn)學(xué)時(shí): 6 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 1318 實(shí)驗(yàn)日期: 10月26日-11月9日 實(shí)驗(yàn)成績: 批改教師: 批改時(shí)間:
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)2 類與對象
一、實(shí)驗(yàn)?zāi)康?、要?/p>
(1)掌握類的定義和使用;
(2)掌握類的數(shù)據(jù)成員,屬性的定義和使用;
(3)掌握方法的定義,調(diào)用和重載以及方法參數(shù)的傳遞;(4)掌握構(gòu)造函數(shù)的定義和使用。
二、實(shí)驗(yàn)要求
(1)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄;(2)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。
三、實(shí)驗(yàn)設(shè)備、環(huán)境
安裝有Visual Studio.NET軟件。
四、實(shí)驗(yàn)步驟
1、分析題意;
2、根據(jù)題目要求,新建項(xiàng)目;
3、編寫并輸入相關(guān)的程序代碼;
5、運(yùn)行與調(diào)試項(xiàng)目;
6、保存項(xiàng)目。
五、實(shí)驗(yàn)內(nèi)容
1、定義一個(gè)方法,實(shí)現(xiàn)兩個(gè)數(shù)的交換(分別把參數(shù)按值傳遞和按引用傳遞)。
using System;using System.Collections.Generic;using System.Text;
namespace second.one {
class Program
{
static void Main(string[] args)
{
Swaper s = new Swaper();
Console.WriteLine(“輸入x的值:”);
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“輸入y的值:”);
int b=Convert.ToInt32(Console.ReadLine());
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
Console.WriteLine(s.Swap(a, b));
Console.WriteLine(s.Swap(ref a,ref b));
}
class Swaper
{
public string Swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
return 后:x={0},y={1}“,x,y);
}
public string Swap(ref int x, ref int y)
{
int temp;
temp = x;
x = y;
y = temp;
return string.Format(”按引用傳參交換之后:x={0},y={1}“, x, y);
}
}
} }
2、定義一個(gè)方法,實(shí)現(xiàn)數(shù)組的排序。using System;using System.Collections.Generic;using System.Text;
namespace second.two {
class Program
{
string.Format(”
按
值
傳
參
交
換
之
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
public class sort
{
public void change(int[] a)
{
Console.WriteLine(“排序前,數(shù)組順序?yàn)椋骸?;
show(a);
int i, j, m;
for(i = 0;i < 10;i++)
{
m = a[i];
j = ib;
}
}
static void Main(string[] args)
{
sum s = new sum();
int a = 10;
int b = 3;
int m, n;
s.ab(out m, out n, a, b);
Console.WriteLine(“{0}+{1}={2};{0}-{1}={3}”,a,b,m,n);
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
}
} }
5、用構(gòu)造函數(shù)重載,實(shí)現(xiàn)矩形的面積,圓的面積,梯形的面積;
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace secong.five {
class Program
{
public class square
{
public double area;
public square(){ }
public square(double a)
{
area = a * a * 3.14;
}
public square(double a, double b)
{
area = a * b;
}
public square(double a, double b, double h)
{
area =(a + b)/ 2 * h;
}
}
static void Main(string[] args)
{
double a, b, h,area;
a = 2;b = 5;h = 3;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
square s = new square(a,b);
Console.WriteLine(“求矩形面積,長為a={0},寬為b={1},面積area={2}”,a,b,s.area);
square i = new square(a);
Console.WriteLine(“求圓形面積,半徑a={0},面積area={1}”, a, i.area);
square j = new square(a, b, h);
Console.WriteLine(“求梯形面積,上底為a={0},下底為b={1},高為h={2}面積area={3}”, a, b,h, j.area);
}
} }
6、設(shè)計(jì)一個(gè)windows應(yīng)用程序,在該程序中定義一個(gè)學(xué)生類和班級類,以處理每個(gè)學(xué)生的學(xué)號,姓名,語文,數(shù)學(xué)和英語成績,要求:
1)能查詢每個(gè)學(xué)生的總成績。2)能顯示全班前三名的名單。
3)能顯示單科成績最高分和不及格的學(xué)生名單。4)能統(tǒng)計(jì)全班學(xué)生的平均成績。
5)能顯示各科成績不同分?jǐn)?shù)段的學(xué)生人數(shù)的百分比。
Student類: using System;using System.Collections.Generic;using System.Text;namespace Test2_6 {
public class Student
{
public string stuNo;
public string name;
public double chinese;
public double math;
public double english;
public double sumScore
{
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
get { return chinese + math + english;}
}
} } StudentList類: using System;using System.Collections.Generic;using System.Text;namespace Test2_6 {
public class StudentList:Student
{
int snums;
public Student[] stu=new Student[50];
public StudentList()
{
snums = 0;
}
public void addstu(Student s)
{
stu[snums] = s;
snums++;
}
public int searchstu(string name)
{
int i;
for(i = 0;i < snums;i++)
{
if(stu[i].name == name)break;
}
if(i == snums)return-1;
else return i;
}
//給所有成績排序,用后面實(shí)現(xiàn)前三名的排名
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
public void ProThree()
{
for(int i = 0;i < snums;i++)
{
int k = i;
for(int j = i + 1;j < snums;j++)
if(stu[j].sumScore > stu[k].sumScore)k = j;
if(k!= i)
{
Student temp;
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp;
}
}
}
//顯示單科成績的最高分
public int HighScore(int k)
{
int p = 0;
if(k == 0)
{
for(int i = 1;i < snums;i++)
if(stu[i].math > stu[p].math)p = i;
}
else if(k == 1)
{
for(int i = 1;i < snums;i++)
if(stu[i].chinese > stu[p].chinese)p = i;
}
else
{
for(int i = 1;i < snums;i++)
if(stu[i].chinese > stu[p].chinese)p = i;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
}
return p;
}
//顯示不及格名單
public string BuhgName(int k)
{
string name=“ ”;
if(k == 0)
{
for(int i = 0;i < snums;i++)
if(stu[i].math < 60)name +=stu[i].name+“n”;
}
else if(k == 1)
{
for(int i = 0;i < snums;i++)
if(stu[i].chinese < 60)name += stu[i].name + “n”;
}
else
{
for(int i = 0;i < snums;i++)
if(stu[i].english < 60)name += stu[i].name + “n”;
}
return name;
}
public string getHL()
{
string Maxer = “ ”, Loser = “ ”;
Maxer += “單科數(shù)學(xué)最高:” + stu[HighScore(0)].name + “n”;
Maxer += “ 單科語文最高:” + stu[HighScore(1)].name + “n”;
Maxer += “ 單科英語最高:” + stu[HighScore(2)].name + “n”;
Loser += “單科數(shù)學(xué)掛科名單:” +BuhgName(0)+ “n”;
Loser += “單科語文掛科名單:” + BuhgName(1)+ “n”;
Loser += “單科英語掛科名單:” + BuhgName(2)+ “n”;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
return Maxer + “n” + Loser;
}
//全班的平均成績
public string SumScore()
{
double sum = 0;
double avg=0;
for(int i = 0;i < snums;i++)
{
sum = sum + stu[i].sumScore;
}
avg = sum / snums;
return “班級總分平均分:”+avg;
}
//各科成績不同分?jǐn)?shù)段的學(xué)生百分比
//英語成績各分?jǐn)?shù)段百分比
public string PerC()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].chinese > 90)&&(stu[i].chinese <= 100))
{
sumC1++;
}
else if((80 <= stu[i].chinese)&&(stu[i].chinese < 90))
{
sumC2++;
}
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
else if((70<=stu[i].chinese)&&(stu[i].chinese < 80))
{
sumC3++;
}
else if((60<=stu[i].chinese)&&(stu[i].chinese < 70))
{
sumC4++;
}
else
{sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return “語文成績百分比:”+“n”+“90~100:”+per1+“ 80~90:”+per2+“ 80~70:”+per3+“ 70~60:”+per4+“ 60以下的:”+per5;
}
//數(shù)學(xué)成績各分?jǐn)?shù)段百分比
public string PerM()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].math> 90)&&(stu[i].math <= 100))
{
sumC1++;
}
else if((80 <= stu[i].math)&&(stu[i].math < 90))
{
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
sumC2++;
}
else if((70 <= stu[i].math)&&(stu[i].math < 80))
{
sumC3++;
}
else if((60 <= stu[i].math)&&(stu[i].math < 70))
{
sumC4++;
}
else
{ sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return string.Format(“數(shù)學(xué)成績百分比:” + “n” + “90~100:” + per1 + “ 80~90:” + per2 + “ 80~70:” + per3 + “ 70~60:” + per4 + “ 60以下的:” + per5);
}
//英語成績各分?jǐn)?shù)段百分比
public string PerE()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].english > 90)&&(stu[i].english <= 100))
{
sumC1++;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
}
else if((80 <= stu[i].english)&&(stu[i].english < 90))
{
sumC2++;
}
else if((70 <= stu[i].english)&&(stu[i].english < 80))
{
sumC3++;
}
else if((60 <= stu[i].english)&&(stu[i].english < 70))
{
sumC4++;
}
else
{ sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return string.Format(“數(shù)學(xué)成績百分比:” + “n” + “90~100:” + per1 + “ 80~90:” + per2 + “ 80~70:” + per3 + “ 70~60:” + per4 + “ 60以下的:” + per5);
}
} } From窗體代碼: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
using System.Windows.Forms;namespace Test2_6 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public StudentList sl = new StudentList();
private void btnAdd_Click(object sender, EventArgs e)
{
Student s = new Student();
s.stuNo = txtStuNo.Text;
s.name = txtName.Text;
s.chinese = Convert.ToDouble(txtChina.Text);
s.math = Convert.ToDouble(txtMath.Text);
s.english = Convert.ToDouble(txtEng.Text);
sl.addstu(s);
MessageBox.Show(“添加成功”);
}
private void btnSearch_Click(object sender, EventArgs e)
{
int pos = sl.searchstu(this.textBox1.Text);
if(pos!=-1)
{
label7.Text = this.textBox1.Text + “的總成績:sl.stu[pos].sumScore;
}
else { MessageBox.Show(”不存在這個(gè)人!“);}
}
private void btnFinish_Click(object sender, EventArgs e)
{
label7.Text = ”前3名:“+”n“;
” + 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
for(int i = 0;i < 3;i++)
{
sl.ProThree();
label7.Text+= sl.stu[i].name+“n”;
}
label7.Text += sl.getHL()+“n”;
label7.Text += Convert.ToString(sl.SumScore())+“n”;
label7.Text += sl.PerC()+“n”;
label7.Text += sl.PerM()+“n”;
label7.Text += sl.PerE()+“n”;
}
} }
六、實(shí)驗(yàn)體會(huì)(遇到問題及解決辦法,編程后的心得體會(huì))
通過本次實(shí)驗(yàn),我掌握了類的定義與使用;掌握了類的數(shù)據(jù)成員,屬性的定義和使用;掌握了方法的定義,調(diào)用和重載以及方法參數(shù)的傳遞以及構(gòu)造函數(shù)的定義和使用。值得注意的是:本次實(shí)驗(yàn)中return的使用以及所在的位置,類型轉(zhuǎn)換時(shí)也經(jīng)常用到
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)項(xiàng)目名稱: 繼承與多態(tài) 實(shí)驗(yàn)學(xué)時(shí): 6 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 1318 實(shí)驗(yàn)日期: 11月16日-11月30日 實(shí)驗(yàn)成績: 批改教師: 批改時(shí)間:
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)3 繼承與多態(tài)
一、實(shí)驗(yàn)?zāi)康摹⒁?/p>
(1)掌握類的繼承性與多態(tài)性;
(2)掌握虛方法的定義以及如何使用虛方法實(shí)現(xiàn)多態(tài);(3)掌握抽象類的定義以及如何使用抽象方法實(shí)現(xiàn)多態(tài);
二、實(shí)驗(yàn)要求
(1)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄;(2)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。
三、實(shí)驗(yàn)設(shè)備、環(huán)境
安裝有Visual Studio.NET軟件。
四、實(shí)驗(yàn)步驟
1、分析題意;
2、根據(jù)題目要求,新建項(xiàng)目;
3、編寫并輸入相關(guān)的程序代碼;
5、運(yùn)行與調(diào)試項(xiàng)目;
6、保存項(xiàng)目。
五、實(shí)驗(yàn)內(nèi)容
1、設(shè)計(jì)一個(gè)Windows應(yīng)用程序,在該程序中首先構(gòu)造一個(gè)學(xué)生基本類,再分別構(gòu)造小學(xué)生、中學(xué)生、大學(xué)生派生類,當(dāng)輸入相關(guān)數(shù)據(jù),單擊不用的按鈕時(shí),將分別創(chuàng)建不同的學(xué)生類對象,并輸出當(dāng)前學(xué)生的總?cè)藬?shù),該學(xué)生的姓名,學(xué)生類型,平均成績。
Student類: using System;using System.Collections.Generic;using System.Text;namespace Test3_1 {
public abstract class Student
{
protected string name;
protected int age;
public static int number;
public Student(string name, int age)
{
this.name = name;
this.age = age;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
number++;
}
public string Name
{
get { return name;}
}
public abstract double Average();
}
public class Pupil : Student
{
protected double chinese;
protected double math;
public Pupil(string name, int age, double chinese, double math)
: base(name, age)
{
this.chinese = chinese;
this.math = math;
}
public override double Average()
{
return(chinese + math)/ 2;
}
}
public class Middle : Student
{
protected double chinese;
protected double math;
protected double english;
public Middle(string name, int age, double chinese, double math, double english)
: base(name, age)
{
this.chinese = chinese;
this.math = math;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
this.english = english;
}
public override double Average()
{
return(chinese + math + english)/ 3;
}
}
public class College : Student
{
protected double required;
protected double elective;
public College(string name, int age, double required, double elective)
: base(name, age)
{
this.required = required;
this.elective = elective;
}
public override double Average()
{
return(required + elective)/ 2;
}
} } Form窗體內(nèi)的代碼:
using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test3_1 {
public partial class Form1 : Form
{
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
public Form1()
{
InitializeComponent();
}
private void btnSmall_Click(object sender, EventArgs e)
{
Pupil),Convert.ToDouble(txtMath.Text));
lblShow.Text += “總?cè)藬?shù):” +Convert.ToString(Student.number)+ “,” + “姓名:” + p.Name + “,” + “小學(xué)生” + “,” + “平均成績?yōu)椋骸?+ p.Average()+“n”;
}
private void btnMiddle_Click(object sender, EventArgs e)
{
Middle Convert.ToInt32(txtAge.Text),m
=
new
Middle(txtName.Text,Convert.ToDouble(txtChinese.Text), p
=
new Pupil(txtName.Text,Convert.ToInt32(txtAge.Text),Convert.ToDouble(txtChinese.TextConvert.ToDouble(txtMath.Text),Convert.ToDouble(TxtEnglish.Text));
lblShow.Text += “總?cè)藬?shù):” + Convert.ToString(Student.number)+ “,” + “姓名:” + m.Name + “,” + “中學(xué)生” + “,” + “平均成績?yōu)椋骸?+ m.Average()+ “n”;
}
private void btnBig_Click(object sender, EventArgs e)
{
College Convert.ToInt32(txtAge.Text), Convert.ToDouble(txtMath.Text));
lblShow.Text += “總?cè)藬?shù):” + Convert.ToString(Student.number)+ “,” + “姓名:” + c.Name + “,” + “大學(xué)生” + “,” + “平均成績?yōu)椋骸?+ c.Average()+ “n”;
}
}
c
=
new
College(txtName.Text,Convert.ToDouble(txtChinese.Text),金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
}
2、設(shè)計(jì)一個(gè)Windows應(yīng)用程序,在該程序中定義平面圖形抽象類和派生類圓,矩形和三角形。
Figure類代碼: using System;using System.Collections.Generic;using System.Text;namespace Test3_2 {
public abstract class Figure
{
public abstract double Area();
}
public class Circle:Figure
{
double radius;
public Circle(double r)
{
radius = r;
}
public override double Area()
{
return radius * radius * 3.14;
}
}
public class JUxing:Figure
{
double chang;
double kuan;
public JUxing(double c, double k)
{
this.chang = c;
this.kuan = k;
}
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
public override double Area()
{
return chang * kuan;
}
}
public class San:Figure
{
double bian;
double heigth;
public San(double b, double h)
{
this.bian = b;
this.heigth = h;
}
public override double Area()
{
return bian * heigth / 2;
}
} } Form窗體代碼: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test3_2 {
public partial class Form1 : Form
{
public Form1()
{
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
InitializeComponent();
}
private void btnCircle_Click(object sender, EventArgs e)
{
Circle c=new Circle(Convert.ToInt32(TxtChang.Text));
lblShow.Text = “圓的面積為:” + c.Area();
}
private void btnJu_Click(object sender, EventArgs e)
{
JUxing
j
=
new JUxing(Convert.ToInt32(TxtChang.Text),Convert.ToInt32(TxtHigh.Text));
lblShow.Text = “矩形的面積為:” + j.Area();
}
private void btnSan_Click(object sender, EventArgs e)
{
San
s
=
new
San(Convert.ToInt32(TxtChang.Text), Convert.ToInt32(TxtHigh.Text));
lblShow.Text = “三角形的面積為:” + s.Area();
}
} }
3、定義一個(gè)Person類,包含姓名字段和一個(gè)方法,早上8:30學(xué)生開始上課,教師開始講課。分別用new關(guān)鍵字,虛方法,抽象類實(shí)現(xiàn)多態(tài)性。
New關(guān)鍵字: using System;using System.Collections.Generic;using System.Text;
namespace third.three {
class Program
{
static void Main(string[] args)
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
{
Student s=new Student(“學(xué)生”);
Teacher t=new Teacher(“教師”);
Console.WriteLine(s.name+s.work());
Console.WriteLine(t.name+t.work());
Console.ReadLine();
}
}
public class Person
{
public string name;
public interface method
{ string work();}
}
public class Student:Person
{
public Student(string name)
{ this.name = name;}
public string work()
{ return “早上8:30開始上課”;}
}
public class Teacher:Person
{
public Teacher(string name)
{ this.name = name;}
public string work()
{ return “開始講課”;}
} } 虛方法: using System;using System.Collections.Generic;using System.Text;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
namespace third.three.two {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“張三”,“學(xué)生”);
PersonWork(s);
Teacher t=new Teacher(“李斯”,“教師”);
PersonWork(t);
}
private static void PersonWork(Person Person)
{ Console.WriteLine(Person.Work());}
}
public class Person
{
public string name;
public Person(string name)
{ this.name = name;}
public virtual string Work()
{ return string.Format(“Person{0}:早上8:30開始”,name);}
}
public class Student : Person
{
private string type;
public Student(string name, string type)
: base(name)
{ this.type = type;}
public override string Work()
{
return string.Format(“Person{0}:早上8:30開始上課”, name);
}
}
public class Teacher : Person
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
{
private string type;
public Teacher(string name, string type)
: base(name)
{ this.type = type;}
public override string Work()
{
return string.Format(“Person{0}:開始講課”, name);
}
} }
抽象類: using System;using System.Collections.Generic;using System.Text;
namespace third.three.three {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“張三”, “學(xué)生”);
PersonWork(s);
Teacher t = new Teacher(“李斯”, “教師”);
PersonWork(t);
}
private static void PersonWork(Person person)
{
Console.WriteLine(person.Work());
}
}
public abstract class Person
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
{
public string name;
public Person(string name)
{ this.name = name;}
public abstract string Work();
}
public class Student : Person
{
private string type;
public Student(string name, string type)
: base(name)
{
this.type = type;
}
public override string Work()
{
return string.Format(“Person{0}:早上8:30開始上課”, name);
}
}
public class Teacher : Person
{
private string type;
public Teacher(string name, string type)
: base(name)
{
this.type = type;
}
public override string Work()
{
return string.Format(“Person{0}:開始講課”, name);
}
} }
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
六、實(shí)驗(yàn)體會(huì)(遇到問題及解決辦法,編程后的心得體會(huì))
通過本次實(shí)驗(yàn),我理解了類的繼承性與多態(tài)性;掌握了虛方法的定義以及如何用虛方法來實(shí)現(xiàn)多態(tài);掌握了抽象類的定義以及如何用抽象方法來實(shí)現(xiàn)多態(tài)。這次實(shí)驗(yàn)與前兩次不同,采用Windows應(yīng)用程序,既涉及到代碼段也涉及到界面的設(shè)計(jì)。所以,勉強(qiáng)通過實(shí)驗(yàn)。
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)項(xiàng)目名稱: 接口、文件和流 實(shí)驗(yàn)學(xué)時(shí): 6 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): A205 實(shí)驗(yàn)日期: 12月7日-12月21日 實(shí)驗(yàn)成績: 批改教師: 批改時(shí)間:
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)4 接口、文件和流
一、實(shí)驗(yàn)?zāi)康?/p>
(1)掌握接口的定義及使用方法;
(2)掌握流,序列化和反序列化的概念和使用方法;(3)掌握流文件的讀寫操作類及其使用方法;
(4)掌握OpenFileDialog,SaveFileDialog等控件的使用。
二、實(shí)驗(yàn)要求
(1)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄;(2)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。
三、實(shí)驗(yàn)設(shè)備、環(huán)境
安裝有Visual Studio.NET軟件。
四、實(shí)驗(yàn)步驟
1、分析題意;
2、根據(jù)題目要求,新建項(xiàng)目;
3、編寫并輸入相關(guān)的程序代碼;
5、運(yùn)行與調(diào)試項(xiàng)目;
6、保存項(xiàng)目。
五、實(shí)驗(yàn)內(nèi)容
1、定義一個(gè)Person類,包含姓名字段和一個(gè)方法,早上8:30學(xué)生開始上課,教師開始講課。用接口來實(shí)現(xiàn)。
using System;using System.Collections.Generic;using System.Text;namespace Test4_1 {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“張三”,“學(xué)生”);
Console.WriteLine(s.Work());
Teacher t = new Teacher(“李四”,“老師”);
Console.WriteLine(t.Work());
}
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
public abstract class Person
{
public string name;
public Person(string name)
{
this.name = name;
}
}
interface IPerson
{
string type { get;}
string Work();
}
public class Student :Person, IPerson
{
public string type
{
get { return string.Format(“老師”);}
}
public Student(string name, string type)
: base(name)
{
this.name=name;
}
public string Work()
{
return string.Format(“Person{0}:早上8:30開始上課”, name);
}
}
public class Teacher :Person, IPerson
{
public string type
{
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
get { return string.Format(“學(xué)生”);}
}
public Teacher(string name, string type)
: base(name)
{
this.name = name;
}
public string Work()
{
return string.Format(“Person{0}:早上8:30開始講課”, name);
}
}
} }
2、聲明一個(gè)接口Iplayer,包含5個(gè)接口方法:播放,停止,暫停,上一首和下一首。在該程序中定義一個(gè)MP3播放器類和一個(gè)AVI播放器類,以實(shí)現(xiàn)該接口。
MP3類(包含Iplayer接口,AVI類): using System;using System.Collections.Generic;using System.Text;namespace Test4_2 {
interface IPlayer
{
string Play();
string Stop();
string Pause();
string Pre();
string Next();
}
public class MP3:IPlayer
{
public string Play()
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
{
return “正在播放MP3歌曲!”;
}
public string Stop()
{
return “停止播放MP3歌曲!”;
}
public string Pause()
{
return “暫停播放MP3歌曲!”;
}
public string Pre()
{
return “播放上一首MP3歌曲!”;
}
public string Next()
{
return “播放下一首MP3歌曲!”;
}
}
public class AVI : IPlayer
{
public string Play()
{
return “正在播放AVI歌曲!”;
}
public string Stop()
{
return “停止播放AVI歌曲!”;
}
public string Pause()
{
return “暫停播放AVI歌曲!”;
}
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
public string Pre()
{
return “播放上一首AVI歌曲!”;
}
public string Next()
{
return “播放下一首AVI歌曲!”;
}
} } Form窗體里代碼: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test4_2 {
public partial class Form1 : Form
{
IPlayer iplayer;
MP3 mp3;
AVI avi;
public Form1()
{
InitializeComponent();
}
private void btnMp3_Click(object sender, EventArgs e)
{
mp3 = new MP3();
iplayer =(IPlayer)mp3;
}
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
private void btnPlay_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Play();
}
private void btnUp_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Pre();
}
private void btnStop_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Stop();
}
private void btnPause_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Pause();
}
private void btnNext_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Next();
}
private void btnAvi_Click(object sender, EventArgs e)
{
avi = new AVI();
iplayer =(IPlayer)avi;
}
} }
3、實(shí)現(xiàn)對文本文件的讀寫操作,用文件操作控件打開和保存文件。
using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;namespace Test4_3
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSave_Click(object sender, EventArgs e)
{
saveFileDialog1.ShowDialog();
StreamWriter
sw = StreamWriter(saveFileDialog1.FileName,true);
sw.WriteLine(DateTime.Now.ToString());
sw.WriteLine(txtSource.Text);
sw.Close();
}
private void btnShow_Click(object sender, EventArgs e)
{
StreamReader sr = StreamReader(saveFileDialog1.FileName);
txtShow.Text = sr.ReadToEnd();
sr.Close();
}
} }
4、實(shí)現(xiàn)對二進(jìn)制文件的讀寫操作。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;
new
new
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
namespace Test4_4 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSave_Click(object sender, EventArgs e)
{
FileStream
fs
= FileStream(@“d:Datastudent.dat”,FileMode.Append,FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(Int32.Parse(txtStuNo.Text));
bw.Write(TxtName.Text);
bool isMale;
if(rdoMan.Checked)
isMale = true;
else
isMale = false;
bw.Write(isMale);
fs.Close();
bw.Close();
}
private void btnShow_Click(object sender, EventArgs e)
{
lstShow.Items.Clear();
lstShow.Items.Add(“學(xué)號t姓名t性別”);
FileStream
fs
= FileStream(@“d:Datastudent.dat”,FileMode.Open,FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
fs.Position = 0;
while(fs.Position!= fs.Length)
{
new
new
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
int s_no = br.ReadInt32();
string name = br.ReadString();
string sex = “";
if(br.ReadBoolean())
sex = ”男“;
else
sex = ”女“;
string
result String.Format(”{0}t{1}t{2}“,s_no,name,sex);
lstShow.Items.Add(result);
}
br.Close();
fs.Close();
}
} }
5、實(shí)現(xiàn)對象序列化和反序化。
Student類: using System;using System.Collections.Generic;using System.Text;namespace Test4_5 {
[Serializable]
public class Student
{
public int sno;
public string name;
public bool sex;
public Student(int s_no, string name, bool isMale)
{
this.sno = s_no;
this.name = name;
this.sex = isMale;
=
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
}
} } StudentList類: using System;using System.Collections.Generic;using System.Text;namespace Test4_5 {
[Serializable]
public class StudentList
{
private Student[] list = new Student[100];
public Student this[int index]
{
get
{
if(index < 0 || index >= 100)
return list[0];
else
return list[index];
}
set
{
if(!(index < 0 || index >=100))
list[index] = value;
}
}
} } Form下的代碼: using System;using System.Collections.Generic;using System.ComponentModel;
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Runtime.Serialization.Formatters.Binary;namespace Test4_5 {
public partial class Test9_32 : Form
{
private StudentList list = new StudentList();
private int i = 0;
public Test9_32()
{
InitializeComponent();
}
private void Test9_32_Load(object sender, EventArgs e)
{
}
private void btnSave_Click(object sender, EventArgs e)
{
string file = @”d:datastudent.dat";
Stream
stream
= FileStream(file,FileMode.OpenOrCreate,FileAccess.Write);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(stream,list);
stream.Close();
}
private void btnAdd_Click(object sender, EventArgs e)
{
int sno = Int32.Parse(txtStuNo.Text);
bool isMale;
if(rdoMan.Checked)
isMale = true;
new
第五篇:C程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
浙江理工大學(xué)信息學(xué)院
C程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱: 學(xué)時(shí)安排:
實(shí)驗(yàn)類別:
實(shí)驗(yàn)要求:1人1組
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、實(shí)驗(yàn)?zāi)康?/p>
二、實(shí)驗(yàn)設(shè)備介紹
軟件需求: Visual C++ 6.0或CFree3.5以上版本
硬件需求: 對于硬件方面的要求,建議配置是Pentium III 450以上的CPU處理器,64MB以上的內(nèi)存,200MB的自由硬盤空間、CD-ROM驅(qū)動(dòng)器、能支持24位真彩色的顯示卡、彩色顯示器、打印機(jī)。
三、實(shí)驗(yàn)內(nèi)容
四、程序清單
五、運(yùn)行結(jié)果
六、實(shí)驗(yàn)心得