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

下載本文檔

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

文檔簡介

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

2、 學(xué)號: sadofaiofo 姓名: </p><p>  課程設(shè)計名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 </p><p>  設(shè)計題目: 進(jìn)制轉(zhuǎn)換的實現(xiàn)

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

4、如:十六進(jìn)制數(shù)4AC8可寫成(4AC8)16,或?qū)懗?AC8H。</p><p><b>  要求: </b></p><p> ?。?)輸入一個十進(jìn)制數(shù)N,將它轉(zhuǎn)換成R進(jìn)制數(shù)輸出,并可以進(jìn)行逆轉(zhuǎn)換。</p><p> ?。?)輸入數(shù)據(jù)包含多個測試實例,每個測試實例包含兩個整數(shù)N(32位整數(shù))和R(2<=R<=16, R<

5、>10)。</p><p> ?。?)為每個測試實例輸出轉(zhuǎn)換后的數(shù),每個輸出占一行。如果R大于10,則對應(yīng)的數(shù)字規(guī)則參考16進(jìn)制(比如,10用A表示,等等)。</p><p><b> ?。?)界面友好。</b></p><p>  指導(dǎo)教師(簽字): 教研室主任(簽字):

6、 </p><p>  批準(zhǔn)日期: 年 月 日</p><p><b>  摘 要</b></p><p>  由于數(shù)制計算和不同數(shù)制之間轉(zhuǎn)換的需要,設(shè)計了一個10進(jìn)制轉(zhuǎn)換其它進(jìn)制(36進(jìn)制以內(nèi))及逆轉(zhuǎn)換的軟件,該軟件具有簡單的將10進(jìn)制數(shù)轉(zhuǎn)換成2、8、16進(jìn)制數(shù)以及較復(fù)雜的高進(jìn)制數(shù)的轉(zhuǎn)換和逆轉(zhuǎn)功能。本軟件

7、采用C語言編寫以VC++作為軟件開發(fā)環(huán)境,采用順序棧存儲方式來存儲運(yùn)算中的數(shù)位,借助棧后進(jìn)先出的特點(diǎn),易于結(jié)果輸出。操作簡單,界面清晰,易于為用戶所接受。</p><p>  關(guān)鍵詞:進(jìn)制轉(zhuǎn)換;順序棧;逆轉(zhuǎn)換</p><p><b>  目 錄</b></p><p><b>  1 課題描述1</b></

8、p><p>  2 問題分析和任務(wù)定義2</p><p><b>  4 詳細(xì)設(shè)計7</b></p><p><b>  5 程序編碼8</b></p><p>  6 程序調(diào)試與測試13</p><p><b>  7 結(jié)果分析15</b><

9、;/p><p><b>  8 總結(jié)16</b></p><p><b>  參考文獻(xiàn)17</b></p><p><b>  1 課題描述</b></p><p>  數(shù)制有很多種,在計算機(jī)中常用的數(shù)制有:十進(jìn)制,二進(jìn)制、八進(jìn)制和十六進(jìn)制。十六進(jìn)制數(shù)有兩個基本特點(diǎn):它由十六個

10、字符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。更大一些的數(shù)制則擴(kuò)展十六進(jìn)制未用的其他大寫字母。</p><p>  順序棧是順序存儲結(jié)構(gòu)的棧,是利用一組地址連續(xù)的存儲單元依次存放自棧底到棧頂?shù)臄?shù)據(jù)元素。同時附設(shè)棧頂指針top和?;羔榖ase,來方便棧內(nèi)數(shù)據(jù)元素的存取和棧的擴(kuò)充。</

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

12、gt;  例如:11轉(zhuǎn)換成二進(jìn)制數(shù)</p><p>  11%2=1; 11/2=5;1入棧;</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>  按

13、順序出棧,得到結(jié)果為110;</p><p><b>  任務(wù)定義:</b></p><p><b>  1)畫出流程圖;</b></p><p>  2)任意建立一個容量為20個棧元素的空棧;</p><p>  3)將十進(jìn)制數(shù)與要轉(zhuǎn)進(jìn)制先求余,將余數(shù)順序入棧;</p><p&

