從問題到程序--習題答案._第1頁
從問題到程序--習題答案._第2頁
從問題到程序--習題答案._第3頁
從問題到程序--習題答案._第4頁
從問題到程序--習題答案._第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 257從問題到程序一高級語言程序設計第二章練習1.指出下面的哪些字符序列不是合法的標識符:_abc x+-3x1Xf_l_4Eoof_xx_2_ I am答:不合法的標示符有:a$#24 非法符號#X+- 非法符號#3x1 不是以英文字母開頭lam非法符號“空格”bg-1非法符號2.手工計算下列表達式的值:1) 125 + 01252) 0XAF - 0XFA3) 24* 3/5 + 64) 36 + - (5 -23) /45) 35 *012 + 27/4/7 *(12-4)答:1)2102)-753) 204) 405) 3503.在下而表達式的汁算過程中,在什么地方將發(fā)生類型轉換,

2、各個轉換是從什么類型轉換到什么類型,表達式計算的結果是什么?1) 3*(2L + 4.5f)-012 + 442 ) 3 * (int)sqrt(34) sin(6) * 5 + 0 x2AF3) cos(2.5f + 4)-6 *27L + 1526 - 2.4L答:1) 53.5 2) 703.3970力在此題中十六進制數(shù)會在計算中(編譯時)自動轉成十進制數(shù)3) 1362.593574.寫程序汁算第3題中各個表達式的值。答:#include#includeint main() printf(*%fn*,3 * (2L + 4. 5f) - 012 + 44);printf(*%fn*, 3

3、 * (int)sqrt(34) - sin(6) * 5 + 0 x2AF); printf (%fn, cos (2. 5f + 4) - 6 *27L + 1526 - 2. 4); system(pause);return 0;5.寫程序訃算下而各個表達式的值:1 )2 34+ 2)106524*133 )23 5827 96 3 67./.4) n 2 + I 7) In ln(10 1) 2n +5) logs2 n -1 6) e n *17) arctan(log ()+ n8)3.6815-(2.24-0.242):9) 1 2345+ /10) ln(2 n 13+ e )

4、6.已知鐵的比重是7.86,金的比重是19.3。寫幾個簡單程序,分別計算岀宜徑100亳米和150亳米的鐵球與金球的重量。答:#includedouble fl (double r)double v, w;v=4. 0/3. 0*r*r*r*3. 1415926;w=7. 86*v;return w;double f2(double r)double v,w;v=4. 0/3. 0*r*r*r*3. 1415926;w=19 3*v;return w;int main() printfC鐵球的重量為:%f,金球的重量為:fn, fl (0.1/2), f2 (0.1/2. 0);printfC鐵

5、球的重量為:%f,金球的重量為:fn, fl(0.15/2), f2(0.15/2. 0); system(pause);return 0;7.寫程序計算5A2 + 2x+ 6的兩個根,考慮用合適的方式輸岀。(提示:對這個具體問題,可以先人工計算 出判別式b2- 4ac的值,以此作為已知信息,就可以寫出程序To )答:#include #include void f(double a, double b, double c) double temp=b*b-4*a*c;辻(temp0)printf (*方程的根為:f, %f, (-b+sqrt (temp)/2/a, (-b-sqrt (te

6、mp)/2/a); else if (temp=0)printf (方程有兩個相同的根為:f, -b/2/a);elseprintf (方程無解! ”);int main() f(5, 2, 6);可以測試不同的數(shù)據(jù)system(pause);return 0;8.在計算機上試驗本章正文中的一些程序。對它們做一些修改,觀察程序加工和運行的情 況,并對程序的行為做出解釋。9.在一個能正確工作工作的輸出整數(shù)結果的程序里,將printf的相應轉換描述改為%f 或者ld,看看會岀現(xiàn)什么問題。在一個能正確工作工作的輸出雙精度結果的程序里,1、將printf的相應轉換描述改為%d或者%ld,看看會出現(xiàn)什么

