C語言答案(刪減版).doc_第1頁
C語言答案(刪減版).doc_第2頁
C語言答案(刪減版).doc_第3頁
C語言答案(刪減版).doc_第4頁
C語言答案(刪減版).doc_第5頁
免費預覽已結束,剩余45頁可下載查看

下載本文檔

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

文檔簡介

1、C 語言答案()第一章C 語言程序設計基礎習題參考答案1-1 馮·諾依曼體系結構的基本原理:五大構成部分:輸入、輸出、 CPU、控制器、存儲器;程序存儲、自動執(zhí)行、邏輯判斷功能;二進制的信息表示。1-6 編輯、編譯、鏈接、執(zhí)行。1-7 必須有一個主函數(shù), 它是程序執(zhí)行的起點; 一個 C 語言程序由函數(shù)構成; 每一條可執(zhí)行語句都必須由分號結束; 函數(shù)的代碼段必須由花括號對括住。 一個函數(shù)中的語句組由聲明區(qū)和可執(zhí)行語句區(qū)兩部分構成。1-8 三個一縮; 每遇到一個結構時均縮格,每結束一個結構時回退;縮格格式必須對齊。1-9 試給出以下問題的程序設計過程描述:1) 求兩個數(shù)中之最大者。#in

2、clude<stdio.h>int main(void)float fA,fB;clrscr();printf("Please input two values(fA,fB):"); /* 輸入要比較的兩個數(shù) fA,fB*/ scanf("%f,%f",&fA,&fB); /* 格式化輸入 fA,fB*/if(fA>=fB) printf("the max is %f",fA);if(fA<fB) printf("the max is %f",fB);return 0; /*

3、main() 函數(shù)結束 */2) 求三個數(shù)中之最大者。#include<stdio.h>int main(void)float fA,fB,fC,fMax;printf("Please input three values(fA,fB,fC):");/*fA,fB,fC是輸入的3 個數(shù), fMax 存放最大值 */scanf("%f,%f,%f",&fA,&fB,&fC);fMax=fA;/* 假定 fA 最大 */if(fMax<fB) fMax=fB;if(fMax<fC) fMax=fC;printf

4、("The max is %fn",fMax);/*輸出最大值 */return 0; /*main() 函數(shù)結束 */3) 求 1+2+3+100,即。#include<stdio.h>int main(void)int i,nSum;/* 聲明變量i,循環(huán)的總和 */for(i=1,nSum=0;i<=100;i+)nSum+=i;/* 做累加的FOR 循環(huán) */printf("Sum is %dn",nSum);/*輸出累加值 */return 0;4) 求 0-1000 之間所有能被2 和 3 整除的數(shù)之和。int main(v

5、oid)int i,nSum;clrscr();for(i=1;i<=1000/6;i+)/*1000/6 表示 11000 中能被 2 和 3 整除的個數(shù) */ nSum+=i*6;/* 循環(huán)累加的過程*/printf("the Sum is %d",nSum);/*輸出累加結果 */return 0;1-12 試編寫一個求a+|b|的程序。#include<stdio.h>int main(void)float a,b;printf("Please input two real values(a,b):");scanf("

6、%f,%f",&a,&b);printf("n%f+|%f|=%fn",a,b,b>0?a+b:a-b);/* 利用三元條件運算,詳見P52*/return 0;1-13 試編寫一個在五個整數(shù)中找出最大數(shù)的程序。#include<stdio.h>int main(void)float val_1,val_2,val_3,val_4,val_5,fMax;/*聲明要比較的5 個變量 */printf("Please input 3 values(val_1,val_2,val_3,val_4,val_5):");

