C語言程序設(shè)計(jì)第三次(2.5)實(shí)驗(yàn)報(bào)告_第1頁
C語言程序設(shè)計(jì)第三次(2.5)實(shí)驗(yàn)報(bào)告_第2頁
C語言程序設(shè)計(jì)第三次(2.5)實(shí)驗(yàn)報(bào)告_第3頁
C語言程序設(shè)計(jì)第三次(2.5)實(shí)驗(yàn)報(bào)告_第4頁
C語言程序設(shè)計(jì)第三次(2.5)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

2、oid main(void) int a10 = 27, 13, 5, 32, 23, 3, 17, 43, 55, 39; void sort(int ,int); int i; sort(a0,10); for(i = 0; i < 10; i+) printf("%6d",ai); printf("n");void sort(int 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

3、 = bj, bj = bj+1, bj+1 = t;2. 源程序完善、修改、替換(1)下面程序用于求解瑟夫問題。M個(gè)人圍成一圈,從第一個(gè)人開始依次從1至N循環(huán)報(bào)數(shù),每當(dāng)報(bào)數(shù)為N時(shí)報(bào)數(shù)人出圈,直到圈中只剩下一個(gè)人為止。請?jiān)谙聞澗€處填寫合適的代碼來完善該程序。#include<stdio.h>#define M 10#define N 3void main(void) int aM, bM;/*數(shù)組a存放圈中人的編號,數(shù)組b存放出圈人的編號*/int i, j, k; for(i = 0; i < M; i+)/*對圈中人按順序編號1M*/ ai = i + 1; for(i

4、= M, j = 0; i > 1; i-)/*i表示圈中人個(gè)數(shù),初始為M個(gè),剩1個(gè)人時(shí)結(jié)束循環(huán);j表示當(dāng)前報(bào)數(shù)人的位置*/ for(k = 1; k <= N; k+)/*1至N報(bào)數(shù)*/ if(+j > i - 1) j = 0;/*最后一個(gè)人報(bào)數(shù)后第一個(gè)人接著報(bào),形成一個(gè)圈*/ bM-i = j? aj-1 : ai-1 ;/*將報(bào)數(shù)為N的人的編號存入數(shù)組b*/ if(j)for(k = -j; k < i; k+)/*壓縮數(shù)組a,使報(bào)數(shù)為N的人出圈*/ ak=ak+1 ; for(i = 0;i < M 1; i+)/*按次序輸出出圈人的編號*/ print

5、f(“%6d”, bi); printf(“%6dn”, a0);/*輸出圈中最后一個(gè)人的編號*/(2)上面程序用數(shù)組元素的值表示圈中人的編號,每當(dāng)有人出圈時(shí)都要壓縮數(shù)組,這種算法不夠精煉。如果采用做標(biāo)記的辦法,即每當(dāng)有人出圈時(shí)對相應(yīng)數(shù)組元素做標(biāo)記,省掉壓縮數(shù)組的時(shí)間,這樣處理效率更高一些。請采用做標(biāo)記的辦法修改(1)中程序,使修改后的程序與(1)中程序具有相同的功能。3跟蹤調(diào)試#include<stdio.h>void strncat(char ,char ,int);void main(void) char a50="The adopted symbol is &qu

6、ot;,b27="abcdefghijklmnopqrstuvwxyz" strncat(a, b, 4);printf("%sn",a);void strncat(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)本來應(yīng)該將字符數(shù)組t的前n個(gè)字符連接到字符數(shù)組s中字符串的尾部。但函數(shù)strncat在定義時(shí)代碼有誤,不能實(shí)現(xiàn)上述功能。按下面的要求進(jìn)行操作,回

7、答問題并排除錯(cuò)誤。(1)單步執(zhí)行。進(jìn)入函數(shù)strncat后觀察表達(dá)式s、t和i。當(dāng)光條落在for語句所在行時(shí),i為何值?當(dāng)光條落在strncat函數(shù)塊結(jié)束標(biāo)記(右花括號 )所在行時(shí), s、t分別為何值?(2)分析函數(shù)出錯(cuò)的原因,排除錯(cuò)誤,使函數(shù)正確實(shí)現(xiàn)功能,最后寫出程序的輸出結(jié)果。4程序設(shè)計(jì)(1)編寫程序從鍵盤讀取數(shù)據(jù),對一個(gè)3´4矩陣進(jìn)行賦值,求其轉(zhuǎn)置矩陣,然后輸出原矩陣和轉(zhuǎn)置矩陣。(2)輸入一個(gè)整數(shù),將它在內(nèi)存中二進(jìn)制表示的每一位轉(zhuǎn)換成為對應(yīng)的數(shù)字字符,存放到一個(gè)字符數(shù)組中,然后輸出該整數(shù)的二進(jìn)制表示。(3)輸入n個(gè)學(xué)生的姓名和C語言課程的成績,將成績按從高到低的次序排序,姓名同