7、問題。第三章練習1.下而的字符序列中哪些不是合法的變量劃:-abc_aafor pp.288IBM/PC tihsWhile r24_s25 _a_b aMbc _345答:-abc for pp.288 to be IBM/PC ms-c #micro m%ust While aMbc2.假設整型變量a的值是1, b的值是2, c的值是3,在這種情況下分別執(zhí)行下 面各個語句,寫出執(zhí)行對應語句后整型變量u的值。1) u = a ? b : c;2) u = (a = 2)?b + a:c + a;答:1) u=22) u=43.假設整型變量a的值是1, b的值是2, c的值是0,寫出下面各個表

8、達式的值。1) a & !(b II c) & !a)2) !(a & b) II c ? a II b : a & b & c3 ) !(a + b c) & b = c * a - b答:1) 12) 03) 04.下而程序在執(zhí)行時,哪些地方將發(fā)生類型轉換?程序打印的值是什么?int f (int n, float m) return (m + n) / 4;int main () float y = 3;printf(M%dn, f(y, y + 1); return 0;)5.在計算機上試驗本章正文中的一些程序。對它們做一些修改,觀察程序加工和運行的情 況,并對程序的行為做出解釋。答案

9、:略6.左義求圓球的體枳.求圓球的表而積、求圓柱體的體積、求圓柱體的表而積的函數(shù)。 答:#includedouble fl (double r)double v;v=4.0/3. 0*r*r*r*3.1415926;return v;double f2 (double r) double s;s=4*r*r*3.1415926;return s;double f3(double r, double h)double v;v=r*r*3. 1415926*h;return v;double f4 (double r, double h)double s;s=2*3.1415926*r*h+2*3

10、.1415926*r*r;return s;int mainO printfC 圓球的體積為%fn, fl (0.15);printfC 圓球的面積為%fn, f2(0.15);printfC圓柱體的體積為%lfn*, f3(0. 15, 0. 5);printfC圓柱體的面積為%lfn f4(0.15,0. 5);system (pause);return 0;7.1)不用函數(shù),直接寫一個主程序計算并輸出直徑為100亳米和150亳米的金、銀、銅. 鐵、錫球的重量(以kg為單位輸出)。2)重新完成上而程序,先立義一個帶有兩個參數(shù)的函數(shù),它能求岀直徑為x的比重為 y的圓球的重量,而后在主程序里調

11、用這個函數(shù)完成所需工作。將這樣得到的解與不用 函數(shù)的解比較,比較它們的長度、容易出錯的程度。假設現(xiàn)在要求修改所用圓周率的精 度,考慮用兩種方式寫程序的修改難度。3)請寫程序,求岀邊長為100毫米和150亳米的金、銀、銅、鐵、錫立方體的重呈:。 你可以利用前面的程序嗎?是否很容易修改前而程序,完成這一計算?比較不用函數(shù)的 解法和使用函數(shù)的解法在易修改和重復使用方而的效用。&怎義函數(shù):double tmax(double, double, double),它返回三個參數(shù)中最大的 一個。寫一個主函數(shù)試驗各種參數(shù)情況。答:#includedouble tmax(double x, double y d