7、scanf("%f,%f,%f,%f,%f",&val_1,&val_2,&val_3,&val_4,&val_5);fMax=val_1;/* 假設最大值為val_1*/if(fMax<val_2) fMax=val_2;if(fMax<val_3) fMax=val_3;if(fMax<val_4) fMax=val_4;if(fMax<val_5) fMax=val_5;/*選出最大值的過程*/printf("the max of %f,%f,%f,%f,%f is %f",val_1

8、,val_2,val_3,val_4,val_5,fMax);return 0;1-14 編寫程序,調用庫函數(shù)求下列函數(shù)的值:(1) cos 2.78#include<stdio.h>#include<math.h>/* 包含數(shù)學函數(shù)文件,詳見P391*/int main(void)double val;printf("Please input the value:");scanf("%f",&val);printf("the result is %lf",cos(val);/* 調用數(shù)學函數(shù)中的dou

9、ble cos(double x) 函數(shù) */return 0;(2) log 90 #include<stdio.h> #include<math.h> int main(void)double val;printf("Please input the val:");scanf("%lf",&val);printf("the result is %lfn",log(val);return 0;(3)#include<stdio.h>#include<math.h>int mai

10、n(void)double val;printf("Please input the value(val):");scanf("%lf",&val);printf("the result is %lfn",sqrt(val);/* 調用 double sqrt(double x) 函數(shù) */ return 0;(4)#include<stdio.h>#include<math.h>int main(void)double val;printf("Please input the value(v

11、al):");scanf("%lf",&val);printf("the result is %lf",exp(val);/* 調用 double exp(double x) 函數(shù) */ return 0;1-16 見名知義;變量名和函數(shù)名小寫,符號常量一般大寫;多個單詞構成標識符名時,一般單詞的第一個字母大寫, 或者用下劃線連接; 在不影響閱讀的情況下, 可以使用簡單的符號變量名,如 a,b,c,d,x,y,z 等;注意一些容易混淆的字母的使用;匈牙利前綴數(shù)據(jù)類型表示法的運用及i,j,k,l,m,n 的整型約定規(guī)則。第二章C 語言中的

12、數(shù)據(jù)類型及其基本操作習題參考答案2-1為什么C 的每個數(shù)據(jù)都必須屬于某種特定的數(shù)據(jù)類型?解:變量存儲空間中的值必須屬于某種特定的數(shù)據(jù)類型才有意義, 同時, 數(shù)據(jù)的類型不同,其取值范圍、所占存儲空間大小、能夠參加的運算類型等才有意義。例如:一個 char 型數(shù)據(jù)占用一個字節(jié)空間,一個 float 型數(shù)據(jù)占用 4 個字節(jié)空間。另外,作為 C 語言中的數(shù)據(jù)類型,大部分都可以用 signed, unsigned, long, short 進行修飾,以表示數(shù)據(jù)的取值范圍和數(shù)據(jù)所占存儲空間的字節(jié)數(shù)變化。2-2 浮點數(shù)和定點數(shù)的區(qū)別在哪里?解:在于小數(shù)點位置是否固定不變。2-3 計算機中的數(shù)是精確的表示嗎?

13、解:不完全是。對整型數(shù)據(jù),在不超出表示值范圍時一般是精確表示的。對浮點數(shù),則一般是不能精確表示。原因在于計算機內表示浮點數(shù)的存儲空間大小是固定的,因此,它所能表示出來的精度是有限的。例如,無限循環(huán)小數(shù)3.33333333333333333333333 在計算機內部只能近似表示。2-4 為測試數(shù)據(jù)類型所占存儲空間的大小,C 提供了專門的運算符sizeof() ,它用于返回或計算給定數(shù)據(jù)變量或數(shù)據(jù)類型所占存儲空間的大小。請編寫程序能夠測試C 的基本數(shù)據(jù)類型所占存儲空間的大小。解:這里以int 型為例。其它數(shù)據(jù)類型所占存儲空間大小的測試方法相似。#include <stdio.h>voi

