程序設計的基本方法
一、課題:
二、教學目標:
⑴ 理解算法的概念,了解描述算法的兩種方法——自然語言和流程圖,知道各自的優缺點。
⑵ 初步掌握用流程圖描述算法。
三、教學的重點和難點:
⑴ 算法的概念。
⑵ 用流程圖描述算法。
四、教學過程:
新課導入
我們在日常生活中經常要處理一些事情,就拿郵寄一封信來說吧,大致可以將寄信的過程分為這樣的幾個步驟:寫信、寫信封、貼郵票、投入信箱等四個步驟。將信地投入到信箱后,我們就說寄信過程結束了。
那么在計算機中,它是如何來處理問題的呢?是否和我們日常處理事情的過程很類似呢?
回答是肯定的,例如要設計一個程序讓計算機求1+1=?,那么我們就要先編寫程序。在編寫程序前需要先確定解決問題的思路和方法,并要正確地寫出求解步驟,這就是算法。
新授課
一、算法的概念
為了更好地理解算法,舉幾個例子說明:
例1 交換兩個變量中的數據。
先請學生考慮解決這個問題的方法,然后請一個學生說一說自己想到的解決方法。如學生回答不出來,作適當提示:如果要將醋瓶中的醋和酒瓶中的酒互換應怎么做?學生會很容易地想到要借助于一只空瓶子。
分析題意:已知變量x和y中分別存放了數據,現在要交換其中的數據。為了達到交換的目的,需要引進一個類似于空瓶子的中間變量m。交換兩變量中數據的具體算法如下:
①將x中的數據送給變量m,即x→m;
②將y中的數據送給變量x,即y→x;
③將m中的數據送給變量y,即m→y。
總結:在程序設計中,交換變量中的數據常用在排序算法中。
例2 輸入三個不相同的數,求出其中的最小數。
同樣,先請學生思考,然后請學生說出他所想到的解決該問題的方法。
教師分析:先設置一個變量min,用于存放最小數。當輸入a、b、c三個不相同的數后,先將a與b進行比較,把小者送給變量min,再把c與min進行比較,若c<min,則將c的數值送給min,最后min中就是三個數中的最小數,具體算法如下:
①若a<b,則a→min, 否則b→min;
②再將c與min進行比較,若c<min,則c→min。這樣,min中存放的即是三個數中的最小數。
請學生思考以下兩個問題:
⑴ 如果要求出三個不相同數中的最大數,該如何設計算法?
⑵ 如果是n個不相同的數,求出其中的最小數呢?
例3 輸入兩個正整數a和b (a>b)求它們的最大公約數。
提問:什么叫最大公約數?
給學生思考后回答。然后舉一個用歐幾里德法求最大公約數的例子,如求 56 和32的最大公約數的過程如下:
56 ,32 ,24,8,0
則8就是56和32的最大公約數。從第三項開始的各項,分別是前兩項相除所得的余數,如果余數為0,它的前一項就是a和b 的最大公約數。
算法如下:
①輸入a,b(a>b);
②求a/b的余數r;
③如果r≠0則將bàa,ràb,再次求a/b的余數r,轉③;
④輸出最大公約數b。
總結:對于同一個問題,可以有不同的解決方法,即有不同的算法。
二、算法的描述
為了描述一個算法,可以用自然語言、流程圖或其他形式進行。
前面的三個例子就是用自然語言描述的。自然語言就是人們日常使用的語言。用自然語言描述算法,人們比較容易接受。但有個缺點就是敘述比較繁瑣和冗長,容易出現“歧義性”。
請學生閱讀課本中的討論與思考,然后分別請學生將自己所理解的含義表述出來。學生可能有兩種理解:“老張不認識這個人”和“這個人不認識老張”,從而說明自然語言表述容易產生“歧義”。為了能夠將解決問題的算法清晰、直觀地表示出來,我們一起來學習流程圖。