C程序設計第五版譚浩強課後答案 第二章答案

第二章:算法----程序的靈魂

1. 什麼是算法?試從日常生活中找3個例子,描述它們的算法

算法:簡而言之就是求解問題的步驟,對特定問題求解步驟的一種描述。

比如生活中的例子:

  1. 考大學

    首先填報志願表、交報名費、拿到准考證、按時參加考試、收到錄取通知書、按照日期到指定學校報到。

  2. 去北京聽演唱會

    首先在網上購票、然後按時坐車到北京,坐車到演唱會會場。

  3. 把大象放進冰箱

    先打開冰箱門,然後將大象放進冰箱,關冰箱。

2. 什麼叫結構化的算法?爲什麼要提倡結構化的算法?

  • 結構化算法:由一些順序、選擇、循環等基本結構按照順序組成,流程的轉移只存在於一個基本的範圍之內。

  • 結構化算法便於編寫,可讀性高,修改和維護起來簡單,可以減少程序出錯的機會,提高了程序的可靠性,保證了程序的質量,因此提倡結構化的算法。

3. 試述3種基本結構的特點,請另外設計兩種基本結構(要符合基類結構的特點)。

結構化程序設計方法主要由以下三種基本結構組成:

  1. 順序結構:順序結構是一種線性、有序的結構,它依次執行各語句模塊
  2. 選擇結構:選擇結構是根據條件成立與否選擇程序執行的通路。
  3. 循環結構:循環結構是重複執行一個或幾個模塊,直到滿足某一條件位置

重新設計基本結構要滿足以下幾點:

  1. 只有一個入口
  2. 只有一個出口
  3. 結構內的每一部分都有機會執行到
  4. 結構內不存在死循環

因此給出以下複習結構:while型和until型循環複合以及多選擇結構

C語言程序設計第五版譚浩強第三題答案

4. 用傳統流程圖表示求解以下問題的算法。

  1. 有兩個瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來盛醋,現在盛醬油,B瓶則相反)。

    解析:

    用兩個瓶子顯然很難實現,可以藉助一個空瓶子C作爲中轉,先將A中醋導入C中,然後將B中的醬油導入A中,最後將C中的醋導入B中即可實現交換。

    C語言程序設計第五版譚浩強課後答案第三題答案

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

    解析:

    先輸入10個整數,將第一個整數給max,然後依次取剩餘整數與max進行比較,如果某個整數大於max,將該整數交給max,直到所有剩餘整數全部比較完,max中保存的即爲最大整數,將max值輸出。

在這裏插入圖片描述

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

    解析:

    i:先用a和b比較,如果a大於b,將a與b內容交換,否則進行ii

    ii:用c和a比較,如果c大於a,將a和c交換,否則進行iv

    iii:用c和b比較,如果c大於b,將c和b進行交換,否則進行iv

    iv:輸出a、b、c,結束

C語言程序設計第五版譚浩強課後答案第3題答案

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

    解析:

    給定N爲1,sum爲0,如果N 小於等於100時,進行sum += N,直到N超過100,循環操作完成後sum即爲從1加到100的結果。

    C語言程序設計第五版譚浩強課後答案第4題答案

  2. 判斷一個數n能否同時被3和5整除。

    解析:

    i:輸入數據n

    ii:如果n能被3整數,進行iii,否則輸出n不能被3和5整數

    iii:如果n能被5整數,輸出n能被3和5整數,否則n不能被3和5整數

C語言程序設計第五版譚浩強課後答案第5題答案

  1. 將100~200之間的素數輸出

    素數:即數學中的質數,因子只有1和其本身的數字稱爲質數。

    對100和200之間的每個數進行一下操作:

    該數能否被2~該數之間的所有數整除,是則是素數輸出,否則取下一個數字。

