C語言程序設(shè)計第五版譚浩強(qiáng)課后答案(第二章答案)
1. 什么是算法?試從日常生活中找3個例子,描述它們的算法
算法:簡而言之就是求解問題的步驟,對特定問題求解步驟的一種描述。
比如生活中的例子:
考大學(xué)
首先填報志愿表、交報名費、拿到準(zhǔn)考證、按時參加考試、收到錄取通知書、按照日期到指定學(xué)校報到。
去北京聽演唱會
首先在網(wǎng)上購票、然后按時坐車到北京,坐車到演唱會會場。
把大象放進(jìn)冰箱
先打開冰箱門,然后將大象放進(jìn)冰箱,關(guān)冰箱。
2. 什么叫結(jié)構(gòu)化的算法?為什么要提倡結(jié)構(gòu)化的算法?
結(jié)構(gòu)化算法:由一些順序、選擇、循環(huán)等基本結(jié)構(gòu)按照順序組成,流程的轉(zhuǎn)移只存在于一個基本的范圍之內(nèi)。
結(jié)構(gòu)化算法便于編寫,可讀性高,修改和維護(hù)起來簡單,可以減少程序出錯的機(jī)會,提高了程序的可靠性,保證了程序的質(zhì)量,因此提倡結(jié)構(gòu)化的算法。
3. 試述3種基本結(jié)構(gòu)的特點,請另外設(shè)計兩種基本結(jié)構(gòu)(要符合基類結(jié)構(gòu)的特點)。
結(jié)構(gòu)化程序設(shè)計方法主要由以下三種基本結(jié)構(gòu)組成:
- 順序結(jié)構(gòu):順序結(jié)構(gòu)是一種線性、有序的結(jié)構(gòu),它依次執(zhí)行各語句模塊
- 選擇結(jié)構(gòu):選擇結(jié)構(gòu)是根據(jù)條件成立與否選擇程序執(zhí)行的通路。
- 循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu)是重復(fù)執(zhí)行一個或幾個模塊,直到滿足某一條件位置
重新設(shè)計基本結(jié)構(gòu)要滿足以下幾點:
- 只有一個入口
- 只有一個出口
- 結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會執(zhí)行到
- 結(jié)構(gòu)內(nèi)不存在死循環(huán)
因此給出以下復(fù)習(xí)結(jié)構(gòu):while型和until型循環(huán)復(fù)合以及多選擇結(jié)構(gòu)

4. 用傳統(tǒng)流程圖表示求解以下問題的算法。
1.有兩個瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來盛醋,現(xiàn)在盛醬油,B瓶則相反)。
解析:
用兩個瓶子顯然很難實現(xiàn),可以借助一個空瓶子C作為中轉(zhuǎn),先將A中醋導(dǎo)入C中,然后將B中的醬油導(dǎo)入A中,最后將C中的醋導(dǎo)入B中即可實現(xiàn)交換。

2.依次將10個數(shù)輸入,要求輸出其中最大的數(shù)。
解析:
先輸入10個整數(shù),將第一個整數(shù)給max,然后依次取剩余整數(shù)與max進(jìn)行比較,如果某個整數(shù)大于max,將該整數(shù)交給max,直到所有剩余整數(shù)全部比較完,max中保存的即為最大整數(shù),將max值輸出。

