C語言程序設(shè)計(何欣銘、顏暉_第2版)課后習(xí)題答案_第1頁
C語言程序設(shè)計(何欣銘、顏暉_第2版)課后習(xí)題答案_第2頁
C語言程序設(shè)計(何欣銘、顏暉_第2版)課后習(xí)題答案_第3頁
C語言程序設(shè)計(何欣銘、顏暉_第2版)課后習(xí)題答案_第4頁
C語言程序設(shè)計(何欣銘、顏暉_第2版)課后習(xí)題答案_第5頁
已閱讀5頁,還剩106頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、39 C語言程序的調(diào)試、運行步驟修改程序,觀察語法錯誤、邏輯錯誤及改正方法。語法錯誤:可以刪除一個分號,使編開始編輯源程序.c / .cpp編譯目標程序.obj連接可執(zhí)行程序.exe運行結(jié)果譯出現(xiàn)錯誤提示,改正之,再編譯。類比寫文章有錯別字。邏 輯 錯 誤 : 將sum=sum+i改 為sum=sum-i,編譯、連接、運行,發(fā)現(xiàn)語法錯誤1.3 習(xí)題參考答案連接錯誤運行錯誤運行結(jié)果不符合題目要求。找出錯誤(調(diào)試),改正之,再編譯、連接、運行,看結(jié)果。類比寫文章詞不達意。1對 C語言來說,下列標識符中哪些是合法的,哪些是不合法的? total_debugLarge&all,Conter1,begi

2、n_解答:Large&Tall不合法,其余都合法。 2改寫本章 1.4 節(jié)中的流程圖 1.2,求 1100 中能被 6 整除的所有整數(shù)的和。解答:sum = 0i = 1假i = 100?真真sum = sum + ii能被6整除?i = i + 1打印 sum假圖 1.1“求 1100 中能被 6 整除的所有整數(shù)的和”的流程圖113改寫本章 1.4 節(jié)中的程序,求 1100 中能被 6 整除的所有整數(shù)的和,并在編程環(huán)境中驗證該程序的運行結(jié)果。解答:#includeintmain(vid)inti,sum=0;for(i=1;i=100i+)if(i%6=0)sum=sum+i;printf%

3、d,sum);return0;運行結(jié)果:8164對于給定的整數(shù) n(n1),請設(shè)計一個流程圖判別 n 是否為一個素數(shù)(只能被 1 和自己整除的整數(shù)),并分析該流程圖中哪些是順序結(jié)構(gòu)、哪些是分支結(jié)構(gòu)與循環(huán)結(jié)構(gòu)。解答:在流程圖中,分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)如圖 1.2 所示,自上而下的 2 個實線框和 2 個虛線組成了順序結(jié)構(gòu)。輸入ni = 2假in/2?假假打印n不是素數(shù)循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)#include int main(void ) printf( An); printf(A An); printf( An); return 0; 1462 函數(shù)的概念C語言中有兩種類型函數(shù)標準庫函數(shù)自定義函數(shù)函數(shù)可以

4、做到一次定義、多次調(diào)用使用自定義函數(shù)的程序框架double fact(int n); /* 聲明自定義函數(shù),以分號結(jié)束 */int main(void) result = fact(i); /* 調(diào)用自定義函數(shù)fact(i)計算i! */* 定義求 n! 的函數(shù) */簡單總結(jié)本節(jié)內(nèi)容。使學(xué)生了解自定義函數(shù)編程結(jié)構(gòu),能夠模仿編程即可。2.3 練習(xí)與習(xí)題參考答案2.3.1 練習(xí)參考答案2-1 編寫程序,在屏幕上顯示一個短句“Programming in C is fun!”。解答:#include int main(void) printf(Programming in C is fun!n);

5、return 0; 2-2 下列語句的運行結(jié)果是什么?與例 2-2 的運行結(jié)果有何不同?為什么?printf(Programming is fun. And Programming in C is even more fun!n); 解答:運行結(jié)果:Programming is fun. And Programming in C is even more fun! 例 2-2 的運行結(jié)果分 2 行顯示。原因在于,例 2-2 中在每條輸出語句的結(jié)尾都采用了n換行。2-3編寫程序,在屏幕上顯示如下圖案。* * * * 解答:int main(void) printf(* * * *n * * *n

6、 * *n *n); return 0; 18 2-4 編寫程序,求華氏溫度 150F 對應(yīng)的攝氏溫度(計算公式同例 2-3)。解答:#include int main(void) int celsius, fahr; fahr = 150; celsius = 5 * (fahr 32) / 9; printf(fahr = %d, celsius = %dn, fahr, celsius); return 0; 2-5算 術(shù) 表 達 式5*(fahr-32)/9能 改 寫 成5(fahr-32)/9嗎 ? 為 什 么 ? 如 果 將 其 改 寫 為5/9*(fahr-32),會影響運算結(jié)果