14、gt;  4)闡明測試方法,寫出完整的運(yùn)行結(jié)果;</p><p>  5)撰寫課程設(shè)計說明書。</p><p><b>  3 邏輯設(shè)計</b></p><p>  (1)ADT Stack{</p><p>  數(shù)據(jù)對象:D={ai | ai ∈ElemSet,i=1,2,…,n, n≥0 }</p>

15、<p>  數(shù)據(jù)關(guān)系:R1={ < ai-1, ai >| ai -1, ai∈D,i=2,…,n}</p><p><b>  基本操作:</b></p><p>  Inistack(&S)</p><p>  操作結(jié)果:構(gòu)造一個空棧S。</p><p>  stackEmpty(&am

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

17、>  Pop(&S。&e) </p><p>  初始條件:棧S已存在且非空。</p><p>  操作結(jié)果:刪除S的棧頂元素,并用y返回其值。</p><p>  }ADT Stack</p><p> ?。?)主函數(shù)流程圖如圖3.2所示</p><p>  圖3.1 創(chuàng)建主函數(shù)流程圖<

18、/p><p> ?。?)十進(jìn)制轉(zhuǎn)換其他進(jìn)制數(shù)流程圖如圖3.3所示</p><p>  圖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è)計</b></

19、p><p>  本程序主要有三個算法:</p><p>  一、十進(jìn)制整數(shù)轉(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;

20、 2/2=0;</p><p><b>  被除數(shù)不為0;</b></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*

21、2=0.25;取結(jié)果的整數(shù)為0;</p><p>  0.25*2=0.5;取結(jié)果的整數(shù)為0;</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ù)

22、,其主要思路為:</p><p>  例如:二進(jìn)制數(shù)10.1轉(zhuǎn)換成十進(jìn)制數(shù)</p><p><b>  1*=2;</b></p><p><b>  0*=1;</b></p><p><b>  1*=0.5;</b></p><p>  逆轉(zhuǎn)數(shù)字存

23、儲在數(shù)組中,最后的結(jié)束符’\0’,為標(biāo)志。</p><p>  轉(zhuǎn)換結(jié)果為2+1+0.5=3.5;</p><p><b>  5 程序編碼</b></p><p>  #include<stdio.h></p><p>  #include<math.h></p><p>

24、;  #include<stdlib.h></p><p>  #define STACK_INIT_SIZE 20</p><p>  #define STACKINCREMENT 10</p><p>  typedef int SElemType;</p><p>  typedef struct{</p>&

