數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--進(jìn)制轉(zhuǎn)換的實(shí)現(xiàn)_第1頁(yè)
已閱讀1頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p><b>  設(shè)計(jì)說(shuō)明書</b></p><p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)評(píng)閱書</p><p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  天災(zāi)元年 —近衛(wèi)戊年 第 二 學(xué)期</p>

2、<p>  課程設(shè)計(jì)名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) </p><p>  設(shè)計(jì)題目: 進(jìn)制轉(zhuǎn)換的實(shí)現(xiàn) </p><p>  設(shè)計(jì)依據(jù)、要求及主要內(nèi)

3、容(可另加附頁(yè)):</p><p>  進(jìn)制數(shù)制是人們利用符號(hào)進(jìn)行計(jì)數(shù)的科學(xué)方法。數(shù)制有很多種,在計(jì)算機(jī)中常用的數(shù)制有:十進(jìn)制,二進(jìn)制、八進(jìn)制和十六進(jìn)制。十六進(jìn)制數(shù)有兩個(gè)基本特點(diǎn):它由十六個(gè)字符0~9以及A,B,C,D,E,F(xiàn)組成(它們分別表示十進(jìn)制數(shù)0~15),十六進(jìn)制數(shù)運(yùn)算規(guī)律是逢十六進(jìn)一,例如:十六進(jìn)制數(shù)4AC8可寫成(4AC8)16,或?qū)懗?AC8H。</p><p><b&

4、gt;  要求: </b></p><p>  (1)輸入一個(gè)十進(jìn)制數(shù)N,將它轉(zhuǎn)換成R進(jìn)制數(shù)輸出,并可以進(jìn)行逆轉(zhuǎn)換。</p><p> ?。?)輸入數(shù)據(jù)包含多個(gè)測(cè)試實(shí)例,每個(gè)測(cè)試實(shí)例包含兩個(gè)整數(shù)N(32位整數(shù))和R(2<=R<=16, R<>10)。</p><p>  (3)為每個(gè)測(cè)試實(shí)例輸出轉(zhuǎn)換后的數(shù),每個(gè)輸出占一行。如

5、果R大于10,則對(duì)應(yīng)的數(shù)字規(guī)則參考16進(jìn)制(比如,10用A表示,等等)。</p><p><b> ?。?)界面友好。</b></p><p>  指導(dǎo)教師(簽字): 教研室主任(簽字): </p><p>  批準(zhǔn)日期: 年 月 日</p

6、><p><b>  摘 要</b></p><p>  由于數(shù)制計(jì)算和不同數(shù)制之間轉(zhuǎn)換的需要,設(shè)計(jì)了一個(gè)10進(jìn)制轉(zhuǎn)換其它進(jìn)制(36進(jìn)制以內(nèi))及逆轉(zhuǎn)換的軟件,該軟件具有簡(jiǎn)單的將10進(jìn)制數(shù)轉(zhuǎn)換成2、8、16進(jìn)制數(shù)以及較復(fù)雜的高進(jìn)制數(shù)的轉(zhuǎn)換和逆轉(zhuǎn)功能。本軟件采用C語(yǔ)言編寫以VC++作為軟件開(kāi)發(fā)環(huán)境,采用順序棧存儲(chǔ)方式來(lái)存儲(chǔ)運(yùn)算中的數(shù)位,借助棧后進(jìn)先出的特點(diǎn),易于結(jié)果輸出。操

7、作簡(jiǎn)單,界面清晰,易于為用戶所接受。</p><p>  關(guān)鍵詞:進(jìn)制轉(zhuǎn)換;順序棧;逆轉(zhuǎn)換</p><p><b>  目 錄</b></p><p><b>  1 課題描述1</b></p><p>  2 問(wèn)題分析和任務(wù)定義2</p><p><b&g