8、時(shí)作相應(yīng)調(diào)整,輸出排序后學(xué)生的姓名和C語言課程的成績。然后,輸入一個(gè)C語言課程成績值,用二分查找進(jìn)行搜索。如果查找到有該成績,輸出該成績同學(xué)的姓名和C語言課程的成績;否則輸出提示“not found!”。5選做題(1)編寫函數(shù)strnins(s,t,n)。它將字符數(shù)組 t中的字符串插入到字符數(shù)組 s中字符串的第n個(gè)字符的后面。(2)八皇后問題,在8*8方格國際象棋盤上放置8個(gè)皇后,任意兩個(gè)皇后不能位于同一行、同一列或同一斜線(正斜線或反斜線)上,輸出所有可能的放法。三、實(shí)驗(yàn)步驟及結(jié)果(要求給出源程序和程序運(yùn)行結(jié)果。另外,根據(jù)實(shí)驗(yàn)內(nèi)容,記錄編輯、編譯、鏈接、調(diào)試程序的操作過程和實(shí)驗(yàn)現(xiàn)象)1源程序

9、改錯(cuò)下面程序用來將數(shù)組a中元素按升序排序后輸出。分析程序中存在的問題,并對程序進(jìn)行修改,使之能夠正確完成任務(wù)。#include<stdio.h>void main(void) int a10 = 27, 13, 5, 32, 23, 3, 17, 43, 55, 39; void sort(int ,int); int i; sort(a0,10); for(i = 0; i < 10; i+) printf("%6d",ai); printf("n");void sort(int b, int n) int i, j, t; for

10、(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個(gè)人圍成一圈,從第一個(gè)人開始依次從1至N循環(huán)報(bào)數(shù),每當(dāng)報(bào)數(shù)為N時(shí)報(bào)數(shù)人出圈,直到圈中只剩下一個(gè)人為止。請?jiān)谙聞澗€處填寫合適的代碼來完善該程序。#include<stdio.h>#define M 10#define N 3void main(void) int aM, bM;/*數(shù)組a存放圈中人的編號,數(shù)組b存放

11、出圈人的編號*/int i, j, k; for(i = 0; i < M; i+)/*對圈中人按順序編號1M*/ ai = i + 1; for(i = M, j = 0; i > 1; i-)/*i表示圈中人個(gè)數(shù),初始為M個(gè),剩1個(gè)人時(shí)結(jié)束循環(huán);j表示當(dāng)前報(bào)數(shù)人的位置*/ for(k = 1; k <= N; k+)/*1至N報(bào)數(shù)*/ if(+j > i - 1) j = 0;/*最后一個(gè)人報(bào)數(shù)后第一個(gè)人接著報(bào),形成一個(gè)圈*/ bM-i = j? : ;/*將報(bào)數(shù)為N的人的編號存入數(shù)組b*/ if(j)for(k = -j; k < i; k+)/*壓縮數(shù)組a

12、,使報(bào)數(shù)為N的人出圈*/ ; for(i = 0;i < M 1; i+)/*按次序輸出出圈人的編號*/ printf(“%6d”, bi); printf(“%6dn”, a0);/*輸出圈中最后一個(gè)人的編號*/(2)上面程序用數(shù)組元素的值表示圈中人的編號,每當(dāng)有人出圈時(shí)都要壓縮數(shù)組,這種算法不夠精煉。如果采用做標(biāo)記的辦法,即每當(dāng)有人出圈時(shí)對相應(yīng)數(shù)組元素做標(biāo)記,省掉壓縮數(shù)組的時(shí)間,這樣處理效率更高一些。請采用做標(biāo)記的辦法修改(1)中程序,使修改后的程序與(1)中程序具有相同的功能。3跟蹤調(diào)試#include<stdio.h>void strncat(char ,char ,

13、int);void main(void) char a50="The adopted symbol is ",b27="abcdefghijklmnopqrstuvwxyz" strncat(a, b, 4);printf("%sn",a);void strncat(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)本來應(yīng)該將字符數(shù)組t的