7、嗎?解答:5(fahr-32)/9 不是合法的 C 表達式,因為不能省略運算符*;5/9*(fahr-32)的值為 0。2-6一個物體從 100 米的高空自由落下,編寫程序,求它在前 3 秒內(nèi)下落的垂直距離。設(shè)重力加速度為 10m/s2。解答:#include int main(void) double height; height = 0.5 * 10 * 3 * 3; printf(height = %.2fn, height); return 0; 2-7 輸入提示和輸入語句的順序應(yīng)該如何安排?例 2-5 中,scanf(%d%d%lf, &money, &year,&rate) 能 改

8、 寫 為scanf(%d%lf%d, &money, &year, &rate) 嗎 ? 為 什 么 ? 能 改 寫 為scanf(%d%lf%d, &money, &rate, &year) 嗎?如果可以,其對應(yīng)的輸入數(shù)據(jù)是什么?解答:輸入提示在前,輸入語句在后。不能改寫為 scanf(%d%lf%d, &money, &year, &rate),因為%lf 與整型變量 money 不匹配,%d 與浮點型變量 rate 不匹配。與 scanf(%d%lf%d, &money, &rate, &year)對應(yīng)的輸入數(shù)據(jù)為:1000 0.025 3 2-8 編寫程序,輸入華氏溫度,輸出對應(yīng)的攝氏

9、溫度,計算公式同例 2-3。解答:#include int main(void) int celsius, fahr; 19 scanf(%d, &fahr); celsius = 5 * (fahr - 32) / 9; printf(celsius = %dn, celsius); return 0; 2-9 編寫程序,輸入 3 個整數(shù),計算并輸出它們的平均值。解答:#include int main(void) int a, b, c; double average; scanf(%d%d%d, &a, &b, &c); average = (a + b + c) * 1.0 / 3;

10、printf(average = %.2fn, average); return 0; 2-10 編寫程序,輸入 x,計算并輸出下列分段函數(shù) f(x)的值(保留 3 位小數(shù))。1y =f x( ) = xx0解答:0x = 0#include int main(void) double x, y; scanf(%lf, &x); if(x != 0) y = 1 / x; else y = 0; printf(f(%.2f) = %.3fn, x, y); return 0; 2-11 編寫程序,輸入 x,計算并輸出下列分段函數(shù) f(x)的值(保留 2 位小數(shù)),請調(diào)用 sqrt函數(shù)求平方根,

11、調(diào)用 pow 函數(shù)求冪。 + +51xxx0y =f x( )= 2xxx 0解答:#include 20 #include int main(void) double x, y; scanf(%lf, &x); if(x = 0) y = sqrt(x); else y = pow(x,5) + 2 * x + 1 / x; printf(f(%.2f) = %.2fn, x, y); return 0; 2-12 編寫程序,輸入 2 個整數(shù) lower 和 upper,輸出一張華氏攝氏溫度轉(zhuǎn)換表,華氏溫度的取值范圍是lower, upper,每次增加 2F,計算公式同例 2-7。解答:#i

12、nclude int main(void) int lower, upper; double celsius, fahr; scanf(%d%d, &lower, &upper); printf(fahr celsiusn); for(fahr = lower; fahr = upper; fahr = fahr + 2) celsius = 5 * (fahr - 32.0)/9 ; printf(%3.0f %6.1fn, fahr, celsius); return 0; n12-13 編寫程序,輸入一個正整數(shù) n,求 i=1解答:#include int main(void) int

13、i, n; double sum; scanf(%d, &n); sum = 0; for(i = 1; i = n; i+) sum = sum + 1.0 / i; printf(sum = %.6fn, sum); i。21 return 0; 2-14 編寫程序,輸入一個正整數(shù) n,計算1+ + +1 1. 的前 n 項之和。3 5解答:#include int main(void) int i, n; double sum; scanf(%d, &n); sum = 0; for(i = 1; i = n; i+) sum = sum + 1.0/(2*i-1); printf(su