3.有3個數(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時,進(jìn)行sum += N,直到N超過100,循環(huán)操作完成后sum即為從1加到100的結(jié)果。

5.判斷一個數(shù)n能否同時被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之間的素數(shù)輸出
素數(shù):即數(shù)學(xué)中的質(zhì)數(shù),因子只有1和其本身的數(shù)字稱為質(zhì)數(shù)。
對100和200之間的每個數(shù)進(jìn)行一下操作:
該數(shù)能否被2~該數(shù)之間的所有數(shù)整除,是則是素數(shù)輸出,否則取下一個數(shù)字。

7.求兩個數(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的根。分別考慮:
有兩個不相等的實根;有兩個相等的實根;
解析:
如果 b 2 − 4 a c > 0 b^2 - 4ac > 0 b2−4ac>0則方程有兩個不相等的實根: 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則方程有一個實根: x = − b 2 a x=\frac{-b}{2a} x=2a−b
如果 b 2 − 4 a c < 0 b^2 - 4ac < 0 b2−4ac<0則方程沒有實根。

5. 用N-S圖表示第4題中各題的算法
1.有兩個瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來盛醋,現(xiàn)在盛醬油,B瓶則相反)。

2.依次將10個數(shù)輸入,要求輸出其中最大的數(shù)。

3.有3個數(shù)a,b,c, 要求按大小順序把他們輸出。

4.求1 + 2 + 3 + … + 100。

5.判斷一個數(shù)n能否同時被3和5整除。

6.求兩個數(shù)m和n的最大公約數(shù)

7.求方程 a x 2 + b x + c = 0 ax^2 + bx + c = 0 ax2+bx+c=0的根。分別考慮:
- 有兩個不相等的實根;
- 有兩個相等的實根;

6. 用偽代碼表示第4題中各題的算法
有兩個瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來盛醋,現(xiàn)在盛醬油,B瓶則相反)。
begin 醋 => A 醬油 => B A => C B => A C => B end
依次將10個數(shù)輸入,要求輸出其中最大的數(shù)。
begin
1 => i
0 => max
while i < 10
{
輸入一個整數(shù)data
if data > max
{
data => max
}
}
print max
end
有3個數(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
判斷一個數(shù)n能否同時被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
求兩個數(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的根。分別考慮:
有兩個不相等的實根;
有兩個相等的實根;
begin
input a
input b
input c
b*b - 4*a*c => p
if p < 0
{
print 方程沒有實根
}
if p == 0
{
print 方程有一個實根 -b/2a
}
if p > 0
{
print 方程有兩個實根:
print x1 = {-b + sqrt(b^2 - 4ac)}/2a
print x1 = {-b - sqrt(b^2 - 4ac)}/2a
}
end
7. 什么叫結(jié)構(gòu)化程序設(shè)計?它的主要內(nèi)容是什么?
結(jié)構(gòu)化程序設(shè)計(structured programming,簡稱SP)是進(jìn)行以模塊功能和處理過程設(shè)計為主的詳細(xì)設(shè)計的基本原則。其概念最早由E.W.Dijikstra在1965年提出的。結(jié)構(gòu)化程序設(shè)計思想確實使程序執(zhí)行效率提高 ,是軟件發(fā)展的一個重要的里程碑,它的主要觀點是采用自頂向下、逐步求精的程序設(shè)計方法;各個模塊通過“順序、選擇、循環(huán)”的控制結(jié)構(gòu)進(jìn)行連接,并且只有一個入口、一個出口 。
8. 用自頂向下、逐步細(xì)化的方法進(jìn)行以下算法的設(shè)計:
輸出1900—2000年中是軟黏的年份,符合下面兩個條件之一的年份是閏年:
- 能被4整除但不能被100整除
- 能被100整除且能被400整除。
算法大體流程
1. 循環(huán)取1900到2000中的每一個年份
2. 對于每一個年份判斷其是否是閏年
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. 計算b^2 - 4ac的結(jié)果并給p
3. 如果p < 0, 則方程沒有實根
4. 如果p == 0,則方程有一個實根-b/2a
5. 如果p > 0, 則方程有兩個實根 x1 = {-b + sqrt(b^2 - 4ac)}/2a x2 = {-b - sqrt(b^2 - 4ac)}/2a
輸入10個數(shù),輸出其中最大的一個數(shù)。
1. 給一個max保存最大值
2. 分別輸入10個數(shù),并對用每個數(shù)與max進(jìn)行比較
如果該數(shù)大于max,則將該數(shù)給max
3. 輸出max
到此這篇關(guān)于C程序設(shè)計第五版譚浩強(qiáng)課后答案(第二章答案)的文章就介紹到這了,更多相關(guān)C程序課后答案內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux下C語言中的mkdir函數(shù)與rmdir函數(shù)
以下是對C語言中的mkdir函數(shù)與rmdir函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08
C語言 如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù)
這篇文章主要介紹了C語言中如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
詳解C++值多態(tài)中的傳統(tǒng)多態(tài)與類型擦除
值多態(tài)是一種介于傳統(tǒng)多態(tài)與類型擦除之間的多態(tài)實現(xiàn)方式,借鑒了值語義,保留了繼承,在單繼承的適用范圍內(nèi),程序和程序員都能從中受益。這篇文章主要介紹了C++值多態(tài)中的傳統(tǒng)多態(tài)與類型擦除,需要的朋友可以參考下2020-04-04

