程序設(shè)計(jì)基礎(chǔ)習(xí)題_第1頁
程序設(shè)計(jì)基礎(chǔ)習(xí)題_第2頁
程序設(shè)計(jì)基礎(chǔ)習(xí)題_第3頁
程序設(shè)計(jì)基礎(chǔ)習(xí)題_第4頁
程序設(shè)計(jì)基礎(chǔ)習(xí)題_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、7.8 習(xí)題 1. 編制一個(gè)C程序,從鍵盤輸入一個(gè)正整數(shù),如果該數(shù)為素?cái)?shù),則輸出該素?cái)?shù),否則輸出該數(shù)的所有因子(除去1與自身)。 2. 編制一個(gè)C程序,從鍵盤輸入一個(gè)正整數(shù)N,然后計(jì)算并輸出 S=最后計(jì)算并輸出 T=其中的整數(shù)部分。 3. 編制一個(gè)C程序,計(jì)算并輸出多項(xiàng)式的值 的值,直到 |Sn-Sn-1|0.000001 為止。其中x從鍵盤輸入。 4. 編制一個(gè)C程序,計(jì)算下列級(jí)數(shù)和: sn=1+(2/1)+(3/2)+(5/3)+(8/5)+(13/8)+(an/an-1)其中n1,由鍵盤輸入;s1=1。 5. 編制一個(gè)C程序,計(jì)算并輸出下列級(jí)數(shù)之和: 其中n與x從鍵盤輸入。 6. 編制一

2、個(gè)C程序,輸出能寫成兩個(gè)數(shù)平方之和的所有三位數(shù)。 7. 如果一個(gè)數(shù)恰好等于它的所有因子(包括1但不包括自身)之和,則稱之為“完數(shù)”。例如,6的因子為1、2、3,且1+2+3=6,即6是一個(gè)“完數(shù)”。編制一個(gè)C程序,計(jì)算并輸出1000以內(nèi)的所有“完數(shù)”之和。 8. 編制一個(gè)C程序,從鍵盤輸入30個(gè)實(shí)數(shù),分別計(jì)算并輸出以下5個(gè)量:所有正數(shù)之和,所有負(fù)數(shù)之和,所有數(shù)的絕對(duì)值之和,正數(shù)的個(gè)數(shù),負(fù)數(shù)的個(gè)數(shù)。 9. 100元錢買100只雞,母雞3元/只,公雞2元/只,小雞0.5元/只。編制一個(gè)C程序,制定買雞方案。 10. 設(shè)A,B,C,D,E五人,每人額頭上貼了一張或黑或白的紙。五人對(duì)坐,每人都可以看到

3、其他人額頭上的紙的顏色,但都不知道自己額頭上的紙的顏色。五人相互觀察后開始說話: A說:我看見有三人額頭上貼的是白紙,一人額頭上貼的是黑紙。 B說:我看見其他四人額頭上貼的都是黑紙。 C說:我看見有一人額頭上貼的是白紙,其他三人額頭上貼的是黑紙。 D說:我看見四人額頭上貼的都是白紙。 E什么也沒說。 現(xiàn)在已知額頭上貼黑紙的人說的都是真話,額頭上貼白紙的人說的都是假話。編制一個(gè)C程序,確定這五人中誰的額頭上貼白紙,誰的額頭上貼黑紙? 11. 尋找1000以內(nèi)最小的10個(gè)素?cái)?shù)與最大的10個(gè)素?cái)?shù)(去掉重復(fù)的素?cái)?shù)),計(jì)算并輸出這20個(gè)素?cái)?shù)之和。 具體要求: (1) 畫出計(jì)算過程的結(jié)構(gòu)化流程圖。 (2)

4、 雖然1000以內(nèi)素?cái)?shù)個(gè)數(shù)超過20個(gè),但仍要求考慮1000以內(nèi)不夠10個(gè)最小素?cái)?shù)與10個(gè)最大素?cái)?shù),以及最小的10個(gè)素?cái)?shù)與最大的10個(gè)素?cái)?shù)有重復(fù)的情況。 (3) 輸出要有文字說明。輸出形式為 zui xiao su shu :素?cái)?shù)1,素?cái)?shù)2,素?cái)?shù)10 zui da su shu : 素?cái)?shù)1,素?cái)?shù)2,素?cái)?shù)10 su shu zhi he : 和的具體值 (4) 在程序內(nèi)部加必要的注釋(至少有三處)。 方法說明: 對(duì)于某個(gè)(從小到大與從大到?。┳匀粩?shù)k,開始時(shí)置標(biāo)志flag為0,然后對(duì)2到中的自然數(shù)j進(jìn)行檢測,當(dāng)發(fā)現(xiàn)j是k的因子,就置flag為1,表示不必再對(duì)別的自然數(shù)進(jìn)行檢測,因?yàn)榇藭r(shí)已經(jīng)可以確定

5、k不是素?cái)?shù)了,只有當(dāng)2到中的所有自然數(shù)都不是k的因子(即flag保持為0)時(shí),說明k為素?cái)?shù),輸出k,并進(jìn)行累加。 12. A、B、C、D、E五人分蘋果。A將所有的蘋果分為五份,將多余的一個(gè)蘋果吃掉后再拿走自己的一份蘋果;B將剩下的蘋果分為五份,將多余的一個(gè)蘋果吃掉后再拿走自己的一份蘋果;C、D、E依次按同樣的方法,將剩下的蘋果分為五份,吃掉多余的一個(gè)蘋果后拿走自己的一份蘋果。編程計(jì)算原來至少有多少個(gè)蘋果?A、B、C、D、E各得到多少個(gè)蘋果? 具體要求: (1) 畫出計(jì)算過程的結(jié)構(gòu)化流程圖。 (2) 輸出要有文字說明。 (3) 在程序內(nèi)部加必要的注釋(至少有三處)。 方法說明: 采用逐步試探的方

