2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p>  題目:長整數(shù)四則運(yùn)算</p><p><b>  一、需求分析</b></p><p><b>  1.問題描述:</b></p><p>  由于工程上有時(shí)候需要對很大的數(shù)進(jìn)行計(jì)算,但是計(jì)算機(jī)本身提供的數(shù)據(jù)類型無法保存幾百位甚至幾千位

2、的數(shù)字,所以需要設(shè)計(jì)專門的算法對數(shù)據(jù)進(jìn)行相應(yīng)的計(jì)算。此程序的設(shè)計(jì)任務(wù)是:設(shè)計(jì)一個(gè)程序能夠?qū)崿F(xiàn)長整數(shù)運(yùn)算的程序,而且能夠?qū)σ恍╁e(cuò)誤異常進(jìn)行辨別調(diào)整,計(jì)算出正確的結(jié)果。程序輸入格式是字符串,保存時(shí)需要用雙向循環(huán)鏈表將字符串每四位保存在循環(huán)鏈表中的一個(gè)節(jié)點(diǎn)中,然后再計(jì)算后運(yùn)行出結(jié)果。</p><p><b>  2.基本功能</b></p><p>  功能一:建立雙向循環(huán)

3、鏈表,計(jì)算鏈表個(gè)數(shù),對鏈表的數(shù)據(jù)進(jìn)行修改,能在鏈表中插入結(jié)點(diǎn)。</p><p>  功能二:將字符串轉(zhuǎn)換成相應(yīng)的數(shù)字存儲(chǔ)在雙向循環(huán)鏈表中</p><p>  功能三:對存入雙向循環(huán)鏈表的長整數(shù)進(jìn)行相加,相減,相除。</p><p><b>  3.輸入輸出</b></p><p>  程序輸入以字符串的形式輸入,數(shù)據(jù)的類

4、型是字符串,包含元素的范圍是數(shù)字,逗號,負(fù)號。</p><p>  輸入時(shí)用字符串輸入,輸出時(shí)以一鏈表結(jié)點(diǎn)輸出,而且每個(gè)結(jié)點(diǎn)表示四位。</p><p><b>  二、概要設(shè)計(jì)</b></p><p><b>  1.設(shè)計(jì)思路:</b></p><p>  由于計(jì)算機(jī)無法完成位數(shù)很大的數(shù)字計(jì)算,設(shè)計(jì)

5、思路就是將很長的數(shù)據(jù)進(jìn)行分割,一部分一部分的用計(jì)算機(jī)固有數(shù)據(jù)類型進(jìn)行計(jì)算。將各部分的結(jié)果整合起來。由于計(jì)算機(jī)固有的整數(shù)類型存數(shù)的對大整數(shù)是2^15-1,所以為了方便,且符合中國人對長整數(shù)的表示習(xí)慣,建立一個(gè)雙向循環(huán)鏈表,每個(gè)結(jié)點(diǎn)存儲(chǔ)四位數(shù)字,以萬為進(jìn)制。從最低位開始加法,超過一萬向上進(jìn)位,所以每次加法應(yīng)該是對應(yīng)兩個(gè)結(jié)點(diǎn)和進(jìn)位數(shù)相加,進(jìn)位值初始為0;減法也是一個(gè)結(jié)點(diǎn)計(jì)算一次,每次計(jì)算應(yīng)該是第一個(gè)鏈表對應(yīng)的結(jié)點(diǎn)值減去第二個(gè)結(jié)點(diǎn)的值和借位值的

6、和,借位值初始值為0;除法的計(jì)算可以借助減法,被減數(shù)被減數(shù)減一次則最終結(jié)果加一;直至被減數(shù)比減數(shù)小。</p><p><b>  2.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):</b></p><p>  因?yàn)橛?jì)算的是一個(gè)連續(xù)的數(shù)字,需要桉順序一次計(jì)算,所以采用的數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)是線性表。因?yàn)橐竺恳粋€(gè)結(jié)點(diǎn)只存儲(chǔ)四位數(shù)字,為了將數(shù)字連接起來,采用的數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)是鏈?zhǔn)健?lt;/p>

