麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

簡單計算函數的編寫過程

2019-11-18 17:52:37
字體:
來源:轉載
供稿:網友
本人在編寫算術運算練習程序時,覺得其中的計算函數下的簡單計算函數的編寫過程很有意思,當時作了詳細記錄,現將計算函數整
理為計算程序,并將(不帶括號的簡單算式的)簡單計算函數的編制過程整理成文,獻給《網絡時代》各位讀者,敬請批評指正。

  計算主程序負責初始算式整理、算式中變量的賦值、脫括號及脫括號后的算式整理、調用簡單計算函數、輸出計算結果。

  思路:如果第一個運算符是乘除,則計算它前后的兩個數,其值作為新算式的第一個數,再繼續計算這個新算式;如果是加減則用第
一個數加減后面的算式(如果是減,還要將其后的+變為-,-變為+)。

  這是一個遞歸的思路,據此得到以下算法:
A:函數入口,需要兩個參數,分別表示該算式在大算式中的起止位  置。
B:如果算式中只有一個元素,則函數值等于該元素,L;否則C
C:如果算式中有三個元素,即“數符數”的形式,則D;否則E
D:計算它們,并將計算結果作為函數值,L
E:如果第一個運算符是乘除則F;否則H
F:計算前兩個數,并將結果賦值給第二個數。
G:函數值等于以第二個數為起點的新算式的值。L
H:如果第一個運算符是+則I;否則J
I:函數值等于第一個加上以第二個數為起點的算式的值。L
J:將后面的加號都換成減號,而減號則都換成加號。
K:函數值等于第一個數減去以第二個數為起點的新算式的值。
L:返回。

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

  雖然調試通過了,卻總不滿足,一個簡單算式的計算好象不至于
如此復雜。為此悶了兩天,晚上停電,黑暗中卻出現了靈感,趕緊深
入思考,得到思路二:

  根據算術運算先乘除后加減的規則,先搜索算式中的乘除號,進
行計算,其值作為新的元素,代替原來的三個元素,然后再搜索、計
算、替代……直到找不到乘除號,此時的算式只有加減,順序進行加
減運算,即可得到結果。

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

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

  算法二思路簡潔清晰,容易實現,而且因不用遞歸,節省了大量
的堆棧操作,速度也應該更快。

  附:兩個簡單計算函數源程序說明:程序中的csf()和lx()是主
程序中定義的全局數組變量,csf存儲算式各段,lx存儲各段類型,這
里規定 1-2*3/4(5)6數字7。
```````````````````````````````````````````````````````````

DEFINTA-B,I-N
DEFSTRC
DEFDBLD
FUNCTIONjdjs$(a,b)`簡單計算函數之一,遞歸算法
IFa=bTHEN`如果只有一個元素,則立即返回這個元素
jdjs=csf(a)
ELSE
IFb-a=2THEN`如果有三個元素,即"數符數"的形式,則將計算
結果返回
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`如果有更多的元素,則應根據以下情況分別處理
IFlx(a 1)=1THEN`第一個運算符如果是“ ”,則進行遞歸處理
jdjs=STR$(VAL(csf(a)) VAL(jdjs(a 2,b)))
ELSEIFlx(a 1)=2THEN`如果是"-",則需要將后面的加減號對
調,然后進行遞歸處理
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`如果是乘除號,則先計算這兩個數并賦值給第二個數,然后進行
遞歸處理
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)`簡單計算函數之二,先乘除后加減的算法
DO:ycc=0`該循環先進行算式中的乘除運算.Ycc記錄算式中有無
乘除號
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`調試時用來
觀察變量
IFycc=1THENb=b-2
LOOPUNTILycc=0
IFb>aTHEN`再按順序進行加減運算,如果只有一個元素,則跳過下
面的循環,直接返回它
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->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 看91视频 | 亚洲性在线视频 | 一本一本久久a久久精品综合小说 | 久国产精品视频 | 狠狠干五月天 | 51国产偷自视频区视频小蝌蚪 | 男男啪羞羞视频网站 | 久久tv免费国产高清 | 91美女视频在线观看 | 7777视频| 免费观看黄色一级视频 | 国产在线精品一区二区三区 | 欧美成在线视频 | 亚洲尻逼视频 | 久久亚洲精品国产 | 99精品视频在线免费观看 | 欧美成人se01短视频在线看 | 草草免费视频 | 免费a级黄色毛片 | 久久久久久久.comav | 国产一区影院 | 免费看一级毛片欧美 | 91不雅视频 | 国产精品视频六区 | 久久不射电影网 | 久久丝袜脚交足黄网站免费 | 国产久草视频在线 | 91成人在线免费视频 | 免费看污视频在线观看 | 亚洲精品午夜在线 | 午夜在线观看视频网站 | 免费观看高清视频网站 | 国产精品99精品 | 男女羞羞视频在线免费观看 | 久久久一区二区精品 | 毛片在线免费播放 | 一道本不卡一区 | 女人裸体让男人桶全过程 | 深夜免费视频 | 九九热视频在线 | 日本欧美国产 |