6、法。 設(shè)當(dāng)前試探的蘋果數(shù)為n。如果n滿足下列條件: n-1(多余的一個(gè)被吃掉)后要能被5整除; 拿走一份后,余下的四份蘋果數(shù)為4*(n-1)/5。 按上述策略連續(xù)進(jìn)行五次分配,如果每次分配時(shí)均滿足其中的條件,則試探的n即為原來的蘋果數(shù)x。 為了第一次能分配,試探從6開始。 根據(jù)分配策略,最后A,B,C,D,E五人得到的蘋果數(shù)(不包括吃掉的一個(gè)蘋果)可以按如下公式依次計(jì)算: a=(x-1)/5 b=(4*a-1)/5 c=(4*b-1)/5 d=(4*c-1)/5 e=(4*d-1)/5 13. 某單位要在A,B,C,D,E,F(xiàn)六人中選派若干人去執(zhí)行一項(xiàng)任務(wù),選人的條件如下: (1) 若C不去,

7、則B也不去; (2) C和D兩人中去一個(gè); (3) D和E要么都去,要么都不去; (4) A,B,F(xiàn)三人中要去兩個(gè); (5) C和F不能一起去: (6) E和F兩人中至少去一個(gè)。問應(yīng)該選哪幾個(gè)人去? 具體要求: (1) 畫出計(jì)算過程的結(jié)構(gòu)化流程圖。 (2) 輸出要有文字說明。 (3) 在程序內(nèi)部加必要的注釋(至少有三處)。8.5 習(xí)題 1. 編寫一個(gè)函數(shù)sabc(),根據(jù)給定的三角形三條邊長a,b,c,函數(shù)返回三角形的面積。 2. 編寫一個(gè)計(jì)算階乘值的函數(shù)p()(該函數(shù)為雙精度實(shí)型);再編寫一個(gè)主函數(shù),從鍵盤輸入兩個(gè)正整數(shù)m與n(mn),通過調(diào)用函數(shù)p(),計(jì)算 的值(即求 )。 3. 編寫一

8、個(gè)函數(shù),計(jì)算并返回給定正整數(shù)m與n的最大公約數(shù)。 4. 編寫一個(gè)主函數(shù),調(diào)用例8.3中的函數(shù)sushu(),輸出小于1000的最大五個(gè)素?cái)?shù)。 5. 編寫一個(gè)主函數(shù),調(diào)用例8.3中的函數(shù)sushu(),驗(yàn)證6到1000中的所有偶數(shù)均能表示成兩個(gè)素?cái)?shù)之和。 6. 編寫一個(gè)遞歸函數(shù),計(jì)算并返回菲波那契(Fibonacci)數(shù)列中第n項(xiàng)的值。菲波那契數(shù)列的定義如下: Fib(1)=1,F(xiàn)ib(2)=1 Fib(n)=Fib(n-1)+Fib(n-2) 7. 編寫一個(gè)遞歸函數(shù),計(jì)算并返回阿克瑪(Ackermann)函數(shù)值。阿克瑪函數(shù)的定義如下: 其中n,x,y均為非負(fù)整數(shù)。 8. 編寫計(jì)算n!的遞歸函數(shù)

9、。 9. 編寫一個(gè)遞歸函數(shù),其功能是將一個(gè)正整數(shù)n轉(zhuǎn)換成字符串(要求各字符之間用一個(gè)空格分隔)輸出。例如,輸入的正整數(shù)為735,應(yīng)輸出字符串“7 3 5”。其中正整數(shù)在主函數(shù)中從鍵盤輸入,要求判斷其輸入的合理性。 10. 計(jì)算并輸出500以內(nèi)的所有“親密數(shù)”對(duì),并輸出所有“完數(shù)”之和。 具體要求: (1) 編寫一個(gè)函數(shù)facsum(n),返回給定正整數(shù)n的所有因子(包括1但不包括自身)之和。 (2) 編寫一個(gè)主函數(shù),調(diào)用(1)中的函數(shù)facsum(n),尋找并輸出500以內(nèi)的所有“親密數(shù)”對(duì)以及計(jì)算所有“完數(shù)”之和。 (3) 分別畫出函數(shù)facsum(n)和主函數(shù)計(jì)算過程的結(jié)構(gòu)化流程圖。 (4

10、) 在輸出每對(duì)“親密數(shù)”時(shí),要求小數(shù)在前、大數(shù)在后,并去掉重復(fù)的數(shù)對(duì)。例如,220與284是一對(duì)“親密數(shù)”,而284與220也是一對(duì)“親密數(shù)”,此時(shí)只要求輸出220與284這對(duì)“親密數(shù)”。 (5) 輸出要有文字說明(英文或漢語拼音)。輸出時(shí)每對(duì)“親密數(shù)”用一對(duì)圓括號(hào)括起來,兩數(shù)之間用逗號(hào)分隔,且所有的“親密數(shù)”對(duì)占一行。輸出形式為 各對(duì)“親密數(shù)” “完數(shù)”之和 (6) 在程序內(nèi)部加必要的注釋(至少有三處)。 (7) 將兩個(gè)函數(shù)分別放在兩個(gè)文件中進(jìn)行編譯、連接并運(yùn)行。 (8) 將兩個(gè)函數(shù)放在一個(gè)文件中進(jìn)行編譯、連接并運(yùn)行。 方法說明: 如果自然數(shù)M的所有因子(包括1但不包括自身,下同)之和為N,