14、前n個(gè)字符連接到字符數(shù)組s中字符串的尾部。但函數(shù)strncat在定義時(shí)代碼有誤,不能實(shí)現(xiàn)上述功能。按下面的要求進(jìn)行操作,回答問題并排除錯(cuò)誤。(1) 單步執(zhí)行。進(jìn)入函數(shù)strncat后觀察表達(dá)式s、t和i。當(dāng)光條落在for語句所在行時(shí),i為何值?當(dāng)光條落在strncat函數(shù)塊結(jié)束標(biāo)記(右花括號 )所在行時(shí), s、t分別為何值?(1) i=23s,t值如下圖所示(2)分析函數(shù)出錯(cuò)的原因,排除錯(cuò)誤,使函數(shù)正確實(shí)現(xiàn)功能,最后寫出程序的輸出結(jié)果。#include<stdio.h>void strncat(char s,char t,int n);int main(void) char a50

15、="The adopted symbol is ",b27="abcdefghijklmnopqrstuvwxyz" strncat(a, b, 4);printf("%sn",a);return 0;void strncat(char s,char t, int n) int i = 0, j;while(si+) ;for(j = 0; j < n && tj;i+,j+) si-1 = tj;4程序設(shè)計(jì)(1)編寫程序從鍵盤讀取數(shù)據(jù),對一個(gè)3´4矩陣進(jìn)行賦值,求其轉(zhuǎn)置矩陣,然后輸出原矩陣和轉(zhuǎn)置矩陣。

16、#include<stdio.h>int main(void) int a34,b43,i,t; for(i=0;i<3;i+) for(t=0;t<4;t+) scanf("%d",&ait); for(i=0;i<4;i+) for(t=0;t<3;t+) bit=ati; printf("input an"); for(i=0;i<3;i+) for(t=0;t<4;t+) printf("%6d",ait); printf("n"); printf(&

17、quot;now input bn"); for(i=0;i<4;i+) for(t=0;t<3;t+) printf("%6d",bit); printf("n"); return 0;(2) 輸入一個(gè)整數(shù),將它在內(nèi)存中二進(jìn)制表示的每一位轉(zhuǎn)換成為對應(yīng)的數(shù)字字符,存放到一個(gè)字符數(shù)組中,然后輸出該整數(shù)的二進(jìn)制表示。#include<stdio.h>int main(void) int n,i,t,s=0,a50; printf("input an int number as you like!n");

18、scanf("%d",&n); for(;n!=0;s+) i=n%2; n=n/2; as=i; for(t=s-1;t>=0;t-) printf("%4d",at); return 0;(3)輸入n個(gè)學(xué)生的姓名和C語言課程的成績,將成績按從高到低的次序排序,姓名同時(shí)作相應(yīng)調(diào)整,輸出排序后學(xué)生的姓名和C語言課程的成績。然后,輸入一個(gè)C語言課程成績值,用二分查找進(jìn)行搜索。如果查找到有該成績,輸出該成績同學(xué)的姓名和C語言課程的成績;否則輸出提示“not found!”。#include<stdio.h>#define M 3in

19、t search(float m,float b);void sort(char *a,float b,int n);int main(void) char aM30; float bM; int i; for(i=0;i<M;i+) printf("input namen"); scanf("%s",ai); printf("input the gradesn"); scanf("%f",&bi); sort(a0,b,M); for(i=0;i<M;i+) printf("Name

20、:%s ",ai); printf("%fn",bi); float t; printf("Search By Grades!n"); scanf("%f",&t); if(search(t,b)=0) printf("not found!n"); else printf("The person is %sn",asearch(t,b); printf("And his grades are %fn",bsearch(t,b); return 0;void

21、sort(char a,float b,int n) int o,k; for(o=0;o<n;o+) char s; for(k=0;k<n-o-1;k+) if(bk>bk+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(m<bmid) high=mid

22、-1; else low=mid+1; return 0;5選做題(1)編寫函數(shù)strnins(s,t,n)。它將字符數(shù)組 t中的字符串插入到字符數(shù)組 s中字符串的第n個(gè)字符的后面。(main函數(shù)未寫)char *strnins(char s,char t,int n)int i=0,j=0,p,q,r,u;while(si!='0')i+;while(tj!='0')j+;if(i<n)printf("n is too big!");elsefor(p=i+j-1,q=i-1;p>n+j-1;p-,q-)sp=sq;for(r=n,u=0;r<n+j;r+)sr=tu+;si+j='0'return s;(2) 八皇后問題,在8*8方格國際象棋盤上放置8個(gè)皇后,任意兩個(gè)皇后不能位于同一行、同一列或同一斜線(正斜線或反斜線)

溫馨提示

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

最新文檔

評論

0/150

提交評論