C語(yǔ)言程序設(shè)計(jì)第五版譚浩強(qiáng)課后答案(第二章答案)
1. 什么是算法?試從日常生活中找3個(gè)例子,描述它們的算法
算法:簡(jiǎn)而言之就是求解問(wèn)題的步驟,對(duì)特定問(wèn)題求解步驟的一種描述。
比如生活中的例子:
考大學(xué)
首先填報(bào)志愿表、交報(bào)名費(fèi)、拿到準(zhǔn)考證、按時(shí)參加考試、收到錄取通知書(shū)、按照日期到指定學(xué)校報(bào)到。
去北京聽(tīng)演唱會(huì)
首先在網(wǎng)上購(gòu)票、然后按時(shí)坐車(chē)到北京,坐車(chē)到演唱會(huì)會(huì)場(chǎng)。
把大象放進(jìn)冰箱
先打開(kāi)冰箱門(mén),然后將大象放進(jìn)冰箱,關(guān)冰箱。
2. 什么叫結(jié)構(gòu)化的算法?為什么要提倡結(jié)構(gòu)化的算法?
結(jié)構(gòu)化算法:由一些順序、選擇、循環(huán)等基本結(jié)構(gòu)按照順序組成,流程的轉(zhuǎn)移只存在于一個(gè)基本的范圍之內(nèi)。
結(jié)構(gòu)化算法便于編寫(xiě),可讀性高,修改和維護(hù)起來(lái)簡(jiǎn)單,可以減少程序出錯(cuò)的機(jī)會(huì),提高了程序的可靠性,保證了程序的質(zhì)量,因此提倡結(jié)構(gòu)化的算法。
3. 試述3種基本結(jié)構(gòu)的特點(diǎn),請(qǐng)另外設(shè)計(jì)兩種基本結(jié)構(gòu)(要符合基類(lèi)結(jié)構(gòu)的特點(diǎn))。
結(jié)構(gòu)化程序設(shè)計(jì)方法主要由以下三種基本結(jié)構(gòu)組成:
- 順序結(jié)構(gòu):順序結(jié)構(gòu)是一種線(xiàn)性、有序的結(jié)構(gòu),它依次執(zhí)行各語(yǔ)句模塊
- 選擇結(jié)構(gòu):選擇結(jié)構(gòu)是根據(jù)條件成立與否選擇程序執(zhí)行的通路。
- 循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu)是重復(fù)執(zhí)行一個(gè)或幾個(gè)模塊,直到滿(mǎn)足某一條件位置
重新設(shè)計(jì)基本結(jié)構(gòu)要滿(mǎn)足以下幾點(diǎn):
- 只有一個(gè)入口
- 只有一個(gè)出口
- 結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)執(zhí)行到
- 結(jié)構(gòu)內(nèi)不存在死循環(huán)
因此給出以下復(fù)習(xí)結(jié)構(gòu):while型和until型循環(huán)復(fù)合以及多選擇結(jié)構(gòu)
4. 用傳統(tǒng)流程圖表示求解以下問(wèn)題的算法。
1.有兩個(gè)瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來(lái)盛醋,現(xiàn)在盛醬油,B瓶則相反)。
解析:
用兩個(gè)瓶子顯然很難實(shí)現(xiàn),可以借助一個(gè)空瓶子C作為中轉(zhuǎn),先將A中醋導(dǎo)入C中,然后將B中的醬油導(dǎo)入A中,最后將C中的醋導(dǎo)入B中即可實(shí)現(xiàn)交換。
2.依次將10個(gè)數(shù)輸入,要求輸出其中最大的數(shù)。
解析:
先輸入10個(gè)整數(shù),將第一個(gè)整數(shù)給max,然后依次取剩余整數(shù)與max進(jìn)行比較,如果某個(gè)整數(shù)大于max,將該整數(shù)交給max,直到所有剩余整數(shù)全部比較完,max中保存的即為最大整數(shù),將max值輸出。
3.有3個(gè)數(shù)a,b,c, 要求按大小順序把他們輸出。
解析:
i:先用a和b比較,如果a大于b,將a與b內(nèi)容交換,否則進(jìn)行ii
ii:用c和a比較,如果c大于a,將a和c交換,否則進(jìn)行iv
iii:用c和b比較,如果c大于b,將c和b進(jìn)行交換,否則進(jìn)行iv
iv:輸出a、b、c,結(jié)束
4.求1 + 2 + 3 + … + 100。
解析:
給定N為1,sum為0,如果N 小于等于100時(shí),進(jìn)行sum += N,直到N超過(guò)100,循環(huán)操作完成后sum即為從1加到100的結(jié)果。
5.判斷一個(gè)數(shù)n能否同時(shí)被3和5整除。
解析:
i:輸入數(shù)據(jù)n
ii:如果n能被3整數(shù),進(jìn)行iii,否則輸出n不能被3和5整數(shù)
iii:如果n能被5整數(shù),輸出n能被3和5整數(shù),否則n不能被3和5整數(shù)
6.將100~200之間的素?cái)?shù)輸出
素?cái)?shù):即數(shù)學(xué)中的質(zhì)數(shù),因子只有1和其本身的數(shù)字稱(chēng)為質(zhì)數(shù)。
對(duì)100和200之間的每個(gè)數(shù)進(jìn)行一下操作:
該數(shù)能否被2~該數(shù)之間的所有數(shù)整除,是則是素?cái)?shù)輸出,否則取下一個(gè)數(shù)字。
7.求兩個(gè)數(shù)m和n的最大公約數(shù)
解析:輾轉(zhuǎn)相除法
a. 如果m大于n,交換m和n
b. 循環(huán)進(jìn)行一下操作:
n是否為0? 是則最大公約數(shù)為m,輸出m結(jié)束。
否則:用m%n結(jié)果給r,將n的值給m,將r的值給n
8.求方程 a x 2 + b x + c = 0 ax^2 + bx + c = 0 ax2+bx+c=0的根。分別考慮:
有兩個(gè)不相等的實(shí)根;有兩個(gè)相等的實(shí)根;
解析:
如果 b 2 − 4 a c > 0 b^2 - 4ac > 0 b2−4ac>0則方程有兩個(gè)不相等的實(shí)根: x = − b ± b 2 − 4 a c 2 a x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} x=2a−b±b2−4ac
如果 b 2 − 4 a c = 0 b^2 - 4ac = 0 b2−4ac=0則方程有一個(gè)實(shí)根: x = − b 2 a x=\frac{-b}{2a} x=2a−b
如果 b 2 − 4 a c < 0 b^2 - 4ac < 0 b2−4ac<0則方程沒(méi)有實(shí)根。
5. 用N-S圖表示第4題中各題的算法
1.有兩個(gè)瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來(lái)盛醋,現(xiàn)在盛醬油,B瓶則相反)。
2.依次將10個(gè)數(shù)輸入,要求輸出其中最大的數(shù)。
3.有3個(gè)數(shù)a,b,c, 要求按大小順序把他們輸出。
4.求1 + 2 + 3 + … + 100。
5.判斷一個(gè)數(shù)n能否同時(shí)被3和5整除。
6.求兩個(gè)數(shù)m和n的最大公約數(shù)
7.求方程 a x 2 + b x + c = 0 ax^2 + bx + c = 0 ax2+bx+c=0的根。分別考慮:
- 有兩個(gè)不相等的實(shí)根;
- 有兩個(gè)相等的實(shí)根;
6. 用偽代碼表示第4題中各題的算法
有兩個(gè)瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來(lái)盛醋,現(xiàn)在盛醬油,B瓶則相反)。
begin 醋 => A 醬油 => B A => C B => A C => B end
依次將10個(gè)數(shù)輸入,要求輸出其中最大的數(shù)。
begin 1 => i 0 => max while i < 10 { 輸入一個(gè)整數(shù)data if data > max { data => max } } print max end
有3個(gè)數(shù)a,b,c, 要求按大小順序把他們輸出。
begin input a input b input c if a > b { a => t b => a t => b } if c > a { c => t a => c t => a } if c > b { c => t b => c t => b } print a print b print c end
求1 + 2 + 3 + … + 100。
begin 1 => i 0 => sum while i <= 100 { sum + i => sum i + 1 => i } print sum end
判斷一個(gè)數(shù)n能否同時(shí)被3和5整除。
begin input n if n % 3 == 0 { if n % 5 == 0 { print n能被3和5整除 } else { print n不能被3和5整除 } } else { print n不能被3和5整除 } end
求兩個(gè)數(shù)m和n的最大公約數(shù)
begin input m input n if m > n { m => t n => m t => n } while n != 0 { m % n => r m => n r => n } print m end
求方程 a x 2 + b x + c = 0 ax^2 + bx + c = 0 ax2+bx+c=0的根。分別考慮:
有兩個(gè)不相等的實(shí)根;
有兩個(gè)相等的實(shí)根;
begin input a input b input c b*b - 4*a*c => p if p < 0 { print 方程沒(méi)有實(shí)根 } if p == 0 { print 方程有一個(gè)實(shí)根 -b/2a } if p > 0 { print 方程有兩個(gè)實(shí)根: print x1 = {-b + sqrt(b^2 - 4ac)}/2a print x1 = {-b - sqrt(b^2 - 4ac)}/2a } end
7. 什么叫結(jié)構(gòu)化程序設(shè)計(jì)?它的主要內(nèi)容是什么?
結(jié)構(gòu)化程序設(shè)計(jì)(structured programming,簡(jiǎn)稱(chēng)SP)是進(jìn)行以模塊功能和處理過(guò)程設(shè)計(jì)為主的詳細(xì)設(shè)計(jì)的基本原則。其概念最早由E.W.Dijikstra在1965年提出的。結(jié)構(gòu)化程序設(shè)計(jì)思想確實(shí)使程序執(zhí)行效率提高 ,是軟件發(fā)展的一個(gè)重要的里程碑,它的主要觀(guān)點(diǎn)是采用自頂向下、逐步求精的程序設(shè)計(jì)方法;各個(gè)模塊通過(guò)“順序、選擇、循環(huán)”的控制結(jié)構(gòu)進(jìn)行連接,并且只有一個(gè)入口、一個(gè)出口 。
8. 用自頂向下、逐步細(xì)化的方法進(jìn)行以下算法的設(shè)計(jì):
輸出1900—2000年中是軟黏的年份,符合下面兩個(gè)條件之一的年份是閏年:
- 能被4整除但不能被100整除
- 能被100整除且能被400整除。
算法大體流程
1. 循環(huán)取1900到2000中的每一個(gè)年份
2. 對(duì)于每一個(gè)年份判斷其是否是閏年
3. 是閏年則輸出判斷一年是否是閏年:
1. 如果該年份內(nèi)被4整除但是不能被100整除是閏年,否則不是閏年
2. 如果年份能被400整除則是閏年,否則不是閏年
求 a x 2 + b x + c = 0 ax^2 + bx + c = 0 ax2+bx+c=0的根。分別考慮 d = b 2 − 4 a c d = b^2 - 4ac d=b2−4ac大于0、等于0和小于0這三種情況。
1. 獲取a b c的值
2. 計(jì)算b^2 - 4ac的結(jié)果并給p
3. 如果p < 0, 則方程沒(méi)有實(shí)根
4. 如果p == 0,則方程有一個(gè)實(shí)根-b/2a
5. 如果p > 0, 則方程有兩個(gè)實(shí)根 x1 = {-b + sqrt(b^2 - 4ac)}/2a x2 = {-b - sqrt(b^2 - 4ac)}/2a
輸入10個(gè)數(shù),輸出其中最大的一個(gè)數(shù)。
1. 給一個(gè)max保存最大值
2. 分別輸入10個(gè)數(shù),并對(duì)用每個(gè)數(shù)與max進(jìn)行比較
如果該數(shù)大于max,則將該數(shù)給max
3. 輸出max
到此這篇關(guān)于C程序設(shè)計(jì)第五版譚浩強(qiáng)課后答案(第二章答案)的文章就介紹到這了,更多相關(guān)C程序課后答案內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux下C語(yǔ)言中的mkdir函數(shù)與rmdir函數(shù)
以下是對(duì)C語(yǔ)言中的mkdir函數(shù)與rmdir函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08C++基于遞歸算法解決漢諾塔問(wèn)題與樹(shù)的遍歷功能示例
這篇文章主要介紹了C++基于遞歸算法解決漢諾塔問(wèn)題與樹(shù)的遍歷功能,簡(jiǎn)單描述了遞歸算法的原理,并結(jié)合實(shí)例形式分析了基于遞歸算法解決漢諾塔問(wèn)題與數(shù)的遍歷相關(guān)操作技巧,需要的朋友可以參考下2017-11-11C語(yǔ)言 如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù)
這篇文章主要介紹了C語(yǔ)言中如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11詳解C++值多態(tài)中的傳統(tǒng)多態(tài)與類(lèi)型擦除
值多態(tài)是一種介于傳統(tǒng)多態(tài)與類(lèi)型擦除之間的多態(tài)實(shí)現(xiàn)方式,借鑒了值語(yǔ)義,保留了繼承,在單繼承的適用范圍內(nèi),程序和程序員都能從中受益。這篇文章主要介紹了C++值多態(tài)中的傳統(tǒng)多態(tài)與類(lèi)型擦除,需要的朋友可以參考下2020-04-04