11、而N的所有因子之和為M,則稱M與N為一對(duì)“親密數(shù)”。例如,6的所有因子之和為1+2+3=6,因此,6與它自身構(gòu)成一對(duì)“親密數(shù)”;又如,220的所有因子之和為1+2+4+5+10+11+20+22+44+55+110=284,而284的所有因子之和為1+2+4+71+142=220,因此,220與284為一對(duì)“親密數(shù)”。 如果一個(gè)自然數(shù)的所有因子之和恰好等于它自身,則稱該自然數(shù)為“完數(shù)”。例如,6不僅與它自身構(gòu)成一對(duì)“親密數(shù)”,且6是一個(gè)“完數(shù)”。 11. 計(jì)算并輸出的值。 具體要求: (1) 編寫一個(gè)計(jì)算k!的遞歸函數(shù),其函數(shù)名返回k!的值。 (2) 編寫一個(gè)主函數(shù),首先從鍵盤輸入m和n的值(

12、要求nm0),然后調(diào)用(1)中的函數(shù)計(jì)算的值。 (3) 在計(jì)算k!的遞歸函數(shù)中,要檢查形參k的合理性,當(dāng)k0時(shí),應(yīng)輸出出錯(cuò)信息,并返回0值。 (4) 在主函數(shù)中應(yīng)檢查從鍵盤輸入的數(shù)據(jù)的合理性,對(duì)于不合理的輸入,應(yīng)輸出出錯(cuò)信息,并不再調(diào)用計(jì)算。 (5) 分別輸入(m, n)=(-3, 7), (0, 0), (1, 7), (9, 13), (9, 4)運(yùn)行你的程序。 3. 利用變步長梯形求積法計(jì)算定積分。 具體要求: (1) 編寫一個(gè)函數(shù)st(a, b, eps)(要求該函數(shù)放在獨(dú)立的文件中),其功能是利用變步長梯形求積法計(jì)算定積分 其中eps為精度要求。 要求畫出該函數(shù)處理的結(jié)構(gòu)化流程圖。

13、(2) 編寫一個(gè)主函數(shù)以及計(jì)算被積函數(shù)值的函數(shù)fun(x),在主函數(shù)中調(diào)用(1)中的函數(shù)st(a, b, eps),計(jì)算并輸出下列積分值 精度要求為eps=0.0001。 要求主函數(shù)與函數(shù)fun(x)放在同一個(gè)文件中。 (3) 編寫另一個(gè)主函數(shù)以及計(jì)算被積函數(shù)值的函數(shù)fun(x),在主函數(shù)中調(diào)用(1)中的函數(shù)st(a, b, eps),計(jì)算并輸出下列積分值 精度要求為eps=0.00001。 同樣要求主函數(shù)與函數(shù)fun(x)放在同一個(gè)文件中。 方法說明: 變步長梯形求積法的基本步驟如下: 利用梯形公式計(jì)算積分。即取 n=1,h=b-a則有 其中xk=a+kh。 將求積區(qū)間再二等分一次(即由原來

14、的n等分變成2n等分),在每一個(gè)小區(qū)間內(nèi)仍利用梯形公式計(jì)算。即有 = = 判斷二等分前后兩次的積分值之差的絕對(duì)值是否小于所規(guī)定的誤差。若條件 |T2n-Tn|eps成立,則二等分后的積分值T2n即為結(jié)果;否則作如下處理: h=h/2,n=2*n,Tn=T2n然后重復(fù)。9.6 習(xí)題 1. 編寫一個(gè)C程序,從鍵盤為一個(gè)長度為10的整型一維數(shù)組輸入數(shù)據(jù)。最后按逆序輸出數(shù)組中的元素,并輸出數(shù)組中最大元素的下標(biāo)值。 2. 編寫一個(gè)C程序,將兩個(gè)長度相同的一維數(shù)組中各下標(biāo)相同的對(duì)應(yīng)元素相乘,并將結(jié)果存放到另一個(gè)一維數(shù)組中。 3. 編寫一個(gè)C程序,從鍵盤為55的一個(gè)整型二維數(shù)組輸入數(shù)據(jù)。最后輸出該二維數(shù)組中

15、的對(duì)角線元素。 4. 編寫一個(gè)C程序,從鍵盤為46的一個(gè)整型二維數(shù)組輸入數(shù)據(jù)。最后輸出該二維數(shù)組中最小元素的行下標(biāo)與列下標(biāo)。 5. 從鍵盤輸入5行5列二維整型數(shù)組的數(shù)據(jù)。編制一個(gè)函數(shù),計(jì)算二維數(shù)組中每一行中的最小值,并將此最小值順序存放在一個(gè)長度為5的一維數(shù)組中。最后按矩陣形式輸出二維數(shù)組中的各元素,且各行中的最小值(即一維數(shù)組中的元素)輸出到相應(yīng)行的右邊。 6. 編寫一個(gè)C函數(shù),將一個(gè)一維數(shù)組中的元素逆轉(zhuǎn)。逆轉(zhuǎn)是指將數(shù)組中的第一個(gè)元素與最后一個(gè)元素進(jìn)行交換,第二個(gè)元素與倒數(shù)第二個(gè)元素進(jìn)行交換,以此類推,直到數(shù)組的中間一個(gè)元素為止。 7. 編寫一個(gè)C函數(shù),將矩陣進(jìn)行轉(zhuǎn)置后輸出。 8. 設(shè)有兩個(gè)