將100~200之間的素數輸出

  1. 求兩個數m和n的最大公約數

    解析:輾轉相除法

    a. 如果m大於n,交換m和n

    b. 循環進行一下操作:

    ​ n是否爲0? 是則最大公約數爲m,輸出m結束。

    ​ 否則:用m%n結果給r,將n的值給m,將r的值給n

    求兩個數m和n的最大公約數

  2. 求方程ax2+bx+c=0ax^2 + bx + c = 0的根。分別考慮:

    • 有兩個不相等的實根;
    • 有兩個相等的實根;

    解析:

    如果b24ac>0b^2 - 4ac > 0則方程有兩個不相等的實根:x=b±b24ac2ax=\frac{-b\pm\sqrt{b^2-4ac}}{2a}

    如果b24ac=0b^2 - 4ac = 0則方程有一個實根:x=b2ax=\frac{-b}{2a}

    如果b24ac<0b^2 - 4ac < 0則方程沒有實根。

    C語言程序設計第五版譚浩強課後答案

5. 用N-S圖表示第4題中各題的算法

  1. 有兩個瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來盛醋,現在盛醬油,B瓶則相反)。

    C語言程序設計第五版譚浩強第五題課後答案

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

    譚浩強課後習題答案

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

C語言程序設計第五版譚浩強習題答案

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

求1 + 2 + 3 + ... + 100

  1. 判斷一個數n能否同時被3和5整除。

C語言程序設計第五版課後習題答案

  1. 求兩個數m和n的最大公約數

C語言程序設計第五版譚浩強答案 第六題

  1. 求方程ax2+bx+c=0ax^2 + bx + c = 0的根。分別考慮:

    • 有兩個不相等的實根;
    • 有兩個相等的實根;

    C語言程序設計第五版譚浩強答案

6. 用僞代碼表示第4題中各題的算法

  1. 有兩個瓶子A和B,分別盛放醋和醬油,要求將他們互換(即A瓶原來盛醋,現在盛醬油,B瓶則相反)。

    begin
        醋 => A
        醬油 => B
        A => C
        B => A
        C => B
    end
    
  2. 依次將10個數輸入,要求輸出其中最大的數。

    begin
        1 => i
        0 => max
        while i < 10
        {
            輸入一個整數data
            if data > max
            {
                data => max
            }
        }
    
        print max
    end
    
  3. 有3個數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
    
  4. 求1 + 2 + 3 + … + 100。

    begin
        1 => i
        0 => sum
        while i <= 100
        {
            sum + i => sum
            i + 1 => i
        }
    
        print sum
    end
    
  5. 判斷一個數n能否同時被3和5整除。

    begin
        input n
        if n % 3 == 0
        {
            if n % 5 == 0
            {
                print n能被35整除
            }
            else
            {
                print n不能被35整除
            }
        }
        else
        {
                print n不能被35整除
        }
    end
    
  6. 求兩個數m和n的最大公約數

    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
    
  7. 求方程ax2+bx+c=0ax^2 + 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. 什麼叫結構化程序設計?它的主要內容是什麼?

結構化程序設計(structured programming,簡稱SP)是進行以模塊功能和處理過程設計爲主的詳細設計的基本原則。其概念最早由E.W.Dijikstra在1965年提出的。結構化程序設計思想確實使程序執行效率提高 ,是軟件發展的一個重要的里程碑,它的主要觀點是採用自頂向下、逐步求精的程序設計方法;各個模塊通過“順序、選擇、循環”的控制結構進行連接,並且只有一個入口、一個出口 。

8. 用自頂向下、逐步細化的方法進行以下算法的設計:

  1. 輸出1900—2000年中是軟黏的年份,符合下面兩個條件之一的年份是閏年:

    • 能被4整除但不能被100整除
    • 能被100整除且能被400整除。
    算法大體流程
    1. 循環取19002000中的每一個年份
    2. 對於每一個年份判斷其是否是閏年
    3. 是閏年則輸出
    
    判斷一年是否是閏年:
    1. 如果該年份內被4整除但是不能被100整除是閏年,否則不是閏年
    2. 如果年份能被400整除則是閏年,否則不是閏年
    
  2. ax2+bx+c=0ax^2 + bx + c = 0的根。分別考慮d=b24acd = b^2 - 4ac大於0、等於0和小於0這三種情況。

    1. 獲取a b c的值
    2. 計算b^2 - 4ac的結果並給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
    
  3. 輸入10個數,輸出其中最大的一個數。

    1. 給一個max保存最大值
    2. 分別輸入10個數,並對用每個數與max進行比較
       如果該數大於max,則將該數給max
    3. 輸出max
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章