C語言程序設計第三次(2.5)實驗報告解讀_第1頁
C語言程序設計第三次(2.5)實驗報告解讀_第2頁
C語言程序設計第三次(2.5)實驗報告解讀_第3頁
C語言程序設計第三次(2.5)實驗報告解讀_第4頁
C語言程序設計第三次(2.5)實驗報告解讀_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言程序設計實驗報告專業(yè) 班級日期 11月26日成績實驗組別 第 3(2.7)次實驗 指導教師李開學生姓名 學號同組人姓名實驗名稱數(shù)組實驗亠、實驗目的(1)掌握數(shù)組的說明、初始化和使用。(2)掌握一維數(shù)組作為函數(shù)參數(shù)時實參和形參的用法。(3)掌握字符串處理函數(shù)的設計,包括串操作函數(shù)及數(shù)字串與數(shù)之間轉換函數(shù)實現(xiàn)算 法。(4)掌握基于分治策略的二分查找算法和選擇法排序算法的思想,以及相關算法的實 現(xiàn)。1、實驗任務1源程序改錯下面程序用來將數(shù)組a中元素按升序排序后輸出。分析程序中存在的問題,并對程序進行修改,使之能夠正確完成任務。#in cludevoid mai n(void)int a10 =

2、 27, 13, 5, 32, 23, 3, 17, 43, 55, 39;void sort(i nt ,i nt);int i;sort(a0,10);for(i = 0; i 10; i+)prin tf(%6d,ai);prin tf(n);void sort(i nt b, int n)int i, j, t;for (i = 0; i n - 1; i+)for ( j = 0; j n - i - 1; j+)if(bj bj+1)t = bj, bj = bj+1, bj+1 = t;2.源程序完善、修改、替換(1 )下面程序用于求解瑟夫問題。M個人圍成一圈,從第一個人開始依次

3、從1至N循環(huán)報數(shù),每當報數(shù)為N時報數(shù)人出圈,直到圈中只剩下一個人為止。請在下劃線處填寫合適的代 碼來完善該程序。#in clude#defi ne M 10#defi ne N 3void mai n(void)int aM, bM;int i, j, k; for(i = 0; i 1; i-) /*i表示圈中人個數(shù),初始為M個,剩for(k = 1; k i - 1) j = 0;/* bM-i = j? aj-1: ai-1;數(shù)組b*/ if(j)for(k = -j; k i; k+) ak=ak+1; for(i = 0;i M 1; i+)printf(“ %6d , bi);pr

4、intf( “ 6dn” , a0);/*數(shù)組a存放圈中人的編號,數(shù)組 b存放出圈人的編號*/*對圈中人按順序編號1 M*/1個人時結束循環(huán);j表示當前報數(shù)人的位置*/*1至N報數(shù)*/最后一個人報數(shù)后第一個人接著報,形成一個圈*/*將報數(shù)為N的人的編號存入/*壓縮數(shù)組a,使報數(shù)為N的人出圈*/*按次序輸出出圈人的編號 */*輸出圈中最后一個人的編號*/(2 )上面程序用數(shù)組元素的值表示圈中人的編號,每當有人出圈時都要壓縮數(shù)組,這種算 法不夠精煉。如果采用做標記的辦法,即每當有人出圈時對相應數(shù)組元素做標記,省掉壓縮數(shù)組的時間,這樣處理效率更高一些。請采用做標記的辦法修改(1)中程序,使修改后的程

5、序與(1)中程序具有相同的功能。3 跟蹤調試#in cludevoid strn cat(char ,char ,i nt);void mai n(void)char a50=The adopted symbol is ”,b27=abcdefghijkl mn opqrstuvwxyz; strn cat(a, b, 4);prin tf(%sn,a);void strn cat(char s,char t, int n)int i = 0, j;while(si+);for(j = 0; j n & tj;)si+ = tj+;si = 0;函數(shù)strncat(s,t,n)本來應該將字符數(shù)

6、組 t的前n個字符連接到字符數(shù)組s中字符串的尾部。但函數(shù) strncat在定義時代碼有誤,不能實現(xiàn)上述功能。按下面的要求進行操作, 回答問題并排除錯誤。(1) 單步執(zhí)行。進入函數(shù)strncat后觀察表達式s、t和i。當光條落在for語句所在行時, i為何值?當光條落在 strncat函數(shù)塊結束標記(右花括號)所在行時,s、t分別為何值?(2) 分析函數(shù)出錯的原因,排除錯誤,使函數(shù)正確實現(xiàn)功能,最后寫出程序的輸出結果。4. 程序設計(1) 編寫程序從鍵盤讀取數(shù)據(jù),對一個 3 4矩陣進行賦值,求其轉置矩陣,然后輸出原矩 陣和轉置矩陣。(2) 輸入一個整數(shù),將它在內(nèi)存中二進制表示的每一位轉換成為對應