16、整型一維有序數(shù)組(即數(shù)組中的元素按從小到大進(jìn)行排列),編寫一個(gè)C函數(shù),將這兩個(gè)有序數(shù)組合并存放到另一個(gè)一維數(shù)組中,并保證合并后的一維數(shù)組也是有序的。 9. 編制一個(gè)C程序,從鍵盤輸入一個(gè)由5個(gè)字符組成的單詞,然后判斷該單詞是否是China。要求給出判斷結(jié)果的提示信息。 10. 編寫一個(gè)C程序,從鍵盤輸入50個(gè)字符,并統(tǒng)計(jì)其中英文字母(不分大小寫)與數(shù)字字符的個(gè)數(shù)。 11. 中國有句俗語叫“三天打魚,兩天曬網(wǎng)”?,F(xiàn)某人從2000年1月1日起開始“三天打魚,兩天曬網(wǎng)”,請(qǐng)編程判斷此人在以后的某年某月某日是在“打魚”還是在“曬網(wǎng)”。其中以后的某年某月某日從鍵盤輸入。 12. 一輛汽車在開始出發(fā)前其里

17、程表上的讀數(shù)是一個(gè)對(duì)稱數(shù)95859,后勻速行駛兩小時(shí)后,發(fā)現(xiàn)里程表上是一個(gè)新的對(duì)稱數(shù)。問該新的對(duì)稱數(shù)是多少?汽車的速度是多少? 注:所謂對(duì)稱數(shù)是指從左向右讀與從右向左讀完全一樣。 13. 計(jì)算多項(xiàng)式函數(shù) P6(x)=1.5x6+3.2x5-0.8x4+1.4x3-6.5x2+0.5x-3.7在x=-2.3,-1.1,-0.6,0.8,2.1,3.6處的函數(shù)值。 具體要求: (1) 編寫一個(gè)函數(shù),其功能是:給定一個(gè)x值,返回多項(xiàng)式函數(shù)值。 (2) 編寫一個(gè)主函數(shù),定義兩個(gè)一維數(shù)組,分別存放多項(xiàng)式的系數(shù)和需要計(jì)算的各x值。然后在主函數(shù)中調(diào)用(1)中的函數(shù)逐個(gè)計(jì)算各x值時(shí)的多項(xiàng)式值。 (3) 在主函

18、數(shù)中的輸出形式為 P(x值)=具體的多項(xiàng)式值 方法說明: 設(shè)多項(xiàng)式為 Pn(x)=anxn+an-1xn-1+a1x+a0可以表述成如下嵌套形式: Pn(x)=(anx+an-1)x+an-2)x+a1)x+a0利用上式的特殊結(jié)構(gòu),從里往外一層一層地進(jìn)行計(jì)算,即按如下遞推關(guān)系進(jìn)行計(jì)算: u=an u=ux+ak ,k=n-1,1,0最后計(jì)算得到的u即是多項(xiàng)式的值Pn(x)。 14. 產(chǎn)生100個(gè)01之間均勻分布的隨機(jī)數(shù),并將這些隨機(jī)數(shù)按非遞減順序進(jìn)行排序,存放到一個(gè)一維數(shù)組中。最后輸出該有序數(shù)組。 具體要求: (1) 在產(chǎn)生隨機(jī)數(shù)的過程中,每產(chǎn)生一個(gè)隨機(jī)數(shù)就將它插入到前面已經(jīng)有序的數(shù)組中。 (

19、2) 輸出時(shí)要求每行輸出10個(gè)數(shù)據(jù),并上下對(duì)齊。 方法說明: 產(chǎn)生隨機(jī)數(shù)pk(k=1,2,100)的公式為 rk=mod(2053rk-1+13849,216) pk=rk/216其中初值r0=1。 解決本問題的流程圖如圖9.4所示。 定義數(shù)組a100 r=1, k=0 k100 r=mod(2053r+13849, 216) p=r/216 j=k-1 j0 且 paj aj+1=aj j=j-1 aj+1=p k=k+1 輸出ak, k=0, 1, , 99圖9.4 實(shí)驗(yàn)練習(xí)2的流程圖 15. 利用高斯(Gauss)消去法求解線性代數(shù)方程組。 具體要求: (1) 編寫一個(gè)用高斯(列選主元)

20、消去法求解給定線性代數(shù)方程組的函數(shù) gauss(a, b, x)其中a為系數(shù)矩陣,b為常數(shù)向量,x為解向量。 (2) 編寫一個(gè)主函數(shù),調(diào)用(1)中的函數(shù)求解下列線性代數(shù)方程組: 其中系數(shù)矩陣與常數(shù)向量利用初始化賦初值。 (3) 在主函數(shù)中要求輸出系數(shù)矩陣與常數(shù)向量。輸出形式為MAT A= 1.1161 0.1254 0.1397 0.1490 0.1582 1.1675 0.1768 0.1871 0.2368 0.2471 0.2568 1.2671 0.1968 0.2071 1.2168 0.2271MAT B= 1.5471 1.6471 1.8471 1.7471 (4) 結(jié)果輸出形

21、式為 x(1)=具體值 x(2)=具體值 x(3)=具體值 x(4)=具體值 (5) 在函數(shù)gauss()中至少要求有五處加注釋。 方法說明: 設(shè)線性代數(shù)方程組為AX=B。高斯消去法求解線性代數(shù)方程組的步驟如下: 對(duì)于k從1到n-1,作如下操作: 進(jìn)行列選主元 akj=akj/akk ,j=k+1,n bk=bk/akk這一步稱為歸一化。然后作 aij=aij-aikakj ,i=k+1,n;j=k+1,n bi=bi-aikbk,i=k+1,n這一步稱為消去。 進(jìn)行回代 xn=bn/ann ,i=n-1,2,1 列選主元的基本思想是在變換到第k步時(shí),從第k列的akk以下(包括akk)的所有元