14、d main()int nSize=sizeof(int);printf("%d",nSize);getch();2-9 為什么要強調“先聲明、后定義、再使用”的原則?請闡述其理由。解: 因為變量使用前必須要有存儲空間分配給它用來保存其值,對變量存儲空間的分配就是通過變量的聲明完成的。變量在被引用之前,其中的值應當是確定的某一個值,但變量的聲明并不能保證變量存儲空間中有一個合適的初始狀態(tài)值, 而是一個隨機值。 當以錯誤的初始值開始變量的引用時, 會導致程序的執(zhí)行邏輯錯誤。 為此,一般需要在變量被引用之前賦予其一個合理的初始值。因此,在變量的使用上,一般應當遵循先聲明、后定義

15、、在引用的基本原則。2-12 解:(1)ABCDEFGH(2)12+20=32(3)ch1(S)+ch2(x)=203(4)nX=2nY=5nZ=12nX=1830nY=28nZ=38nX=3nY=6nZ=22-13 解:( 1)1;( 2)0;( 3)0;( 4)0;( 5)2, 2, 5;( 6)10;( 7)3;( 8)12, 8, 30, 20,0, 0;( 9)15, 5, 324;2-14解:m=0n=0k=-1m=1n=1k=-1m=0n=0k=0m=0n=0k=1m=1n=0k=12-15解:(1)m>n&&k<=m|n;(2)m=2k;(3)m%n

16、!=0;2-17 請問 C 語言中的邏輯真和假的表示方法是什么?解: .C 語言借用數(shù)值非零和零表示邏輯真假,零表示假,任何非零值均可被作為邏輯真。2-18 解: .i=9,j=28第三章C 語言的程序結構、語句分類和數(shù)據(jù)的輸入輸出習題參考答案3-1 解:因為輸入、輸出是計算機程序獲取源數(shù)據(jù)和輸出結果數(shù)據(jù)的基本手段。沒有輸入操作,程序無法將數(shù)據(jù)對象告知計算機, 沒有輸出時, 計算機程序的運算對于計算任務來講是沒有意義的。 C 語言常見的輸入輸出函數(shù)如下:scanf(.);fscanf(.);fread(.);printf(.);fprintf(.);fgets(.);gets(.);.3-2

17、解:格式說明符、普通字符、輸出格式控制字符、附加格式說明符。域寬:用於存放輸出數(shù)據(jù)的寬度。格式化輸入輸出函數(shù)的主要異同參見教材相關章節(jié)。3-3 解:對小數(shù)部分截斷輸出(四舍五入的原則)對整數(shù)部分沒有影響;與截斷位的精度相同;有單獨的符號位;符號位不占據(jù)域寬。3-4 解: float :小數(shù)點后面6 位小數(shù)位; double:小數(shù)點后面17 位小數(shù)位。原因: float 占 4 個 byte,其中能夠用來表示小數(shù)位精度的bit 位數(shù)只有23bit 。而 double 占 8 個 byte,其中能夠用來表示小數(shù)位精度的bit 位數(shù)為 52bit 。它們能夠表示的最大有效精度范圍分別為6 位和 17

18、 位小數(shù)位。多余的精度部分將被截斷。同時,要注意,浮點數(shù)表示中,小數(shù)點不占域寬寬度。3-5 解: C 語言主要由模塊、函數(shù)等構成。其語句的分類有5 種 (參見教材 )。3-6 請簡述 C 語言程序的語句類型分類并對其使用方法作簡要描述。解:順序語句如:int main(void)int a=8;printf( ” %d”,a);return 0;循環(huán)語句:while()for (; )選擇語句:如 switch();if() 等語句;3-7 請說明使用格式化輸入語句完成輸入任務時和輸入緩沖區(qū)之間的關系。解: scanf 是從標準輸入設備緩沖區(qū)數(shù)據(jù)流中自動根據(jù)內部格式控制字符串要求完成數(shù)據(jù)類型匹