7、的數(shù)字字符,存放到 一個字符數(shù)組中,然后輸出該整數(shù)的二進制表示。(3) 輸入n個學生的姓名和 C語言課程的成績,將成績按從高到低的次序排序,姓名同時作相應調整,輸出排序后學生的姓名和C語言課程的成績。然后,輸入一個C語言課程成績值,用二分查找進行搜索。如果查找到有該成績,輸出該成績同學的姓名和C語言課程的成績;否則輸出提示not fou nd!”5. 選做題(1 )編寫函數(shù)strnins(s,t,n)。它將字符數(shù)組t中的字符串插入到字符數(shù)組s中字符串的第n個字符的后面。(2)八皇后問題,在8*8方格國際象棋盤上放置8個皇后,任意兩個皇后不能位于同一行、同一列或同一斜線(正斜線或反斜線)上,輸出

8、所有可能的放法。三、實驗步驟及結果(要求給出源程序和程序運行結果。另外,根據(jù)實驗內(nèi)容,記錄編輯、編譯、鏈接、調試程 序的操作過程和實驗現(xiàn)象)1. 源程序改錯下面程序用來將數(shù)組a中元素按升序排序后輸出。分析程序中存在的問題,并對程序進行修改,使之能夠正確完成任務。#in cludevoid mai n(void)int a10 = 27, 13, 5, 32, 23, 3, 17, 43, 55, 39;void sort(i nt ,i nt);int i;sort(a0,10);for(i = 0; i 10; i+)prin tf(%6d,ai);prin tf(n);void sort(

9、i nt b, int n)int i, j, t;for (i = 0; i n - 1; i+) for ( j = 0; j n - i - 1; j+)if(bj bj+1)t = bj, bj = bj+1, bj+1 = t; 2. 源程序完善、修改、替換M個人圍成一圈,從第一個人開始依次從1至N循環(huán)報直到圈中只剩下一個人為止。請在下劃線處填寫合適的代(1 )下面程序用于求解瑟夫問題。 數(shù),每當報數(shù)為N時報數(shù)人出圈, 碼來完善該程序。#in clude#defi ne M 10#defi ne N 3void mai n(void)/*i/*數(shù)組a存放圈中人的編號,數(shù)組 b存放出圈

10、人的編號*/int aM, bM;int i, j, k;for(i = 0; i 1; i-)表示圈中人個數(shù),初始為M個,剩1個人時結束循環(huán);j表示當前報數(shù)人的位置*/for(k = 1; k i - 1) j = 0;/*最后一個人報數(shù)后第一個人接著報,形成一個圈bM-i = j? : _;if(j)for(k = -j; k i; k+)/*對圈中人按順序編號1 M*/*將報數(shù)為N的人的編號存入數(shù)組b*/*壓縮數(shù)組a,使報數(shù)為N的人出圈*/*/*按次序輸出出圈人的編號 */*輸出圈中最后一個人的編號*/for(i = 0;i M 1; i+)printf(“ %6d , bi);prin

11、tf( “ 6dn” , a0);(2 )上面程序用數(shù)組元素的值表示圈中人的編號,每當有人出圈時都要壓縮數(shù)組,這種算 法不夠精煉。如果采用做標記的辦法,即每當有人出圈時對相應數(shù)組元素做標記,省掉壓縮數(shù)組的時間,這樣處理效率更高一些。請采用做標記的辦法修改(1)中程序,使修改后的程序與(1)中程序具有相同的功能。3 跟蹤調試#in cludevoid strn cat(char ,char ,i nt);void mai n(void)char a50=The adopted symbol is ”,b27=abcdefghijkl mn opqrstuvwxyz; strn cat(a, b,

12、 4);prin tf(%sn,a);void strn cat(char s,char t, int n) int i = 0, j;while(si+);for(j = 0; j n & tj;)si+ = tj+;si = O: 函數(shù)strncat(s,t,n) 本來應該將字符數(shù)組 t的前n個字符連接到字符數(shù)組s中字符串的尾部。但函數(shù) strncat在定義時代碼有誤,不能實現(xiàn)上述功能。按下面的要求進行操作, 回答問題并排除錯誤。(1)單步執(zhí)行。進入函數(shù)strncat后觀察表達式s、t和i。當光條落在for語句所在行時, i為何值?當光條落在 strncat函數(shù)塊結束標記(右花括號)所在行