22、素中選出絕對(duì)值最大者,然后通過行交換將它交換到akk的位置上。由于交換系數(shù)矩陣中的兩行(包括交換常數(shù)向量中的兩個(gè)相應(yīng)元素),只相當(dāng)于兩個(gè)方程的位置被交換了,因此,列選主元不影響求解結(jié)果。最后需要說明的是,在C語言中,數(shù)組的下標(biāo)是從0開始的,不是從1開始的。另外,注意在函數(shù)gauss()中要將二維數(shù)組的下標(biāo)轉(zhuǎn)換成一維數(shù)組的下標(biāo)。10.8 習(xí)題 1. 閱讀下列C程序: (1) #include main() int a43=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; int (*ptr)3=a, *p=a0; printf(%dn, *(p+5) + *(*(pt

23、r+1) + 2); 輸出結(jié)果為( )。 (2) #include main() int a5=2, 4, 6, 8, 10; int *p=a, *k, z; k=&p; z=*p; p=p+1; z=z + *k; printf(%dn, z); 輸出結(jié)果為( )。 (3) #include void ast(int x, int y, int *cp, int *dp) *cp=x+y; *dp=x-y; return; main() int a, b, c, d; a=4; b=3; ast(a, b, &c, &d); printf(%dn, c+d); 輸出結(jié)果為( )。 2. 編

24、寫一個(gè)C程序,從鍵盤輸入兩個(gè)字符串,然后按先小后大的順序顯示輸出。 3. 編寫一個(gè)C程序,利用指針數(shù)組,顯示輸出如下信息: File Edit Write Read Exit 4. 編寫函數(shù)void disp(char *s, int n),將在s指向的字符串中連續(xù)顯示輸出n個(gè)字符,若字符串中不夠n個(gè)字符,則輸出到字符串結(jié)束符為止。再編寫一個(gè)主函數(shù),從鍵盤輸入一個(gè)字符串,調(diào)用函數(shù)disp(),將該字符串中的第4到第10個(gè)之間的字符顯示輸出。 5. 編寫一個(gè)函數(shù),功能是計(jì)算給定字符串的長度。再編寫一個(gè)主函數(shù)調(diào)用該函數(shù)來計(jì)算字符串的長度,其中字符串在執(zhí)行程序時(shí)的命令行中作為參數(shù)輸入。 6. 利用指

25、針數(shù)組實(shí)現(xiàn)矩陣相乘C=AB。其中矩陣相乘函數(shù)為通用的,在主函數(shù)中對(duì)矩陣A與B進(jìn)行初始化,并顯示輸出矩陣A、B與乘積矩陣C。 7. 編寫一個(gè)C函數(shù),將一個(gè)字符串連接到另一個(gè)字符串的后面。 8. 編寫一個(gè)C函數(shù),將兩個(gè)有序字符串(其中字符按ASCII碼從小到大排列)合并到另一個(gè)有序字符串中,要求合并后的字符串仍是有序的。 9. 編寫一個(gè)C程序,從鍵盤輸入一個(gè)月份號(hào),輸出與之對(duì)應(yīng)的英文名稱。例如,輸入“5”,則輸出“MAY”。要求用指針數(shù)組處理。 10. 編寫一個(gè)C函數(shù)int str_cmp(char *str1, char *str2),實(shí)現(xiàn)兩個(gè)字符串的比較(即實(shí)現(xiàn)strcmp(str1, str

26、2)的功能)。 11. 編寫一個(gè)主函數(shù),其功能是將執(zhí)行該程序時(shí)所輸入的命令行中所有的字符串顯示輸出。 12. 計(jì)算給定復(fù)數(shù)z=x+jy的指數(shù)ez、對(duì)數(shù)ln(z)以及正弦sin(z)、余弦cos(z)。 具體要求: (1) 分別編寫計(jì)算給定復(fù)數(shù)的指數(shù)、對(duì)數(shù)、正弦和余弦的四個(gè)函數(shù)。這四個(gè)函數(shù)的形參分別是給定復(fù)數(shù)的實(shí)部x、虛部y以及計(jì)算結(jié)果的實(shí)部u、虛部v。并且,在每一個(gè)函數(shù)中應(yīng)允許存放計(jì)算結(jié)果的變量與給定復(fù)數(shù)的變量具有相同的存儲(chǔ)地址。 (2) 編寫一個(gè)主函數(shù),首先調(diào)用計(jì)算復(fù)數(shù)指數(shù)的函數(shù)計(jì)算并輸出復(fù)數(shù)z=2+j3的指數(shù),再調(diào)用復(fù)數(shù)對(duì)數(shù)的函數(shù)計(jì)算并輸出該結(jié)果(為一個(gè)復(fù)數(shù))的對(duì)數(shù),然后調(diào)用計(jì)算復(fù)數(shù)正弦的