19、配, 并把數(shù)據(jù)從左到右復制到參數(shù)列表變量地址空間的函數(shù), 其過程分為以下幾個步驟:(1) 函數(shù)執(zhí)行時由標準輸入設備(一般是鍵盤)輸入相關數(shù)據(jù),臨時存放在標準輸入設備緩沖區(qū)中;(2) scanf 函數(shù)從數(shù)據(jù)流中復制數(shù)據(jù)從左到右一次匹配于變量列表中的各變量;(3) scanf 向調用函數(shù)返回成功接收數(shù)據(jù)的個數(shù)。3-8 解:在輸入多個數(shù)值數(shù)據(jù)時,若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格, TAB 或回車作間隔。C 編譯在碰到空格,TAB ,回車或非法數(shù)據(jù)(如對“ %d”輸入“12A ”時, A 即為非法數(shù)據(jù) )時即認為該數(shù)據(jù)結束。3-9 解:100#123.456001 123.4

20、561.23e+02 000123.456001.23e+02 -123.457*-123.456780*-1.23457e+02*-123.456780$#100#1003-10 解:ch is e:dec=101 oct=145 hex=65 ASCII=ei is 101:dec=101 oct=145 hex=65 ASCII=ech is x:dec=120 oct=170 hex=78 ASCII=xi is -4:dec=-4 oct=177774 hex=fffc ASCII=3-11 解:12345 378901 2345 6789i=12j=6789x=345.000000

21、y=901.000000ch=3-12解:printf( “ m=%dn=%dk=%dn ” ,m,n,k);printf( “ x=%fy=%fz=%fn ”,x,y,z);printf( “ x+y=%.2fy+z=%.2fz+x=%.2fnprintf( “ u=%-9un=%9ld ” ,u,n);” ,(int)x-y,y+z,-z-(int)x);printf( “ ch1=%c or %dn ” ,ch1,ch1);printf( “ ch2=%c or %dn ” ,ch2,ch2);3-13 解:4,3,3,2從右往左開始算3-14 請分析和給出以下程序段的輸出結果。#inc

22、lude <stdio.h>int main(void)/* 主函數(shù) */int i=59;float fX;double dY,dZ;printf("i =%dn",i);printf("i =%5dn",-i);printf("i =%5on",i);printf("i =%5xn,i");printf("i =%ldn",i);fX=dY=333.12345678901234567890;dZ=-555.1234567890123456789e-9;printf("%

23、fn",fX);printf("%fn",dZ);printf("%en",dZ);printf("%.4fn",fX);printf("%.8fn",dY);printf("%.3en",dZ);printf("%.18fn ” ,dY);printf("%10.3en",dY);printf("%2.5fn",dY);printf("%2en",dZ);rerturn 0; /*main() 函數(shù)結束 */(分析

24、略 )。3-15 編寫一個程序顯示如下的方框,橢圓,箭頭,或者菱形圖* * * * * * *int main(void)printf("*n");printf("*n");printf("*n");printf("*printf("*printf("*n");*n");*n");printf("*n");return 0; /* 其余的照例或者用for循環(huán)來做*/3-17int main()int num;int square11;int cube11;

25、for(num=0; num<=10; num+)squarenum = num * num;cubenum = num * num * num;printf("numbersquarecuben");printf("-n");for(num=0; num<=10; num+)printf("%-10d%-10d%-10dn", num, squarenum, cubenum);return 0;第四章程序設計的算法基礎習題參考答案4-1 試分析給出人們日常生活中對問題求解的一般過程和步驟。解:首先:(必須)知道一些已知條

26、件或約束條件;第二,確定或尋找針對該問題的求解方法;第三,根據(jù)選擇的求解方法確定具體的問題求解步驟;第四,進行問題求解的實際演算和推理活動;最后,得到并整理求解結論。4-2 解:(1) 1)睜開雙眼;2)穿好衣服、褲子及鞋子等;3)下床;4)洗漱(包括洗臉、刷牙等); 5)吃早餐(包括飯后洗碗等工作);6)上課學習;7)吃午餐;8)午休; 9)上課學習; 10)吃晚餐;11)課外活動(包括看電視、寫作業(yè)等等); 12)洗漱; 13)上床;14)脫衣服、褲子及鞋子等;15)睡覺。( 2) 1)整理好課本;2)從座位上站起來;3)走出教室; 4)走進食堂;5)排隊; 6)判斷是否已經(jīng)輪排到自己,若