25、lt;p>  SElemType *base,*top;</p><p>  int stacksize;</p><p><b>  }SqStack;</b></p><p>  int InitStack(SqStack &S){</p><p>  S.base=(SElemType *)mallo

26、c(STACK_INIT_SIZE*sizeof(SElemType));</p><p>  if(!S.base)exit(0);</p><p>  S.top=S.base;</p><p>  S.stacksize=STACK_INIT_SIZE;</p><p><b>  return 1;</b><

27、;/p><p><b>  }</b></p><p>  int Push(SqStack &S,SElemType e){</p><p>  if(S.top-S.base>=S.stacksize){</p><p>  S.base=(SElemType *)realloc(S.base,(S.sta

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

29、/b></p><p>  *S.top++=e;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  int Pop(SqStack &S,SElemType &e){</p><p> 

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

31、>  if(S.top==S.base)return 1;</p><p>  else return 0;</p><p><b>  }</b></p><p>  void XSZZ(double n,int T){</p><p><b>  int i=0;</b></p>

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

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

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

35、b>  i++;</b></p><p><b>  }</b></p><p>  if(i==5)break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  i

36、nt NZ(){</b></p><p>  int i=0,j,T,k=0;</p><p>  double sum=0;</p><p>  char a[20],X;</p><p>  getchar();</p><p>  printf("輸入轉(zhuǎn)換數(shù)");</p>

37、;<p>  while((a[i]=getchar())!='\n'){</p><p>  if((a[i]<='9'&&a[i]>='0')||(a[i]<='Z'&&a[i]>='A')||a[i]=='.');</p><

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

39、gt;<p>  while(getchar()!='\n');</p><p>  printf("輸入有誤");</p><p>  return 0;}</p><p>  a[i]='\0';</p><p>  a[k]='\0';</p>

40、<p>  printf("輸入轉(zhuǎn)換數(shù)的進(jìn)制");</p><p>  scanf("%d%c",&T,&X);</p><p>  if((!(T>1&&T<36))||X!='\n'){</p><p>  while(getchar()!='

41、;\n');</p><p>  printf("輸入有誤");printf("sdf %c",X);</p><p>  return 0;}</p><p>  for(j=0;j<k;j++)</p><p><b>  {</b></p><

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

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

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

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

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

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

48、9;))))printf("結(jié)果為%f",sum);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  int ZZ(){</b></p><p>  int N,T,i=0,a;&l

49、t;/p><p>  double Z,M;</p><p>  char X[10];</p><p>  SElemType e;</p><p>  SqStack S;</p><p>  InitStack(S);</p><p>  printf("輸入轉(zhuǎn)換數(shù):");

50、</p><p>  scanf("%lf%c",&Z,&X[0]);</p><p>  if(X[0]!='\n'){ while(X[i]!='\n'){</p><p><b>  i++;</b></p><p>  printf("

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

52、/p><p>  {printf("%c",X[0]);</p><p><b>  N=(int)Z;</b></p><p><b>  M=Z-N;</b></p><p><b>  while(N)</b></p><p>&l

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

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

55、<b>  }</b></p><p>  else Push(S,N%T);</p><p><b>  N=N/T;</b></p><p><b>  }</b></p><p>  printf("結(jié)果為:");</p><p&g

56、t;  if(StackEmty(S))printf("0");</p><p>  while(!StackEmty(S))</p><p><b>  {</b></p><p><b>  Pop(S,e);</b></p><p>  if(e>=10) print

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

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

59、gt;<p>  scanf("%c",&X[i]);}</p><p><b>  }}</b></p><p><b>  main()</b></p><p><b>  {</b></p><p>  int choice;&l

60、t;/p><p><b>  char X;</b></p><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(

61、choice){</p><p>  case 1: ZZ();break;</p><p>  case 2:NZ();break;</p><p>  default:printf("輸入有誤!");</p><p><b>  }</b></p><p>  printf

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

63、><p>  scanf("\t%c",&X);</p><p><b>  }</b></p><p>  }while(X=='y');</p><p><b>  return 0;</b></p><p><b>  

64、}</b></p><p><b>  6 程序調(diào)試與測試</b></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.

65、2其他進(jìn)制轉(zhuǎn)換十進(jìn)制數(shù)運(yùn)行圖</p><p> ?。?)輸入數(shù)字字符混合體(非法字符)程序返回錯誤提示</p><p>  圖6.3程序健壯性測試</p><p> ?。?)程序調(diào)試過程修改:在不同進(jìn)制數(shù)的互轉(zhuǎn)換過程中小數(shù)部分尤為不好處理,例如:三進(jìn)制數(shù)2.1整數(shù)部分2無需轉(zhuǎn)換,小數(shù)0.1轉(zhuǎn)換結(jié)果為1/3純循環(huán)小數(shù)。</p><p>  七進(jìn)

66、制數(shù)6.3、3.1、2.135,這些小數(shù)部分根本無法轉(zhuǎn)換成十進(jìn)制整數(shù),這里不一一贅述,故設(shè)定轉(zhuǎn)換結(jié)果保留五位小數(shù)。</p><p><b>  7 結(jié)果分析</b></p><p>  在設(shè)計的過程中遇到了許多問題,并最終得到解決,其分析過程如下:</p><p> ?。?)考慮到本程序轉(zhuǎn)換的數(shù)字對象并不是天文數(shù)字,棧操作定義中,初始化??臻g為

