3.排序
(1)直接插入排序
插入排序的思想就是讀一個,排一個。將數組的第1個數據放入數組的第1個位置,以后讀入的數據與已存入數組的數據進行比較,確定它按從大到小(從小到大)的排列中排在正確的位置。將該位置以及以后的元素向后推移一個位置,將讀入的新數填到空出的位置即可。
(2)冒泡排序
以從大到小為例:依次比較相鄰的兩個數,把大的放前面,小的放后面。即首先比較第1個數和第2個數,大數放前,小數放后;然后比較完成第2個數和第3個數;......;直到比較完了最后兩個數。第一趟排序結束,最小的一定沉到最后。重復上過程,仍從第1個數開始,到最后第2個數...... 由于在排序過程中總是大數往前,小數往后,相當氣泡上升,所以叫冒泡排序。
2.我們以這個5次多項式函數為例加以說明,設:
f(x)=a5x5+a4x4+a3x3+a2x2+a1x+a0
首先,讓我們以5次多項式一步步地進行改寫:
f(x)=(a5x4+a4x3+a3x2+a2x+a1)x+a0
=((a5x3+a4x2+ a3x+a2)x+a1)x+a0
=(((a5x2+a4x+ a3)x+a2)x+a1)x+a0
=((((a5x+a4)x+ a3)x+a2)x+a1)x+a0
上面的分層計算。只用了小括號,計算時,首先計算最內層的括號,然后由里向外逐層計算,直到最外層的括號,然后加上常數項即可。
1.求最大公約數
(1)輾轉相除法
程序框圖與程序語句
程序:
INPUT “m,n=”;m,n
DO
r=m MOD n
m=n
n=r
LOOP UNTIL r=0
END
(2)更相減損術
更相減損術程序:
INPUT “請輸入兩個不相等的正整數”;a,b
i=0
WHILE a MOD 2=0 AND b MOD 2=0
a=a/2
b=b/2
i=i+1
WEND
DO
IF b<a THEN
t=a
a=b
b=t
END IF
c=a-b
a=b
b=c
LOOP UNTIL a=b
PRINT a^i
END
對于兩個正整數如何選擇合適的方法求他們的最大公約數
方法 |
適用范圍及特點 |
短除法 |
適合兩個較小的正整數或兩個質因數較少的正整數,簡便易操作。 |
窮舉法 |
適合計算機操作,但一一驗證過于繁瑣。 |
輾轉相除法 |
適用于兩個較大的正整數,以除法為主,輾轉相除法計算次數相對較少,特別當兩個數字大小差別較大時計算次數較明顯。 |
更相減損術 |
適用于兩個較大的正整數,更相減損術以減法為主,計算次數上相對于輾轉相處法較多。 |
6] -3 0 15
[-3 6] 0 15
[-3 0 6] 15
[-3 0 6 15]
用冒泡排序法排序:
6 |
|
6 |
|
6 |
|
6 |
|
6 |
|
6 |
|
6 |
|
15 |
|
15 |
|
15 |
-3 |
|
-3 |
|
0 |
|
0 |
|
0 |
|
15 |
|
15 |
|
6 |
|
6 |
|
6 |
0 |
|
0 |
|
-3 |
|
15 |
|
15 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
15 |
|
15 |
|
15 |
|
-3 |
|
-3 |
|
-3 |
|
-3 |
|
-3 |
|
-3 |
|
-3 |
題型4:進位值
例7.把十進制數89化為三進制數,并寫出程序語句.
解析:具體的計算方法如下:
89=3×29+2
29=3×9+2
9=3×3+0
3=3×1+0
1=3×0+1
所以:89(10)=1011001(3)。
點評:根據三進制數滿三進一的原則,可以用3連續去除89及其所的得的商,然后按倒序的先后順序取出余數組成數據即可。
例8.將8進制數314706(8)化為十進制數,并編寫出一個實現算法的程序。
解析:314706(8)=3×85+1×84+4×83+7×82+0×81+6×80=104902。
所以,化為十進制數是104902。
點評:利用把k進制數轉化為十進制數的一般方法就可以把8進制數314706(8)化為十進制數,然后根據該算法,利用GET函數,應用循環結構可以設計程序。
7] 1 3 12 8 4 9 10
[7 1] 3 12 8 4 9 10
[7 3 1] 12 8 4 9 10
[12 7 3 1] 8 4 9 10
[12 8 7 3 1] 4 9 10
[12 8 7 4 3 1] 9 10
[12 9 8 7 4 3 1] 10
[12 10 9 8 7 4 3 1]
冒泡排序
7 |
|
7 |
|
7 |
|
7 |
|
7 |
|
7 |
|
7 |
|
7 |
1 |
1 |
3 |
|
3 |
|
3 |
|
3 |
|
3 |
|
3 |
||
3 |
3 |
1 |
|
12 |
|
12 |
|
12 |
|
12 |
|
12 |
||
12 |
12 |
12 |
|
1 |
|
8 |
|
8 |
|
8 |
|
8 |
||
8 |
8 |
8 |
|
8 |
|
1 |
|
4 |
|
4 |
|
4 |
||
4 |
4 |
4 |
|
4 |
|
4 |
|
1 |
|
9 |
|
9 |
||
9 |
9 |
9 |
|
9 |
|
9 |
|
9 |
|
1 |
|
10 |
||
10 |
10 |
10 |
|
10 |
|
10 |
|
10 |
|
10 |
|
|
第一趟
7 |
|
7 |
|
12 |
|
12 |
|
12 |
|
12 |
3 |
|
12 |
|
8 |
|
8 |
|
9 |
|
10 |
12 |
|
8 |
|
7 |
|
9 |
|
10 |
|
9 |
8 |
|
4 |
|
9 |
|
10 |
|
8 |
|
8 |
4 |
|
9 |
|
10 |
|
7 |
|
7 |
|
7 |
9 |
|
10 |
|
4 |
|
4 |
|
4 |
|
4 |
10 |
|
3 |
|
3 |
|
3 |
|
3 |
|
3 |
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
第2趟 第3趟 第4趟 第5趟 第6趟
點評:直接插入法和冒泡法排序是常見的排序方法,通過該例,我們對比可以發現,直接插入排序比冒泡排序更有效一些,執行的操作步驟更少一些
例6.給出以下四個數:6,-3,0,15,用直接插入法排序將它們按從小到大的順序排列,用冒泡法將它們按從大到小的順序排
分析:不論從大到小的順序還是按從大到小的順序,都可按兩種方法的步驟進行排序。
解析:
直接插入排序法:
題型1:求最大公約數
例1.(1)用輾轉相除法求123和48的最大公約數?
(2)用更相減損來求80和36的最大公約數?
解析:(1)輾轉相除法求最大公約數的過程如下:(建立帶余除式)
123=2×48+27
48=1×27+21
27=1×21+6
21=3×6+3
6=2×3+0
最后6能被3整除,得123和48的最大公約數為3。
(2)分析:我們將80作為大數,36作為小數,執行更相減損術來求兩數的最大公約數。執行結束的準則是減數和差相等
更相減損術:
因為80和36都是偶數,要去公因數2。
80÷2=40,36÷2=18;
40和18都是偶數,要去公因數2。
40÷2=20,18÷2=9
下面來求20與9的最大公約數,
20-9=11
11-9=2
9-2=7
7-2=5
5-2=3
3-2=1
2-1=1
可得80和36的最大公約數為22×1=4。
點評:對比兩種方法控制好算法的結束,輾轉相除法是到達余數為0,更相減損術是到達減數和差相等。
例2.設計一個算法,求出840與1764的最大公因數。
解析:我們已經學習過了對自然數的素因數分解的方法,下面的算法就是在此基礎上設計的。
解題思路如下:
首先對兩個數進行素因數分解:
840=23×3×5×7,1764=22×32×72,
其次,確定兩個數的公共素因數:2,3,7。
接著確定公共素因數的指數:對于公共素因數2,840中為23,1764中為22,應取較少的一個22,同理可得下面的因數為3和7。
算法步驟:
第一步:將840進行素數分解23×3×5×7;
第二步:將1764進行素數分解22×32×72;
第三步:確定它們的公共素因數:2,3,7;
第四步:確定公共素因數2,3,7的指數分別是:2,1,1;
第五步:最大公因數為22×31×71=84。
點評:質數是除1以外只能被1和本身整除的正整數,它應該是無限多個,但是目前沒有一個規律來確定所有的質數
題型2:秦九韶算法
例3.(2009福州模擬)如果執行右面的程序框圖,那么輸出的 ( )
A.22 B.46 C.94 D.190
答案 C
2、(2009浙江卷理)某程序框圖如圖所示,該程序運行后輸出的的值是 ( )
A. B.
C.
D.
[解析]對于
,而對于
,則
,后面是
,不
符合條件時輸出的.
答案 A
4.進位制
(1)概念
進位制是一種記數方式,用有限的數字在不同的位置表示不同的數值。可使用數字符號的個數稱為基數,基數為n,即可稱n進位制,簡稱n進制。現在最常用的是十進制,通常使用10個阿拉伯數字0-9進行記數。
對于任何一個數,我們可以用不同的進位制來表示。比如:十進數57,可以用二進制表示為111001,也可以用八進制表示為71、用十六進制表示為39,它們所代表的數值都是一樣的。
一般地,若k是一個大于一的整數,那么以k為基數的k進制可以表示為:
,
而表示各種進位制數一般在數字右下腳加注來表示,如111001(2)表示二進制數,34(5)表示5進制數。
(2)進位制間的轉換
關于進位制的轉換,教科書上以十進制和二進制之間的轉換為例講解,并推廣到十進制和其它進制之間的轉換。這樣做的原因是,計算機是以二進制的形式進行存儲和計算數據的,而一般我們傳輸給計算機的數據是十進制數據,因此計算機必須先將十進制數轉換為二進制數,再處理,顯然運算后首次得到的結果為二進制數,同時計算機又把運算結果由二進制數轉換成十進制數輸出。
非十進制數轉換為十進制數比較簡單,只要計算下面的式子值即可:
第一步:從左到右依次取出k進制數各位上的數字,乘以相應的k的冪,k的冪從n開始取值,每次遞減1,遞減到0,即
;
第二步:把所得到的乘積加起來,所得的結果就是相應的十進制數。
十進制數轉換成非十進制數
把十進制數轉換為二進制數,教科書上提供了“除2取余法”,我們可以類比得到十進制數轉換成k進制數的算法“除k取余法”。
非十進制之間的轉換
一個自然的想法是利用十進制作為橋梁。教科書上提供了一個二進制數據與16進制數據之間的互化的方法,也就是先有二進制數轉化為十進制數,再由十進制數轉化成為16進制數。
7.將新數據列中的第7個數97與右邊相鄰的數49進行比較,因為49<97,97應下沉,所以順序改變,得到新的數據列:
{38,49,65, 76, 13,97, 49,27}
我們把上述過程稱為一趟排序。其基本特征是最大的數據沉到底,即排在最左邊位置上的數據是數組中最大的數據。反復執行上面的步驟,就能完成排序工作,排序過程不會超過7趟。這種排序的方法稱為冒泡排序。
上面的分析具有一般性,如果數據列有n個數據組成,至多經過n-1趟排序,就能完成整個排序過程
6.將新數據列中的第6個數97與右邊相鄰的數27進行比較,因為27<97,97應下沉,所以順序改變,得到新的數據列:
{38,49,65, 76, 13,97,27,49}
湖北省互聯網違法和不良信息舉報平臺 | 網上有害信息舉報專區 | 電信詐騙舉報專區 | 涉歷史虛無主義有害信息舉報專區 | 涉企侵權舉報專區
違法和不良信息舉報電話:027-86699610 舉報郵箱:58377363@163.com