27、否,則轉5),否則轉7);7)刷卡; 8)點菜、買飯。( 3) 1)尋找座位; 2)坐下; 3)用筷子夾起飯菜; 4)將飯菜送到嘴里;5)細嚼慢咽;4-46)判斷是否已經(jīng)吃飽或者飯菜已經(jīng)吃完,若否,則轉7),否則轉 8);7)重復 3)5)過程; 8)整理餐具,從座位上站起;9)端起餐具離開座位;10)尋找水龍頭,洗碗;11)帶著餐具回寢室;12)到達寢室,放下餐具;13)做個人衛(wèi)生;14)午睡;怎么理解Wirth 提出的程序 =算法 +數(shù)據(jù)結構的深刻含義?解:程序是在數(shù)據(jù)的某種特定表示方法和結構基礎上對抽象算法的具體描述,它揭示了面向過程程序設計的本質。將程序設計問題分為算法和數(shù)據(jù)結構,充分

28、顯示了算法在程序設計過程中的重要性。算法注重問題求解的過程和步驟描述,主要考慮問題求解的方法;程序是對算法具體實現(xiàn)的描述, 它需要考慮與程序語言及編程環(huán)境有關的實現(xiàn)細節(jié),如語言環(huán)境、 操作系統(tǒng)環(huán)境等。4-5 解:參見課本第79 頁。4-6 解:算法的實質是對問題求解方法和過程的描述,它由解決問題的基本操作及控制操作過程次序的控制結構組成。其中基本操作包括算術、關系、邏輯等基本運算和輸入輸出以及函數(shù)、位操作、文件操作等;控制結構主要是順序、選擇和循環(huán)三種基本的控制結構。算法的三組成要素:1)操作;2)控制結構;3)數(shù)據(jù)結構;算法的基本性質:1)(有窮)動作序列;2)動作序列只有一個起點(即初始動

29、作);3)每一動作只有一個后繼動作;4)動作序列的終止表示問題得解或無解(不保證一定能得解)。4-7 解:算法描述方法有:1) 傳統(tǒng)流程圖和標準流程圖符號體系的表示方法;2) 傳統(tǒng)流程圖符號表示的結構化表示方法;3) 無流程線流程圖符號的結構化表示方法;4) 問題分析圖的結構化表示方法;5) 偽代碼的結構化程序表示方法。傳統(tǒng)流程圖符號是一些專門設計的圖形符號,用于表示程序或算法中的各類操作,用線條表示這些操作之間的執(zhí)行順序。標準流程圖符號是針對傳統(tǒng)流程圖符號體系的改進。在算法描述中使用他們來描述算法過程,能很好地表達程序設計的結構與梗概,方便同人的交流。傳統(tǒng)流程圖運用起來靈活、自由、形象、直觀

30、,流程線指向的任意轉向使得繪制過程比較隨意、 自由,易被接受和運用。但是流程線的不加限制帶來了算法流程繪制的隨意性和不規(guī)則性容易導致繪制出來的流程圖零亂,閱讀不變,修改和維護也比較困難。無流程線流程圖顯得更緊湊和清晰,其結構化繪制具有強迫性,繪制結構化流程圖的過程也更加容易和方便,克服了傳統(tǒng)流程圖的缺陷,同時保留了流程圖的直觀和簡單特點。但是該表示法的圖形嵌套層次不能太多,尤其是對多層次條件選擇的嵌套清形,并且對圖形的修改和維護,也不如傳統(tǒng)流程圖方便。問題分析圖PAD 采用 PAD 圖形符號描述算法,比較方便,當問題過程復雜時PAD 描述方法優(yōu)勢更為明顯,同時它克服了傳統(tǒng)流程圖的隨意和非結構化