67、20(存儲20位數(shù)字),但也可能出現(xiàn)空間不足。解決的辦法是當(dāng)空間不足時自動進(jìn)行擴(kuò)充。</p><p> ?。?)程序的健壯性問題。數(shù)據(jù)通過一定的形式讀入地。當(dāng)輸入格式有誤時就程序無法計算時,返回輸入錯誤重新輸入。</p><p>  (3)程序的循環(huán)操作問題。當(dāng)輸入有誤時必須把輸入的錯誤字符讀入,再進(jìn)行下次操作。</p><p>  時間復(fù)雜度T(n)=O(n);&

68、lt;/p><p>  空間復(fù)雜度S(n)=O(n);</p><p><b>  8 總結(jié)</b></p><p>  本程序?qū)崿F(xiàn)了數(shù)制轉(zhuǎn)換及其逆轉(zhuǎn)換功能,具有強(qiáng)大的健壯性和容錯能力。順序棧只參與其中的十進(jìn)制整數(shù)轉(zhuǎn)換部分,小數(shù)轉(zhuǎn)換部分的算法與整數(shù)部分不同所以另成函數(shù)體。逆轉(zhuǎn)換借助數(shù)組讀入數(shù)位進(jìn)行轉(zhuǎn)換,其整數(shù)和小數(shù)部分算法相同故屬一個函數(shù)。程序改進(jìn)

69、最多的要屬健壯性部分,為此加入了好多讀取非法輸入部分。在整整兩個星期的日子里,可以學(xué)到很多很多的東西,尤其是漫長的改錯部分!不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2002</p>

70、<p>  [2] 譚浩強(qiáng).C程序設(shè)計[M]. 北京:清華大學(xué)出版社,2005</p><p>  [3] 李建忠.大學(xué)計算機(jī)基礎(chǔ)[M].西安:西北大學(xué)出版社,2005</p><p>  [4] 何欽銘,顏暉. C語言程序設(shè)計[M].北京:高等教育出版社,2008 </p><p>  [5] 謝俊屏. 大學(xué)計算機(jī)基礎(chǔ)實驗教程[M]. 西安:西北大學(xué)出

71、版社,2005 </p><p><b>  附代碼:</b></p><p>  #include<stdio.h></p><p>  #include<math.h></p><p>  #include<stdlib.h></p><p>  #defi

72、ne STACK_INIT_SIZE 100</p><p>  #define STACKINCREMENT 10</p><p>  typedef int SElemType;</p><p>  typedef struct{</p><p>  SElemType *base,*top;</p><p>  

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

74、>  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>&l

75、t;p>  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>

76、<p>  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>&l

77、t;p><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=*-

78、-S.top;</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> 

79、 else 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>

80、<p>  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>

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

82、t;<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>  }

83、</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

84、=0;</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'){&l

85、t;/p><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]==&

86、#39;.')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&

87、gt;<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>

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

89、t;);printf("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]<

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

91、t;</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)

92、);</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'))||((

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

94、>  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>

95、<b>  }</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&

96、gt;<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> 

97、 char 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,

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

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

100、intf("%c",X[0]);</p><p><b>  N=(int)Z;</b></p><p><b>  M=Z-N;</b></p><p><b>  while(N)</b></p><p><b>  {</b>&l

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

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

103、</p><p>  else Push(S,N%T);</p><p><b>  N=N/T;</b></p><p><b>  }</b></p><p>  printf("結(jié)果為:");</p><p>  if(StackEmty(S))pr

104、intf("0");</p><p>  while(!StackEmty(S))</p><p><b>  {</b></p><p><b>  Pop(S,e);</b></p><p>  if(e>=10) printf("%c",e);&l

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

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

107、"%c",&X[i]);}</p><p><b>  }}</b></p><p><b>  main()</b></p><p><b>  {</b></p><p>  int choice;</p><p><

108、;b>  char X;</b></p><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>&l

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

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

111、("\t%c",&X);</p><p><b>  }</b></p><p>  }while(X=='y');</p><p><b>  return 0;</b></p><p><b>  }</b></p>

溫馨提示

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

最新文檔

評論

0/150

提交評論