7、<p>  1.雙向循環(huán)鏈表的抽象數(shù)據(jù)類型定義為:</p><p><b>  ADT Link</b></p><p><b>  {</b></p><p>  數(shù)據(jù)對象:D={ai | ai∈CharSet,i=1,2,……,n,n≥0}</p><p>  數(shù)據(jù)關(guān)系; R={&

8、lt;ai-1,ai> | ai-1,ai∈D,i=2,……,n}</p><p><b>  }</b></p><p><b>  基本操作:</b></p><p>  InitLinkList(&L,a) </p><p>  操作結(jié)果:構(gòu)造一個(gè)雙向循環(huán)鏈表L ,用a判斷是正數(shù)

9、還是負(fù)數(shù) </p><p>  DestroyList(&L) </p><p>  初始條件:雙向循環(huán)兩已經(jīng)存在</p><p>  操作結(jié)果:銷毀有序表L</p><p>  Insert(&L,a)</p><p>  初始條件:雙向循環(huán)鏈表已經(jīng)存在</p><p>  

10、操作結(jié)果:在循環(huán)鏈表的末尾插入一個(gè)結(jié)點(diǎn),且此結(jié)點(diǎn)的數(shù)據(jù)值為a</p><p>  HeadInsert(&L,a)</p><p>  初始條件:雙向循環(huán)鏈表已經(jīng)存在</p><p>  操作結(jié)果:在循環(huán)鏈表的頭結(jié)點(diǎn)后插入一個(gè)結(jié)點(diǎn),且此結(jié)點(diǎn)的數(shù)據(jù)值為a</p><p>  CountNode(&L)</p>&l

11、t;p>  初始條件:雙向循環(huán)鏈表存在</p><p>  操作結(jié)果:計(jì)算出鏈表中結(jié)點(diǎn)的個(gè)數(shù),并返回個(gè)數(shù)</p><p>  Compare(&L1, &L2)</p><p>  初始條件:L1和L2存在</p><p>  操作結(jié)果:比較兩個(gè)雙向循環(huán)鏈表的大小,用返回值1表示L1大于L2,返回值-1標(biāo)志L1小于L2,

12、返回值0標(biāo)志L1和L2相等</p><p>  ToNum(*s,i,&e) </p><p>  初始條件:s為字符串中指向某個(gè)字符的指針</p><p>  操作結(jié)果:將s的前i個(gè)字符轉(zhuǎn)換為數(shù)字,存入e中</p><p>  CreatNum(&L,&s)</p><p>  初始條件:s

13、為某個(gè)字符串,雙向循環(huán)鏈表L存在</p><p>  操作結(jié)果:將字符串s轉(zhuǎn)換成數(shù)字存入到循環(huán)鏈表L中</p><p>  Add(L1,L2, op) </p><p>  初始條件:雙向循環(huán)鏈表L1和L2存在,op為結(jié)果的標(biāo)識符</p><p>  操作結(jié)果:兩個(gè)鏈表相加,求出結(jié)果。</p><p>  Sub(

14、L1,L2, op) </p><p>  初始條件:雙向循環(huán)鏈表L1和L2存在</p><p>  操作結(jié)果:L1減去L2,求出結(jié)果 ,op為結(jié)果的標(biāo)識符</p><p>  EraseZero(Link &L)</p><p>  初始條件:雙向循環(huán)鏈表L存在</p><p>  操作結(jié)果:刪去L鏈表頭結(jié)

15、點(diǎn)后,第一個(gè)數(shù)據(jù)不為零結(jié)點(diǎn)前的所有數(shù)據(jù)為零的結(jié)點(diǎn)。</p><p>  如果結(jié)點(diǎn)數(shù)據(jù)都為零,則保存一個(gè)結(jié)點(diǎn)。</p><p><b>  print(L)</b></p><p>  初始條件:雙向循環(huán)鏈表L存在</p><p>  操作結(jié)果:從L頭結(jié)點(diǎn)開始順此打印每個(gè)結(jié)點(diǎn)中的數(shù)據(jù)</p><p>