31、特征,也避免了N-S 圖隨嵌套層次的增加內層矩形框急劇縮小所帶來的表述上的不方便。偽代碼的結構化程序表示方法, 比基于圖形符號的方法自由度大, 同時它可以使用自然語言和程序語言進行比較自由的算法描述, 可以不嚴格遵守程序語言的嚴格語法約束, 另外,由于直接使用了程序語言的要素, 在算法的程序語言實現(xiàn)時更加的方便。 但它要遵守結構化描述這一基本的要求。4-8 C 語言提供了哪些用于結構化程序設計的基本技術?解: C 語言提供了3 種用于結構化程序設計的基本技術,分別是:1)順序;2)選擇;3)循環(huán)。4-11 對例 4-8 的方法 2 和方法 3,試分析并給出其流程圖描述。N-S 流程圖(方法2_

32、逐一比較):程序代碼:#include<stdio.h>int main(void)float fa,fb,fc,max;/聲明 fa,fb,fc,max 四個變量 .clrscr();/清屏 .printf("please input three values(fa,fb,fc):");scanf("%f,%f,%f",&fa,&fb,&fc);/ 依次輸入fa,fb,fc 的值 .if(fa<fb)/ 如果 fa<fbif(fb<fc)/并且,如果fb<fc ,則 max=fc;max=fc

33、;else/否則, max=fb;max=fb;else/ 否則if(fa<fc)/并且,如果fa<fc ,則 max=fc;max=fc;else/否則, max=fa;max=fa;printf("the max is %fn",max);/ 輸出 fa,fb,fc 三個數(shù)的最大值max.return 0;運行測試結果:N-S 流程圖(方法3_兩兩比較):程序代碼:#include<stdio.h>int main(void)float fa,fb,fc,temp,max;/ 聲明 fa,fb,fc,temp,max 五個變量 .clrscr()

34、;/清屏 .printf("please input three values(fa,fb,fc):");scanf("%f,%f,%f",&fa,&fb,&fc);/依次輸入fa,fb,fc 的值 .if(fa<fb)/ 如果 fa<fb ,將 fb 的值賦給中間變量temp,即temp=fb;temp=fb;else/ 否則,將fa 的值賦給temp,即temp=fa;temp=fa;if(temp>fc)/如果中間變量temp>fc ,則將temp 的值賦給max,即max=temp;max=temp

35、;else/ 否則,將fc 的值賦給max=fc;printf("the max is %fn",max);return 0;max,即 max=fc;/ 輸出 fa,fb,fc 三個數(shù)的最大值max.運行測試結果:4-12 對例 4-9 所示的流程圖(圖4-8),請分析其算法執(zhí)行步驟過程。解: 1)給出參數(shù)n 的值;2)如果,轉 3);否則轉4);3)如果,輸出 n 值非法的提示信息,然后轉7);否則轉6);4)初始化fac=1 ; i=1 ;然后轉5);5)計算 n!的值:即當;求出 n!的值 fac,然后轉7);6) fac=1 ,然后轉7);7)輸出 n!的值( n

36、 非法時寫非法 )4-15 解:階梯共有119 步。問題分析:設階梯數(shù)為steps,則依據(jù)題意有:.由此,知道steps整除 7,且為正整數(shù),那么其初始值為7,即初始化steps=7;N-S 流程圖:steps 的最小取值至少為7,因而我們假定傳統(tǒng)流程圖:程序代碼:#include<stdio.h>int main(void)int steps=7;/初始化clrscr();while(1)/ 清屏/ 當為真時1;/ 對 i! 的倒數(shù)累加求和if(steps%2=1&&steps%3=2&&steps%5=4&&steps%6=5&a

37、mp;&steps%7=0)break;/ 如果滿足上述公式,則退出while 循環(huán) .else steps+;/ 否則, steps 加 1,繼續(xù) while 循環(huán) .printf("there are %d steps!n",steps);/ 輸出求解結果:階梯數(shù)目steps.return 0;運行測試結果:4-16 解:算法描述: 1)輸入一個門限值,及精確值e,并初始化:i=1;sum=0;2)計算 i!;3)計算 1/i!;4)對 1/i! 累計求和 ;5)判斷求解的誤差(e-sum)是否小于門限值;6)若是,則轉7);否則,做i+ ,然后轉2);7)輸出

