国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

簡(jiǎn)單計(jì)算函數(shù)的編寫過程

2019-11-18 17:52:37
字體:
供稿:網(wǎng)友
本人在編寫算術(shù)運(yùn)算練習(xí)程序時(shí),覺得其中的計(jì)算函數(shù)下的簡(jiǎn)單計(jì)算函數(shù)的編寫過程很有意思,當(dāng)時(shí)作了詳細(xì)記錄,現(xiàn)將計(jì)算函數(shù)整
理為計(jì)算程序,并將(不帶括號(hào)的簡(jiǎn)單算式的)簡(jiǎn)單計(jì)算函數(shù)的編制過程整理成文,獻(xiàn)給《網(wǎng)絡(luò)時(shí)代》各位讀者,敬請(qǐng)批評(píng)指正。

  計(jì)算主程序負(fù)責(zé)初始算式整理、算式中變量的賦值、脫括號(hào)及脫括號(hào)后的算式整理、調(diào)用簡(jiǎn)單計(jì)算函數(shù)、輸出計(jì)算結(jié)果。

  思路:如果第一個(gè)運(yùn)算符是乘除,則計(jì)算它前后的兩個(gè)數(shù),其值作為新算式的第一個(gè)數(shù),再繼續(xù)計(jì)算這個(gè)新算式;如果是加減則用第
一個(gè)數(shù)加減后面的算式(如果是減,還要將其后的+變?yōu)椋優(yōu)椋?br>
  這是一個(gè)遞歸的思路,據(jù)此得到以下算法:
A:函數(shù)入口,需要兩個(gè)參數(shù),分別表示該算式在大算式中的起止位  置。
B:如果算式中只有一個(gè)元素,則函數(shù)值等于該元素,L;否則C
C:如果算式中有三個(gè)元素,即“數(shù)符數(shù)”的形式,則D;否則E
D:計(jì)算它們,并將計(jì)算結(jié)果作為函數(shù)值,L
E:如果第一個(gè)運(yùn)算符是乘除則F;否則H
F:計(jì)算前兩個(gè)數(shù),并將結(jié)果賦值給第二個(gè)數(shù)。
G:函數(shù)值等于以第二個(gè)數(shù)為起點(diǎn)的新算式的值。L
H:如果第一個(gè)運(yùn)算符是+則I;否則J
I:函數(shù)值等于第一個(gè)加上以第二個(gè)數(shù)為起點(diǎn)的算式的值。L
J:將后面的加號(hào)都換成減號(hào),而減號(hào)則都換成加號(hào)。
K:函數(shù)值等于第一個(gè)數(shù)減去以第二個(gè)數(shù)為起點(diǎn)的新算式的值。
L:返回。

  以此算法得到QB語言程序functionjdjs$(a,b)(附后)

  雖然調(diào)試通過了,卻總不滿足,一個(gè)簡(jiǎn)單算式的計(jì)算好象不至于
如此復(fù)雜。為此悶了兩天,晚上停電,黑暗中卻出現(xiàn)了靈感,趕緊深
入思考,得到思路二:

  根據(jù)算術(shù)運(yùn)算先乘除后加減的規(guī)則,先搜索算式中的乘除號(hào),進(jìn)
行計(jì)算,其值作為新的元素,代替原來的三個(gè)元素,然后再搜索、計(jì)
算、替代……直到找不到乘除號(hào),此時(shí)的算式只有加減,順序進(jìn)行加
減運(yùn)算,即可得到結(jié)果。

  根據(jù)思路二,得到算法二:
A:函數(shù)入口,仍需要兩個(gè)參數(shù)a和b。
B:搜索算式中的乘除號(hào),若有則C;否則E
C:計(jì)算與之相連的前后兩個(gè)數(shù),并賦值給第一個(gè)數(shù)。
D:將后面的各元素均前移兩位,形成新的算式,B
E:如果只有一個(gè)元素,則G;否則F
F:按1±2→2,2±3→3,……的方法順序計(jì)算。
G:返回最后那個(gè)元素的值。

  以此算法得到QB語言程序functionjdjs2$(a,b)(附后)

  算法二思路簡(jiǎn)潔清晰,容易實(shí)現(xiàn),而且因不用遞歸,節(jié)省了大量
的堆棧操作,速度也應(yīng)該更快。

  附:兩個(gè)簡(jiǎn)單計(jì)算函數(shù)源程序說明:程序中的csf()和lx()是主