8、t;  4 詳細(xì)設(shè)計(jì)7</b></p><p><b>  5 程序編碼8</b></p><p>  6 程序調(diào)試與測(cè)試13</p><p><b>  7 結(jié)果分析15</b></p><p><b>  8 總結(jié)16</b></p>&

9、lt;p><b>  參考文獻(xiàn)17</b></p><p><b>  1 課題描述</b></p><p>  數(shù)制有很多種,在計(jì)算機(jī)中常用的數(shù)制有:十進(jìn)制,二進(jìn)制、八進(jìn)制和十六進(jìn)制。十六進(jìn)制數(shù)有兩個(gè)基本特點(diǎn):它由十六個(gè)字符0~9以及A,B,C,D,E,F(xiàn)組成(它們分別表示十進(jìn)制數(shù)0~15),十六進(jìn)制數(shù)運(yùn)算規(guī)律是逢十六進(jìn)一,例如:十六進(jìn)

10、制數(shù)4AC8可寫成(4AC8)16,或?qū)懗?AC8H。更大一些的數(shù)制則擴(kuò)展十六進(jìn)制未用的其他大寫字母。</p><p>  順序棧是順序存儲(chǔ)結(jié)構(gòu)的棧,是利用一組地址連續(xù)的存儲(chǔ)單元依次存放自棧底到棧頂?shù)臄?shù)據(jù)元素。同時(shí)附設(shè)棧頂指針top和?;羔榖ase,來(lái)方便棧內(nèi)數(shù)據(jù)元素的存取和棧的擴(kuò)充。</p><p>  2 問(wèn)題分析和任務(wù)定義</p><p><b>

11、  問(wèn)題分析:</b></p><p>  編寫進(jìn)制轉(zhuǎn)換及其逆轉(zhuǎn),其算法過(guò)程恰好是結(jié)果的逆序,因此建立一個(gè)順序棧將計(jì)算過(guò)程中得到的數(shù)位順序進(jìn)棧,則按出棧順序就會(huì)輸出對(duì)應(yīng)的轉(zhuǎn)換結(jié)果。逆轉(zhuǎn)程序借助字符數(shù)組按順序?qū)⒚總€(gè)數(shù)位轉(zhuǎn)換成十進(jìn)制數(shù)后求和,得到逆轉(zhuǎn)結(jié)果</p><p>  例如:11轉(zhuǎn)換成二進(jìn)制數(shù)</p><p>  11%2=1; 11/2=5;1入

12、棧;</p><p>  5%2=1; 5/2=2;1入棧;</p><p>  2%2=0; 2/2=0;0入棧;</p><p><b>  被除數(shù)不為0;</b></p><p>  按順序出棧,得到結(jié)果為110;</p><p><b>  任務(wù)定義:</b&g

13、t;</p><p><b>  1)畫出流程圖;</b></p><p>  2)任意建立一個(gè)容量為20個(gè)棧元素的空棧;</p><p>  3)將十進(jìn)制數(shù)與要轉(zhuǎn)進(jìn)制先求余,將余數(shù)順序入棧;</p><p>  4)闡明測(cè)試方法,寫出完整的運(yùn)行結(jié)果;</p><p>  5)撰寫課程設(shè)計(jì)說(shuō)明書。

14、</p><p><b>  3 邏輯設(shè)計(jì)</b></p><p>  (1)ADT Stack{</p><p>  數(shù)據(jù)對(duì)象:D={ai | ai ∈ElemSet,i=1,2,…,n, n≥0 }</p><p>  數(shù)據(jù)關(guān)系:R1={ < ai-1, ai >| ai -1, ai∈D,i=2,…,

15、n}</p><p><b>  基本操作:</b></p><p>  Inistack(&S)</p><p>  操作結(jié)果:構(gòu)造一個(gè)空棧S。</p><p>  stackEmpty(&S)</p><p>  初始條件:棧S已存在。</p><p>

16、  操作結(jié)果:判斷棧S是否為空,若為空,則返回1;否則返回0.</p><p>  push(&S,x) </p><p>  初始條件:棧S已存在。</p><p>  操作結(jié)果:插入元素x為新的棧頂元素。</p><p>  Pop(&S。&e) </p><p>  初始條件:棧S已存在

17、且非空。</p><p>  操作結(jié)果:刪除S的棧頂元素,并用y返回其值。</p><p>  }ADT Stack</p><p> ?。?)主函數(shù)流程圖如圖3.2所示</p><p>  圖3.1 創(chuàng)建主函數(shù)流程圖</p><p>  (3)十進(jìn)制轉(zhuǎn)換其他進(jìn)制數(shù)流程圖如圖3.3所示</p><p