13、時,s、t分別為何值?(1) i=23WatchesXLocal varia| Li = 23i- j = 0jA- Function Argumentss = 0K28fede 口電i t = 0x28fec3 *abc匚n = 4s,t值如下圖所示W(wǎng)atches(2)分析函數(shù)出錯的原因,排除錯誤,使函數(shù)正確實現(xiàn)功能,最后寫出程序的輸出結果。#in cludevoid strn cat(char s,char t,i nt n);int main( void)char a50=The adopted symbol is ”,b27=abcdefghijkl mn opqrstuvwxyz;

14、strn cat(a, b, 4);prin tf(%sn,a);return 0;void strn cat(char s,char t, int n)int i = 0, j;while(si+);for(j = 0; j n & tj;i+,j+)si-1 = tj;4 程序設計(1)編寫程序從鍵盤讀取數(shù)據(jù),對一個 3 4矩陣進行賦值,求其轉置矩陣,然后輸出原矩 陣和轉置矩陣。#in cludeint main( void)int a34,b43,i,t;for(i=0;i3;i+)for(t=0;t4;t+)scan f(%d, &ait);for(i=0;i4;i+)for(t=0;

15、t3;t+) bit=ati;prin tf(i nput an); for(i=0;i3;i+)for(t=0;t4;t+) prin tf(%6d,ait); prin tf(n ”);printf(now in put bn ”); for(i=0;i4;i+)for(t=0;t3;t+) prin tf(%6d,bit); prin tf(n ”);return 0;I Chdebug_lb i nDebugd e bu g_l.exe1 2 3 4 B input a1(i 7 B9 10 11 12104812pcnw ioput56 ?flreturned 9 execution

16、 tine : 10.951 &ProcessPress any key to continue(2)輸入一個整數(shù),將它在內(nèi)存中二進制表示的每一位轉換成為對應的數(shù)字字符,存放到 一個字符數(shù)組中,然后輸出該整數(shù)的二進制表示。#include int main( void)int n,i,t,s=0,a50;prin tf(i nput an int nu mber as you like! n); scan f(%d,&n);for(; n!=0;s+)i=n %2;n=n/2;as=i;for(t=s-1;t=0;t-)prin tf(%4d,at);return 0;(3) 輸入n個學生的姓

17、名和 C語言課程的成績,將成績按從高到低的次序排序,姓名同時 作相應調整,輸出排序后學生的姓名和C語言課程的成績。然后,輸入一個C語言課程成績值,用二分查找進行搜索。如果查找到有該成績,輸出該成績同學的姓名和C語言課程的成績;否則輸出提示not fou nd!” #in clude#defi ne M 3int search(float m,float b); void sort(char *a,float b,i nt n); int main( void)char aM30; float bM;int i;for(i=0;iM;i+)prin tf(i nput n amen);scan

18、f(%s,ai);prin tf(i nput the gradesn);scan f(%f,&bi);sort (a0,b,M);for(i=0;iM;i+)prin tf(Name:%s”,ai);prin tf(%fn,bi);float t;prin tf(Search By Grades!n);scan f(%f, &t);if(search(t,b)=0)prin tf( not fou nd!n);else prin tf(The person is %sn ”,asearch(t,b);prin tf(A nd his grades are %fn,bsearch(t,b);r

19、eturn 0;void sort(char a,float b,i nt n)int o,k;for(o=0;on; o+)char s;for(k=0;kbk+1) bk=bk+bk+1,bk+1=bk-bk+1,bk=ak-bk+1; s=ak;ak=ak+1;ak+1=s;int search(float m,float b)int low=0,high=M-1,mid;while(blow=bhigh)mid=(low+high)/2;if(m=bmid)return mid;else if(mbmid)high=mid-1;elselow=mid+1; return 0;D:Cd

20、eb ugbinDebugdebug,exeInput dau id input 78 input erInput91 input 9Li inputnamethe gradesnameChe gradesnamethe gradesName-dauid 78.000000Nane:er 91.000000Nane:vu 98.000000 Search By Grades?98The皋on is yuAlnd his grades arfi 98.000300Process returned 0 execution time : 18.249 s Press 曰ny key to conti

21、nue.5 選做題。它將字符數(shù)組t中的字符串插入到字符數(shù)組s中字符串(1 )編寫函數(shù) strni ns(s,t ,n) 的第n個字符的后面。(main函數(shù)未寫)char *str nin s(char s,char t,i nt n) int i=O,j=O,p,q,r,u; while(si!=O)i+; while(tj!=O)j+; if(i n+j-1;p-,q-)sp=sq; for(r=n,u=0;r *t i*t rt Crtrpopopoi popopopopopno poppopotFtFtrpopopopopopopopopopoppopotrtititPtrtFttiti Process returned 0 i&xecution time : 13.339 sPresskey to cant inue(2)八皇后問題,在8*8方格國際象棋盤上放置 8個皇后, 同一列或同一斜線(正斜線或反斜線)上,輸出所有可能的放法。任意兩個皇后不能位于同一行、#in clu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論