27、函數(shù)計(jì)算并輸出新結(jié)果(為一個(gè)復(fù)數(shù))的正弦,最后調(diào)用計(jì)算復(fù)數(shù)余弦的函數(shù)計(jì)算并輸出新結(jié)果(為一個(gè)復(fù)數(shù))的余弦。 (3) 在主函數(shù)中輸出結(jié)果的形式為(其中x與y為復(fù)數(shù)實(shí)部與虛部的具體值,u與v為計(jì)算結(jié)果中實(shí)部與虛部的具體值) exp(x+jy)=u+jv ln(x+jy)=u+jv sin(x+jy)=u+jv cos(x+jy)=u+jv 方法說明: 設(shè)給定的復(fù)數(shù)為z=x+jy。則 (1) 復(fù)數(shù)z的指數(shù)為 w=u+jv=ez=ex+jy =ex(cos(y)+jsin(y)即u=excos(y),v=exsin(y)。 (2) 復(fù)數(shù)z的對(duì)數(shù)為 w=u+jv=ln(z)=ln(x+jy) =ln+j

28、Arctg(y/x)即u=ln,v=Arctg(y/x)。 (3) 復(fù)數(shù)z的正弦為 w=u+jv=sin(z)=sin(x+jy) =sin(x)cos(jy)+cos(x)sin(jy) =sin(x)(ey+e-y)/2+jcos(x)(ey-e-y)/2即u=sin(x)(ey+e-y)/2,v=cos(x)(ey-e-y)/2。 (4) 復(fù)數(shù)z的余弦為 w=u+jv=cos(z)=cos(x+jy) =cos(x)cos(jy)-sin(x)sin(jy) =cos(x)(ey+e-y)/2-jsin(x)(ey-e-y)/2即u=cos(x)(ey+e-y)/2,v=-sin(x)(

29、ey-e-y)/2。 特別要指出的是,根據(jù)題目的要求,應(yīng)允許給定復(fù)數(shù)z與計(jì)算結(jié)果w存放在同一個(gè)存儲(chǔ)地址中,即在調(diào)用這些函數(shù)時(shí),計(jì)算結(jié)果的實(shí)部與虛部仍然存放在給定復(fù)數(shù)的實(shí)部變量x與虛部變量y中。因此,在每一個(gè)函數(shù)中,當(dāng)給定復(fù)數(shù)的實(shí)部x與虛部y還沒有使用完,不能直接將計(jì)算結(jié)果賦給u或v,因?yàn)樵谶@種情況下,函數(shù)中如果改變了u值,也即改變了x值;同樣,函數(shù)中如果改變了v值,也即改變了y值。 13. 利用冒泡排序法對(duì)給定的單詞序列進(jìn)行排序。 具體要求: (1) 編寫一個(gè)函數(shù),其功能是對(duì)由n個(gè)單詞所構(gòu)成的字符串序列按非遞減順序進(jìn)行冒泡排序。其中單詞序列中的各單詞(即字符串)由長度為n的一維字符串指針數(shù)組中

30、的各元素指向。 (2) 編寫一個(gè)主函數(shù),調(diào)用(1)中的函數(shù),對(duì)下列單詞序列進(jìn)行排序: zhang,gou,xu,zheng,mao,zhao,li,bai,qing其中該單詞序列中各單詞以賦初值的方式用一維字符串指針數(shù)組的各元素指向。 (3) 在主函數(shù)中,要求先輸出原序列,換行后再輸出排序后的序列。輸出時(shí)各單詞之間用兩個(gè)空格分隔。 方法說明: 使用字符串比較函數(shù)strcmp(),需要包含頭文件string.h。11.7 習(xí)題 1. 編寫一個(gè)C程序,要求定義一個(gè)有關(guān)日期的結(jié)構(gòu)體類型變量(包括年、月、日),從鍵盤為該變量中的各成員輸入數(shù)據(jù),然后再將輸入的日期顯示輸出。 2. 建立一個(gè)學(xué)生情況登記表

31、的表格空間(學(xué)生人數(shù)最多為20),包括學(xué)號(hào)、姓名、五門課程的成績與總分。在主函數(shù)中調(diào)用以下函數(shù)實(shí)現(xiàn)指定的功能: (1) 輸入n個(gè)學(xué)生的數(shù)據(jù)(不包括總分)。其中n(20)在主函數(shù)中從鍵盤輸入。 (2) 計(jì)算每個(gè)學(xué)生的總分。 (3) 按總分進(jìn)行排序。 (4) 顯示輸出給定學(xué)號(hào)學(xué)生的所有信息。其中學(xué)號(hào)在主函數(shù)中從鍵盤輸入。 3. 編寫一個(gè)C程序,根據(jù)鍵盤輸入的非負(fù)整數(shù)值,顯示輸出顏色的英文名稱。 4. 編制一個(gè)C程序,定義一個(gè)長度為10的聯(lián)合體類型數(shù)組。首先從鍵盤輸入一個(gè)標(biāo)志,標(biāo)志值為0時(shí)表示輸入五分制成績(整型),標(biāo)志值為1時(shí)表示輸入百分制成績(單精度實(shí)型)。然后從鍵盤輸入10個(gè)成績存放到數(shù)組中。

32、最后輸出這些成績。 5. 編寫一個(gè)C函數(shù),功能是計(jì)算給定鏈表的長度。 6. 編寫一個(gè)C函數(shù),功能是逆轉(zhuǎn)給定鏈表。 7. 設(shè)有兩個(gè)有序線性單鏈表,頭指針分別為ah與bh。編寫一個(gè)C函數(shù),將這兩個(gè)有序鏈表合并為一個(gè)頭指針為ch的有序鏈表。 8. 設(shè)有一個(gè)鏈表,其結(jié)點(diǎn)值均為正整數(shù),且按值從大到小鏈接。編寫一個(gè)C函數(shù),將該鏈表分解為兩個(gè)鏈表,其中一個(gè)鏈表中的結(jié)點(diǎn)值均為奇數(shù),而另一個(gè)鏈表中的結(jié)點(diǎn)值均為偶數(shù),且這兩個(gè)鏈表均按值從小到大鏈接。 9. 設(shè)有一個(gè)鏈表,其結(jié)點(diǎn)值均為整數(shù),且按絕對(duì)值從小到大鏈接。編寫一個(gè)C函數(shù),將此鏈表中的結(jié)點(diǎn)按值從小到大鏈接。 10. 設(shè)有一個(gè)鏈表,其結(jié)點(diǎn)值均為正整數(shù)。編寫一個(gè)C