18、>  圖3.2十進(jìn)制轉(zhuǎn)換其他進(jìn)制數(shù)算法流程圖</p><p>  (4)其他進(jìn)制數(shù)轉(zhuǎn)換十進(jìn)制數(shù)流程圖如圖3.4所示</p><p>  圖3.3倒序輸出算法流程圖</p><p><b>  4 詳細(xì)設(shè)計(jì)</b></p><p>  本程序主要有三個(gè)算法:</p><p>  一、十進(jìn)制整數(shù)

19、轉(zhuǎn)換其他進(jìn)制數(shù),其主要思路為:</p><p>  例如:11轉(zhuǎn)換成二進(jìn)制數(shù)</p><p>  11%2=1; 11/2=5;</p><p>  5%2=1; 5/2=2;</p><p>  2%2=0; 2/2=0;</p><p><b>  被除數(shù)不為0;</b><

20、;/p><p><b>  轉(zhuǎn)換結(jié)果為110;</b></p><p>  二、十進(jìn)制小數(shù)轉(zhuǎn)換其他進(jìn)制數(shù),其主要思路為:</p><p>  例如:0.125轉(zhuǎn)換成二進(jìn)制小數(shù)</p><p>  0.125*2=0.25;取結(jié)果的整數(shù)為0;</p><p>  0.25*2=0.5;取結(jié)果的整數(shù)為0;

21、</p><p>  0.5*2=1.0;取結(jié)果的整數(shù)為1;</p><p><b>  小數(shù)部分不為0;</b></p><p>  轉(zhuǎn)換結(jié)果為0.001;</p><p>  三、其他數(shù)制轉(zhuǎn)換十進(jìn)制數(shù),其主要思路為:</p><p>  例如:二進(jìn)制數(shù)10.1轉(zhuǎn)換成十進(jìn)制數(shù)</p>

22、<p><b>  1*=2;</b></p><p><b>  0*=1;</b></p><p><b>  1*=0.5;</b></p><p>  逆轉(zhuǎn)數(shù)字存儲(chǔ)在數(shù)組中,最后的結(jié)束符’\0’,為標(biāo)志。</p><p>  轉(zhuǎn)換結(jié)果為2+1+0.5=3.

23、5;</p><p><b>  5 程序編碼</b></p><p>  #include<stdio.h></p><p>  #include<math.h></p><p>  #include<stdlib.h></p><p>  #define S

24、TACK_INIT_SIZE 20</p><p>  #define STACKINCREMENT 10</p><p>  typedef int SElemType;</p><p>  typedef struct{</p><p>  SElemType *base,*top;</p><p>  int s

25、tacksize;</p><p><b>  }SqStack;</b></p><p>  int InitStack(SqStack &S){</p><p>  S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));</p><p> 

26、 if(!S.base)exit(0);</p><p>  S.top=S.base;</p><p>  S.stacksize=STACK_INIT_SIZE;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p&g

27、t;  int Push(SqStack &S,SElemType e){</p><p>  if(S.top-S.base>=S.stacksize){</p><p>  S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));</p><p

28、>  if(!S.base)exit(0);</p><p>  S.top=S.base+S.stacksize;</p><p>  S.stacksize+=STACKINCREMENT;</p><p><b>  }</b></p><p>  *S.top++=e;</p><p&g

