第一篇:測繪程序設計實驗報告
測繪程序設計(C版)
實習報告
學號:201420050138
姓名: 李陽靖
班級:1420501Z
專業: 測繪工程
課程名稱:測繪程序設計(C及Matlab)指導老師:肖根如
2015年12月
測繪程序設計實驗報告
目錄
前言1
一、實驗目的1
二、實驗環境2
三、Turbo C 3.0與VC++6.0的熟悉與操作2
四、實驗內容梗概3
五、實驗具體內容4 實驗一算法4 實驗二數據類型、運算符和表達式5 實驗三控制語句6 實驗四函數9 實驗五數組11 實驗六結構體與共用體12
六、常見錯誤及分析14
七、程序調試15
八、實驗心得與體會17
九、附錄:實習程序設計清單21
測繪程序設計實驗報告
前言
現代科學飛速發展,世界也不斷的變化,人類的生活隨著科技的發展也發生著驚天動地的變化。作為新時代的大學生,我們應該不斷努力學習科學文化知識,以適應社會的發展要求,以現代化的科學知識為祖國做貢獻。而C語言作為一種計算機語言,無疑是我們將來工作不可缺少的一門技能,所以我們應該認真學好C語言。但只是課本上的知識是不夠的,我們應該將從課本上學到的理論知識應用到實踐中,通過不斷的實踐,在實踐中發現錯誤解決錯誤,并不斷創新,最后能熟練的運用所學的知識,充分掌握這種工具。C語言知識博大精深,有必要對C語言的專著進行研究學習,多閱讀別人的程序代碼、多動手實踐操作與設計,這樣便對程序算法精簡改進提供了可能。想學的更深更透徹的話就必須進一步掌握運用C進行程序設計的能力;進一步理解和運用面向過程程序設計的思想和方法;初步掌握開發一個小型實用系統的基本方法;學會調試一個較長程序的基本方法;學會利用互聯網查找相關的知識并學習;學海之路何其寬廣,有必要讓我們孜孜不倦的求索下去。
一、實驗目的
C語言程序設計實習是在學習《C語言程序設計》理論知識的基礎上進行的實踐教學環節,其目的是培養我們具有初步的C語言程序設計、編程、調試和排除C語言程序語法、邏輯錯誤的能力。
全面熟悉、掌握C語言基本知識,掌握C程序設計中的順序、分支、循環三種結構及數組、函數和C語言基本圖形編程等方法,把編程和實際結合起來,增強對不同的問題運用和靈活選擇合適的數據結構以及算法描述的本領,熟悉編制和調試程序的技巧,掌握分析結果的若干有效方法,進一步提高上機動手能力,培養使用計算機解決實際問題的能力,養成提供文檔資料的習慣和規范編程的思想,為以后在專業課程中應用計算機系統解決計算、分析、實驗和設計等學習環節打下較扎實的基礎。
在實習過程中,我們要認真復習基本概念,獨立編寫程序,并上機調試運行,培養自己發現程序中的錯誤、改正錯誤以使程序能正確運行的能力。經驗豐富的人,當編譯時出現“出錯信息”時,能很快地判斷出錯誤所在,并改正之。而缺乏經驗的人即使在系統給出明確出錯提示信息下也往往找不出錯誤而求救于別人。對于我們來說,不僅要了解和熟悉有關理論和方法,還要求自己動手實現,要求會編寫程序并上機調試通過。因此調試程序本身是程序設計課程的一個重要內容和基本要求,應給予充分的重視。調試程序的經驗固然可以借鑒他人的現成經驗,但更重要的是通過自己的直接實踐來積累,而且有些經驗是只能“意會”難以“言傳”。
調試程序的能力,是學完《C語言程序設計》之后,我們應當掌握的一項基本功。因此,千萬不要在程序通過后就認為完成任務了,而應當在已通過的程序基礎上作一些改動(例如修改一些參數、增加程序一些功能、改變輸入數據的方法等,甚至于“自設障礙”,即把正確的程序改為有錯的,如用scanf函數輸入變量時,漏寫“&”符號,使數組下標越界,使整數溢出等),觀察和分析所出現的情況,并認真、及時總結。這樣的學習是靈活主動的學習而不是呆板被動的學習,才會有真正的收獲。
因此,我們的實習目的可綜合的概括為:
1.熟悉TC20、TC30和VC++6.0的運行環境。
2.了解在TC20、TC30和VC++6.0上如何編輯、編譯、連接和運行一個C程序。3.熟練使用各種C語言的數據結構及類型、運算符與表達式。4.熟練掌握格式輸入與格式輸出函數的使用。
測繪程序設計實驗報告
5.通過運行簡單的C程序,初步了解C源程序的特點,初步掌握查錯和排錯的技能。
二、實驗環境
PC微機
Windows 操作系統
Turbo C 3.0與VC++6.0程序集成環境
三、Turbo C 3.0與VC++6.0的熟悉與操作
(一)Turbo C 3.0 1.在安裝Turbo C編譯系統基礎上,則在DOS命令狀態下鍵入命令tc。進入Turbo C集成環境后,首先在屏幕上顯示Turbo C主菜單窗口。在該窗口,有8個菜單條目。每一個菜單的意義如下:
File 處理文件(包括裝入、存盤、選擇、建立、換名寫盤),目錄操作(包括列表、改變工作目錄),退出系統及調用DOS。
Edit 建立、編輯源文件。
Run 控制運行程序。如果程序已經編譯連接好,且Debug/Source Debugging以及Option/Compiler/Code generation/OBJ Debug Information開關置為On,則可以用此菜單初始化調試階段。
Compile 編譯并生成目標程序與可執行文件。
Project 允許說明程序中包含哪些文件的管理條目。
Options 可以選擇集成環境任選項(如存儲模式、編譯時的任選項、診斷及連接任選項)及定義宏;也可以記錄Include Output及Library文件目錄,保存編譯任選項和從配置文件加載任選。
Debug 檢查、改變變量的值,查找函數,程序運行時查看調用棧。選擇程序編譯時是否在執行行代碼中插入調試信息。
Break/Watch 增加、刪除、編輯監視表達式,及設置、清除、執行至斷點。
2.特別要指出的是,除了Edit項外,每一個菜單又有對應的子菜單。而選擇Edit項目后,只是進入編輯器。
為了從主菜單中選擇所需要的功能,可以用以下兩種方式之一:
(1)按F10鍵后,可以看到屏幕上部主菜單中有反白顯示,此時,利用左、右光標移動鍵(←與→)選擇需要的菜單,然后按回車(Enter)鍵。
(2)直接按Alt+主菜單條目中的首字母(分別為F,E,R,C,P,O,D,B),此時就會出現相應的子菜單。例如,按Alt+F表示選擇文件子菜單(File)。當出現子菜單時,其中某個條目是高亮度的,此時可以利用上、下光標移動鍵(↑與↓)來移動該高亮度線,從而選擇所需要的功能。在菜單調用時,按Esc鍵后將直接返回到活動窗口。
(二)VC++6.0 1.安裝和啟動
運行Visual Studio軟件中的setup.exe程序,選擇安裝Visual C++ 6.0,然后按照安裝程序的指導完成安裝過程。2.創建工程項目
用Visual C++6.0系統建立C語言應用程序,首先要創建一個工程項目(project),用來存放
測繪程序設計實驗報告
C程序的所有信息。創建一個工程項目的操作步驟如下:
進入Visual C++6.0環境后,選擇主菜單“文件(File)”中的“新建(New)”選項,在彈出的對話框中單擊上方的選項卡“工程(Projects)”,選擇“Win32 Console Application”工程類型,在“工程(Project name)”一欄中填寫工程名。3.新建C源程序文件
選擇主菜單“工程(Project)”中的“添加工程(Add to Project)? 新 建(New)”選項,為工程添加新的C源文件。
4.打開已存在的工程項目,編輯C源程序
進入Visual C++6.0環境后,選擇主菜單“打開工作區(Open Workspace)”命令,在“Open Workspace”對話框內找到并選擇要打開的工作區文件,單擊“確定(OK)”按鈕,打開工作區。
5.在工程項目中添加已經存在的C源程序文件
選擇主菜單“打開工作區(Open Workspace)”命令,在“Open Workspace”對話框內找到并選擇要打開的工作區文件,單擊“確定(OK)”按鈕打開工作區。6.編譯、連接和運行(1)編譯
選擇主菜單“編譯(Build)”中的“編譯(Compile)”命令,或單擊工具條上的圖標,系統只編譯當前文件而不調用鏈接器或其它工具。輸出(Output)窗口將顯示編譯過程中檢查出的錯誤或警告信息,在錯誤信息處單擊鼠標右鍵或雙擊鼠標左鍵,可以使輸入焦點跳轉到引起錯誤的源代碼處大致位置以進行修改。(2)構建
選擇主菜單“編譯(Build)”中的“構建(Build)”命令,或單擊工具條上的圖標,對最后修改過的源文件進行編譯和連接。7.調試程序
在編寫較長的程序時,能夠一次成功而不含有任何錯誤決非易事,對于程序中的錯誤,系統提供了易用且有效的調試手段。調試是一個最基本的技能,不會調試就意味著即使學會了一門語言,卻不能編制出任何好的軟件。我們在前期進行編寫程序時,經常會犯一些語句上的錯誤,熟練了過后,會犯一些邏輯上的錯誤,而這些錯誤往往是不易察覺的。
四、實驗內容梗概
(一)算法
算法是編寫程序的靈魂,數據是加工的對象,語言是工具。在編譯任何程序前,我們必須認真地進行思考和設計數據結構及操作步驟。
(二)數據類型、運算符和表達式
在計算及高級語言中,數據的表現形式有常量和變量。在實習過程中,我們應當掌握數據類型、運算符和表達式,并且能在C語言實現過程中熟練的定義變量以及明確各種運算符之間的計算。
(三)三種基本結構
順序結構、選擇結構、循環結構等三種結構是C語言程序設計的三種基本結構,嚴格來說,所有的C程序都應由這三種基本結構組成。開始就著重這三種基本結構的應用練習,旨在使我們對于這三種結構有一個更加深刻的理解,能夠根據處理問題的需要選擇不同的結構進行處理。由于順序結構在這三種結構中是最基本的,實際上當我們把程序中的選擇結構部分和循環結構部分看作一個整體時,那么,整個程序就總是由順序結構組成的了。
測繪程序設計實驗報告
(四)函數
我們如果要用C語言進行大程序設計,一般采用模塊化的思想。其基本思想是將一個大的程序按照功能進行分割成一些模塊,使每一個模塊都成為功能單
一、結構清晰、接口簡單、容易理解的小程序。C語言是用函數來實現這種模塊化功能的。我們用C語言設計程序,任務只有一種,就是編寫函數,至少也要編寫一個main()函數。根據程序的復雜程度,還可以編寫多個子函數。在這一部分我們就通過練習進一步掌握用子函數來進行模塊化程序設計的方法,熟悉子函數的調用和執行過程。
(五)數組應用
數組是一種構造數據類型,指的是一組同類型數據組成的序列,運用數組可以高效地處理很多問題。
五、實驗具體內容 【實驗一】算法
(一)實驗目的
1.熟悉和掌握用SmartDraw軟件進行流程圖的繪制 2.了解流程圖的格式 3.明確算法的目的
(二)實驗內容
1.用流程圖來表示算法
2.檢查流程圖的語句錯誤與邏輯錯誤
(三)實驗步驟
我們以水準測量為例
1.我們在進行水準測量前,我們應該確定測量路線以及選取測量方向,然后就將水準儀整平準備測量;
2.在測量過程中,我們要對數據的可靠程度進行判斷,所以在判斷框中輸入“d>5?”,表示判斷視距差是否在誤差范圍之內;
3.當測量站數大于1后,就需要對視距差之和進行判斷,如果前幾站視距差之和大于限差,則需重測。所以,在后面加上一個判斷框,寫上“D>10?”;
3.如果滿足了兩個判斷框的條件,則進行下一站的測量;如果不滿足其中的一個條件,就需要重新進行數據測量及輸入;
4.最后判斷是否將整個測區測完,如果沒有則繼續測量,直至測完為止。測量完成且滿足限差要求,就可停止運行計算。
測繪程序設計實驗報告
(四)實驗總結
1.程序設計反映了利用計算機解決實際問題的全過程,具體要經過以下四個基本步驟:分析問題,確定數學模型或方法;設計算法,畫出流程圖;選擇編程工具,按算法編寫程序;調試程序,分析輸出結果。
2.為解決一個問題而采取的方法和步驟,就算法。算法是程序設計的核心。
3.算法具有5個特性:有窮性、確定性、有效性、要有數據輸入、要有結果輸出。算法的評價標準包括:正確性、可讀性、通用性、高效率。算法效率的度量分為時間度量和空間度量。
4.描述算法有多種不同的工具,常用的有:流程圖、結構化流程圖和偽代碼等。實用結構化流程圖能幫助培養良好的程序設計風格,提倡用結構化流程圖表示算法。
【實驗二】數據類型、運算符和表達式
(一)實驗目的
1.掌握C語言的數據類型,了解C語言中數據類型的意義,熟悉如何定義整型、字符型和實型的變量,以及對它們賦值的方法。2.掌握不同類型的數據之間賦值的規律。
3.學會用C的有關算術運算符,以及包含這些運算符的表達式,特別是是++和—運算符的使用。
4.掌握C語言中使用最多的一種語句——賦值語句的使用方法。
5.掌握scanf()函數、printf()函數的調用方法,掌握各種類型數據的輸入輸出的方 法,能正確使用各種格式轉換符。
6.掌握字符輸入輸出函數getchar()、putchar()函數的調用方法。(二)實驗內容
1.用printf函數來輸入表達式運行結果。2.觀察實驗步驟中表達式的結果。(三)實驗步驟
以方位角的計算為例:
1.在明確該程序算法以及熟知各種數據類型的基礎上,先確定三個變量,然后聲明它們的數據類型
2.賦予那兩個已經聲明變量各自的初值
3.根據變量,執行判斷語句,判斷b是否大于180度
4.根據算法,寫出表達式,并根據判斷結果運行不同的表達式
測繪程序設計實驗報告
5.最后用printf輸出計算結果
輸入程序: 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);} 運行結果為:
(四)實驗總結
1.C語言數據類型有:基本類型(整型、字符型、實型)、構造類型(結構體類型、公用體類型、枚舉類型)、指針類型和空類型。整型又分為段整形、基本整型和長整型三種。整型還可以分為有符號型和無符號型。實型分為單精度型和雙精度型。
2.變量是一個用于存放數值的內存存儲區,根據變量的類型不同,該存儲區被分配不同字節的內存安源。變量用標識符命名。C程序中用到的任何變量都必須在使用前進行定義。
3.整形變量可以用十進制、八進制、和十六進制來表示。4.轉義字符占一個字節,分為以下三類:
(1)控制輸出格式的轉義字符:n、t、b、r、f等。(2)控制三個特殊符號輸出的轉義字符:、’、” 5.C語言的運算符
(1)基本算術運算符:+-* / %,先乘除、求余,后加減;對于/運算,兩個整數相除結果仍為整數;%運算符只對整型數據有效。
(2)逗號運算符的運算規則:從左向右依次運算每一個表達式,逗號表達式的結果就是最后一個表達式的值。
6.++或—可以卸載變量之前,也可以寫在變量之后。如果對變量施加了前綴或后綴運算,并參與其他運算,則前綴運算是先改變變量的值再做運算,而后綴運算是先參與運算后改變變量的值。自增和自減運算符的運算對象只能是變量,而不能是表達式或常量。
7.當表達式中含有不同類型的數據時,運算的數據類型默認按隱式類型轉換,即從精度低的類型自動轉換成精度高的類型,否則會造成精度損失。
8.C語言中沒有提供輸入輸出語句,在其庫函數中提供了一組輸入輸出函數。其中對標準輸入輸出設備進行格式化輸入輸出的函數是scanf和printf。
9.輸入函數scanf()的功能是接受鍵盤輸入的數據給變量輸出函數printf()的功能是將數據以一定格式顯示輸出。
(1)輸出函數的一般形式為: printf(“格式控制字符串“,輸入項表)其中格式控制字符串由格式說明符、轉義序列和普通字符組成。
測繪程序設計實驗報告
而一個格式說明符將引起一個輸出參數項的轉換與顯示。格式說明符是由%引出并以一個類型描述符結束的字符串,中間是一些可選的附加說明項。
(2)輸入函數的一般形式為: Scanf(“格式控制字符串“,輸入項表)
其中格式控制字符與printf()函數中的類似,不過一般只含有簡單的格式說明符;輸入項表至少有一個輸入項,且必須是變量的地址(用變量名前加&表示)
Printf()和scanf()都要求格式轉換說明符與輸入項在個數、順序、類型上一一對應。
【實驗三】控制語句
(一)實驗目的
1.熟練掌握if、if?else、if?elseif語句和switch語句格式及使用方法,掌握if語句中的嵌套關系和匹配原則,利用if語句和switch語句實現分支選擇結構。
2.熟練掌握while語句、do …while語句和for語句格式及使用方法,掌握三種循環控制語句的循環過程以及循環結構的嵌套,利用循環語句實現循環結構。
3.掌握簡單、常用的算法,并在編程過程中體驗各種算法的編程技巧。進一步學習調試程序,掌握語法錯誤和邏輯錯誤的檢查方法。
(二)實驗內容
1.選擇結構程序設計; 2.if語句的使用;
3.使用switch語句實現多分支選擇結構; 4.三種循環語句的應用; 5.循環結構的嵌套;
6.break和continue語句的使用。(三)實驗步驟 以帶號計算為例
1.根據所需計算的方法分為三度帶和六度帶,確定程序的結構
2.定義變量,之后確定其數據類型,用scanf進行輸入經度和判斷標志
3.我們需要選擇計算方式,如果選用三度帶進行計算,則將判斷標志設為0,如果選用六度帶進行計算,則判斷標志設為費0的數
4.用if…else…進行選擇后,就進行計算 5.計算完畢后,用printf輸出結果 輸入程序: int main(){ int n,m,l;scanf(“%d%d”,&l,&m);if(m==0)n=(l+3)/6;else
n=l/3;printf(“該點位于第%d帶n”,n);} 輸出結果為:
測繪程序設計實驗報告
以素數對的計算為例
1.在明確素數對的定義及算法的基礎上,我們先確定變量個數及名稱,并且聲明它們的數據類型
2.然后確定用for的嵌套結構對素數對進行循環的判斷、選擇
3.用if結構進行判斷,判斷的依據是首先這個數必須是素數,即不能被除了1與它本身外的數整除,其次,需要滿足的條件是這兩個素數必須相差2,所以先尋找“k=(int)sqrt(j)”作為除數,然后執行“if(j%i==0)”進行判斷其是否為素數,在執行”if(k2-k1==2)”判斷它們是否為素數對,不滿足其中的一個判斷條件,則執行”break”,跳出循環
4.找出素數對之后,用printf進行輸出 程序輸入:
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;} } 輸出結果為:
(四)實驗總結
1.根據某種條件的成立與否而采用不同的程序段進行處理的程序結構稱為選擇結構。選擇結構又可以分為單分支、雙分支和多分支三種情況。一般采用if語句實現單分支、雙分支或多分支結構程序
2.采用嵌套if語句還可以實現較為復雜的多分支結構程序。在嵌套if語句中,一定要弄清楚else與哪個if結合。書寫嵌套if語句往往采用縮進的階梯式寫法,目的是便于看清else與if結合的邏輯關系,但折后總寫法并不能改變if語句的邏輯關系。
測繪程序設計實驗報告
3.循環結構又稱為重復結構,它可以控制某些語句重復執行,重復執行的語句稱為循環體,而決定循環是否繼續執行的是循環條件。循環結構是程序設計總應用最多的結構形式,在C語言中,可用while語句、do…while語句和for語句來實現循環結構。
一般情況下,用某種循環語句寫的程序段,業內呢個用另外兩種循環語句實現。While語句和for語句屬于當型循環,即先判斷,后執行;而do…while語句屬于直到型循環,即先執行,后判斷,而無法確定循環次數的問題采用while語句或do…while語句比較自然。
4.有時候需要用到多重循環,又稱為循環嵌套,即在循環語句的循環體內又包含另一個完整的循環結構。循環嵌套不允許交叉。
5.為了避免出現無終止的循環,要注意循環結束條件的使用,也就是說在循環執行中,要修改循環變量,還要注意循環的初始條件。分析循環第一次和最后一次執行時的情況有助于寫出正確程序。
【實驗四】函數
(一)實驗目的
1.掌握C函數的定義方法、函數的調用方法、參數說明以及返回值 2.掌握實參與形參的對應關系以及參數之間的“值傳遞”的方式; 3.掌握函數的嵌套調用及遞歸調用的設計方法;
4.掌握全局變量和局部變量、動態變量與靜態變量的概念和使用方法; 5.在編程過程中加深理解函數調用的程序設計思想。
(二)實驗內容
1.多模塊的程序設計與調試的方法; 2.函數的定義和調用的方法; 3.用遞歸方法進行程序設計。(三)實驗步驟
以前方交會測量為例
1.明確前房交會測量的原理及算法
2.定義所需的變量,并確定它們的數據類型
3.用scanf輸入角度、距離等數據,并且需要進行角度的判斷,以保證兩角之和要大于30度小于150度
4.滿足條件后,就根據計算公式進行計算 5.然后用printf輸出結果
6.然后再熟悉函數形式的基礎上,將該程序算法的主要部分改為函數形式 7.最后運行、調試,直至輸出正確的結果為止 原程序輸入:
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);
測繪程序設計實驗報告
} 改為函數形式程序輸入為:
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);} 結果輸出為:
以坐標正算為例
1.明確坐標正算的算法
2.聲明變量PI(圓周率)以及其他變量,并確定它們的數據類型 3.用scanf輸入第一個點的坐標以及兩點之間的距離和角度
4.然后進行“x2=x1+d*cos(a*PI/180)y2=y1+d*sin(a*PI/180)”的計算 5.計算完成后用printf輸出計算結果
6.然后將程序算法的主要部分“x2=x1+d*cos(a*PI/180)y2=y1+d*sin(a*PI/180)”改為函數的形式
7.最后運行、調試,直至輸出正確的結果為止
原程序輸入為: 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(“第二個點的坐標是:(%f,%f)n”,x2,y2);} 改為函數形式程序輸入為:
測繪程序設計實驗報告
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(“第二個點的坐標是:(%fn,%fn)”,x2,y2);} 輸出結果為:
(四)實驗總結
1.函數是利用C語言進行結構化程序設計的最基本的概念,C程序是由函數組成的。可以把一個復雜的程序分成多個模塊進行設計,而每個模塊是一個函數。main()是C程序中最重要的函數,程序運行從函數main()開始,也在函數main()結束。
2.函數定義的一般形式為:
函數符 函數名([形式參數說明]){ 聲明與定義部分 語句部分 }
類型符指明函數返回值的類型。如果函數定義是不指明類型,系統隱含指定為int型。形式參數有兩個作用:其一表示將從主調函數中接收哪些類型的信息,其二在函數體中形式參數可以被引用。
3.函數返回值由return語句實現,return語句的格式為: return 表達式;
函數先將表達式的值轉換為所定義的類型,然后返回到主調函數中的調用表達式。
4.函數調用是通過函數調用表達式進行,當函數被調用時,計算機才為形參分配存儲空間。在調用函數時,函數之間的參數傳遞也稱為虛實結合。形參從相應的實參得到值,稱為傳值調用方式。實參與形參在個數、類型上要匹配。
5.函數調用前應該已經定義或聲明。
6.函數的形參及函數內定義的變量稱為局部變量,其作用范圍在定義它的函數或復合語句內。在函數外部定義的變量稱為全局變量,其作用域是從定義或聲明處到整個程序結束。
7.一個函數被調用的過程中可以調用另一個函數,即函數調用允許嵌套。
【實驗五】數組
(一)實驗目的
1.掌握數組的基本概念,包括:數組的定義、數組的類型、數組的初始化、數組的賦值、數組元素下標的范圍、數組元素的正確以及引用數組元素的輸入/輸出。
2.掌握字符數組與字符串的使用方法。理解字符數組與其它數組的區別、理解字符串及其特點。
測繪程序設計實驗報告
3.掌握常用的字符串處理庫函數的用法并清楚對字符串的簡單處理。4.掌握與數組相關的算法,包括排序算法和查找算法等。
(二)實驗內容 有關數組的程序設計
(三)實驗步驟 以坐標反算為例
1.明確坐標反算的算法 2.聲明變量PI(圓周率),并用普通程序將其表示出來 3.最后將其改編為函數形式的程序
原程序輸入為: 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);} 改為數組形式程序輸入為: 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);} 輸出結果為:
(四)實驗總結
1.數組命名要符合標識符的命名規則。
2.數組名后的括號必須是方括號,不能是圓括號。
3.數組長度必須是正整數,可以是個表達式,但不能有變量,C語言不支持動態數組。4.數組長度表示數組中元素的個數。
5.數組元素的下標從0開始數,所以最大下標是數組的長度減1。
6.C語言中沒有字符串變量,字符串是靠字符數組實現的,所謂字符數組就是元素的數據類型為字符型的數組。
測繪程序設計實驗報告
【實驗六】結構體與共用體
(一)實驗目的
1.理解結構體類型的含義;掌握結構體類型變量的定義方法和使用;結構體類型變量的說明以及初始化方法。
2.理解結構體與數組的區別;掌握結構體類型數組的概念、定義和使用方法。
3.熟悉鏈表的概念,初步學會對鏈表進行操作。4.初步了解共用體的概念與使用。
(二)實驗內容
有關結構與共同體的程序設計
(三)實驗步驟 以三角高程計算為例
1.明確三角高程計算的算法
2.聲明變量,用scanf進行輸入,并用普通程序的結構將其算法表示出來 3.將原程序改編為結構體形式 原程序輸入為: 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);} 改為結構體形式程序輸入為: 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);} 輸出結果為:
測繪程序設計實驗報告
(四)實驗總結 1.結構體類型定義
結構體類型的形式為:
struct結構體類型名 { 數據類型成員名1;...數據類型成員名n; };2.結構體變量的定義
結構體變量有三種定義形式:
(1)先定義結構體類型,后定義結構體變量。(2)定義結構體類型的同時定義結構體變量。
(3)不定義結構體類型名,直接定義結構體變量。3.結構體變量的引用(1)結構體變量的初始化:許多C版本規定對外部或靜態存儲類型的結構體變量可以進行初始化,而對局部的結構體變量則不可以,新標準C無此限制,允許在定義時對自動變量初始化。
(2)結構體成員的引用:由于C語言一般不允許對結構體變量的整體引用,所以對結構體的引用只能是對分量的引用,結構體變量中的任一分量可以表示為:結構體變量名.成員名
4.結構體與數組
C語言中數組的成員可以是結構體變量,結構體變量的成員也可以是數組。結構體數組有三種定義形式:
(1)先定義結構體類型,后定義結構體數組。(2)定義結構體類型的同時定義結構體數組。(3)不定義結構體類型名,直接定義結構體變量。
六、常見錯誤及分析
C語言的最大特點是:功能強、使用方便靈活。C編譯的程序對語法檢查并不象其它高級語言那么嚴格,這就給編程人員留下“靈活的余地”,但還是由于這個靈活給程序的調試帶來了許多不便,尤其對我們這些初學C語言的人來說,經常會出一些連自己都不知道錯在哪里的錯誤。
有時候看著有錯的程序,不知該如何改起,通過對C的學習與實踐,我積累了一些C編程時常犯的錯誤:
1.書寫標識符時,忽略了大小寫字母的區別。main(){ int a=5;printf(“%d”,A);} 編譯程序把a和A認為是兩個不同的變量名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的字符。習慣上,符號常量名用大寫,變量名用小寫表示,以增加可讀性。
2.忽略了變量的類型,進行了不合法的運算。main(){ float a,b;printf(“%d”,a%b);} “%”是求余運算,得到a/b的整余數。整型變量a和b可以進行求余運算,而實型變量則不允許進行“求余”運算。
測繪程序設計實驗報告
3.將字符常量與字符串常量混淆。char c;c=“a”;在這里就混淆了字符常量與字符串常量,字符常量是由一對單引號括起來的單個字符,字符串常量是一對雙引號括起來的字符序列。C規定以“”作字符串結束標志,它是由系統自動加上的,所以字符串“a”實際上包含兩個字符:‘a'和‘',而把它賦給一個字符變量是不行的。
4.忽略了“=”與“==”的區別。
在許多高級語言中,用“=”符號作為關系運算符“等于”。如在BASIC程序中可以寫 if(a=3)then ? 但C語言中,“=”是賦值運算符,“==”是關系運算符。如: if(a==3)a=b;前者是進行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。由于習慣問題,初學者往往會犯這樣的錯誤。
5.忘記加分號。
分號是C語句中不可缺少的一部分,語句末尾必須有分號。a=1 b=2 編譯時,編譯程序在“a=1”后面沒發現分號,就把下一行“b=2”也作為上一行語句的一部分,這就會出現語法錯誤。改錯時,有時在被指出有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。
{ z=x+y;t=z/100;printf(“%f”,t);} 對于復合語句來說,最后一個語句中最后的分號不能忽略不寫。以及在包含結構體的程序中,很多時候會忘記花括號后面的那個分號,如果忘記了加分號,程序就不能運行,如:
struct Student {char name;} 6.多加分號。
對于一個復合語句,如: { z=x+y;t=z/100;printf(“%f”,t);};復合語句的花括號后不應再加分號,否則將會畫蛇添足。又如: if(a%3==0);i++;本是如果3整除a,則I加1。但由于if(a%3==0)后多加了分號,則if語句到此結束,程序將執行I++語句,不論3是否整除a,I都將自動加1。再如:
for(i=0;i<5;i++);{scanf(“%d”,&x);printf(“%d”,x);} 本意是先后輸入5個數,每輸入一個數后再將它輸出。由于for()后多加了一個分號,使循環體變為空語句,此時只能輸入一個數并輸出它。
7.輸入變量時忘記加地址運算符“&”。int a,b;scanf(“%d%d”,a,b);這是不合法的。Scanf函數的作用是:按照a、b在內存的地址將a、b的值存進去。“&a”指a在內存中的地址。
在表示并列的時候,要同時使用兩個“&”,即“&&”否則程序調試過程會出現錯誤,如:
測繪程序設計實驗報告
if(x>2 & x<5)8.輸入數據的方式與要求不符。scanf(“%d%d”,&a,&b);輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法: 3,4
七、程序調試 調試概述
調試是編程過程中不可忽視的問題,對于一個復雜的程序來說,從編寫到能夠通過編譯,只是完成了一小部分而已。然后還要不斷的調試、修改、再調試、再修改、?直到將發現的問題都解決,程序能夠穩定正確的運行為止。調試在程序設計中的地位是十分重要的。調試是一個最基本的技能,其重要性甚至超過學習一門語言。不會調試程序就意味著即使會一門語言,卻不能編制出任何好的軟件。
常見的錯誤類型
(1)語法錯誤:拼寫錯,括號不匹配,漏寫分號……對于查出的錯誤(Error)必須排除,否則程序無法運行;而警告(Warning)則應根據情況處理,否則可能產生運算誤差等。
(2)邏輯錯誤:編譯無誤,有時也有執行結果,但結果不符合題意。例如scanf的參數中漏寫地址符,if語句、for語句花括號位置錯誤等,都會導致此類錯誤。
(3)運行錯誤:運行結果錯誤也可能是由于輸入數據錯誤、類型不匹配等造成的。例如用戶沒有按照scanf規定的格式輸入數據就會造成此類錯誤。
查錯的方法
(1)先進行人工檢查,即靜態檢查。在寫好一個程序以后,不要匆匆忙忙上機,而應對紙面上的程序進行人工檢查。這一步是十分重要的,它能發現程序設計人員由于疏忽而造成的多數錯誤。而這一步驟往往容易被人忽視。
為了更有效地進行人工檢查,所編的程序應注意力求做到以下幾點: A、應當采用結構化程序方法編程,以增加可讀性; B、并盡可能多加注釋,以幫助理解每段程序的作用;
C、在編寫復雜的程序時不要將全部語句都寫在main函數中,而要多利用函數,用一個函數來實現一個單獨的功能。這樣既易于閱讀也便于調試,便于分別檢查和處理。
(2)在人工檢查無誤后,才可以上機調試。通過上機發現錯誤稱動態檢查。在編譯時給出語法錯誤的信息,可以根據提示的信息具體找出程序中出錯之處并改正之。應當注意的是有時提示的出錯并不是真正出錯的行,如果在提示出錯的行上找不到錯誤的話應當到上一行再找。有時提示出錯的類型并非絕對準確,由于出錯的情況繁多各種錯誤互有關聯,要善于分析,找出真正的錯誤,而不要只從字面意義上找出錯信息,鉆牛角尖。
如果系統提示的出錯信息多,應當從上到下一一改正。有時顯示出一大片出錯信息往往使人感到問題嚴重,無從下手。其實可能只有一二個錯誤。例如,對使用的變量未定義,編譯時就會對所有含該變量的語句發出出錯信息;有的是少了“}”或多了“}”有的是書寫語句時忘記寫“;”或是全角的“;”了,只要加上一個變量定義,或填加“};”就所有錯誤都消除了。養成寫程序習慣,如輸入“{”時,中間先不寫代碼,后面緊接輸入”}”,就不會漏了或多了匹配符號。
(3)在改正語法錯誤后,程序經過連接就得到可執行的目標程序。運行程序,輸入程序所需數據,就可得到運行結果。應當對運行結果作分析。看它是否符合要求。有的人看到運行結果就認為沒問題了,就不作分析,這是不好的。
有時,數據比較復雜,難以立即判斷結果是否正確。可以事先考慮好一批“試驗數據”,測繪程序設計實驗報告
輸入這些數據可以得出容易判斷正確與否的結果。例如,if語句有兩個分支,有可能在流程經過其中一個分支時結果正確,而經過其它一個分支時結果不對等。必須考慮周全。
事實上,當程序復雜時很難把所有的可能方案全部都試到,選擇典型的情況作試驗即可。(4)運行結果不對,大多屬于邏輯錯誤。對這類錯誤往往需要仔細檢查和分析才能發現。可以采用以下辦法:
A 將程序與流程圖仔細對照,如果流程圖是正確的話,程序寫錯了,是很容易發現的。例如,復合語句忘記寫花括弧,只要一對照流程圖就能很快發現。
B 如果實在找不到錯誤,可以采用“分段檢查”的方法。在程序不同的位置設幾個printf函數語句,輸出有關變量的值,往下檢查。直到找到在哪一段中數據不對為止。這時就已經把錯誤局限在這一段中了。不斷減小“查錯區”,就可能發現錯誤所在。
用printf函數語句測試未能發現所有問題,則可用系統提供的調試工具,跟蹤流程并給出相應信息,使用更為方便。
總之,程序調試是一項細致、較為繁瑣的工作,需要下功夫,動腦子,善于累積經驗。在程序調試過程中往往反映出一個人的學習態度,以前學習C語言時基礎不太好,但我也不灰心,多寫程序,“掌握調試的方法和技術”,要學會自己找問題,這樣慢慢自己就會寫出錯誤較少的實用的程序。
常用快捷鍵
工欲善其事,必先利其器”,為了加速調試的過程,避免調試的時候鼠標點來點去,這里簡要介紹一下調試時常用的快捷鍵,熟練掌握這些快捷鍵,可以大大加速調試工作的進度。當然,開始的時候不可能記住全部的快捷鍵,可以隨著自己調試需要用到的功能的增加,逐漸熟悉這些快捷鍵,盡量使用它們。首先應該熟悉編譯、運行、窗口切換相關的操作。然后再逐步熟悉Debug用到的檢查、觀察、單步跟蹤等操作。
VC6.0中常用的快捷鍵:
測繪程序設計實驗報告
八、實驗心得與體會
在這個學期里,在老師的帶領下進行了《C語言程序設計》學習。在這之前,我們已經對VB這門課程學習了一個學期,對程序設計有了一定的了解,但是也僅僅是停留在了解的范圍,對里面的好多東西還是很陌生,更多的在運用起來的時候還是感到很棘手,畢竟,萬事開頭難。
上機進行實習是學習程序語言設計必不可少的實踐環節,特別是C語言靈活、簡潔,更需要通過編程的實踐來真正掌握它。對于程序設計語言的學習目的,可以概括為學習語法規定、掌握程序設計方法、提高程序開發能力,這些都必須通過充分的實際上機操作才能完成。學習C程序設計語言除了課堂講授以外,必須保證有不少于課堂講授學時的上機時間,所以,老師希望我們能有效地利用課余時間進行上機練習,盡快掌握用C語言開發程序的能力,為今后的繼續學習打下一個良好的基礎。
C語言是計算機程序設計的重要理論基礎,在我們以后的學習和工作中都有著十分重要的地位。要學好這種語言,僅僅學習課本上的知識是不夠的,還要經常自己動手,有較強的實踐能力。只有多動手,經常編寫程序,才能發現我們學習上的漏洞和自己的不足,并在實踐中解決這些問題,不斷提高自己轉化知識的能力。
通過上機實習,我也從中發現了自己不少的問題,這都是只看書上的程序而沒有自己親身上機編寫程序而無法得知的,假如我們只因看熟書上的程序就以為自己已經掌握了C語言那就大錯特錯了。
我主要存在以下的這些缺點:
1、學習耐心與細心不足,如scanf(“%d”,&n);中的“&”有時候會忘了。而在最后輸出時又錯寫成printf(“%d”,&n);從而錯誤得輸出了地址而不是我原來想要的答案。
2、編程思想不夠發散,看著題目有時想不出解答的方法,更不用說編寫程序來解題了。
3、基本功不夠,有些函數的表達不太精通,需要看書來核實,以致耗時較多。
4、知識不夠廣,有些內容沒有學好,不能要用到時及時反映出來,認識程度不夠深刻。
5、有時候不夠精簡,有一點用處不大或者說沒有也可以的文字存在。
6、由于我的英語水平較差,調試程序時,錯誤的地方雖然電腦有顯示,但由于是英文,理解上還是存在一點問題。
我認為上機編程的目的,不僅僅是驗證教材和講課的內容、檢查自己所編的程序是否正確,上機實驗的目的可以概括為如下幾個方面:
1、加深對課堂講授內容的理解
課堂上要講授許多關于C語言的語法規則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用C語言這個工具解決實際問題,又必須掌握它。通過多次上機練習,對于語法知識有了感性的認識,加深對它的理解,在理解的基礎上就會自然而然地掌握C語言的語法規定。對于一些內容自己認為在課堂上聽懂了,但上機實踐中會發現原來理解的偏差,這是由于大部分學生是初次接觸程序設計,缺乏程序設計的實踐所致。
學習C語言不能停留在學習它的語法規則,而是利用學到的知識編寫C語言程序,解決實際問題。即把C語言作為工具,描述解決實際問題的步驟,由計算機幫助我們解題。只有通過上機才能檢驗自己是否掌握c語言、自己編寫的程序是否能夠正確地解題。
通過上機實驗來驗證自己編制的程序是否正確,恐怕是大多數同學在完成老師作業時的心態。但是在程序設計領域里這是一定要克服的傳統的、錯誤的想法。因為在這種思想支配下,可能你會想辦法去“掩蓋”程序中的錯誤,而不是盡可能多地發現程序中存在的問題。自
測繪程序設計實驗報告
己編好程序上機調試運行時,可能有很多你想不到的情況發生,通過解決這些問題,可以逐步提高自己對C語言的理解和程序開發能力。
2、熟悉程序開發環境、學習計算機系統的操作方法
一個C語言程序從編輯、編譯、連接到運行,都要在一定的外部操作環境下才能進行。所謂“環境”就是所用的計算機系統硬件、軟件條件,只有學會使用這些環境,才能進行程序開發工作。通過上機實驗,熟練地掌握C語言開發環境,為以后真正編寫計算機程序解決實際問題打下基礎。同時,在今后遇到其它開發環境時就會觸類旁通,很快掌握新系統的使用。
3、學習上機調試程序
完成程序的編寫,決不意味著萬事大吉。你認為萬無一失的程序,實際上機運行時可能不斷出現麻煩。如編譯程序檢測出一大堆錯誤。有時程序本身不存在語法錯誤,也能夠順利運行,但是運行結果顯然是錯誤的。開發環境所提供的編譯系統無法發現這種程序邏輯錯誤,只能靠自己的上機經驗分析判斷錯誤所在。程序的調試是一個技巧性很強的工作,對于初學者來說,盡快掌握程序調試方法是非常重要的。有時候一個消耗你幾個小時時間的小小錯誤,調試高手一眼就看出錯誤所在。
快臨近學期期末了,現在回想起來當初剛開始學習的時候老是感覺力不從心。雖然認真聽課了,但是并不能理解它。這種情況到了后來才有所改變。
之所以能有所改變,是因為本人找到了學習C語言的一些方法。由于C語言對于剛接觸的學子,會感到很陌生。因為C語言所要用到的思維邏輯與我們平時的思維邏輯有所不一樣。其顯得更抽象。所以學習C語言,一定要打好基礎。要把基礎理解透徹。需要用到的語句要牢記,這樣,在以后的運用當中,就能比較得心應手了。
學習C語言的起步就是學習它的方法規則,如果把它學習得好在學習后面的時候就比較容易理。比如變量,首先要了解變量的定義方式(格式),其意義是什么(定義變量有什么用);其次就是要我要怎么去運用它(我要用什么型式去應用它)。在C語言的命令行中所有的語句都是有它自己的一定格式和形式出現在我們面前,所以在學習某種語句或命令時你首先要了解的就是它的規則是什么、有什么用、怎么實現等。這些都是語法基礎,如果把它們都了解很好了,那么編起程序來就很得心應手。比如說if語句和switch語句,這兩種條件語句都是用來執行判斷功能的,那什么時侯用if什么時侯用switch,如果很好地了解它們的結構和作用的話那么就能靈活運用:若它的條件分支是多個而且條件的值是一個確定的值時就可以選用switch。反之,在大多數情況下就用if。
掌握了語言法規則,不一定就能編出程序來,其實學習編程就是要學習一種思想,一種思維方法,首先要確定一種算法,如從1加到100,判斷潤年等,我認為這些算法都是一種思維方法。
畫流程圖就是在構建編寫程序思路的過程,當畫好一個流程圖時編程思想也就出來了,程序也差不多了,再結合掌握的語言的方法規則,在計算機里實現就可以了。任何程序只要有思維,有想法,那么實現程序時就不會覺得無從下手。而要學習這種思維方法就是多做題,多讀程序,學習別人好的思維方法,多想想一個程序還可不可以有另外一種方法來實現它。這樣久而久之,自然會形成一種自己的思維方法。因此我認為不管學什么語言都是這樣。
另外,良好的編程習慣也是學好C語言的重要因素。例如編寫程序時用縮進的方式、寫注釋、程序寫到一定的階段時要做一下測試等。這些工作可以幫我們在調試程序時有很大的幫助。程序代碼實現后,錯誤是難免的,所以也要鍛煉自己的調試查錯能力,而良好的編程習慣可以使我們在調試時減小工作量和提高調試效率,也有助于形成自己的編程風格。
在學習的時候,我遇到過這么個情況。覺得C語言學起來很枯燥,很悶。后來才發現學習語言,是要有目的性。如果沒有目的,你會發現自己在學習的過程中會很枯燥,會漸漸失
測繪程序設計實驗報告
去對C語言的學習興趣。所以我們要有一個遠大而又容易實現的目的,我要用C語言來做什么?再把這個最終的目的分成部分,讓我們慢慢的一點一點的來完成它,這樣在學習C語言的過程中,我們就會始終陶醉在一個又一個成功的喜悅里,讓我們的學習越來越有興趣。有一天,我們會發現:原來學習C語言真的是一件很有意思的事兒,而且學好C語言也不是很難么!
學習C語言只看書也是不夠的,我們要一邊看書,一邊上機做練習,或者在你學習了C語言的基礎知識以后就可以找一些別人的程序來看,遇到不明白的函數可以再翻一下書,如果查書也理解不了,我們可以把他的程序輸入到計算機里,情況好的話能夠順利通過編譯,如果不能順利執行,我們也同樣可以學習到一些C語言調試方面的知識。課堂上要講授許多關于c語言的語法規則,聽起來十分枯燥無味,也不容易記住。
然而要使用C語言這個工具解決實際問題,又必須掌握它。通過多次上機練習,對于語法知識有了感性的認識,加深對它的理解,在理解的基礎上就會自然而然地掌握C語言的語法規定。對于一些內容自己認為在課堂上聽懂了,但上機實踐中會發現原來理解的偏差,這是由于大部分學生是初次接觸程序設計,缺乏程序設計的實踐所致。
學習C語言不能停留在學習它的語法規則,而是利用學到的知識編寫C語言程序,解決實際問題。即把C語言作為工具,描述解決實際問題的步驟,由計算機幫助我們解題。只有通過上機才能檢驗自己是否掌握C語言、自己編寫的程序是否能夠正確地解題。通過上機實驗來驗證自己編制的程序是否正確,恐怕是大多數同學在完成老師作業時的心態。但是在程序設計領域里這是一定要克服的傳統的、錯誤的想法。因為在這種思想支配下,可能你會想辦法去“掩蓋”程序中的錯誤,而不是盡可能多地發現程序中存在的問題。自己編好程序上機調試運行時,可能有很多你想不到的情況發生,通過解決這些問題,可以逐步提高自己對C語言的理解和程序開發能力。
總之一句話,在學習C語言中,一定要多動手。不要老是鉆牛角尖,不斷的在那左思右想。用時候只要肯動手,編譯錯了再改。你會發現慢慢的就能夠找到答案了。而且也能從中學習到很多東西,常言道失敗是成功之母。只要不怕失敗,不斷的鉆研、嘗試,總會能夠把困難解決的。
在學習C語言的過程中會遇到許多困難與挫折。但通過自己的努力,最終能克服種種的困難。所得到的成就感是無法用言語去形容的。從中學到的堅韌精神對于我今后的生活也有很大的影響。
C語言是一種抽象的語言,相對于我們平時用的語言,所以學習起來會用點吃力。但是面向對象程序設計的基本要素是抽象,程序員是需要通過抽象來管理復雜性.面向對象程序設計的本質:這些抽象的對象可以被看作具體的實體,這些實體對用來告訴我們作什么的消息進行響應.學習C語言可以讓我們更好的鍛煉自己的邏輯思維能力,還可以讓你掌握更好的計算機知識,在不斷學習的過程中讓自己真正的自信起來!學習C語言,對于以后的工作也是有所幫助的,它也可以結合其他的科目,來靈活運用。例如單片機的運用。用C語言去編輯單片機的主程序,會發現程序簡潔多了。而且發現C語言的實用性很強。并且,C語言和我們測繪專業有很緊密的聯系,我們可以自己進行測繪程序的編寫,幫助我們進行計算等等。
雖然測繪程序設計這門課程結束了,但在以后的學習過程中,我仍會不斷的鉆研、學習,希望學得更多,能更好的在以后的工作中廣泛運用。
測繪程序設計實驗報告
九、附錄:程序設計作業清單
測繪程序設計實驗報告
測繪程序設計實驗報告
測繪程序設計實驗報告
測繪程序設計實驗報告
測繪程序設計實驗報告
#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;
測繪程序設計實驗報告
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;}
測繪程序設計實驗報告
#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
測繪程序設計實驗報告
{
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);
測繪程序設計實驗報告
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);
測繪程序設計實驗報告
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);
測繪程序設計實驗報告
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為瞄準第1,2點的讀數 b1,b2為瞄準第2,1點的讀數 */ 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
測繪程序設計實驗報告
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
測繪程序設計實驗報告
#include
/* a1,a2為瞄準第1,2點的讀數 b1,b2為瞄準第2,1點的讀數 */ 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
測繪程序設計實驗報告
main(){ double h1,h2,h3,q1,q2,q3,br,hz,fr,dz,dq;/* h1,h2,h3為后尺黑面上、中、下絲讀數 q1,q2,q3為前尺黑面上、中、下絲的讀數 br為后尺紅面中絲讀數 fr為前尺紅面中絲讀數 dz為視距差之和 dq為上一測站視距差之和 hz為高差中數 */
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
/*前房交會測量_201420050138.c*/ #include
測繪程序設計實驗報告
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;}
/*方位角的計算_201420050138-11.c*/ #include
a23=a12+b-180;else
a23=a12-b+180;printf(“a23=%fn”,a23);return 0;}
/*閉合水準路線閉合差計算_201420050138-12.c*/ #include
scanf(“%d”,c);
i=i+c;d=j-i;
測繪程序設計實驗報告
w=abs(d-i);printf(“閉合差=%fn”,w);return 0;}
/*坐標正算_201420050138-13.c*/ #include
x2=x1+d*cos(a*PI/180);y2=y1+d*sin(a*PI/180);printf(”第二個點的坐標是:(%f,%f)/n“,x2,y2);}
/*坐標反算_201420050138-14.c*/ #include
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));printf(”a=%fn,d=%fn“,a,d);}
/*多邊形面積計算_201420050138-15.c*/ #include
測繪程序設計實驗報告
{ 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;}
/*帶號計算_201420050138-16*/ #include
n=(l+3)/6;else
n=l/3;printf(”該店位于第 %fn 帶“,n);}
/*GPS測量中兩相鄰點間的距離要求*/ #include
printf(”平均距離為:5-2,等級:E“);if(m>=2 & n<=10)
printf(”平均距離為:10-5,等級:D“);if(m>=5 & n<=10)
測繪程序設計實驗報告
}
printf(”平均距離為:15-10,等級:C“);if(m>=15 & n<=10)printf(”平均距離為:70,等級:B“);if(m>=100 & n<=10)printf(”平均距離為:300,等級:A“);return 0;/*各等級水準測量精度*/ #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“);
測繪程序設計實驗報告
if(blc==1/2000)
printf(”基本等高距:平坦地--1 丘陵地--2 山地--2 高山地--2“);
if(blc==1/5000)
printf(”基本等高距:平坦地--5 丘陵地--5 山地--5 高山地--5“);}
/*每天努力一點與每天頹廢一點的區別_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;
}
}
測繪程序設計實驗報告
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為瞄準第1,2點的讀數 b1,b2為瞄準第2,1點的讀數 */ 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);}
測繪程序設計實驗報告
#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;}
測繪程序設計實驗報告
double xj(double x,double y){ double z;z=y-x;return(z);}
#include
/* a1,a2為瞄準第1,2點的讀數 b1,b2為瞄準第2,1點的讀數 */ 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
測繪程序設計實驗報告
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);}
/*前房交會測量_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!“);
測繪程序設計實驗報告
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;}
/*坐標正算_201420050138-13.c*/ #include
x2=w(x1,d,a);y2=w(y2,d,a);printf(”第二個點的坐標是:(%fn,%fn)“,x2,y2);}
/*坐標正算_201420050138-13.c*/ #include
double w;
w=x+y*cos(z*PI/180);
return(w);}
測繪程序設計實驗報告
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(”第二個點的坐標是:(%fn,%fn)“,x2,y2);}
/*帶號計算_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(”該點位于第 %fn 帶“,n);}
/*帶號計算_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(”該點位于第 %fn 帶“,n);}
/*坐標反算_201420050138-14.c*/ #include
測繪程序設計實驗報告
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);}
/*方位角的計算_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
第二篇:《計算機程序設計》實驗報告
《計算機 程序設計》 實驗報告
姓名:
學號 :
實驗日期:
****年**月**日
實驗名稱
控制結構與基本算法 一、實驗目的要求 1.熟練掌握 if 語句和 switch 語句 2.循環控制結構的使用 二、實驗內容 1.實驗教材 P86 第四題。
2.實驗教材 P87 第八題。
3.實驗教材 P108 第一題。
4.實驗教材 108 頁的第四題。
5.選做題:參考實驗教材 P104 第六題,做課件上題目:
科大有 4 位同學中的一位做了好事不留名,表揚信來了之后,校長問這四位是誰做的好事.A 說:不是我.B 說:是 C.C 說:是 D.D 說:他(C)胡說
? 文件名格式:學號-姓名-實驗 5.doc
? 序號 1-23:tmf77@mail.ustc.edu.cn ? 序號 24-45:yunmeng@mail.ustc.edu.cn ? 序號 46-67:cys1024@mail.ustc.edu.cn
三、上機程序(算法設計思想)
四、運行結果
五、調試中的問題及解決方法
第三篇:分支程序設計實驗報告[范文模版]
實驗二 二 分支程序設計 一、實驗目得: 1、學習分支程序得設計方法 2、熟悉在 PC 機上建立、匯編、連接、調試與運行匯編語言程序得過程 二、實驗環境:
硬件環境
IBM/ PC 及其兼容機 軟件環境
統 操作系統 DO S
編輯程序 EDIT 或其她編輯程序
序程編匯? 匯編程序 M ASM、E XE
連接程序LIN K、EXE 序 調試程序 DEB UG、EXE 三、實驗內容:
:、在屏幕上顯示如下信息:—-— —- ------—-—---— — ------—-Panda
2— —- --— — ---—-—-———-----— —-—--Cat
?
3-——--------------———- -——-Ra bbit
4— — -— —-— — -— —--— — --- —- --——------Pig—— ------—--—--—-—---— —- --—EXI T
(Plea se
ch oo se 1, 2, 3,4or 5)—- ----入 若輸入 1, 顯示“I like e
p panda ”后程序結束;若輸入 2, 顯示“I
lik e cat” ”后程序結束;若輸入 3,顯示“I
lik e rab bit t入 ”后程序結束;若輸入 4, 顯示“I do n’t l like pig ”后程序結束;若輸入 5,程序直接結束;若輸入其它字符,顯示“You
pr ess an error key!“ 后程序結束.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
;數據段結束 CODE SEGMENT
;代碼段開始 Y Y Y Y N N N N N 開始 選項 用戶輸入 Al=1 Al=2 Al=3 Al=4 Al=5 You press an error key 結束 I like panda I like cat I like rabbit I like do not
ASSUME
CS:CODE,DS:DATA
;段尋址 START: MOV AX,DATA
;將 data 得數據存入ax 中
MOV DS,AX
;為 ds 賦值
MOV DX,OFFSET
INFOR1
;返回變量 INFOR1 段內偏移地址【運行后在屏幕上顯示字符 1--——--—--—-Panda:】
MOV AH,09H
INT 21H
;執行九號功能調用
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 段內偏移地址【運行后在屏幕上顯示字符 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、、從鍵盤輸入一字符,判斷該字符就是小寫字母、大寫字母、數字或其它字符.若輸入為小寫字母, 顯示“Y You
I nput a Lo wer case Letter!”;若輸入為大寫字母, 顯示“You Inp ut a Uppercase L et ter!”;若輸入為數字,顯示“Yo ou Input a Digit!“;
若輸入為其它字符,顯示“You Inpu t
Ot her Let tt er!”。、編程指導 字 數字 0? ? 9得ASC II 碼為30H? ?39H;大寫字母得 ASCII 碼為 4 1H? ? 5AH,小寫字母得AS CI I碼為61H? ?7AH。本題目將字符分為小寫字母、大寫字母、數字及其它字符,得 根據鍵入字符得 AS CII 碼值判斷其所屬類型, 并顯示相應得信息 息.字符串顯示使用功能號為 09H 得 得 DOS 功能調用, 接收鍵盤輸入得單個字符使為 用功能號為 01H 得 得 DOS 功能調用。
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”得指令序列以及接收從鍵盤輸入一個字符得指令序列
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 得接收鍵盤輸入單個字符得指令序列 開始 結束(AL)<’0’(AL)<=’9’(AL)<’A’(AL)<=’Z’(AL)<’a’(AL)<=’z’ 輸入得就是小寫字母,顯示信息 輸入得就是大寫字母,顯示信息 輸入得就是數字,顯示有關信息 輸入得就是其它字符,顯示信息
CMP
AL,’0’
JB
OTHER
CMP
AL,’9’
JBE
DIGIT
CMP
AL,’A“
REHTO
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
出跳序程使應后支分個一完行執意注;
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
四、心得 通過這次上機實驗, 我掌握了分支程序額設計方法, 宏定義及宏調用得基本方法,了解了小寫字母與大寫字母得ASCII 碼表示及其轉換方法,了解了數字及其她得 字符得 AS CII 碼表示方法, 進一步掌握了調試工具得 使用方法。
第四篇:C#程序設計實驗報告
實驗報告書寫要求
實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,標題采用四號黑體,正文采用小四號宋體,單倍行距。紙張一律采用A4的紙張。
實驗報告書寫說明
實驗報告中實驗目的和要求、實驗儀器和設備、實驗內容與過程、實驗結果與分析這四項內容為必需項。教師可根據學科特點和實驗具體要求增加項目。
填寫注意事項
(1)細致觀察,及時、準確、如實記錄。(2)準確說明,層次清晰。
(3)盡量采用專用術語來說明事物。
(4)外文、符號、公式要準確,應使用統一規定的名詞和符號。(5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經發現,以零分論處。
實驗報告批改說明
實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用五級記分制或百分制,按《金陵科技學院課堂教學實施細則》中作業批閱成績評定要求執行。
實驗報告裝訂要求
實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。
金陵科技學院實驗報告
實驗項目名稱: C#基礎編程 實驗學時: 6 同組學生姓名: 實驗地點: 1318 實驗日期: 10月5日-10月19日 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗1 C#基礎編程
一、實驗目的
1、熟悉Visual Studio.NET開發環境。
2、掌握C#應用程序的基本操作過程。
3、掌握C#的數據類型,運算符以及表達式的使用。
4、掌握分支和循環語句的使用方法。
5、掌握一維數組,二維數組及數組型數組的使用。
二、實驗要求
(1)編寫程序要規范、正確,上機調試過程和結果要有記錄(2)做完實驗后給出本實驗的實驗報告。
三、實驗設備、環境
安裝有Visual Studio.NET軟件。
四、實驗步驟
1、分析題意。
2、根據題目要求,新建項目。
3、編寫并輸入相關的程序代碼。
5、運行與調試項目。
6、保存項目。
五、實驗內容
1、編寫一個簡單的控制臺應用程序,打印一行文字(如你的姓名)。
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、編寫一個簡單的Windows應用程序,在窗體Load事件中書寫代碼,標簽中顯示你的姓名。
using System;using System.Collections.Generic;using System.ComponentModel;
金陵科技學院實驗報告
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、編寫一個一個程序,用來判斷輸入的是大寫字母,小寫字母,數字還是其他的字符。
using System;using System.Collections.Generic;using System.Text;
namespace one.third {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“請輸入一個字符:”);
char c = Convert.ToChar(Console.ReadLine());
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
Console.WriteLine(“這是一個字母”);
if(char.IsDigit(c))
Console.WriteLine(“這是一個數字”);
金陵科技學院實驗報告
}
} }
4、分別用while,do-while,for循環求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的自然數之和為:” + 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的自然數的和為:” + sum);
}
}
金陵科技學院實驗報告
} 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的自然數的和為:” + sum);
}
} }
5、定義一個一維數組,用隨機數為此賦值,用foreach循環輸出其中的內容。
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、實現二維數組的輸入和輸出。
using System;using System.Collections.Generic;using System.Linq;
金陵科技學院實驗報告
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、實現數組型數組的輸入和輸出。
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]);
}
}
}
} }
六、實驗體會(遇到問題及解決辦法,編程后的心得體會)
剛開始編程的時候覺得無從下手,盡管我們已經學了好幾種高級編程語言,但每個都
金陵科技學院實驗報告
有其獨特的地方,稍不留神就會混淆。
通過這次實驗,我體會到課后復習鞏固的重要性。在編程的時候,很多內容都不記得,需要去翻書。不得不說,實驗是鞏固課程的好方法!本次實驗,我熟悉Visual Studio.NET開發環境;掌握了C#應用程序的基本操作過程;掌握了C#的數據類型,運算符以及表達式的使用;掌握了分支和循環語句的使用方法以及一維數組,二維數組及數組型數組的使用。
金陵科技學院實驗報告
實驗項目名稱: 類與對象 實驗學時: 6 同組學生姓名: 實驗地點: 1318 實驗日期: 10月26日-11月9日 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗2 類與對象
一、實驗目的、要求
(1)掌握類的定義和使用;
(2)掌握類的數據成員,屬性的定義和使用;
(3)掌握方法的定義,調用和重載以及方法參數的傳遞;(4)掌握構造函數的定義和使用。
二、實驗要求
(1)編寫程序要規范、正確,上機調試過程和結果要有記錄;(2)做完實驗后給出本實驗的實驗報告。
三、實驗設備、環境
安裝有Visual Studio.NET軟件。
四、實驗步驟
1、分析題意;
2、根據題目要求,新建項目;
3、編寫并輸入相關的程序代碼;
5、運行與調試項目;
6、保存項目。
五、實驗內容
1、定義一個方法,實現兩個數的交換(分別把參數按值傳遞和按引用傳遞)。
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());
金陵科技學院實驗報告
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、定義一個方法,實現數組的排序。using System;using System.Collections.Generic;using System.Text;
namespace second.two {
class Program
{
string.Format(”
按
值
傳
參
交
換
之
金陵科技學院實驗報告
public class sort
{
public void change(int[] a)
{
Console.WriteLine(“排序前,數組順序為:”);
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);
金陵科技學院實驗報告
}
} }
5、用構造函數重載,實現矩形的面積,圓的面積,梯形的面積;
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;
金陵科技學院實驗報告
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、設計一個windows應用程序,在該程序中定義一個學生類和班級類,以處理每個學生的學號,姓名,語文,數學和英語成績,要求:
1)能查詢每個學生的總成績。2)能顯示全班前三名的名單。
3)能顯示單科成績最高分和不及格的學生名單。4)能統計全班學生的平均成績。
5)能顯示各科成績不同分數段的學生人數的百分比。
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
{
金陵科技學院實驗報告
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;
}
//給所有成績排序,用后面實現前三名的排名
金陵科技學院實驗報告
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;
金陵科技學院實驗報告
}
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 += “單科數學最高:” + stu[HighScore(0)].name + “n”;
Maxer += “ 單科語文最高:” + stu[HighScore(1)].name + “n”;
Maxer += “ 單科英語最高:” + stu[HighScore(2)].name + “n”;
Loser += “單科數學掛科名單:” +BuhgName(0)+ “n”;
Loser += “單科語文掛科名單:” + BuhgName(1)+ “n”;
Loser += “單科英語掛科名單:” + BuhgName(2)+ “n”;
金陵科技學院實驗報告
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;
}
//各科成績不同分數段的學生百分比
//英語成績各分數段百分比
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++;
}
金陵科技學院實驗報告
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;
}
//數學成績各分數段百分比
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))
{
金陵科技學院實驗報告
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(“數學成績百分比:” + “n” + “90~100:” + per1 + “ 80~90:” + per2 + “ 80~70:” + per3 + “ 70~60:” + per4 + “ 60以下的:” + per5);
}
//英語成績各分數段百分比
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++;
金陵科技學院實驗報告
}
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(“數學成績百分比:” + “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;
金陵科技學院實驗報告
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(”不存在這個人!“);}
}
private void btnFinish_Click(object sender, EventArgs e)
{
label7.Text = ”前3名:“+”n“;
” + 金陵科技學院實驗報告
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”;
}
} }
六、實驗體會(遇到問題及解決辦法,編程后的心得體會)
通過本次實驗,我掌握了類的定義與使用;掌握了類的數據成員,屬性的定義和使用;掌握了方法的定義,調用和重載以及方法參數的傳遞以及構造函數的定義和使用。值得注意的是:本次實驗中return的使用以及所在的位置,類型轉換時也經常用到
金陵科技學院實驗報告
實驗項目名稱: 繼承與多態 實驗學時: 6 同組學生姓名: 實驗地點: 1318 實驗日期: 11月16日-11月30日 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗3 繼承與多態
一、實驗目的、要求
(1)掌握類的繼承性與多態性;
(2)掌握虛方法的定義以及如何使用虛方法實現多態;(3)掌握抽象類的定義以及如何使用抽象方法實現多態;
二、實驗要求
(1)編寫程序要規范、正確,上機調試過程和結果要有記錄;(2)做完實驗后給出本實驗的實驗報告。
三、實驗設備、環境
安裝有Visual Studio.NET軟件。
四、實驗步驟
1、分析題意;
2、根據題目要求,新建項目;
3、編寫并輸入相關的程序代碼;
5、運行與調試項目;
6、保存項目。
五、實驗內容
1、設計一個Windows應用程序,在該程序中首先構造一個學生基本類,再分別構造小學生、中學生、大學生派生類,當輸入相關數據,單擊不用的按鈕時,將分別創建不同的學生類對象,并輸出當前學生的總人數,該學生的姓名,學生類型,平均成績。
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;
金陵科技學院實驗報告
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;
金陵科技學院實驗報告
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窗體內的代碼:
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
{
金陵科技學院實驗報告
public Form1()
{
InitializeComponent();
}
private void btnSmall_Click(object sender, EventArgs e)
{
Pupil),Convert.ToDouble(txtMath.Text));
lblShow.Text += “總人數:” +Convert.ToString(Student.number)+ “,” + “姓名:” + p.Name + “,” + “小學生” + “,” + “平均成績為:” + 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 += “總人數:” + Convert.ToString(Student.number)+ “,” + “姓名:” + m.Name + “,” + “中學生” + “,” + “平均成績為:” + m.Average()+ “n”;
}
private void btnBig_Click(object sender, EventArgs e)
{
College Convert.ToInt32(txtAge.Text), Convert.ToDouble(txtMath.Text));
lblShow.Text += “總人數:” + Convert.ToString(Student.number)+ “,” + “姓名:” + c.Name + “,” + “大學生” + “,” + “平均成績為:” + c.Average()+ “n”;
}
}
c
=
new
College(txtName.Text,Convert.ToDouble(txtChinese.Text),金陵科技學院實驗報告
}
2、設計一個Windows應用程序,在該程序中定義平面圖形抽象類和派生類圓,矩形和三角形。
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;
}
金陵科技學院實驗報告
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()
{
金陵科技學院實驗報告
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、定義一個Person類,包含姓名字段和一個方法,早上8:30學生開始上課,教師開始講課。分別用new關鍵字,虛方法,抽象類實現多態性。
New關鍵字: using System;using System.Collections.Generic;using System.Text;
namespace third.three {
class Program
{
static void Main(string[] args)
金陵科技學院實驗報告
{
Student s=new Student(“學生”);
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;
金陵科技學院實驗報告
namespace third.three.two {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“張三”,“學生”);
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
金陵科技學院實驗報告
{
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(“張三”, “學生”);
PersonWork(s);
Teacher t = new Teacher(“李斯”, “教師”);
PersonWork(t);
}
private static void PersonWork(Person person)
{
Console.WriteLine(person.Work());
}
}
public abstract class Person
金陵科技學院實驗報告
{
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);
}
} }
金陵科技學院實驗報告
六、實驗體會(遇到問題及解決辦法,編程后的心得體會)
通過本次實驗,我理解了類的繼承性與多態性;掌握了虛方法的定義以及如何用虛方法來實現多態;掌握了抽象類的定義以及如何用抽象方法來實現多態。這次實驗與前兩次不同,采用Windows應用程序,既涉及到代碼段也涉及到界面的設計。所以,勉強通過實驗。
金陵科技學院實驗報告
實驗項目名稱: 接口、文件和流 實驗學時: 6 同組學生姓名: 實驗地點: A205 實驗日期: 12月7日-12月21日 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗4 接口、文件和流
一、實驗目的
(1)掌握接口的定義及使用方法;
(2)掌握流,序列化和反序列化的概念和使用方法;(3)掌握流文件的讀寫操作類及其使用方法;
(4)掌握OpenFileDialog,SaveFileDialog等控件的使用。
二、實驗要求
(1)編寫程序要規范、正確,上機調試過程和結果要有記錄;(2)做完實驗后給出本實驗的實驗報告。
三、實驗設備、環境
安裝有Visual Studio.NET軟件。
四、實驗步驟
1、分析題意;
2、根據題目要求,新建項目;
3、編寫并輸入相關的程序代碼;
5、運行與調試項目;
6、保存項目。
五、實驗內容
1、定義一個Person類,包含姓名字段和一個方法,早上8:30學生開始上課,教師開始講課。用接口來實現。
using System;using System.Collections.Generic;using System.Text;namespace Test4_1 {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“張三”,“學生”);
Console.WriteLine(s.Work());
Teacher t = new Teacher(“李四”,“老師”);
Console.WriteLine(t.Work());
}
金陵科技學院實驗報告
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
{
金陵科技學院實驗報告
get { return string.Format(“學生”);}
}
public Teacher(string name, string type)
: base(name)
{
this.name = name;
}
public string Work()
{
return string.Format(“Person{0}:早上8:30開始講課”, name);
}
}
} }
2、聲明一個接口Iplayer,包含5個接口方法:播放,停止,暫停,上一首和下一首。在該程序中定義一個MP3播放器類和一個AVI播放器類,以實現該接口。
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()
金陵科技學院實驗報告
{
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歌曲!”;
}
金陵科技學院實驗報告
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;
}
金陵科技學院實驗報告
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、實現對文本文件的讀寫操作,用文件操作控件打開和保存文件。
using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;namespace Test4_3
金陵科技學院實驗報告
{
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、實現對二進制文件的讀寫操作。
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
金陵科技學院實驗報告
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(“學號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
金陵科技學院實驗報告
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、實現對象序列化和反序化。
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;
=
金陵科技學院實驗報告
}
} } 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;
金陵科技學院實驗報告
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程序設計實驗報告
浙江理工大學信息學院
C程序設計實驗報告
實驗名稱: 學時安排:
實驗類別:
實驗要求:1人1組
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、實驗目的
二、實驗設備介紹
軟件需求: Visual C++ 6.0或CFree3.5以上版本
硬件需求: 對于硬件方面的要求,建議配置是Pentium III 450以上的CPU處理器,64MB以上的內存,200MB的自由硬盤空間、CD-ROM驅動器、能支持24位真彩色的顯示卡、彩色顯示器、打印機。
三、實驗內容
四、程序清單
五、運行結果
六、實驗心得