16、;<b>  3.軟件結(jié)構(gòu)設(shè)計(jì):</b></p><p>  本程序包含四個(gè)模塊:</p><p><b>  1.主程序模塊</b></p><p>  Int main()</p><p><b>  {</b></p><p><b> 

17、 接受命令</b></p><p>  While(“命令”!=“退出”)</p><p><b>  {</b></p><p><b>  輸入字符串</b></p><p><b>  建立雙向循環(huán)鏈表</b></p><p>  將字

18、符串轉(zhuǎn)換為要求的格式存入鏈表的每個(gè)結(jié)點(diǎn)</p><p>  對鏈表中數(shù)據(jù)進(jìn)行即興操作數(shù)理</p><p><b>  再次接受命令</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  2.雙向鏈表操

19、作模塊------實(shí)現(xiàn)結(jié)點(diǎn)的插入、刪除、修改</p><p>  3.字符串轉(zhuǎn)換存儲(chǔ)模塊----實(shí)現(xiàn)將字符串轉(zhuǎn)換為數(shù)字按格式存儲(chǔ)在鏈表中</p><p>  4.數(shù)據(jù)計(jì)算模塊—--------對存儲(chǔ)在鏈表中的數(shù)據(jù)進(jìn)行計(jì)算,得到最終期望的結(jié)果</p><p>  各個(gè)模塊調(diào)用的關(guān)系如下:</p><p>  主程序模塊中的函數(shù)原型:</p

20、><p>  void Interface()-------------------操作界面函數(shù)</p><p>  Status CreatNum(Link &L,char*s)----創(chuàng)建數(shù)字鏈表函數(shù)</p><p>  Link Compute(Link &L1,Link &L2,char Ope)----數(shù)據(jù)計(jì)算函數(shù)</p>

21、<p><b>  數(shù)據(jù)運(yùn)算模塊:</b></p><p>  Link Add(Link &L1,Link &L2,char op) ----加法計(jì)算</p><p>  Link Sub(Link &L1,Link &L2,char op) ----減法運(yùn)算</p><p><

22、;b>  雙向鏈表操作模塊</b></p><p>  void InitLinkList(Link &L,char a)</p><p>  Status DestroyList(Link &L)</p><p>  Status Insert(Link &L,Elemtype a)</p><p>

23、;  int CountNode(Link L)</p><p>  BOOL Compare(Link &L1,Link &L2)</p><p>  void EraseZero(Link &L)</p><p>  Status HeadInsert(Link &L,Elemtype a) </p><p&

24、gt;<b>  字符串轉(zhuǎn)換模塊</b></p><p>  Status CreatNum(Link &L,char*s)</p><p>  Status ToNum(char*s,int i,long &e)</p><p><b>  人機(jī)界面:</b></p><p>&l

25、t;b>  三、 詳細(xì)設(shè)計(jì) </b></p><p>  1..根據(jù)分析和鏈表操作的特點(diǎn),采用雙向循環(huán)鏈表實(shí)現(xiàn),這里頭結(jié)點(diǎn)存儲(chǔ)數(shù)字的符號。</p><p>  typedef long Elemtype ;</p><p>  typedef int Status;</p><p>  typedef int BOOL;&

26、lt;/p><p>  typedef struct LNode{</p><p>  Elemtype data;</p><p>  LNode *next;</p><p>  LNode *prior;</p><p>  }Node,*Link;</p><p>  void InitLi

27、nkList(Link &L,char a){</p><p>  //對一個(gè)雙向循環(huán)鏈表進(jìn)行初始化,分配頭結(jié)點(diǎn)</p><p>  L = (Link)malloc(sizeof(Node));//動(dòng)態(tài)分配存儲(chǔ)空間</p><p>  If(!L) return FALSE;</p><p>  if(a == '-'

28、;) L->data = -1;//L->data存放符號節(jié)點(diǎn),如果是‘-’則為,否則為0</p><p>  else L->data = 1;</p><p>  L->prior = L;</p><p>  L->next = L;</p><p><b>  }</b></p

29、><p>  Status DestroyList(Link &L){</p><p><b>  //銷毀鏈表L</b></p><p>  if(!L)return ERROR;//鏈表不存在</p><p>  p = L->prior;//p指向鏈表頭節(jié)點(diǎn)的前驅(qū)</p><p>

30、  while(p!=L)//刪除節(jié)點(diǎn)節(jié)點(diǎn)p</p><p><b>  {</b></p><p>  q = p->prior;</p><p>  free(p);//釋放節(jié)點(diǎn)p的空間</p><p><b>  p = q;</b></p><p><b&

31、gt;  }</b></p><p>  free(L);//釋放鏈表L的存儲(chǔ)空間</p><p>  return OK;</p><p><b>  }</b></p><p>  Status Insert(Link &L,Elemtype a){</p><p>  /

32、/分配一個(gè)結(jié)點(diǎn),并將其數(shù)據(jù)值存為a,插入到鏈表的末尾</p><p>  p=(Link)malloc(sizeof(LNode));</p><p><b>  if(!p)</b></p><p>  exit(OVERFLOW);</p><p>  p->next=p->prior=NULL;<

33、/p><p>  p->data=a;</p><p>  Link q=L->prior;</p><p>  q->next=p;</p><p>  p->prior=q;</p><p>  p->next=L;</p><p>  L->prior=p;

34、</p><p>  return OK;</p><p><b>  }</b></p><p>  Status HeadInsert(Link &L,Elemtype a){ </p><p>  //分配一個(gè)結(jié)點(diǎn),并將其數(shù)據(jù)值存為a,按頭插入法插入</p><p>  p=(Li

35、nk)malloc(sizeof(LNode));</p><p><b>  if(!p)</b></p><p>  exit(OVERFLOW);</p><p>  p->data=a; </p><p>  Link q=L->next;</p><

36、p>  q->prior=p;</p><p>  p->next=q;</p><p>  L->next=p;</p><p>  p->prior=L;</p><p>  return OK;</p><p><b>  }</b></p>&l