12、ouble z) 辻(xy)return xz?x:z;elsereturn yz?y:z;int mainO printf (最大的一個為:%f*, tmax (8, 3, 2);printf (*最大的一個為:%f* tmax (8, 13, 2);printf (*最大的一個為:%f*, tmax (8, 3, 22);system(pause);return 0;9.寫函數(shù),它以兩個電阻的值作為參數(shù),求岀并聯(lián)的電阻值。答:并聯(lián)電阻值的計算公式為:R1*R2/(R1+R2)10.如果四邊形四個邊的長度分別為a、b、c、d , 一對對角之和為2 a ,則其面積為:S 二($ 6/)(5 一

13、 b)(s 一 c)(5 一)一 abed cos2 a其中 s =(a + b+ c+ d)/2泄義一個函數(shù)計算任意四邊形的而積。設有一個四邊形,其四條邊邊長分別為3、4、5、5, 一對對角之和為145o,寫程序計算它的而積。11修改已知四邊長求四邊形而積的函數(shù),增加對各種參數(shù)錯誤情況的檢查和處理(如返回 值0),用各種實例數(shù)據(jù)檢査你的函數(shù)否檢查出所有可能的錯誤情況。12.分析本章正文中給岀的求二次方程根的函數(shù),看它缺乏對哪些特殊情況的處理。補充這 些處理,在需要時輸出適當?shù)男畔?,使之成為一個更完整的函數(shù)。寫一個主函數(shù),用各 種特殊情況和一般情況測試所完成的函數(shù)。答:ftinclude #i

14、nclude void f (double a, double b, double c) double temp=b*b-4*a*c;if (a=0) printf C方程的根為:f,-c/b);if(temp0)printf (*方程的根為:%f, %f* (-b+sqrt (temp) /2/a, (-b-sqrt (temp) /2/a):else if(temp=0)printf C方程有兩個相同的根為:%f -b/2/a):elseprintf 方程無解!);int mainO f(5,2, 6);/可以測試不同的數(shù)據(jù)system (pause);return 0;13.寫一個簡單程

15、序,它輸出從1到10的整數(shù)。14.寫一個簡單程序,它輸出從10到一 10的整數(shù)。15.寫一個兩個整型參數(shù)的簡單函數(shù),它輸岀從第一個整數(shù)到第二個整數(shù)為止的整數(shù)序列。16.用左義函數(shù)double power(double x, int n),它求出x的n次幕。用主函數(shù)試驗很大的n值(例如令x值為1),看看會岀現(xiàn)什么情況;用大的x和n值,看看發(fā)生 浮點數(shù)計算溢出時會出現(xiàn)什么情況。17.寫一個程序,它在090度之間每隔5度輸出一行數(shù)據(jù),打印一個表。每行中包括5個 項目:角度數(shù),以及它所對應的正弦、余弦、正切.余切函數(shù)值。答:include ttinclude int mainO double s=0*

16、3. 1415926/180;int i;for(i=0;i cos (s), tan(s) 1/tan (s): s+=5*3.1415926/180;system(pause);return 0;18.查看有關公式,寫求解并輸岀一元三次方程的根的函數(shù)。19.寫岀求等差級數(shù)的和kakn=Z 的函數(shù)。兩種循環(huán)結構給出函數(shù)左義,再利用等差級數(shù)求和公式給出函數(shù)左義。答:#includedouble fl (int n, double a)int i;double sum=0;for(i=l;i=n;+i)sum+=i*a;return sum;double f2 (int n, double a)

17、 int i=l;double sum=0;while(i=n)sum+=i*a;+i;return sum;double f3(int n, double a) return n*(a+n*a)/2;int mainO printf (*%fn* fl (10, 2. 5); printf(*%fn* f2(10, 2. 5); printf (*%fn*, f3(10, 2. 5); system(pause);return 0;20.請到査出銀行一年左期存款的利率和5年左期存款的利率。假立現(xiàn)在要存入100元錢,存款到期后立即將利息與本金一起再次存入。請寫出程序,計算按每次存一年和按照每

18、次存5年,總共存50年后兩種存款方式的得款總額。對兩種情況都每隔5年輸岀一次 當時的總金額。21.寫一個程序打印出2的順序各次幕。讓它打印出2的前30個幕,看看會出現(xiàn)什么情況。用一個條件為真的循環(huán)打印2的各次幕,看看會出現(xiàn)什么情況。第四章練習1.1)寫出通過遞推方式求200之內的完全平方數(shù)的程序;2)寫岀只使用加法的求完全平方數(shù)的程序;3)寫出 求1000之內的完全立方數(shù)的程序,請參考書中實例的寫法和上而的兩種寫法,分別寫岀相應的求立方數(shù)的版本。2.試驗正文中烏龜旅行的實例,看看在你所用的C系統(tǒng)上得到什么樣的結果。從數(shù)學教科書中找出有關調和級數(shù) 的理論結論,并將它與我們的試驗做一個比較。3.寫

19、一個程序,計算并輸岀Fibonacci序列中一系列的相鄰項之比。確立一個范圍,觀察輸出的結果,能夠得到 什么結論(這個比的序列可能有極限嗎?極限是什么)。查閱有關資料,了解有關的理論結果。4.寫函數(shù)計算1! + 2! + . + k!o用主函數(shù)試驗函數(shù)對一系列k值計算出的結果。你寫出的函數(shù)對1到10計算 結果都正確嗎?如果出現(xiàn)錯誤,弄淸楚是什么原因。這個程序能對k二30得到正確結果嗎?(另外,你能只用一 重循環(huán)完成函數(shù)的定義嗎?)5.寫函數(shù)計算:/()= l+k(l + l(+(1 +Wx),公式中有n層嵌套。利用這L答:#include ttincludc double f(int n, d

20、ouble x)int m=0;double sum;for(sum=l+l/x;m=n;+m)sum=l+l/sum;return sum;int mainO int x;for(x=l;x=20;+x)printf (*%fn* f (10, (double) x);system (*pause*);return 0;個函數(shù)打印x二1.0、2.0、20.0, n = 10時的函數(shù)值表。6.實現(xiàn)書中討論的驗證哥徳巴赫猜想的程序,用不同的n對6n的范弗1試驗該程序。去掉程序中的打印輸出語 句,增加計時功能,對不同的n運行程序,考察程序的運行時間,畫岀一條曲線,說明運行時間與n的關系。7.設法(

21、從文獻中)找到其他更有效的素數(shù)判斷方法并實現(xiàn)對應函數(shù)。在一個數(shù)值比較大的整數(shù)區(qū)間試驗書上 給出的函數(shù)和你寫的其他函數(shù),利用它們打印出這一區(qū)間中的所有素數(shù)。你所試驗的幾種方法在工作效率上有明 顯差異嗎?(為程序計時)8.1)泄義函數(shù):void prt_factors(int),它對正整數(shù)實參輸出其所有的因子。2)泄義函數(shù):void prt_pfactorS (int),它對正整數(shù)實際參數(shù),輸出英所有的素因子(多重因子重復輸岀); 對于負參數(shù),首先輸岀-1,然后輸出所有因子。9.已知6 ,利用該公式編程序求n的近似值,看用這個和式的前多少項求出的近似值與3. 14159165的誤差小于le-5,令

22、程序輸出三項數(shù)據(jù):計算得到的和,由這個和求出的的近似值,求得該和所用得 項數(shù)。把le-6le-7并重新試驗,用計時方式總結出誤差減小與執(zhí)行時間之間的關系。答:ttinclude ttinclude #include int mainO double a=3. 14159265*3.14159265/6.0;double x=l. 0, n=2. 0;double t;t=clock();while(fabs(a-x)le-8) x=x+l/n/n;+n;double pi=sqrt(6 0*x);printf (n=%f, %f, %. 32fn, x, pi);printf r%fsn, (

23、clock ()-t)/CLOCKS_PER_SEC);system (pause);return 0;11.修改書中計算sin值的函數(shù),使之能輸岀計算中循環(huán)執(zhí)行的次數(shù)。用不同的數(shù)值(一個比一個大)試驗這一 函數(shù),觀察出現(xiàn)的情況。你看到出現(xiàn)溢岀的情況了嗎?(為試驗方便,你應該寫一個適用的驅動程序)12.已知-.=- + i+1123132451352467357xxxxxLTxsinh (x 0, n0):D)H) -11gcd(m”)= gcd(?.?n) m n gcd(j?) HJ n利用這個泄義,用遞歸和循環(huán)方式各寫出一個求最大公約數(shù)的函數(shù)。答:/一輾轉相減求最大公約數(shù)#include

