2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 多精度數(shù)值處理.doc
《2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 多精度數(shù)值處理.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 多精度數(shù)值處理.doc(5頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 多精度數(shù)值處理 課題:多精度數(shù)值的處理 目標(biāo): 知識(shí)目標(biāo):多精度值的加、減、乘、除 能力目標(biāo):多精度值的處理,優(yōu)化! 重點(diǎn):多精度的加、減、乘 難點(diǎn):進(jìn)位與借位處理 板書示意: 1) 輸入兩個(gè)正整數(shù),求它們的和 2) 輸入兩個(gè)正整數(shù),求它們的差 3) 輸入兩個(gè)正整數(shù),求它們的積 4) 輸入兩個(gè)正整數(shù),求它們的商 授課過程: 所謂多精度值處理,就是在對(duì)給定的數(shù)據(jù)范圍,用語言本身提供的數(shù)據(jù)類型無法直接進(jìn)行處理(主要指加減乘除運(yùn)算),而需要采用特殊的處理辦法進(jìn)行??纯聪旅娴睦?。 例1 從鍵盤讀入兩個(gè)正整數(shù),求它們的和。 分析:從鍵盤讀入兩個(gè)數(shù)到兩個(gè)變量中,然后用賦值語句求它們的和,輸出。但是,我們知道,在pascal語言中任何數(shù)據(jù)類型都有一定的表示范圍。而當(dāng)兩個(gè)被加數(shù)據(jù)大時(shí),上述算法顯然不能求出精確解,因此我們需要尋求另外一種方法。在讀小學(xué)時(shí),我們做加法都采用豎式方法,如圖1。 這樣,我們方便寫出兩個(gè)整數(shù)相加的算法。 8 5 6 + 2 5 5 1 1 1 1 圖1 A3 A2 A1 + B3 B2 B1 C4 C3 C2 C1 圖2 如果我們用數(shù)組A、B分別存儲(chǔ)加數(shù)和被加數(shù),用數(shù)組C存儲(chǔ)結(jié)果。則上例有 A[1]=6, A[2]=5, A[3]=8, B[1]=5,B[2]=5, B[3]=2, C[4]=1,C[3]=1, C[2]=1,C[1]=1,兩數(shù)相加如圖2所示。由上圖可以看出: C[i]:= A[i]+B[i]; if C[i]>10 then begin C[i]:= C[i] mod 10; C[i+1]:= C[i+1]+1 end; 因此,算法描述如下: procedure add(a,b;var c); { a,b,c都為數(shù)組,a存儲(chǔ)被加數(shù),b存儲(chǔ)加數(shù),c存儲(chǔ)結(jié)果 } var i,x:integer; begin i:=1 while (i<=a數(shù)組長度>0) or(i<=b數(shù)組的長度) do begin x := a[i] + b[i] + x div 10; {第i位相加并加上次的進(jìn)位} c[i] := x mod 10; {存儲(chǔ)第i位的值} i := i + 1 {位置指針變量} end end; 通常,讀入的兩個(gè)整數(shù)用可用字符串來存儲(chǔ),程序設(shè)計(jì)如下: program exam1; const max=200; var a,b,c:array[1..max] of 0..9; n:string; lena,lenb,lenc,i,x:integer; begin write(Input augend:); readln(n); lena:=length(n); {加數(shù)放入a數(shù)組} for i:=1 to lena do a[lena-i+1]:=ord(n[i])-ord(0); write(Input addend:); readln(n); lenb:=length(n); {被加數(shù)放入b數(shù)組} for i:=1 to lenb do b[lenb-i+1]:=ord(n[i])-ord(0); i:=1; while (i<=lena) or(i<=lenb) do begin x := a[i] + b[i] + x div 10; {兩數(shù)相加,然后加前次進(jìn)位} c[i] := x mod 10; {保存第i位的值} i := i + 1 end; if x>=10 then {處理最高進(jìn)位} begin lenc:=i;c[i]:=1 end else lenc:=i-1; for i:=lenc downto 1 do write(c[i]); {輸出結(jié)果} writeln end. 例2 高精度減法。 從鍵盤讀入兩個(gè)正整數(shù),求它們的差。 分析:類似加法,可以用豎式求減法。在做減法運(yùn)算時(shí),需要注意的是:被減數(shù)必須比減數(shù)大,同時(shí)需要處理借位。 因此,可以寫出如下關(guān)系式 if a[i]1) do dec(lenc); {最高位的0不輸出} for i:=lenc downto 1 do write(c[i]); writeln end. 例3 高精度乘法。 從鍵盤讀入兩個(gè)正整數(shù),求它們的積。 分析:類似加法,可以用豎式求乘法。在做乘法運(yùn)算時(shí),同樣也有進(jìn)位,同時(shí)對(duì)每一位進(jìn)乘法運(yùn)算時(shí),必須進(jìn)行錯(cuò)位相加,如圖3, 圖4。 8 5 6 2 5 4 2 8 0 1 7 1 2 2 1 4 0 0 圖3 A 3 A 2 A 1 B 3 B 2 B 1 C’4C’3 C’2 C’1 C”5C”4C”3C”2 C 6 C 5 C 4 C 3 C 2 C 1 圖4 分析C數(shù)組下標(biāo)的變化規(guī)律,可以寫出如下關(guān)系式 C i = C’ i +C ”i +… 由此可見,C i跟A[i]*B[j]乘積有關(guān),跟上次的進(jìn)位有關(guān),還跟原C i的值有關(guān),分析下標(biāo)規(guī)律,有 x:= A[i]*B[j]+ x DIV 10+ C[i+j-1]; C[i+j-1] := x mod 10; 類似,高精度乘法的參考程序: program exam3; const max=200; var a,b,c:array[1..max] of 0..9; n1,n2:string; lena,lenb,lenc,i,j,x:integer; begin write(Input multiplier:); readln(n1); write(Input multiplicand:); readln(n2); lena:=length(n1); lenb:=length(n2); for i:=1 to lena do a[lena-i+1]:=ord(n1[i])-ord(0); for i:=1 to lenb do b[lenb-i+1]:=ord(n2[i])-ord(0); for i:=1 to lena do begin x:=0; for j:=1 to lenb do begin {對(duì)乘數(shù)的每一位進(jìn)行處理} x := a[i]*b[j] + x div 10 + c[i+j-1]; {當(dāng)前乘積+上次乘積進(jìn)位+原數(shù)} c[i+j-1] := x mod 10; end; c[i+j]:= x div 10; {進(jìn)位} end; lenc:=i+j; while (c[lenc]=0) and (lenc>1) do dec(lenc); for i:=lenc downto 1 do write(c[i]); writeln end. 例4 高精度除法。 從鍵盤讀入兩個(gè)正整數(shù),求它們的商(做整除)。 分析:做除法時(shí),每一次上商的值都在0~9,每次求得的余數(shù)連接以后的若干位得到新的被除數(shù),繼續(xù)做除法。因此,在做高精度除法時(shí),要涉及到乘法運(yùn)算和減法運(yùn)算,還有移位處理。當(dāng)然,為了程序簡潔,可以避免高精度乘法,用0~9次循環(huán)減法取代得到商的值。這里,我們討論一下高精度數(shù)除以單精度數(shù)的結(jié)果,采取的方法是按位相除法。 參考程序: program exam4; const max=200; var a,c:array[1..max] of 0..9; x,b:longint; n1,n2:string; lena:integer; code,i,j:integer; begin write(Input dividend:); readln(n1); write(Input divisor:); readln(n2); lena:=length(n1); for i:=1 to lena do a[i] := ord(n1[i]) - ord(0); val(n2,b,code); {按位相除} x:=0; for i:=1 to lena do begin c[i]:=(x*10+a[i]) div b; x:=(x*10+a[i]) mod b; end; {顯示商} j:=1; while (c[j]=0) and (j- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 多精度數(shù)值處理 2019 2020 年高 信息技術(shù) 全國青少年 奧林匹克 聯(lián)賽 教案 精度 數(shù)值 處理
鏈接地址:http://www.3dchina-expo.com/p-2553679.html