14、m = %.6fn, sum); return 0; 2-15 編寫程序,輸入一個正整數(shù) n,計算1- + -1 11 +1-1+ . 的前 n項之和。4 7 10 13 16解答:#include int main(void) int flag, i, n, denominator; double item, sum; scanf(%d, &n); sum = 0; flag = 1; denominator = 1; for(i = 1; i = n; i+) item = flag * 1.0 / denominator; sum = sum + item; flag = -flag;

15、denominator = denominator + 3; printf(sum = %.3fn, sum); return 0; 2-16 編寫程序,輸入兩個正整數(shù) m 和 n,計算 m! + n!。解答:#include stdio.h 22 int main(void) int i, m, n; double fm, fn; scanf(%d%d, &m, &n); fm = 1; for(i = 1; i = m; i+) fm = fm * i; fn = 1; for (i = 1; i = n; i+) fn = fn * i; printf(%d! + %d! = %.0fn

16、, m, n, fm+fn); return 0; 2-17 執(zhí)行下列程序段后,sum 的值是。for (i = 1; i = 10; i+) sum = 0; sum = sum + i; 解答:sum 的值是 10。2-18 輸入一個正整數(shù) n,生成一張 3 的乘方表,輸出 30到 3n的值,可以調(diào)用冪函數(shù)計算 3的乘方。解答:#include #include int main(void) int i, n; double mypow; scanf(%d, &n); for(i = 0; i = n; i+) mypow = pow(3, i); printf(pow(3,%d) = %

17、.0fn, i, mypow); return 0; 2-19 輸入一個正整數(shù) n,生成一張階乘表,輸出 1!到 n!的值。要求定義和調(diào)用函數(shù) fact(n)計算 n!,函數(shù)類型是 double。解答:#include int main(void) 23 int i, n; double myfact; double fact(int n); scanf(%d, &n); for(i = 1; i = n; i+) myfact = fact(i); printf(%d! = %.0fn, i, myfact); return 0; double fact(int n) int i; doub

18、le product; product = 1; for(i = 1;i = n; i+) product = product * i; return product; 2-20根據(jù)下列公式可以算出從 n 個不同元素中取出 m 個元素(mn)的組合數(shù)。編寫程序,輸入 2 個正整數(shù) m 和 n(mn),計算并輸出組合數(shù)。要求定義和調(diào)用函數(shù) fact(n)計算 n!,函數(shù)類型是 double。mCn=解答:!(n!-)!#include stdio.h double fact(int n); int main(void) int m, n; double s; scanf(%d%d, &m, &n

19、); s = fact(n)/(fact(m) * fact(n-m); printf(result = %.0fn, s); return 0; double fact(int n) int i; double product; product = 1; for(i = 1;i = n; i+) 24 product = product * i; return product; 2.3.2 習(xí)題參考答案1編寫程序,輸入兩個整數(shù) num1 和 num2,計算并輸出它們的和、差、積、商與余數(shù)。解答:#include int main(void) int num1, num2; scanf(%d%

20、d, &num1, &num2); printf(%d + %d = %dn, num1, num2, num1+num2); printf(%d - %d = %dn, num1, num2, num1-num2); printf(%d * %d = %dn, num1, num2, num1*num2); printf(%d / %d = %dn, num1, num2, num1/num2); printf(%d % %d = %dn, num1, num2, num1%num2); return 0; 2為了倡導(dǎo)居民節(jié)約用電,某省電力公司執(zhí)行“階梯電價”,安裝一戶一表的居民用戶電價分兩

21、個“階梯”:月用電量 50 千瓦時以內(nèi)的,電價為 0.53 元/千瓦時;超過 50 千瓦時的用電量,電價上調(diào) 0.05 元/千瓦時。編寫程序,輸入用戶的月用電量(千瓦時),計算并輸出該用戶應(yīng)支付的電費(元)。解答:#include int main(void) double cost, e; scanf(%d, &repeat); scanf(%lf, &e); if(e = 50) cost = 0.53 * e; else cost = 0.53 * 50 + (e - 50) * 0.58; printf(cost = %.2fn, cost); return 0; 3編寫程序,輸入實數(shù)