33、函數(shù),反復(fù)找出鏈表中結(jié)點(diǎn)值最小的結(jié)點(diǎn)。并輸出該值,然后將該結(jié)點(diǎn)從鏈表中刪除,直到鏈表空為止。 11. 給定學(xué)生成績登記表如表11.4所示。編寫一個(gè)C程序,用冒泡排序?qū)υ搶W(xué)生成績表按成績(grade)從低到高進(jìn)行排序。表11.4 學(xué)生成績登記表學(xué)號(hào)(num)姓名(name)成績(grade)02Lin9203Zhang8704Zhao7205Ma9109Zhen8511Wang10012Li8613Xu8316Mao7817Hao9520Lu8221Song7622Wu88 具體要求: (1) 定義一個(gè)結(jié)構(gòu)體數(shù)組表示學(xué)生成績登記表,其中的每個(gè)元素依次存放表11.4中各學(xué)生的情況。 結(jié)構(gòu)體類型為

34、struct student int num; char name10; int grade; ; (2) 在程序中另外定義一個(gè)結(jié)構(gòu)體指針數(shù)組,在排序前,其中每一個(gè)數(shù)組元素依次指向?qū)W生成績登記表(為結(jié)構(gòu)體類型數(shù)組)中的各學(xué)生情況。 (3) 在程序中,首先輸出排序前的學(xué)生情況,然后輸出排序后的結(jié)果。輸出形式如表11.4所示,但不要表中的框線。 (4) 將冒泡排序的功能獨(dú)立編寫成一個(gè)函數(shù)。 方法說明: 在實(shí)際排序的過程中,并不需要交換學(xué)生成績登記表中的各學(xué)生情況,而只需要交換另一指針數(shù)組中的各指針。因此,排序的最后結(jié)果,學(xué)生成績登記表中各學(xué)生情況之間的存儲(chǔ)順序并沒有改變,而只是按指針數(shù)組中各指針元

35、素順序指向的各學(xué)生情況是按成績有序的。 12. 鏈表基本操作。 具體要求: (1) 定義一個(gè)結(jié)構(gòu)體數(shù)組表示學(xué)生成績登記表,其中的每個(gè)元素依次存放表11.4中各學(xué)生的情況。 結(jié)構(gòu)體類型為 struct student int num; char name10; int grade; ; (2) 對(duì)于表11.4所示的學(xué)生成績登記表,依次將每個(gè)學(xué)生的情況作為一個(gè)結(jié)點(diǎn)插入到鏈表的鏈頭(即當(dāng)前插入的結(jié)點(diǎn)將成為鏈表中的第一個(gè)結(jié)點(diǎn))。初始時(shí)鏈表為空,即該鏈表的頭指針為空。 每個(gè)學(xué)生情況結(jié)點(diǎn)結(jié)構(gòu)的結(jié)構(gòu)體類型為 struct stunode int num; char name10; int grade; st

36、ruct stunode *next; ; (3) 當(dāng)所有學(xué)生情況都插入到鏈表后,從鏈頭開始,依次輸出鏈表中的各結(jié)點(diǎn)值(即每個(gè)學(xué)生的情況)。輸出格式如同表11.4所示,但不要表中的框線。 方法說明: 為了給每個(gè)學(xué)生情況的結(jié)點(diǎn)p動(dòng)態(tài)分配存儲(chǔ)空間,可以用如下語句: p=(struct stunode *)malloc(sizeof(struct stunode);其中p為結(jié)構(gòu)體類型struct stunode的指針。 另外,為了使用函數(shù)malloc(),應(yīng)該包含頭文件stdlib.h。 13. 將表11.4所示的學(xué)生成績登記表劃分成三個(gè)子表,其中子表1登記的是成績?cè)?0100之間的學(xué)生情況,子表2

37、登記的是成績?cè)?089之間的學(xué)生情況,子表3登記的是成績?cè)?079之間的學(xué)生情況。 具體要求: (1) 定義一個(gè)結(jié)構(gòu)體數(shù)組表示學(xué)生成績登記表,其中的每個(gè)元素依次存放表11.4中各學(xué)生的情況。 結(jié)構(gòu)體類型為 struct student int num; char name10; int grade; ; (2) 劃分成的三個(gè)子表均采用鏈表結(jié)構(gòu),鏈表中各結(jié)點(diǎn)的數(shù)據(jù)域存放學(xué)生情況在原登記表中的序號(hào)(即結(jié)構(gòu)體數(shù)組元素的下標(biāo)),而不是直接存放學(xué)生的成績情況。即各鏈表結(jié)點(diǎn)的結(jié)構(gòu)體類型為 struct stunode struct student *data; struct stunode *next;