38、滿足條件時i 的取值 .傳統(tǒng)流程圖:偽代碼:#include<stdio.h>int main(void)float e;float eps;float fac=1;float sum=0;int i=1;/聲明及初始化clrscr();/ 清屏printf("please input the eps and e(eps,e):");scanf("%f,%f",&eps,&e);/ 輸入門限值=eps,及精確值e;while(e-sum)>=eps)/當精確值與近似值間誤差大于門限值時fac*=i;/求 i!;print

39、f("the %d fac is %fn",i,fac);/ 輸出 i!的值 fac;sum+=1/fac;i+;/i 自加/輸出滿足誤差小于門限值時的n 的值( i-1 );printf("when the error is less than %f,the n is %dn",eps,i-1);return 0;運行測試結果:4-18解:問題分析:對于本次綠化活動的樹苗費用,由于每棵樹苗的價格一定(為8 元),那么只要確定了綠化所栽的樹苗總數(shù)就行了,而所用樹苗總數(shù)又取決于樹與樹之間的間距以及道路的全長, 這兩個因素都是確定的,因此我們可以先求出單側大

40、道綠化所需樹苗數(shù),再乘以2,即得到所需樹苗總數(shù),然后乘以單棵樹苗價格,即該次綠化活動樹苗費用。問題求解假設:假定 r_length 表示大道全長, r_length=2000 米( 1 公里 =1 千米), t_price 表示單棵樹苗價格, t_price=5 元 /棵, spacing 表示樹苗間距, spacing=5 米。傳統(tǒng)流程圖:程序代碼:#include<stdio.h>int main(void)/* 變量聲明, r_length,price,spacing 分別表示大道長度,樹苗單價,樹苗間距 */ int r_length,t_price,spacing;int

41、 i=0,j=0,sum=0;/*j 記錄單側大道綠化所需樹苗數(shù)*/clrscr();/ 清屏printf("please input the information(r_length,t_price,spacing):");scanf("%d %d %d",&r_length,&t_price,&spacing);/* 依次輸入大道長度、樹單價、樹間距.*/for(i=0;i<=r_length;i=i+spacing)/* 計算單側大道綠化所需要的樹苗數(shù)量j*/j+;printf("the total of %

42、d trees are required!n",2*j); /*輸出綠化所需要的總樹苗數(shù)量sum+=2*j*t_price;/*2j 表示綠化總共所需樹苗數(shù),sum 為綠化活動樹苗費用printf("the %d trees' total price is %dn",2*j,sum); /*輸出綠化所用樹苗的總費用2j*/*/sum*/return 0;實驗結果:4-19程序代碼:#include<math.h>#include<stdio.h>int main(void)int i,j;clrscr();for(i=1;i<

43、=9;i+)for(j=1;j<=i-1;j+)printf(" t");for(j=1;j<=9-i+1;j+)printf("%d*%d=%dt",i,(i+j-1),i*(i+j-1);printf("n");return 0;實驗結果:4-21 解:對于程序段1:int main(void)int number=0;while(number+<=1)printf("*%dn",number);printf("*%dn",number);return 0;分析:首先我們清

44、楚自加運算符中前加(+i )和后加( i+ )的區(qū)別:前加是引用加1后的值,即先加1 再引用;后加是先引用后加1,即引用的是加1 之前的原值??傊?, ( +)運算時,只要引用過其表達式就必然會加1。此處, number 的初始值為0( number=0; ), while 條件表達式中,number 采用后加( number+ ),則 number+<=1 對應于是 0<=1 (成立),并且 number 由 0 自加 1 變?yōu)?1,進入 while 循環(huán),輸出: *1 并換行;繼續(xù)判斷 number+<=1 條件是否成立,有 1<=1 (成立),并且 number 由