29、t;<b>  return 1;</b></p><p><b>  }</b></p><p>  int Pop(SqStack &S,SElemType &e){</p><p>  if(S.top==S.base)return 0;</p><p>  e=*--S.to

30、p;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  int StackEmty(SqStack S){</p><p>  if(S.top==S.base)return 1;</p><p>  else

31、 return 0;</p><p><b>  }</b></p><p>  void XSZZ(double n,int T){</p><p><b>  int i=0;</b></p><p><b>  double a;</b></p><p

32、>  if(n==0.0)printf("00000");</p><p>  while(n!=0.0)</p><p><b>  {</b></p><p><b>  a=T*n;</b></p><p>  n=a-(int)a;</p><p

33、><b>  if(a>=10)</b></p><p><b>  {</b></p><p>  printf("%c",((int)a-10+'A'));</p><p><b>  i++;</b></p><p><

34、;b>  }</b></p><p><b>  else{ </b></p><p>  printf("%d",((int)a>0?(int)a:0));</p><p><b>  i++;</b></p><p><b>  }</

35、b></p><p>  if(i==5)break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  int NZ(){</b></p><p>  int i=0,j,T,k=0;&l

36、t;/p><p>  double sum=0;</p><p>  char a[20],X;</p><p>  getchar();</p><p>  printf("輸入轉(zhuǎn)換數(shù)");</p><p>  while((a[i]=getchar())!='\n'){</p&

37、gt;<p>  if((a[i]<='9'&&a[i]>='0')||(a[i]<='Z'&&a[i]>='A')||a[i]=='.');</p><p>  else {break;}</p><p>  if(a[i]=='.

38、')k=i;</p><p><b>  i++;}</b></p><p><b>  k=k?k:i;</b></p><p>  if(a[i]!='\n'){ </p><p>  while(getchar()!='\n');</p>

39、<p>  printf("輸入有誤");</p><p>  return 0;}</p><p>  a[i]='\0';</p><p>  a[k]='\0';</p><p>  printf("輸入轉(zhuǎn)換數(shù)的進(jìn)制");</p><p

40、>  scanf("%d%c",&T,&X);</p><p>  if((!(T>1&&T<36))||X!='\n'){</p><p>  while(getchar()!='\n');</p><p>  printf("輸入有誤");p

41、rintf("sdf %c",X);</p><p>  return 0;}</p><p>  for(j=0;j<k;j++)</p><p><b>  {</b></p><p>  if(((a[j]-'0'>=T)&&(a[j]<=

42、9;9'))||((a[j]-'A'+10>=T)&&(a[j]>'9')))</p><p><b>  {</b></p><p>  printf("輸入有誤!");return 1;</p><p><b>  }</b><

43、;/p><p>  if(a[j]>='A')</p><p>  sum+=((a[j]-'A'+10)*pow(T,k-j-1));</p><p><b>  else</b></p><p>  sum+=((a[j]-'0')*pow(T,k-j-1));<

44、;/p><p><b>  }</b></p><p>  for(j=k+1;j<i;j++)</p><p><b>  {</b></p><p>  if(((a[j]-'0'>=T)&&(a[j]<='9'))||((a[j]-

45、'A'+10>=T)&&(a[j]>'9')))</p><p><b>  {</b></p><p>  printf("輸入有誤!");return 1;</p><p><b>  }</b></p><p> 

46、 if(a[j]>='A')</p><p>  sum+=((a[j]-'A'+10)*pow(T,k-j));</p><p><b>  else</b></p><p>  sum+=((a[j]-'0')*pow(T,k-j));</p><p><b

47、>  }</b></p><p>  if(!(((a[j]-'0'>=T)&&(a[j]<='9'))||((a[j]-'A'+10>=T)&&(a[j]>'9'))))printf("結(jié)果為%f",sum);</p><p>&l

48、t;b>  return 1;</b></p><p><b>  }</b></p><p><b>  int ZZ(){</b></p><p>  int N,T,i=0,a;</p><p>  double Z,M;</p><p>  char

49、 X[10];</p><p>  SElemType e;</p><p>  SqStack S;</p><p>  InitStack(S);</p><p>  printf("輸入轉(zhuǎn)換數(shù):");</p><p>  scanf("%lf%c",&Z,&

50、X[0]);</p><p>  if(X[0]!='\n'){ while(X[i]!='\n'){</p><p><b>  i++;</b></p><p>  printf("輸入有誤!");return 1;}</p><p>  printf("

51、輸入轉(zhuǎn)換進(jìn)制:");</p><p>  scanf("%d%c",&T,&X[0]);</p><p>  if(T<36&&T>1&&X[0]=='\n')</p><p>  {printf("%c",X[0]);</p>

52、<p><b>  N=(int)Z;</b></p><p><b>  M=Z-N;</b></p><p><b>  while(N)</b></p><p><b>  {</b></p><p><b>  if(T>

53、;10)</b></p><p><b>  {</b></p><p><b>  a=N%T;</b></p><p><b>  if(a>=10)</b></p><p><b>  {</b></p><p&

54、gt;  a=a-10+'A';</p><p>  Push(S,a);</p><p><b>  }</b></p><p>  else Push(S,N%T);</p><p><b>  }</b></p><p>  else Push(S,N%

55、T);</p><p><b>  N=N/T;</b></p><p><b>  }</b></p><p>  printf("結(jié)果為:");</p><p>  if(StackEmty(S))printf("0");</p><p

56、>  while(!StackEmty(S))</p><p><b>  {</b></p><p><b>  Pop(S,e);</b></p><p>  if(e>=10) printf("%c",e);</p><p>  else printf(&quo

57、t;%d",e);</p><p><b>  }</b></p><p>  printf(".");</p><p>  XSZZ(M,T);</p><p><b>  }</b></p><p><b>  else</b

58、></p><p>  {printf("輸入有誤\n");i=0;</p><p>  while(X[i]!='\n'){</p><p><b>  i++;</b></p><p>  scanf("%c",&X[i]);}</p>

59、<p><b>  }}</b></p><p><b>  main()</b></p><p><b>  {</b></p><p>  int choice;</p><p><b>  char X;</b></p>

60、<p>  do{printf("Press1:十進(jìn)制轉(zhuǎn)換其他進(jìn)制數(shù)\nPress2:其他進(jìn)制數(shù)轉(zhuǎn)換十進(jìn)制數(shù)\n");</p><p>  scanf("%d",&choice);</p><p>  switch(choice){</p><p>  case 1: ZZ();break;</p>

61、;<p>  case 2:NZ();break;</p><p>  default:printf("輸入有誤!");</p><p><b>  }</b></p><p>  printf("\n continue ? y/n\n");</p><p>  sc

62、anf("\t%c",&X);</p><p>  while(X!='n'&&X!='y'){</p><p>  printf("輸入有誤!\n請(qǐng)重新輸入:");</p><p>  scanf("\t%c",&X);</p>

63、<p><b>  }</b></p><p>  }while(X=='y');</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  6 程序調(diào)試與測(cè)試</b&

64、gt;</p><p>  (1)輸入十進(jìn)制14.25轉(zhuǎn)換成十六進(jìn)制數(shù)為E.4.</p><p>  圖6.1十進(jìn)制轉(zhuǎn)換其他進(jìn)制數(shù)運(yùn)行圖</p><p>  (2)輸入二進(jìn)制1.1轉(zhuǎn)換為十進(jìn)制1.5</p><p>  圖6.2其他進(jìn)制轉(zhuǎn)換十進(jìn)制數(shù)運(yùn)行圖</p><p> ?。?)輸入數(shù)字字符混合體(非法字符)程序返回

65、錯(cuò)誤提示</p><p>  圖6.3程序健壯性測(cè)試</p><p> ?。?)程序調(diào)試過(guò)程修改:在不同進(jìn)制數(shù)的互轉(zhuǎn)換過(guò)程中小數(shù)部分尤為不好處理,例如:三進(jìn)制數(shù)2.1整數(shù)部分2無(wú)需轉(zhuǎn)換,小數(shù)0.1轉(zhuǎn)換結(jié)果為1/3純循環(huán)小數(shù)。</p><p>  七進(jìn)制數(shù)6.3、3.1、2.135,這些小數(shù)部分根本無(wú)法轉(zhuǎn)換成十進(jìn)制整數(shù),這里不一一贅述,故設(shè)定轉(zhuǎn)換結(jié)果保留五位小數(shù)。&l

66、t;/p><p><b>  7 結(jié)果分析</b></p><p>  在設(shè)計(jì)的過(guò)程中遇到了許多問(wèn)題,并最終得到解決,其分析過(guò)程如下:</p><p> ?。?)考慮到本程序轉(zhuǎn)換的數(shù)字對(duì)象并不是天文數(shù)字,棧操作定義中,初始化??臻g為20(存儲(chǔ)20位數(shù)字),但也可能出現(xiàn)空間不足。解決的辦法是當(dāng)空間不足時(shí)自動(dòng)進(jìn)行擴(kuò)充。</p><p

67、> ?。?)程序的健壯性問(wèn)題。數(shù)據(jù)通過(guò)一定的形式讀入地。當(dāng)輸入格式有誤時(shí)就程序無(wú)法計(jì)算時(shí),返回輸入錯(cuò)誤重新輸入。</p><p>  (3)程序的循環(huán)操作問(wèn)題。當(dāng)輸入有誤時(shí)必須把輸入的錯(cuò)誤字符讀入,再進(jìn)行下次操作。</p><p>  時(shí)間復(fù)雜度T(n)=O(n);</p><p>  空間復(fù)雜度S(n)=O(n);</p><p>&

68、lt;b>  8 總結(jié)</b></p><p>  本程序?qū)崿F(xiàn)了數(shù)制轉(zhuǎn)換及其逆轉(zhuǎn)換功能,具有強(qiáng)大的健壯性和容錯(cuò)能力。順序棧只參與其中的十進(jìn)制整數(shù)轉(zhuǎn)換部分,小數(shù)轉(zhuǎn)換部分的算法與整數(shù)部分不同所以另成函數(shù)體。逆轉(zhuǎn)換借助數(shù)組讀入數(shù)位進(jìn)行轉(zhuǎn)換,其整數(shù)和小數(shù)部分算法相同故屬一個(gè)函數(shù)。程序改進(jìn)最多的要屬健壯性部分,為此加入了好多讀取非法輸入部分。在整整兩個(gè)星期的日子里,可以學(xué)到很多很多的的東西,尤其是漫長(zhǎng)的改

69、錯(cuò)部分!不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書本上所沒(méi)有學(xué)到過(guò)的知識(shí)。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].北京:清華大學(xué)出版社,2002</p><p>  [2] 譚浩強(qiáng).C程序設(shè)計(jì)[M]. 北京:清華大學(xué)出版社,2005</p>&

70、lt;p>  [3] 李建忠.大學(xué)計(jì)算機(jī)基礎(chǔ)[M].西安:西北大學(xué)出版社,2005</p><p>  [4] 何欽銘,顏暉. C語(yǔ)言程序設(shè)計(jì)[M].北京:高等教育出版社,2008 </p><p>  [5] 謝俊屏. 大學(xué)計(jì)算機(jī)基礎(chǔ)實(shí)驗(yàn)教程[M]. 西安:西北大學(xué)出版社,2005 </p><p><b>  附代碼:</b><

71、/p><p>  #include<stdio.h></p><p>  #include<math.h></p><p>  #include<stdlib.h></p><p>  #define STACK_INIT_SIZE 100</p><p>  #define STACK

72、INCREMENT 10</p><p>  typedef int SElemType;</p><p>  typedef struct{</p><p>  SElemType *base,*top;</p><p>  int stacksize;</p><p><b>  }SqStack;<

73、;/b></p><p>  int InitStack(SqStack &S){</p><p>  S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));</p><p>  if(!S.base)exit(0);</p><p>  S.top=S.ba

74、se;</p><p>  S.stacksize=STACK_INIT_SIZE;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  int Push(SqStack &S,SElemType e){</p>

75、<p>  if(S.top-S.base>=S.stacksize){</p><p>  S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));</p><p>  if(!S.base)exit(0);</p><p>  S.top

76、=S.base+S.stacksize;</p><p>  S.stacksize+=STACKINCREMENT;</p><p><b>  }</b></p><p>  *S.top++=e;</p><p><b>  return 1;</b></p><p>

77、<b>  }</b></p><p>  int Pop(SqStack &S,SElemType &e){</p><p>  if(S.top==S.base)return 0;</p><p>  e=*--S.top;</p><p><b>  return 1;</b>

78、</p><p><b>  }</b></p><p>  int StackEmty(SqStack S){</p><p>  if(S.top==S.base)return 1;</p><p>  else return 0;</p><p><b>  }</b>

79、</p><p>  void XSZZ(double n,int T){</p><p><b>  int i=0;</b></p><p><b>  double a;</b></p><p>  if(n==0.0)printf("00000");</p>

80、<p>  while(n!=0.0)</p><p><b>  {</b></p><p><b>  a=T*n;</b></p><p>  n=a-(int)a;</p><p><b>  if(a>=10)</b></p><

81、p><b>  {</b></p><p>  printf("%c",((int)a-10+'A'));</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  el

82、se{ </b></p><p>  printf("%d",((int)a>0?(int)a:0));</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  if(i==5)break;</p>

83、<p><b>  }</b></p><p><b>  }</b></p><p><b>  int NZ(){</b></p><p>  int i=0,j,T,k=0;</p><p>  double sum=0;</p><p&g

84、t;  char a[20],X;</p><p>  getchar();</p><p>  printf("輸入轉(zhuǎn)換數(shù)");</p><p>  while((a[i]=getchar())!='\n'){</p><p>  if((a[i]<='9'&&a[i

85、]>='0')||(a[i]<='Z'&&a[i]>='A')||a[i]=='.');</p><p>  else {break;}</p><p>  if(a[i]=='.')k=i;</p><p><b>  i++;}</b

86、></p><p><b>  k=k?k:i;</b></p><p>  if(a[i]!='\n'){ </p><p>  while(getchar()!='\n');</p><p>  printf("輸入有誤");</p><p

87、>  return 0;}</p><p>  a[i]='\0';</p><p>  a[k]='\0';</p><p>  printf("輸入轉(zhuǎn)換數(shù)的進(jìn)制");</p><p>  scanf("%d%c",&T,&X);</p>

88、;<p>  if((!(T>1&&T<36))||X!='\n'){</p><p>  while(getchar()!='\n');</p><p>  printf("輸入有誤");printf("sdf %c",X);</p><p>  re

89、turn 0;}</p><p>  for(j=0;j<k;j++)</p><p><b>  {</b></p><p>  if(((a[j]-'0'>=T)&&(a[j]<='9'))||((a[j]-'A'+10>=T)&&(a[

90、j]>'9')))</p><p><b>  {</b></p><p>  printf("輸入有誤!");return 1;</p><p><b>  }</b></p><p>  if(a[j]>='A')</p>

91、;<p>  sum+=((a[j]-'A'+10)*pow(T,k-j-1));</p><p><b>  else</b></p><p>  sum+=((a[j]-'0')*pow(T,k-j-1));</p><p><b>  }</b></p>&

92、lt;p>  for(j=k+1;j<i;j++)</p><p><b>  {</b></p><p>  if(((a[j]-'0'>=T)&&(a[j]<='9'))||((a[j]-'A'+10>=T)&&(a[j]>'9'))

93、)</p><p><b>  {</b></p><p>  printf("輸入有誤!");return 1;</p><p><b>  }</b></p><p>  if(a[j]>='A')</p><p>  sum+=

94、((a[j]-'A'+10)*pow(T,k-j));</p><p><b>  else</b></p><p>  sum+=((a[j]-'0')*pow(T,k-j));</p><p><b>  }</b></p><p>  if(!(((a[j]-&

95、#39;0'>=T)&&(a[j]<='9'))||((a[j]-'A'+10>=T)&&(a[j]>'9'))))printf("結(jié)果為%f",sum);</p><p><b>  return 1;</b></p><p><

96、b>  }</b></p><p><b>  int ZZ(){</b></p><p>  int N,T,i=0,a;</p><p>  double Z,M;</p><p>  char X[10];</p><p>  SElemType e;</p>

97、<p>  SqStack S;</p><p>  InitStack(S);</p><p>  printf("輸入轉(zhuǎn)換數(shù):");</p><p>  scanf("%lf%c",&Z,&X[0]);</p><p>  if(X[0]!='\n'){p

98、rintf("輸入有誤!");while(X[i]!='\n'){</p><p><b>  i++;</b></p><p>  scanf("%c",&X[i]);}return 1;}</p><p>  printf("輸入轉(zhuǎn)換進(jìn)制:");</p

99、><p>  scanf("%d%c",&T,&X[0]);</p><p>  if(T<36&&T>1&&X[0]=='\n')</p><p>  {printf("%c",X[0]);</p><p><b>  

100、N=(int)Z;</b></p><p><b>  M=Z-N;</b></p><p><b>  while(N)</b></p><p><b>  {</b></p><p><b>  if(T>10)</b></p&

101、gt;<p><b>  {</b></p><p><b>  a=N%T;</b></p><p><b>  if(a>=10)</b></p><p><b>  {</b></p><p>  a=a-10+'A

102、9;;</p><p>  Push(S,a);</p><p><b>  }</b></p><p>  else Push(S,N%T);</p><p><b>  }</b></p><p>  else Push(S,N%T);</p><p&

103、gt;<b>  N=N/T;</b></p><p><b>  }</b></p><p>  printf("結(jié)果為:");</p><p>  if(StackEmty(S))printf("0");</p><p>  while(!StackEmt

104、y(S))</p><p><b>  {</b></p><p><b>  Pop(S,e);</b></p><p>  if(e>=10) printf("%c",e);</p><p>  else printf("%d",e);</p&

105、gt;<p><b>  }</b></p><p>  printf(".");</p><p>  XSZZ(M,T);</p><p><b>  }</b></p><p><b>  else</b></p><p

106、>  {printf("輸入有誤\n");i=0;</p><p>  while(X[i]!='\n'){</p><p><b>  i++;</b></p><p>  scanf("%c",&X[i]);}</p><p><b> 

107、 }}</b></p><p><b>  main()</b></p><p><b>  {</b></p><p>  int choice;</p><p><b>  char X;</b></p><p>  do{printf(

108、"Press1:十進(jìn)制轉(zhuǎn)換其他進(jìn)制數(shù)\nPress2:其他進(jìn)制數(shù)轉(zhuǎn)換十進(jìn)制數(shù)\n");</p><p>  scanf("%d",&choice);</p><p>  switch(choice){</p><p>  case 1: ZZ();break;</p><p>  case 2:

109、NZ();break;</p><p>  default:printf("輸入有誤!");</p><p><b>  }</b></p><p>  printf("\n continue ? y/n\n");</p><p>  scanf("\t%c",

110、&X);</p><p>  while(X!='n'&&X!='y'){</p><p>  printf("輸入有誤!\n請(qǐng)重新輸入:");</p><p>  scanf("\t%c",&X);</p><p><b>  

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論