24、int gcd(int m, int n) return m=n?m: (mn?gcd (n-m, m): gcd (m-n, n);int mainO printf (%dn: gcd (96, 56);system (pause);return 0;15.對一些n值試驗河內塔程序,給它們計時。據(jù)此估計你所用的汁算機搬完64個金盤需要多長時間。如果僧侶 們1秒鐘搬金盤1次,搬完64個金盤需要多少時間?將這一時間與科學家對宇宙的估訃壽命做個比較,據(jù)此評價僧 侶們的說法。16.一個三位的十進制整數(shù),如果它的三個數(shù)位數(shù)字的立方和等于這個數(shù)的數(shù)值,那么它就被稱為一個“水仙花 數(shù)S泄義函數(shù)判斷一個整數(shù)

25、是水仙花數(shù),并利用這個函數(shù)打印出所有的水仙花數(shù)。答:/求水仙花數(shù)方法_#includevoid f (int n)int i, j,k;i=n/100;j=(n-i*100)/10;k=n-i*100-j*10;if(i*i*i+j*j*j+k*k*k=n)printf (%d=%(T3+%r3+%(r3n, n, i, j, k);else ;int mainO int i;for(i=100;i=999;卄i)f(i);system CpauseO ;return 0;/方法二void f0 int i, j, k, x;for(i=l;i=9;+i)for(j=0;j=9;+j)for(

26、k=0;k=9;+k) x=i*i*i+j*j*j+k*k*k;if(x=i*100+j*10+k)printf (%d=%(r3+%r3+%T3nS x, i, j, k);int mainO f();system (pause);return 0;17.對一個整數(shù),如果英所有因子(包括因子1在內)之和正好等于這個數(shù),那么就稱它為“完全數(shù)“。因子之和 小于自身的數(shù)稱為“虧數(shù);因子之和大于自身的數(shù)稱為“盈數(shù)“。寫一個函數(shù),當其參數(shù)是虧數(shù)時返回負值,是完 全數(shù)時返回0,是盈數(shù)時返回正值。利用這個函數(shù)求出1000以內的所有完全數(shù)(實際上只有1、6、28、496)。為 這個程序計時:從100開始每隔

27、100做一次計算,寫一個循環(huán),輸出各次計算花的時間。再從1000開始,每隔1000 做一次計算直到10000為止,輸出對程序執(zhí)行計時的值。利用所立義的函數(shù)對一段區(qū)間的整數(shù)做一個分類,輸出 其中各個數(shù)所屬的類。18.寫程序由標準輸入得到一系列三個一組的數(shù),把每組數(shù)作為三角形的三邊長,計算三角形的面積。注意在程 序里檢査輸入數(shù)據(jù),對不能構成三角形的情況給岀錯誤信息。仔細分析自己的程序,能否檢查出所有不合理數(shù)據(jù)。用不同數(shù)據(jù)運行試驗。19.寫一個程序,它讀入一系列整數(shù),最后輸出其中最大的兩個數(shù)。/一一讀入一系列數(shù),最后輸出其中最大的兩個#includeint mainO long x, maxl=-1

28、000000, max2=-100000;while (scanf&x) =1) if (x! =max l&xmax2)(if (xmaxl)max2=maxl;maxl=x;elsemax2=x;printfmax2=%dn, maxi, max2); system CpauseO ;return 0;20.寫一個程序,它輸岀所讀入的一系列整數(shù)的平均值。假立給它的第一個數(shù)并不是數(shù)據(jù),而是用于說明數(shù)據(jù)的 項數(shù)。21.假設程序由輸入得到的一系列正實數(shù)是一條折線在x等于0, 1, 2,的對應值(數(shù)據(jù)的數(shù)目事先并未確定), 請求出這一折線與x軸之間區(qū)域的而積。答:求折線與x軸之間區(qū)域的而積。可以看成是幾個梯形而積和#includeint mainO int y, count=0;double s=0. 0;while (scanf&y)=l) if(count=0)s+=y/2. ;s加第一個輸入值的 1/2,即s=l/2*Xlelse s+=y;s開始累加輸入的值,此處包括最后一個數(shù),即Xn;+count;s=s-y/2.; 由

溫馨提示

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

最新文檔

評論

0/150

提交評論