22、 x 和正整數(shù) n,計算 xn,不允許調(diào)用 pow 函數(shù)求冪。解答:#include int main(void) 25 int i, n; double mypow, x; scanf(%lf%d, &x, &n); mypow = 1; for(i = 1; i = n; i+) mypow = mypow * x; printf(%.2fn, mypow); return 0; n(i2+1)4編寫程序,輸入兩個正整數(shù) m 和 n,求 i m解答:#include int main(void) int i, m, n; double sum; scanf(%d%d, &m, &n); s

23、um = 0; for(i = m; i = n; i+) sum = sum + i * i + 1.0 / i; printf(sum = %.6fn, sum); return 0; i。5編寫程序,輸入一個正整數(shù) n,計算解答:#include int main(void) int flag, i, n; double item, sum; scanf(%d, &n); sum = 0; flag = 1; for(i = 1; i = n; i+) item = flag * 1.0 * i / (2 * i - 1); sum = sum + item; flag = -flag;

24、 1 - + - + -2 3 4 56 + .3 5 7 9 11的前 n項之和。26 printf(sum = %.3fn, sum); return 0; 6某客戶為購房辦理商業(yè)貸款,選擇了按月等額本息還款法,計算公式如下,在貸款本金(loan)和月利率(rate)一定的情況下,住房貸款的月還款額(money)取決于還款月數(shù)(month)。客戶打算在 530 年的范圍內(nèi)選擇還清貸款的年限,想得到一張“還款年限月還款額表”以供參考。編寫程序,輸入貸款本金 loan 和月利率 rate,輸出“還款年限月還款額表”,還款年限的范圍是 530 年,輸出時分別精確到年和元。rate+ rate)m

25、onthmoney loan解答:(1(1+ rate)month-1#include #include int main(void) int year; double loan, money, mypow, rate; scanf (%lf%lf, &loan, &rate); printf( year moneyn); for(year = 5; year = 30; year+) mypow = pow(1+rate, 12 * year ); money = loan * rate * mypow /( mypow - 1); printf(year=%d money=%.0fn, y

26、ear, money); return 0; n 2i7編寫程序,輸入一個正整數(shù) n,求 i=1,可以調(diào)用 pow 函數(shù)求冪。解答:#include #include int main(void) int i, n; double sum; scanf(%d, &n); sum = 0; for(i = 1; i = n; i+) sum = sum + pow(2, i); printf(sum = %.0fn, sum); 27 return 0; ne = i !8編寫程序,輸入一個正整數(shù) n,求型是 double。解答:#include int main(void) int i, n;

27、 double sum; double fact(int n); scanf(%d, &n); sum = 0; for(i = 0; i = n; i+) sum = sum + fact(i); printf(sum = %.0fn, sum); return 0; double fact(int n) int i; double product; product=1; for(i = 1; i = n; i+) product = product * i; return product; 2.4 實驗指導(dǎo)教材參考答案2.4.1 基本數(shù)據(jù)處理一、調(diào)試示例:略二、改錯題:略三、編程題i=0。

28、要求定義和調(diào)用函數(shù) fact(n)計算 n!,函數(shù)類1求華氏溫度 150F 對應(yīng)的攝氏溫度。計算公式如下,其中:c 表示攝氏溫度,f 表示華氏溫度。5532c = - f9928 45 46 改變else 和 if 的配對例3-12 改寫下列 if 語句,使 else 和第1個 if 配對。if (x 2)if (x 1) y = x + 1; else y = x + 2;每條語句的執(zhí)行條件?if (x 2)if (x 2)if (x 1) y = x + 1; if (x 1) y = x + 1; else;else y = x + 2;else y = x + 2;本章總結(jié)若要改變 e

29、lse 正常的配對規(guī)則,一般采用兩種方法:采用,構(gòu)造一個復(fù)合語句。增加空的 else 語句;歸納總結(jié)本章的各個重要知識點。分支結(jié)構(gòu):if-else語句else if正確理解if語句和switch語句的執(zhí)行機制;掌握各類關(guān)系表達式、邏輯表達式的運用;分支結(jié)構(gòu): switch語句 能合理運用分支語句熟練編寫case后為常量表達式break的使用數(shù)據(jù)類型:char型運算符與表達式邏輯運算符、關(guān)系運算符邏輯表達式分支結(jié)構(gòu)類的程序;分支結(jié)構(gòu)程序的綜合設(shè)計3.3 練習(xí)與習(xí)題參考答案3.3.1 練習(xí)參考答案練習(xí) 3-1 例 3-4 中使用 else-if 語句求解多分段函數(shù),為了檢查 else-if 語句的

