0  445147  445155  445161  445165  445171  445173  445177  445183  445185  445191  445197  445201  445203  445207  445213  445215  445221  445225  445227  445231  445233  445237  445239  445241  445242  445243  445245  445246  445247  445249  445251  445255  445257  445261  445263  445267  445273  445275  445281  445285  445287  445291  445297  445303  445305  445311  445315  445317  445323  445327  445333  445341  447090 

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連續(xù)去除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函數,應用循環(huán)結構可以設計程序。

試題詳情

題型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作為小數,執(zhí)行更相減損術來求兩數的最大公約數。執(zhí)行結束的準則是減數和差相等。

更相減損術:

因為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和本身整除的正整數,它應該是無限多個,但是目前沒有一個規(guī)律來確定所有的質數。

題型2:秦九韶算法

例3.(2005北京,14)已知n次多項式,如果在一種算法中,計算(k=2,3,4,…,n)的值需要k-1次乘法,計算的值共需要9次運算(6次乘法,3次加法),那么計算的值共需要        次運算。下面給出一種減少運算次數的算法:(k=0, 1,2,…,n-1).利用該算法,計算的值共需要6次運算,計算的值共需要     次運算。

答案:65;20。

點評:秦九韶算法適用一般的多項式f(x)=anxn+an-1xn-1+….+a1x+a0的求值問題。直接法乘法運算的次數最多可到達,加法最多n次。秦九韶算法通過轉化把乘法運算的次數減少到最多n次,加法最多n次。

例4.已知多項式函數f(x)=2x5-5x4-4x3+3x2-6x+7,求當x=5時的函數的值。

解析:把多項式變形為:f(x)= 2x5-5x4-4x3+3x2-6x+7

=((((2x-5)x-4)x+3)x-6)x+7

計算的過程可以列表表示為:

多項式x系數
2
-5
-4
3
-6
7
運算
運算所得的值

10
25
105
540
2670
+
變形后x的"系數"
2
5
21
108
534
2677
*5

最后的系數2677即為所求的值。

算法過程:

v0=2

v1=2×5-5=5

v2=5×5-4=21

v3=21×5+3=108

v4=108×5-6=534

v5=534×5+7=2677

點評:如果多項式函數中有缺項的話,要以系數為0的項補齊后再計算。

題型三:排序

例4.試用兩種排序方法將以下8個數:7,1,3,12,8,4,9,10。按照從大到小的順序進行排序。

解析:可以按照直接插入排序和冒泡排序這兩種方法的要求,結合圖形,分析寫出。

直接插入法排序:

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趟

點評:直接插入法和冒泡法排序是常見的排序方法,通過該例,我們對比可以發(fā)現,直接插入排序比冒泡排序更有效一些,執(zhí)行的操作步驟更少一些。

例6.給出以下四個數:6,-3,0,15,用直接插入法排序將它們按從小到大的順序排列,用冒泡法將它們按從大到小的順序排列。

分析:不論從大到小的順序還是按從大到小的順序,都可按兩種方法的步驟進行排序。

解析:

直接插入排序法:

試題詳情

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}

我們把上述過程稱為一趟排序。其基本特征是最大的數據沉到底,即排在最左邊位置上的數據是數組中最大的數據。反復執(zhí)行上面的步驟,就能完成排序工作,排序過程不會超過7趟。這種排序的方法稱為冒泡排序。

上面的分析具有一般性,如果數據列有n個數據組成,至多經過n-1趟排序,就能完成整個排序過程。

試題詳情

6.將新數據列中的第6個數97與右邊相鄰的數27進行比較,因為27<97,97應下沉,所以順序改變,得到新的數據列:

{38,49,65, 76, 13,97,27,49}

試題詳情

5.將新數據列中的第5個數97與右邊相鄰的數13進行比較,因為13<97,97應下沉,所以順序改變,得到新的數據列:

{38,49,65, 76, 13,97,27,49}

試題詳情

4.將新數據列中的第4個數97與右邊相鄰的數76進行比較,因為76<97,97應下沉,所以順序不變,得到新的數據列:

{38,49,65, 76,97,13,27,49}

試題詳情

3.將新數據列中的第3個數65與右邊相鄰的數97進行比較,因為97>65,所以順序不變,得到新的數據列:

{38,49,65,97,76,13,27,49}

試題詳情

2.將新數據列中的第2個數49與右邊相鄰的數65進行比較,因為65>49,所以順序不變,得到新的數據列:

{38,49,65,97,76,13,27,49}

試題詳情

1.將第1個數與右邊相鄰的數38進行比較,因為38<49,49應下沉,即向右移動,所以交換他們的位置,得到新的數據列:

{38,49,65,97,76,13,27,49}

試題詳情


同步練習冊答案