《C語言程序設(shè)計》(譚浩強(qiáng)第五版) 第2章 算法——程序的靈魂 習(xí)題解析與答案
你也可以上程序咖(https://meta.chengxuka.com)职车,打開大學(xué)幕題板塊瘫俊,不但有答案鹊杖,講解,還可以在線答題扛芽。
題目1:什么是算法骂蓖?試從日常生活中找3個例子,描述它們的算法川尖。
答:
算法:算法是計算機(jī)處理信息的本質(zhì)登下,因為計算機(jī)程序本質(zhì)上是一個算法來告訴計算機(jī)確切的步驟來執(zhí)行一個指定的任務(wù)。一般地叮喳,當(dāng)算法在處理信息時被芳,會從輸入設(shè)備或數(shù)據(jù)的存儲地址讀取數(shù)據(jù),把結(jié)果寫入輸出設(shè)備或某個存儲地址供以后再調(diào)用馍悟。
算法是獨立存在的一種解決問題的方法和思想畔濒。
對于算法而言,實現(xiàn)的語言并不重要赋朦,重要的是思想篓冲。
例如:
1、自駕去新疆旅游
準(zhǔn)備好車宠哄,然后準(zhǔn)備旅游路線等壹将,開車出發(fā),一路游山玩水毛嫉。
2诽俯、網(wǎng)上買一部手機(jī)
首先選好網(wǎng)購平臺(某寶,某東承粤,某貓等)暴区,然后選擇想要的品牌和型號,下單辛臊,等待到貨仙粱。
3、相親
首先有七大姑八大姨等(如果沒有可以選擇一些交友網(wǎng)站或其他媒婆)彻舰,然后獲取對方的聯(lián)系方式和基本信息伐割,出發(fā)到達(dá)目的地,相見刃唤,滿意或不滿意隔心,決定了是否可以再約。
4尚胞、把大象放進(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)
見圖2.1和圖2.2。
題目4:用傳統(tǒng)流程圖表示求解以下問題的算法姥宝。
(1)有兩個瓶子A 和 B翅萤,分別盛放醋和醬油,要求將它們互換(即 A 瓶原來盛醋腊满,現(xiàn)改盛醬油套么,B 瓶則相反)。
解:顯然碳蛋,如果只有兩個瓶子胚泌,肯定不能完成此任務(wù),必須有一個空瓶C作為過渡肃弟,其步驟見圖 2.3玷室。
(2)依次將10個數(shù)輸人,要求輸出其中最大的數(shù)愕乎。
解:流程圖見圖 2.4阵苇。
(3)有3個數(shù)a,b感论,c绅项,要求按大小順序把它們輸出。
解:流程圖見圖2.5比肄。
(4)求1+2+3+……+ 100快耿。
解:流程圖見圖 2.6囊陡。
(5)判斷一個數(shù)n能否同時被3和5整除。
解:流程圖見圖 2.7(a)或圖 2.7(b)掀亥。
(6)將100~200之間的素數(shù)輸出撞反。
解:流程圖見圖 2.8。
(7)求兩個數(shù)m和n的最大公約數(shù)搪花。
解:流程圖見圖 2.9遏片。
(8)求方程式ax2+ bx+c=0的根。分別考慮:
①有兩個不等的實根撮竿;
②有兩個相等的實根吮便。
解:流程圖見圖 2.10。
題目5:用N-S圖表示第4題中各題的算法幢踏。
(1)有兩個瓶子A 和 B髓需,分別盛放醋和醬油,要求將它們互換(即 A 瓶原來盛醋房蝉,現(xiàn)改盛醬油僚匆,B 瓶則相反)。
解:N-S流程圖見圖 2.11搭幻。
(2)依次將10個數(shù)輸人咧擂,要求輸出其中最大的數(shù)。
解:N-S流程圖見圖 2.12檀蹋。
(3)有3個數(shù)a屋确,b,c续扔,要求按大小順序把它們輸出攻臀。
解:N-S流程圖見圖 2.13。
(4)求1+2+3+……+ 100纱昧。
解:N-S流程圖見圖 2.14刨啸。
(5)判斷一個數(shù)n能否同時被3和5整除。
解:N-S流程圖見圖 2.15识脆。
(6)將100~200之間的素數(shù)輸出设联。
解:N-S流程圖見圖 2.16。
(7)求兩個數(shù)m和n的最大公約數(shù)灼捂。
解:N-S流程圖見圖 2.17离例。
(8)求方程式ax2+ bx+c=0的根。分別考慮:
①有兩個不等的實根悉稠;
②有兩個相等的實根宫蛆。
解:N-S流程圖見圖 2.18。
題目6:用偽代碼表示第4題中各題的算法的猛。
(1)有兩個瓶子A 和 B耀盗,分別盛放醋和醬油想虎,要求將它們互換(即 A 瓶原來盛醋秉溉,現(xiàn)改盛醬油姻蚓,B 瓶則相反)。
解:
c = a
a = b
b = c
(2)依次將10個數(shù)輸人井氢,要求輸出其中最大的數(shù)忿薇。
解:
n= 1
input max
while n<10 do
input a
if a>max then max= a
n=n+1
end do
print max
(3)有3個數(shù)a裙椭,b,c署浩,要求按大小順序把它們輸出骇陈。
解:
input a,b,c
if a<b then swap a,b (swap a,b表示a和b互換)
if a<c then
print c,a,b
else
if c>b then
print a,c,b
else
print a,b,c
end if
end if
(4)求1+2+3+……+ 100。
解:
sum = 0
n= 1
while n≤100 do
sum = sumt+n
n=n+1
end do
print sum
(5)判斷一個數(shù)n能否同時被3和5整除瑰抵。
解:
input n
flag=0
if mod(n,3)≠ 0 then flag=- 1
if mod(n,5)≠ 0 then flag= 1
if flag=0 then
print n "能被 3 和 5 整除"
else
print n "不能同時被 3 和 5 整除
end if
(6)將100~200之間的素數(shù)輸出。
解:
n= 100
while n≤200 do
i=2
while i≤ √n
if mod(n,i)=0 then
i=n
else
i=i+1
end if
end do
if i<√n then print n
n=m+1
end do
(7)求兩個數(shù)m和n的最大公約數(shù)器联。
解:
input m,n
if m<n then swap m,n
t= mod(m,n)
while r≠=0 do
m= n
n=r
r= mod(m,n)
end do
print n
(8)求方程式ax2+ bx+c=0的根二汛。分別考慮:
①有兩個不等的實根;
②有兩個相等的實根拨拓。
解:
int a,b,c
disc= b2-4ac
if disc≥0 then
if disc=0 then
xl,x2=-b/(2a)
else
xl=(-b+√disc)/(2a)
x2=(-b-√disc)/(2a)
end if
print x1,x2
else
p=-b/(2a)
q= √(dis/(2a)
print p+q,"+",p-q,"i"
end if
題目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è)計:
(1)輸出1900- 2000 年中是閏年的年份挪捕,符合下面兩個條件之一的年 份是閏年:
①能被4整除但不能被100整除;
②能被100整除且能被400整除争便。
解:先畫出圖 2.19(a)级零,對它細(xì)化得圖 2.19(b);對圖 2.19(b)中的 S1.1細(xì)化得圖2.19(c)。
(2)求ax2+bx+c=0的根滞乙。分別考慮d=b°-4ac大于0妄讯、等于0和小于0這3種情況孩锡。
解:先畫出圖2.20(a),對其中的 S3細(xì)化為圖2.20(b)亥贸,對圖2.20(b)中的 S3.1細(xì)化為圖2.20(c)躬窜,對圖2.20(c)中的S3.1.1細(xì)化為圖2.20(d),對圖2.20(c)中的 S3.1.2細(xì)化為圖 2.20(e)炕置,再對圖 2.20(b)中的 S3.2細(xì)化為圖 2.20(f)荣挨。請讀者將它們合成一個總的N-S圖。
(3)輸人10個數(shù)朴摊,輸出其中最大的一個數(shù)默垄。
解:先初步畫出圖 2.21(a)∩醺伲考慮到還沒有學(xué)習(xí)數(shù)組的知識口锭,因而不能做到將 10個數(shù)全部輸入給數(shù)組中各個元素,然后再從中找最大者介杆。由于不采用數(shù)組這種數(shù)據(jù)結(jié)構(gòu)鹃操,算法也應(yīng)與采用數(shù)組時有所不同。現(xiàn)在只用普通變量春哨,逐個讀入數(shù)據(jù)荆隘,將當(dāng)時各數(shù)中的最大者保留下來存放在 max中,以便再與后面讀入的數(shù)比較赴背。將圖 2.21(a)細(xì)化為圖 2.21(b)椰拒,再細(xì)化為圖2.21(c)。