30、三個分支是否正確,已經(jīng)設(shè)計了三組測試用例,請問還需要增加測試用例嗎?為什么?如果要增加,請給出具體的測試用例并運行程序。解答:最好再增加兩組測試用例,因為尚未對分段函數(shù)參數(shù)的邊界值進行測試??稍俳o出 x=0和 x=15 時的兩種情況。練習(xí) 3-2輸入一個整數(shù) x,計算并輸出下列分段函數(shù) sign(x) 的值。- 1, x 0y= sign(x) =,x=解答:#include int main(void) int x, y; 01,0x 0 printf(Enter x: ); scanf(%d,&x); if(x0) y=1; else if (x=0) y=0; else y=-1; pr

31、intf(sign( %d ) = %dn,x,y); return 0; 練習(xí) 3-3 輸入一個正整數(shù) n,再輸入 n 個學(xué)生的成績,計算平均成績,并統(tǒng)計所有及格學(xué)生的人數(shù)。解答:# include int main(void) int count, i, n; double grade, total; printf(Enter n: ); scanf(%d, &n); total = 0; count = 0; for(i = 1; i = 60) count+; printf(Grade average = %.2fn, total / n); printf(Number of pass

32、 = %dn, count); return 0; 練習(xí) 3-4 輸入 15 個字符,統(tǒng)計其中英文字母、空格或回車、數(shù)字字符和其他字符的個數(shù)。解答:#include int main(void) int i; int blank, digit, letter, other; char c; blank = digit = letter = other = 0; for(i=1;i=a & c =A & c =0 & c = 9) digit+; else if(c= |c=n) blank+; else other+; printf(letter=%d,blank=%d,digit=%d,ot

33、her=%dn, letter, blank, digit, other); return 0; 練習(xí)3-5 輸入一個年份year,判斷該年是否為閏年。判斷閏年的條件是:能被 4 整除但不能被 100 整除,或者能被 400 整除。解答:# include int main(void) int year; printf(Enter year: ); scanf(%d, &year); if( (year % 4 = 0 & year % 100 != 0 ) | year % 400 = 0) printf(It is a leap yearn); else printf(It is not

34、a leap yearn ); return 0; 練習(xí) 3-6 在例 3-8 程序中,如果把 switch語句中所有的 break 都去掉,運行結(jié)果會改變嗎?如果有變化,輸出什么?為什么?解答:如果去掉所有的 break 語句,運行結(jié)果會改變,輸出 price = 0.0,因為不管 choice 值與其中某個常量表達式相等,當(dāng)去掉 break 語句時,其后的所有語句段都將運行,故每次都將執(zhí)行到 price=0.0 語句為止。練習(xí) 3-7 輸入五級制成績(AE),輸出相應(yīng)的百分制成績(0100)區(qū)間,要求使用 switch語句。例如,輸入 A,輸出 90100。五級制成績對應(yīng)的百分制成績區(qū)間為

35、:A(90-100)、B(80-89)、C(70-79)、D(60-69)和 E(0-59)。解答:#include int main(void) char ch; printf(Input Grade: ); ch = getchar(); switch(ch) case A: printf(%c對應(yīng)的百分制區(qū)間是 90-100n,ch); break; case B: printf(%c對應(yīng)的百分制區(qū)間是 80-89n,ch); break; case C: printf(%c對應(yīng)的百分制區(qū)間是 70-79n,ch); break; case D: printf(%c對應(yīng)的百分制區(qū)間是 6

36、0-69n,ch); break; case E: printf(%c對應(yīng)的百分制區(qū)間是 0-59n,ch); break; default: printf(Invalid inputn); return 0; 練習(xí) 3-8 查詢水果的單價。有 4 種水果,蘋果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes),單價分別是 3.00 元/公斤,2.50 元/公斤,4.10 元/公斤和 10.20 元/公斤。在屏幕上顯示以下菜單(編號和選項),用戶可以連續(xù)查詢水果的單價,當(dāng)查詢次數(shù)超過 5 次時,自動退出查詢;不到 5 次時,用戶可以選擇退出。當(dāng)用戶輸入編號 14,顯示相應(yīng)水果的單價(保留兩位小數(shù));輸入 0,退出查詢;輸入其他編號,顯示價格為 0。1 apples 2 pears 3 oranges 4 grapes 0 Exit 解答:#include int main(void) int ri; int choice; float price;

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論