45、 1 已自加 1 變?yōu)?2,進入 while 循環(huán),輸出:*2 并換行;繼續(xù)判斷 number+<=1是否成立,有 2<=1(不成立),雖然 while 循環(huán)的條件表達式此時不成立,但引用了number+ ,number 由 2 自加變?yōu)?,而 while 循環(huán)的條件不滿足,退出while 循環(huán),執(zhí)行下一條語句“printf( “ *%dn ”,number); ”輸出: *3 并換行,然后繼續(xù)向下執(zhí)行“ return 0; ”語句,返回操作系統(tǒng),結束。由此得到該程序段的執(zhí)行結果即如下所示!執(zhí)行結果:對于程序段2:int main(void)int number=0;while(n

46、umber<=1)number+;printf("*%dn",number);printf("*%dn",number);return 0;分析:我們可以清楚地看到該程序段與程序段1 最明顯的差別在于:程序段 1 的自加在while 條件表達式中完成,其輸出有在循環(huán)體內,有在循環(huán)體外;而該程序段的自加和輸出均在循環(huán)體內。此處,number 的初始值為 0(number=0; ),while 條件表達式中, number<=1 對應于 0<=1 (成立),進入 while 循環(huán),執(zhí)行“ number+; ”語句,此時 number 由 0

47、 自加為 1,接著執(zhí)行下一條語句“ printf("*%dn",number); ”,輸出: *1 并換行,繼續(xù)執(zhí)行語句“printf("*%dn",number); ”,輸出: *1 并換行;繼續(xù)判斷 number<=1 是否成立,有 1<=1(成立),進入 while 循環(huán),執(zhí)行“ number+; ”語句,此時 number 由 1 自加為 2,接著執(zhí)行語句“ printf("*%dn",number); ”,輸出: *2 并換行,繼續(xù)執(zhí)行下一條語句“printf("*%dn",number);

48、”,輸出: *2 并換行;繼續(xù)判斷 number<=1 是否成立,有 2<=1(不成立),退出 while 循環(huán),執(zhí)行“return 0;”語句,返回操作系統(tǒng),結束。由此得到該程序段的執(zhí)行結果即如下所示!執(zhí)行結果:第五章用 C 語言進行結構化程序設計習題參考答案5-1.分析:知道最后一天的梨數(shù),可以一天一天倒推到第一天的梨的個數(shù)。假設第n 天的梨?zhèn)€數(shù)為Xn ,則前一天的梨?zhèn)€數(shù)為因此,迭代公式為Xn-1=2(Xn+1)Xn-1,那么,Xn=Xn-1-(Xn-1)/2+1)=(Xn-1)/2-1,初始條件為X18=1。實現(xiàn)代碼:#include<stdio.h>int ma

49、in()long pear=1;int i;clrscr();for(i=17;i>0;i-)pear=(pear+1)*2;printf("Day:%2dPears:%ldn",i,pear);return 0;5-2 請給出 2 個整數(shù)的最大公約數(shù)和最小公倍數(shù)的算法描述和程序實現(xiàn)。#include<stdio.h>int main(void)int num1,num2,temp,p,r;printf("Please input two nums:");scanf("%d,%d",&num1,&nu

50、m2);if(num1<num2) /* 比較兩個數(shù)的大小,將大的數(shù)放在num1*/temp=num1;num1=num2;num2=temp;p=num1*num2;while(num2!=0) /* 求 num1 和 num2 的最大公約數(shù)*/r=num1%num2;num1=num2;num2=r;printf("The Gcd is:%dn",num1);printf("The least common multiple is:%dn",p/num1);return 0;5-3 在 5-2 基礎上給出求n 個數(shù)最大公約數(shù)和最小公倍數(shù)的算法描述和程序實現(xiàn)。#include <stdio.h>/* 最大公約數(shù)*/int gcd(int a, int b)int t;if(a < b)t =

溫馨提示

  • 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

提交評論