程序中定義的全局?jǐn)?shù)組變量,csf存儲(chǔ)算式各段,lx存儲(chǔ)各段類型,這
里規(guī)定 1-2*3/4(5)6數(shù)字7。
```````````````````````````````````````````````````````````

DEFINTA-B,I-N
DEFSTRC
DEFDBLD
FUNCTIONjdjs$(a,b)`簡(jiǎn)單計(jì)算函數(shù)之一,遞歸算法
IFa=bTHEN`如果只有一個(gè)元素,則立即返回這個(gè)元素
jdjs=csf(a)
ELSE
IFb-a=2THEN`如果有三個(gè)元素,即"數(shù)符數(shù)"的形式,則將計(jì)算
結(jié)果返回
da=VAL(csf(a)):db=VAL(csf(b))
SELECTCASElx(a 1)
CASE1:da=da db
CASE2:da=da-db
CASE3:da=da*db
CASE4:da=da/db
ENDSELECT
jdjs=STR$(da)
ELSE`如果有更多的元素,則應(yīng)根據(jù)以下情況分別處理
IFlx(a 1)=1THEN`第一個(gè)運(yùn)算符如果是“ ”,則進(jìn)行遞歸處理
jdjs=STR$(VAL(csf(a)) VAL(jdjs(a 2,b)))
ELSEIFlx(a 1)=2THEN`如果是"-",則需要將后面的加減號(hào)對(duì)
調(diào),然后進(jìn)行遞歸處理
FORkk=a 3TOb-1STEP2
IFlx(kk)=2THENlx(kk)=1ELSEIFlx(kk)=1THENlx(kk)
=2
NEXT
jdjs=STR$(VAL(csf(a))-VAL(jdjs(a 2,b)))
ELSE`如果是乘除號(hào),則先計(jì)算這兩個(gè)數(shù)并賦值給第二個(gè)數(shù),然后進(jìn)行
遞歸處理
IFlx(a 1)=3THEN
csf(a 2)=STR$(VAL(csf(a))*VAL(csf(a 2)))
ELSE
csf(a 2)=STR$(VAL(csf(a))/VAL(csf(a 2)))
ENDIF
jdjs=jdjs(a 2,b)
ENDIF
ENDIF
ENDIF
ENDFUNCTION

``````````````````````````````````````````````````````````
DEFINTA-B,I-N
DEFSTRC
DEFDBLD
FUNCTIONjdjs2$(a,b)`簡(jiǎn)單計(jì)算函數(shù)之二,先乘除后加減的算法
DO:ycc=0`該循環(huán)先進(jìn)行算式中的乘除運(yùn)算.Ycc記錄算式中有無
乘除號(hào)
FORI=a 1TOb-1STEP2
IFlx(I)>2THEN
IFlx(I)=3THEN
csf(I-1)=STR$(VAL(csf(I-1))*VAL(csf(I 1)))
ELSE
csf(I-1)=STR$(VAL(csf(I-1))/VAL(csf(I 1)))
ENDIF
FORk=ITOb-2:csf(k)=csf(k 2):lx(k)=lx(k 2):NEXT`整理算式
ycc=1:EXITFOR
ENDIF
NEXT
`FORkk=aTOb:PRINTkk,csf(kk),lx(kk):NEXT`調(diào)試時(shí)用來
觀察變量
IFycc=1THENb=b-2
LOOPUNTILycc=0
IFb>aTHEN`再按順序進(jìn)行加減運(yùn)算,如果只有一個(gè)元素,則跳過下
面的循環(huán),直接返回它
FORI=a 1TOb-1STEP2
IFlx(I)=1THEN
csf(I 1)=STR$(VAL(csf(I-1)) VAL(csf(I 1)))
ELSE
csf(I 1)=STR$(VAL(csf(I-1))-VAL(csf(I 1)))
ENDIF
NEXT
ENDIF
jdjs2=csf(b)
ENDFUNCTION->


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 文山县| 托里县| 南溪县| 疏附县| 舒兰市| 景洪市| 吴江市| 云南省| 靖州| 乌拉特后旗| 宁夏| 崇州市| 丰县| 潮安县| 龙川县| 沭阳县| 平定县| 永登县| 宁乡县| 二手房| 浦县| 句容市| 玉门市| 全椒县| 乌鲁木齐县| 越西县| 南皮县| 杭锦后旗| 德庆县| 海兴县| 宁武县| 迁西县| 宁陕县| 灵山县| 健康| 玉田县| 屏东市| 介休市| 咸丰县| 咸阳市| 申扎县|