37、t;p>  Status ToNum(char*s,int i,long &e){</p><p>  //將字符串s的前i位轉(zhuǎn)換為正數(shù),并由e保存</p><p><b>  sum=0;</b></p><p>  for(m=1,n=1;m<=i;n=n*10) //n的值每次是原來的10倍</p>&l

38、t;p><b>  {</b></p><p>  sum+=(*(s-m)-'0')*n; //轉(zhuǎn)換成相應(yīng)的數(shù)字</p><p><b>  m++;</b></p><p><b>  }</b></p><p><b>  e

39、=sum;</b></p><p>  return OK;</p><p>  Status CreatNum(Link &L,char*s){</p><p>  //將字符串轉(zhuǎn)分割成很多部分,每部分轉(zhuǎn)換為數(shù)字后存在一個(gè)鏈表結(jié)點(diǎn)中。</p><p>  InitLinkList(L,s[0]);</p>

40、<p>  if(*s=='-')</p><p>  { InitLinkList(L,s[0]); s++;</p><p><b>  }</b></p><p><b>  else</b></p><p>  InitLinkList(L,s[0]);<

41、;/p><p>  while(*s!='\0')</p><p><b>  {</b></p><p>  if(*s==',')</p><p>  { ToNum(s,i,e);</p><p>  Insert(L,e);</p><

42、p>  i=-1; //因?yàn)檫@是已經(jīng)將某一個(gè)逗號前i個(gè)字符變成數(shù)字加入 </p><p>  } //數(shù)字鏈表中,逗號不算本次</p><p><b>  i++;</b></p><p><b>  s++;</b></p><p>&l

43、t;b>  }</b></p><p>  ToNum(s,i,e); </p><p>  Insert(L,e);</p><p><b>  }</b></p><p>  int CountNode(Link L){</p><p>  //計(jì)算鏈表L的結(jié)點(diǎn)數(shù)</

44、p><p>  Link p=L->next;</p><p>  while(p!=L)</p><p><b>  {</b></p><p><b>  i++;</b></p><p>  p=p->next;</p><p><

45、b>  }</b></p><p><b>  return i;</b></p><p><b>  }</b></p><p>  BOOL Compare(Link &L1,Link &L2){</p><p>  //比較鏈表L1和L2的大小,如果L1大于L

46、2,返回1,如果L2大于L1,返回-1,如果相等,返回0</p><p><b>  {</b></p><p>  if(CountNode(L1)>CountNode(L2))</p><p><b>  // L1大于L2</b></p><p>  else if(CountNode(

47、L1)<CountNode(L2))</p><p><b>  L2大于L1</b></p><p><b>  else{</b></p><p>  p1=L1->next,p2=L2->next;</p><p>  while(p1!=L1&&p2!=L2

48、)</p><p><b>  {</b></p><p>  if(p1->data>p2->data)</p><p><b>  // L1大于L2</b></p><p>  if(p1->data<p2->data)</p><p&g

49、t;  return -1;</p><p>  p1=p1->next;</p><p>  p2=p2->next;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  L1和L2相等</

50、b></p><p><b>  }</b></p><p>  Link Add(Link &L1,Link &L2,char op) 主要函數(shù)</p><p>  //將字符串L1和L2的數(shù)據(jù)相加,得到的結(jié)果鏈表頭結(jié)點(diǎn)指針返回</p><p>  Link Sub(L

51、ink L1,Link L2,char op) 主要函數(shù)</p><p>  //將字符串L1和L2的數(shù)據(jù)相減,得到的結(jié)果鏈表的頭結(jié)點(diǎn)指針返回</p><p>  void EraseZero(Link &L)</p><p>  {//刪除鏈表L的無效零元素結(jié)點(diǎn)</p><p>  p=L->

52、;next,q;</p><p>  while(p->data==0&&p->next!=L)</p><p><b>  {</b></p><p><b>  q=p;</b></p><p>  p=p->next;</p><p>

53、  p->prior=q->prior;</p><p><b>  free(q);</b></p><p><b>  }</b></p><p>  L->next=p;</p><p><b>  }</b></p><p> 

54、 Link Compute(Link &L1,Link &L2,char Ope) //主要函數(shù)</p><p>  //對鏈表L1和鏈表L2進(jìn)行計(jì)算,即相加,相減等等</p><p>  void Interface() </p><p>  //界面函數(shù),顯示操作的主界面</p><p>  Sta

55、tus print(Link L){</p><p>  //順次打印鏈表L中的數(shù)據(jù)</p><p>  EraseZero(L);</p><p>  if(*s<48&&*s!='-'||*s>57) //第一個(gè)不是數(shù)字也不是-,則出錯(cuò)</p><p>  return

56、ERROR;</p><p>  if(*s=='-') k=0;</p><p>  else k=1;</p><p><b>  i=1;</b></p><p>  while(*(s+i)!='\0')</p><p><b

57、>  {</b></p><p>  if(*(s+i)!=','&&(*(s+i)>57||*(s+i)<48))</p><p>  return ERROR;</p><p><b>  i++;</b></p><p><b>  }<

58、/b></p><p><b>  i=1;</b></p><p>  while(*(s+i)!=','&&*(s+i)!='\0') {</p><p><b>  i++;</b></p><p><b>  k++;</

59、b></p><p><b>  }</b></p><p><b>  if(k>5)</b></p><p>  return ERROR;</p><p>  if(*(s+i)=='\0')</p><p>  return OK;<

60、/p><p><b>  k=4;</b></p><p>  while(*(s+i)!='\0')</p><p><b>  {</b></p><p>  if(*(s+i)==',')</p><p><b>  {</b

61、></p><p><b>  if(k!=4)</b></p><p>  return ERROR;</p><p>  k=-1; //此時(shí)逗號字符不能在四個(gè)數(shù)字的計(jì)算之中</p><p><b>  }</b></p>&

62、lt;p><b>  k++;</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p>  if(k!=4) //最后一個(gè)逗號后必須有四個(gè)數(shù)</p><p&g

63、t;  return ERROR;</p><p>  return OK;</p><p><b>  函數(shù)調(diào)用關(guān)系圖:</b></p><p><b>  調(diào)試分析 </b></p><p>  1.實(shí)際完成的功能有:長整數(shù)的加法和減法,支持的數(shù)據(jù)類型是整形,能夠?qū)Ξ惓]斎脒M(jìn)行判斷,打印和計(jì)算的

64、時(shí)候能夠消除可能出現(xiàn)的前置零。</p><p>  2.程序的主要函數(shù)compute時(shí)間復(fù)雜度為O(n),其實(shí)n為計(jì)算的兩個(gè)鏈表的結(jié)點(diǎn)個(gè)數(shù)的較大值。物理存儲(chǔ)使用的是雙向鏈表,有兩個(gè)指針域,空間消耗在合理范圍之內(nèi)</p><p>  3.調(diào)試中由于是雙向鏈表,在插入時(shí)應(yīng)該注意將prior域進(jìn)行考慮,剛開始寫程序時(shí)忘記,導(dǎo)致輸出結(jié)果錯(cuò)誤。清楚前置零的時(shí)候開始沒有考慮輸入數(shù)據(jù)全是零的時(shí)候,結(jié)果將

65、全部的數(shù)據(jù)結(jié)點(diǎn)都給刪除,最后沒有結(jié)果輸出,調(diào)試中發(fā)現(xiàn)這個(gè)問題,應(yīng)該將每個(gè)鏈表至少保存一個(gè)數(shù)據(jù)結(jié)點(diǎn)。</p><p>  4.由于時(shí)間倉促,而且長整數(shù)四則運(yùn)算的乘法一直沒有想到好的辦法,如果再有幾天時(shí)間,乘法這個(gè)功能完全可以加上。隨之就可以完成乘方的計(jì)算</p><p>  5.本程序還有很大的擴(kuò)充地方,應(yīng)該可以將程序由正數(shù)擴(kuò)充為浮點(diǎn)數(shù),能夠運(yùn)行更復(fù)雜的數(shù)據(jù),如求階乘,開方等功能。如果實(shí)現(xiàn)了

66、,則這個(gè)計(jì)算器的功能方面就可以和windows系統(tǒng)自帶的計(jì)算器媲美了。</p><p><b>  五、測試結(jié)果</b></p><p>  列出你的測試結(jié)果,包括輸入和輸出。注意測試數(shù)據(jù)應(yīng)該完整和嚴(yán)格,至少給出2組測試結(jié)果(含合法數(shù)據(jù)與非法數(shù)據(jù))。</p><p><b>  輸入0;0,輸出0</b></p>

67、;<p>  輸入1,0001,0001;-1,0001,0001;輸出0</p><p>  輸入1,0001,0001;-1,0001,0000;輸出1</p><p>  輸入-9999,9999;-9999;9999;輸出-1,9999,9998</p><p><b>  非法數(shù)據(jù)</b></p><

68、p>  1,000;000,1;輸出“輸入錯(cuò)誤”</p><p><b>  六、用戶手冊</b></p><p>  說明如何使用你編寫的程序,詳細(xì)列出每一步的具體操作步驟。這里可以有適當(dāng)?shù)倪\(yùn)行結(jié)果抓圖。用戶手冊與開發(fā)過程無關(guān),只與使用有關(guān),必須是Step by Step的。 </p><p>  所有運(yùn)行結(jié)果截圖均要求有實(shí)際數(shù)據(jù)的內(nèi)容

69、,截圖尺寸要求按頁寬排版兩張大小,且要求有每張圖下面有規(guī)范的標(biāo)題說明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。</p><p><b>  1.進(jìn)入操作主界面</b></p><p>  2.按照命令提示操作</p><p>  ⑴選1,進(jìn)入加法運(yùn)算</p><p> ?、佥斎氲谝粋€(gè)操作數(shù):并且按照提示格式輸入&l

70、t;/p><p>  如果輸入錯(cuò)誤,比如1,000,則程序會(huì)提示錯(cuò)誤,重新輸入</p><p> ?、谌绻斎胝_,比如輸入1,0000,輸入下一個(gè)數(shù)</p><p>  ③輸入正確,如輸入9999,9999 則計(jì)算出結(jié)果</p><p>  ④輸出每個(gè)鏈表中的結(jié)點(diǎn)值,便于觀察比較</p><p> ?、葺敵鼋Y(jié)果1,000

71、0,9999</p><p> ?、七x2,進(jìn)入減法運(yùn)算</p><p> ?、佥斎氲谝粋€(gè)操作數(shù),并按照提示的格式輸入</p><p>  如果輸入錯(cuò)誤,比如,10,000,程序會(huì)提示輸入錯(cuò)誤,重新輸入</p><p> ?、谌绻斎胝_,比如9999,9999,輸入下一個(gè)數(shù)。</p><p>  ③第二個(gè)數(shù)也輸入正確,

72、比如輸入10,0000,輸出結(jié)果</p><p>  ④提示是否繼續(xù)計(jì)算,選擇Y或者y退出,其他任意鍵繼續(xù)操作</p><p>  七、體會(huì)與自我評價(jià) </p><p>  長整數(shù)四則運(yùn)算的一些思考</p><p>  這次的課程設(shè)計(jì)中,長整數(shù)四則運(yùn)算這個(gè)實(shí)驗(yàn)給了我很大的挑戰(zhàn),在設(shè)計(jì)中遇到了很多的困難,比如如何用如何將字符數(shù)據(jù)分割成很多部分存

73、儲(chǔ)進(jìn)雙向循環(huán)鏈表,如何判斷輸入的字符串是否是正確的;在輸入特殊數(shù)據(jù)買比如0000,00000時(shí),程序能夠消除無用的前置零得出正確的結(jié)果,我在這些問題上都考慮的很久,一點(diǎn)點(diǎn)的攻破難題,</p><p>  而在這次實(shí)驗(yàn)中我對長正數(shù)的各種運(yùn)算也有了一定的認(rèn)識,對于特別長的數(shù)的計(jì)算,只能先求局部結(jié)果,最后將局部結(jié)果綜合起來,得到最終結(jié)果。比如加法就是從最低位開始計(jì)算,判斷進(jìn)位后再一次向高位計(jì)算,最終得到結(jié)果。計(jì)算加法的

74、時(shí)候,由于是每四位一個(gè)結(jié)點(diǎn),所以是以萬位為進(jìn)制。輸出時(shí)如果一個(gè)結(jié)點(diǎn)中數(shù)據(jù)是以為,則前面輸出三個(gè)零,如果是兩位,則輸出兩個(gè)零,如果是三位,則輸出一個(gè)零,四位數(shù)直接輸出。如果節(jié)點(diǎn)數(shù)據(jù)為零,則按第一種情況輸出是前面加三個(gè)零即可。為了程序的健壯性,應(yīng)該考慮負(fù)數(shù)和正數(shù)相加的情況,如果一個(gè)較大的正數(shù)加上一個(gè)數(shù)值較小的負(fù)數(shù),應(yīng)該是大數(shù)減去去掉振幅符號的小數(shù),即可。如果是一個(gè)較小的正數(shù)加上一個(gè)數(shù)值較大的負(fù)數(shù),則應(yīng)該是去掉正負(fù)號的負(fù)數(shù)減去正數(shù),最后在結(jié)果

75、里加上一個(gè)負(fù)號即可。</p><p>  乘法的基本思想是相加,但是在雙向循環(huán)鏈表中,如果乘數(shù)很大的時(shí)候,單純的相加要進(jìn)行很多次,效率上完全不夠滿足要求,一般是用字符串直接按位相乘,按豎式結(jié)構(gòu)計(jì)算。</p><p>  除法的實(shí)現(xiàn)可以用減法,但是問題還是和乘法一樣,如果數(shù)字太大的話,用雙向循環(huán)鏈表,要進(jìn)行的減法次數(shù)也是很龐大的。</p><p>  以上是我對長整數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論