38、; (3) 最后輸出原學(xué)生成績登記表以及劃分成的三個(gè)子表。輸出格式如表11.4所示,但不要表中的框線。 方法說明: 劃分子表的方法如下: 對(duì)于表11.4中的各學(xué)生成績grade,計(jì)算 k=10-int(grade/10)其中int()表示取整。根據(jù)k值將學(xué)生情況插入到相應(yīng)的子表中: 若k=0或1,則插入到子表1中; 若k=2,則插入到子表2中; 若k=3,則插入到子表3中。 初始時(shí)各子表均為空。當(dāng)需要將一個(gè)學(xué)生情況插入到某子表時(shí),首先動(dòng)態(tài)申請(qǐng)一個(gè)結(jié)點(diǎn)(struct stunode類型),將該學(xué)生情況在原表中的序號(hào)(元素下標(biāo))存放到結(jié)點(diǎn)的數(shù)據(jù)域中;然后將該結(jié)點(diǎn)鏈接到相應(yīng)鏈表的鏈頭。12.4 習(xí)題

39、 1. 編寫一個(gè)C程序,首先從鍵盤輸入20個(gè)雙精度實(shí)數(shù),并寫入文本文件fd.dat中。然后將寫入文件fdata.dat中的10個(gè)雙精度實(shí)數(shù)顯示輸出。 2. 編寫一個(gè)C程序,從鍵盤輸入一個(gè)字符串(輸入的字符串以“#”作為結(jié)束),將其中的小寫字母全部轉(zhuǎn)換成大寫字母,并寫入到文件upper.txt中。然后再從該文件中的內(nèi)容讀出并顯示輸出。 3. 編寫一個(gè)C程序,主函數(shù)從命令行得到一個(gè)文件名,然后調(diào)用函數(shù)fgets( )從文件中讀入一字符串存放到字符數(shù)組str中(字符個(gè)數(shù)最多為80個(gè))。在主函數(shù)中輸出字符串與該字符串的長度。fgets函數(shù)的格式為:char *fgets( char *string,

40、int n, FILE *stream ); 4. 編寫一個(gè)C程序,將源文件拷貝到目的文件中。兩個(gè)文件均為文本文件,文件名均由命令行給出,并且源文件名在前,目的文件名在后。 5. 設(shè)二進(jìn)制文件student.dat中存放著學(xué)生信息,這些信息由以下結(jié)構(gòu)體描述: struct student long int num; char name10; int age; char sex; char sreciality20; char addr40; ;請(qǐng)編寫一個(gè)C程序,顯示輸出學(xué)號(hào)在970101970135之間的學(xué)生學(xué)號(hào)num、姓名name、年齡age與性別sex。 6. 設(shè)有一學(xué)生情況登記表如表12

41、.1所示。表12.1 學(xué)生情況登記表學(xué)號(hào)(num)姓名(name)性別(sex)年齡(age)成績(grade)101ZhangM1995.6102WangF1892.4103ZhaoM1985.7104LiM2096.3105GaoM1990.2106LinM1891.5107MaF1798.7108ZhenM2190.1109XuM1989.5110MaoF1894.5 編寫一個(gè)C程序,依次實(shí)現(xiàn)以下操作: (1) 定義一個(gè)結(jié)構(gòu)體類型 struct student char num7; char name8; char sex3; char age5; char grade9; ; (2)

42、為表12.1定義一個(gè)結(jié)構(gòu)體類型(struct student)數(shù)組,并進(jìn)行初始化。 (3) 打開一個(gè)可讀寫的新文件stu.dat。 (4) 用函數(shù)fwrite()將結(jié)構(gòu)體數(shù)組內(nèi)容寫入文件stu.dat中。 (5) 關(guān)閉文件stu.dat。 (6) 打開可讀寫文件stu.dat。 (7) 從文件stu.dat中讀出各學(xué)生情況并輸出。輸出格式如表12.1所示,但不要表格框線。 (8) 關(guān)閉文件stu.dat。 7. 將表12.1的內(nèi)容按結(jié)構(gòu)體類型寫入文本文件st.dat中;然后對(duì)該文件按成績從低到高進(jìn)行冒泡排序,并輸出排序結(jié)果;最后,在排序后的文件中用對(duì)分查找法查找并輸出成績?cè)?5.0到100分之

43、間的學(xué)生情況。 具體要求: (1) 在定義的結(jié)構(gòu)體類型中,各成員均為字符數(shù)組。即結(jié)構(gòu)體類型的定義如下: struct student char num8; char name8; char sex5; char age5; char grade10; ; (2) 編寫一個(gè)對(duì)文本文件(其中每一個(gè)記錄的結(jié)構(gòu)如(1)中定義)按成績(grade)進(jìn)行冒泡排序的函數(shù)mudisk(fp,n)。其中: fp為文件類型指針,指向待排序的文件; n為長整型變量,存放待排序文件中的記錄個(gè)數(shù)(即學(xué)生的個(gè)數(shù))。 (3) 編寫一個(gè)對(duì)按成績(grade)有序的文件(其中每一個(gè)記錄的結(jié)構(gòu)如(1)中定義)進(jìn)行對(duì)分查找的函數(shù)nibsrch(fp,n,a,b,m)。其中: fp為文件類型指針,指向給定的有序文件; n為長整型變量,存放按成績有序文件中的記錄個(gè)數(shù)(即學(xué)生的個(gè)數(shù)); a與b均為字符串指針,分別指向成績(grade作為字符串)值的下限與上限(即查找成績?cè)赼到b之間的學(xué)生); m為整型變量指針,該指針指向的變量返回成績?cè)赼到b內(nèi)的第一個(gè)記錄號(hào)(即數(shù)組元素下標(biāo))。 (4) 在主函數(shù)外定義

溫馨提示

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

評(píng)論

0/150

提交評(píng)論