哈夫曼碼編譯碼系統(tǒng);遞歸替換問(wèn)題;跳馬問(wèn)題;長(zhǎng)整數(shù)運(yùn)算問(wèn)題;數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),課程設(shè)計(jì)_第1頁(yè)
哈夫曼碼編譯碼系統(tǒng);遞歸替換問(wèn)題;跳馬問(wèn)題;長(zhǎng)整數(shù)運(yùn)算問(wèn)題;數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),課程設(shè)計(jì)_第2頁(yè)
哈夫曼碼編譯碼系統(tǒng);遞歸替換問(wèn)題;跳馬問(wèn)題;長(zhǎng)整數(shù)運(yùn)算問(wèn)題;數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),課程設(shè)計(jì)_第3頁(yè)
哈夫曼碼編譯碼系統(tǒng);遞歸替換問(wèn)題;跳馬問(wèn)題;長(zhǎng)整數(shù)運(yùn)算問(wèn)題;數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),課程設(shè)計(jì)_第4頁(yè)
已閱讀5頁(yè),還剩35頁(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、* 大學(xué)*(*學(xué)院數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)題目:哈夫曼碼的編 /譯碼系統(tǒng) ; 遞歸替換問(wèn)題 ;跳馬問(wèn)題 ; 長(zhǎng)整數(shù)運(yùn)算問(wèn)題專業(yè)班級(jí):*姓名:*學(xué)號(hào):*指導(dǎo)教師:%成績(jī):_目錄摘要4一哈夫曼碼的編 /譯碼系統(tǒng)51.采用類語(yǔ)言定義相關(guān)的數(shù)據(jù)類型52.算法設(shè)計(jì)53.函數(shù)的調(diào)用關(guān)系圖84.調(diào)試分析85.測(cè)試結(jié)果96.源程序(帶注釋)10二遞歸替換問(wèn)題121.采用類語(yǔ)言定義相關(guān)的數(shù)據(jù)類型122.算法設(shè)計(jì)133.函數(shù)的調(diào)用關(guān)系圖144.調(diào)試分析145.測(cè)試結(jié)果156.源程序(帶注釋)15三跳馬問(wèn)題161.采用類語(yǔ)言定義相關(guān)的數(shù)據(jù)類型172.算法設(shè)計(jì)183函數(shù)的調(diào)用關(guān)系圖184.調(diào)試分析185.測(cè)試結(jié)果196

2、.源程序(帶注釋)19四長(zhǎng)整數(shù)運(yùn)算問(wèn)題221.采用類語(yǔ)言定義相關(guān)的數(shù)據(jù)類型222.算法設(shè)計(jì)243函數(shù)的調(diào)用關(guān)系圖264.調(diào)試分析265.測(cè)試結(jié)果276.源程序(帶注釋)28總結(jié)37參考文獻(xiàn)37致謝37摘要本程序主要解決的是哈夫曼碼的編 / 譯碼系統(tǒng),跳馬問(wèn)題,遞歸替換問(wèn)題和長(zhǎng)整數(shù)運(yùn)算問(wèn)題。采用哈夫曼算法的設(shè)計(jì)思想。根據(jù)給定的權(quán)值構(gòu)成二叉樹森林,在森林中任意選取兩棵根結(jié)點(diǎn)權(quán)值最小的樹,將這兩棵樹合并為新的樹,為保證新樹仍為二叉樹,需要增加一個(gè)新的結(jié)點(diǎn)作為根將這兩個(gè)孩子的權(quán)值之和作為新樹根的權(quán)值。跳馬問(wèn)題是在 64 個(gè)國(guó)際象棋格子 ,任意位置放一個(gè)馬 ,如何不重復(fù)地把格子走完。遞歸替換問(wèn)題,編寫程

3、序,擴(kuò)展 C/C+源文件中的 #include 指令(以遞歸的方式)。請(qǐng)以文件名的內(nèi)容替換形如下面的代碼行。 #include “ filename ” 長(zhǎng)整數(shù)的四則運(yùn)算實(shí)現(xiàn)兩個(gè)任意長(zhǎng)的整數(shù)的加、減、乘運(yùn)算,由于要實(shí)現(xiàn)任意長(zhǎng)整數(shù),就需要運(yùn)用到相應(yīng)的雙向線性鏈表,以實(shí)現(xiàn)整數(shù)的任意長(zhǎng)的加、減、乘運(yùn)算。長(zhǎng)整數(shù)運(yùn)算實(shí)現(xiàn)計(jì)算任意長(zhǎng)的整數(shù)的加、減、乘運(yùn)算,先輸入長(zhǎng)整數(shù)的最多位數(shù),然后輸入要運(yùn)算的長(zhǎng)整數(shù),進(jìn)行加減運(yùn)算并顯示出這兩個(gè)數(shù)的運(yùn)算。利用雙向循環(huán)鏈表實(shí)現(xiàn)長(zhǎng)整數(shù)的存儲(chǔ), 每個(gè)結(jié)點(diǎn)含一個(gè)整形變量。 程序使用 Visual C+ 6.0 工具開發(fā)關(guān)鍵詞 :哈夫曼碼的編 /譯碼系統(tǒng),排序、遞歸算法、數(shù)組數(shù)據(jù)結(jié)

4、構(gòu)、鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)、整數(shù)運(yùn)算。4一、哈夫曼碼的編/譯碼系統(tǒng)編寫一個(gè)哈夫曼碼的編 /譯碼系統(tǒng),實(shí)現(xiàn)對(duì)輸入的文本信息自動(dòng)統(tǒng)計(jì)并依此為依據(jù)建立一個(gè)哈夫曼碼的編 /譯碼系統(tǒng)。1、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)可用結(jié)構(gòu)體 , 節(jié)點(diǎn)結(jié)構(gòu)體包括字符的名稱、字符權(quán)值、左右孩子標(biāo)志、對(duì)應(yīng)字符的前綴碼、左孩子指針、右孩子指針、雙親指針。題目要求全程信息用文件保存,應(yīng)寫入文件中,提供文件的輸入輸出等操作;在過(guò)程中需有字符及權(quán)值錄入、字符前綴碼生成、文段編碼、文段譯碼,故應(yīng)分別建立功能模塊;另外還應(yīng)提供鍵盤式選擇菜單實(shí)現(xiàn)程序運(yùn)行。2、算法設(shè)計(jì)利用樹的思想創(chuàng)建最優(yōu)二叉樹然后得到對(duì)應(yīng)字符的前綴碼Bnode *creat_Btree(

5、int k,Bnode zMAX,int n,Bnode *head20)Bnode *a,*b,*c;int i=0,j;a=b=c=(Bnode *)malloc(sizeof(Bnode);k-;/k相當(dāng)于循環(huán)控制變量,這里-1 是循環(huán)的需要while(k>1)a=search_min(z,n,k);a->flag='3'/修改標(biāo)志,說(shuō)明該節(jié)點(diǎn)已被選擇b=search_min(z,n,k);c->weight=a->weight+b->weight;5a->parent=c;/指針移動(dòng),節(jié)點(diǎn)關(guān)系確立b->parent=c;c-&g

6、t;lchild=a;c->rchild=b;a->flag='0'b->flag='1'c->flag='2'n+;/z中元素個(gè)數(shù)加一zn=*c;k-;/根節(jié)點(diǎn)個(gè)數(shù)增減一個(gè)( a,b 變成孩子節(jié)點(diǎn), c 成為新的根節(jié)點(diǎn))if(k=1)for(i=0;i<=n;i+)if(zi.flag='2')return (&zi);63、調(diào)試分析1 前綴碼圖 3.12 HAFFMAN編碼圖 3.24、執(zhí)行結(jié)果圖 3.375、源程序 (帶注釋)# include <stdio.h># incl

7、ude <stdlib.h># include <windows.h># define MAX 100typedef structint weight;/ 節(jié)點(diǎn)的權(quán)值char name;/節(jié)點(diǎn)的字符char flag;/ 標(biāo)志,左孩子0,右孩子1,根 2char encodMAX;/ 編碼存儲(chǔ)數(shù)組struct Bnode *lchild;/左孩子struct Bnode *rchild;/ 右孩子struct Bnode *parent;/ 雙親Bnode;Bnode *creat_Btree(int k,Bnode zMAX,int n,Bnode *head20)B

8、node *a,*b,*c;int i=0,j;a=b=c=(Bnode *)malloc(sizeof(Bnode);k-;/k 相當(dāng)于循環(huán)控制變量,這里-1 是循環(huán)的需要while(k>1)a=search_min(z,n,k);a->flag='3'/ 修改標(biāo)志,說(shuō)明該節(jié)點(diǎn)已被選擇b=search_min(z,n,k);c->weight=a->weight+b->weight;a->parent=c;/指針移動(dòng),節(jié)點(diǎn)關(guān)系確立b->parent=c;c->lchild=a;c->rchild=b;a->flag=

9、'0'b->flag='1'c->flag='2'n+;/z 中元素個(gè)數(shù)加一zn=*c;k-;/ 根節(jié)點(diǎn)個(gè)數(shù)增減一個(gè)(a, b 變成孩子節(jié)點(diǎn),c 成為新的根節(jié)點(diǎn))8if(k=1)for(i=0;i<=n;i+)if(zi.flag='2')return (&zi);9二遞歸替換問(wèn)題編寫程序,擴(kuò)展C/C+源文件中的 #include指令(以遞歸的方式)。請(qǐng)以文件名的內(nèi)容替換形如下面的代碼行。#include“filename ”1. 采用類語(yǔ)言定義相關(guān)的數(shù)據(jù)類型typedef struct/ 創(chuàng)建結(jié)構(gòu)體,讓

10、文件的讀寫方便char dataMAX;/ 數(shù)據(jù)項(xiàng)char1;intprint(char chMAX,int n)/ 遞歸函數(shù)2.算法設(shè)計(jì)FILE *fp,*fp1;char sMAX;/s,存儲(chǔ) #后面的includechar1 bMAX;/b, 文件中內(nèi)容在內(nèi)存中的存儲(chǔ)位置int i=0,k,d=0,j,flag;/switch 參數(shù),用于確認(rèn)調(diào)用函數(shù)的參數(shù)if(fp=fopen(ch,"rb+")=NULL)printf(" 文件打開失??! n");exit(0);while(!feof(fp)fread(&bi,1,sizeof(char

11、1),fp);i+;if(bi-1.data0='')/結(jié)構(gòu)體數(shù)組計(jì)數(shù)器break;k=i-1;/記錄 b 大小,可以認(rèn)為是對(duì)應(yīng)文件的行數(shù)fclose(fp);102. 算法設(shè)計(jì)FILE *fp,*fp1;char sMAX; /s,存儲(chǔ) #后面的 includechar1 bMAX;/b, 文件中內(nèi)容在內(nèi)存中的存儲(chǔ)位置int i=0,k,d=0,j,flag;/switch 參數(shù),用于確認(rèn)調(diào)用函數(shù)的參數(shù)if(fp=fopen(ch,"rb+")=NULL)printf(" 文件打開失敗! n");exit(0);while(!feof(

12、fp)fread(&bi,1,sizeof(char1),fp);i+;if(bi-1.data0='')/ 結(jié)構(gòu)體數(shù)組計(jì)數(shù)器break;k=i-1;/記錄 b 大小,可以認(rèn)為是對(duì)應(yīng)文件的行數(shù)fclose(fp);113. 函數(shù)的調(diào)用關(guān)系圖創(chuàng)建三個(gè)文件用來(lái)存儲(chǔ)預(yù)編譯命令創(chuàng)建要編譯的文件通過(guò)遞歸算法實(shí)現(xiàn)文件預(yù)編譯保存結(jié)果,輸出結(jié)果4. 調(diào)試分析不調(diào)用庫(kù)函數(shù),實(shí)現(xiàn)strcpy函數(shù),要返回 char* 。125. 測(cè)試結(jié)果圖 1.調(diào)用測(cè)試函數(shù)6. 源程序(帶注釋)# include <stdio.h># include <string.h># incl

13、ude <stdlib.h>#define MAX 100typedef struct/ 創(chuàng)建結(jié)構(gòu)體,讓文件的讀寫方便char dataMAX;/ 數(shù)據(jù)項(xiàng)char1;intprint(char chMAX,int n)/ 遞歸函數(shù)FILE *fp,*fp1;char sMAX;/s,存儲(chǔ) #后面的includechar1 bMAX;/b, 文件中內(nèi)容在內(nèi)存中的存儲(chǔ)位置int i=0,k,d=0,j,flag;/switch 參數(shù),用于確認(rèn)調(diào)用函數(shù)的參數(shù)if(fp=fopen(ch,"rb+")=NULL)printf(" 文件打開失??! n"

14、);exit(0);13while(!feof(fp)fread(&bi,1,sizeof(char1),fp);i+;if(bi-1.data0='')/ 結(jié)構(gòu)體數(shù)組計(jì)數(shù)器break;k=i-1;/記錄 b 大小,可以認(rèn)為是對(duì)應(yīng)文件的行數(shù)fclose(fp);if(fp1=fopen(" 輔助 .c","ab+")=NULL)printf(" 文件打開失??! n");exit(0);d=0; /s 數(shù)組存取計(jì)數(shù)器 for(i=0;i<k;i+)if(bi.data0='#')/ 發(fā)現(xiàn) i

15、nclude,遞歸調(diào)用 printfor(j=2;j<9;j+)sd=bi.dataj;d+;if(strcmp(s,"include")=0)flag=bi.data19-'0'switch(flag)/帶選擇的遞歸調(diào)用case 1:fp=print("filename1.c",1);break;case 2:fp=print("filename2.c",2);break;case 3:fp=print("filename3.c",3);break;default:break;else/否則

16、的話講代碼存入輔助文件printf("%sn",bi.data);14fwrite(&bi,1,sizeof(char1),fp);fputc('r', fp);fputc('n', fp);else / 否則的話講代碼存入輔助文件printf("%sn",bi.data);fwrite(&bi,1,sizeof(char1),fp1);fputc('r', fp);fputc('n', fp);close(fp1);return 0;15三跳馬問(wèn)題要求在 64 個(gè)國(guó)際象棋格

17、子 ,任意位置放一個(gè)馬 ,如何不重復(fù)地把格子走完。1.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)國(guó)際象棋中馬采用“日”字走法,對(duì)棋盤上任意一個(gè)馬所在 的結(jié)點(diǎn),它所能走的結(jié)點(diǎn)在一步之內(nèi)有八種情況,即假設(shè)馬所在的坐標(biāo)為( i ,j),那么它能走的八個(gè)坐標(biāo)分別為( i+1, j+2 ),( i+1 , j-2),( i+2,j-1 ),( i+2,j+1 ),( i-2,j-1 ),(i-2,j+1 ),( i-1,j-2 ),( i-1,j+2 ),把這八個(gè)點(diǎn)個(gè)看做是( i, j)的領(lǐng)接點(diǎn),以此類推每個(gè)結(jié)點(diǎn)都有鄰結(jié)點(diǎn),所以可采用圖的深度遍歷,以馬所在的結(jié)點(diǎn)( i, j)為初始結(jié)點(diǎn),對(duì)全圖進(jìn)行深度遍歷,然后按照遍歷的順序輸出結(jié)點(diǎn)

18、2.算法設(shè)計(jì)#define MAXNUM 8/橫縱格數(shù)最大值#define INVALIDDIR - 1/無(wú)路可走的情況#define MAXLEN 64/棋盤總格數(shù)#define MAXDIR 8/下一步可走的方向typedef struct16int x;/表示橫坐標(biāo)int y;/ 表示縱坐標(biāo)int direction;/ 表示移動(dòng)方向HorsePoint;HorsePoint ChessPathMAXLEN;/ 模擬路徑棧int count;/ 入棧結(jié)點(diǎn)個(gè)數(shù)int ChessBoardMAXNUMMAXNUM;/ 標(biāo)志棋盤數(shù)組int x;/ 表示橫坐int y;/ 表示縱坐標(biāo)int di

19、rection;/表示移動(dòng)方向HorsePoint;HorsePoint ChessPathMAXLEN;/ 模擬路徑棧int count;/ 入棧結(jié)點(diǎn)個(gè)數(shù)int ChessBoardMAXNUMMAXNUM;/ 標(biāo)志棋盤數(shù)組3.調(diào)試分析1 輸入起始點(diǎn)的位置,如果可以遍歷全部位置,則輸出8*8 的矩陣圖。2 輸入的起始點(diǎn)的位置不可以遍歷全部位置時(shí),則輸出錯(cuò)誤。4. 測(cè)試結(jié)果起始點(diǎn)位置 :2, 4圖 1. 遍歷全部位置175.源程序(帶注釋)#include<stdio.h>#include<stdlib.h>#define MAXNUM 8#define INVALID

20、DIR - 1#define MAXLEN 64#define MAXDIR 8typedef structint x; int y; int direction;HorsePoint;HorsePointChessPathMAXLEN;int count;int ChessBoardMAXNUMMAXNUM;void Initial()int i,j;for(i=0;i<MAXNUM;i+)for(j=0;j<MAXNUM;j+)ChessBoardij=0;/下一步可走的方向for(i=0;i<MAXLEN;i+)ChessPathi.x=0;ChessPathj.y=0

21、;ChessPathi.direction=INVALIDDIR;count=0;void PushStack(HorsePoint positon)ChessBoardpositon.xpositon.y=1;/把標(biāo)志設(shè)為 1,證明已走過(guò)ChessPathcount=positon; count+; HorsePoint PopStack()HorsePoint positon;count-;positon=ChessPathcount;ChessBoardpositon.xpositon.y=0;18ChessPathcount.direction=INVALIDDIR;return po

22、siton;HorsePoint GetInitPoint()HorsePoint positon;do printf("n 請(qǐng)輸入起始點(diǎn) (x,y):");scanf("%d,%d",&positon.x,&positon.y);/輸入 horse 的起始坐標(biāo)/出棧函數(shù)/入棧函數(shù)printf("nn");while(positon.x>=MAXNUM|positon.y>=MAXNUM|positon.x<0|positon.y<0); /不超過(guò)各個(gè)邊緣positon.direction=IN

23、VALIDDIR;return positon; HorsePoint GetNewPoint(HorsePoint *parent)int i; HorsePoint newpoint;int tryxMAXDIR=1,2,2,1,-1,-2,-2,-1;int tryyMAXDIR=-2,-1,1,2,2,1,-1,-2;newpoint.direction=INVALIDDIR;parent->direction=parent->direction+;for(i=parent->direction;i<MAXDIR;i+)newpoint.x=parent->

24、;x+tryxi;newpoint.y=parent->y+tryyi;/試探新結(jié)點(diǎn)的可走方向if(newpoint.x<MAXNUM&&newpoint.x>=0&&newpoint.y<MAXNUM&&newpoint.y>=0&&ChessBoardnewpoint.xnewpoint.y=0)parent->direction=i;/上一結(jié)點(diǎn)可走的方向/標(biāo)記已走過(guò)ChessBoardnewpoint.xnewpoint.y=1;return newpoint;parent->dir

25、ection=INVALIDDIR;return newpoint;void CalcPoint(HorsePoint hh )19HorsePoint npositon;HorsePoint *ppositon;Initial(); ppositon=&hh;PushStack(*ppositon);while(!(count=0|count=MAXLEN)ppositon=&ChessPathcount-1;npositon=GetNewPoint(ppositon);if(ppositon->direction!=INV ALIDDIR)ChessPathcount

26、-1.direction=ppositon->direction; PushStack(npositon);else PopStack();void PrintChess()int i,j; int stateMAXNUMMAXNUM;int step=0;HorsePoint positon;count=MAXLEN; if(count=MAXLEN)/當(dāng)棋盤全部走過(guò)時(shí)/行走初始化stateij 為棋盤上( i,j )點(diǎn)被踏過(guò)/以 8*8 矩陣的形式輸出運(yùn)行結(jié)果for(i=0;i<MAXLEN;i+) step+; positon=ChessPathi; statepositon

27、.xpositon.y=step; for(i=0;i<MAXNUM;i+) printf("tt");for(j=0;j<MAXNUM;j+) if(stateij<10) printf(" "); printf("%6d",stateij); printf("n"); printf("n"); else printf("tt 此時(shí)不能踏遍棋盤上所有點(diǎn)!n"); int main(int argc,char *argv)HorsePoint h;h=Get

28、InitPoint();CalcPoint(h);PrintChess();return 0;/按順序輸出馬踏過(guò) 20四長(zhǎng)整數(shù)運(yùn)算問(wèn)題長(zhǎng)整數(shù)運(yùn)算問(wèn)題。設(shè)計(jì)程序,實(shí)現(xiàn)兩個(gè)任意長(zhǎng)的整數(shù)的加、減、乘運(yùn)算問(wèn)題。1.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)#define NULL 0#include<stdio.h>#include<stdlib.h>#include<conio.h>typedef struct longnode /* 每個(gè)節(jié)點(diǎn)的結(jié)構(gòu) */int num;/* 數(shù)字 */struct longnode *low1;/* 指向低一位節(jié)點(diǎn) */struct longnode *hi

29、gh1; /* 指向高一位節(jié)點(diǎn) */ longnode;typedef struct xlong/* 每個(gè)長(zhǎng)整數(shù)的結(jié)構(gòu) */longnode *High;/* 每個(gè)長(zhǎng)整數(shù)的最高節(jié)點(diǎn) */longnode *Low;/* 每個(gè)長(zhǎng)整數(shù)的最低節(jié)點(diǎn) */int digit4;/* 每個(gè)長(zhǎng)整數(shù)的總位數(shù) (不包括高位的 0)/4 */*xlong;21程序調(diào)用關(guān)系 :add()2.算法設(shè)計(jì)int add()/* 加*/ char *a1,*b1; int digit4,cf=0; xlong a,b,c; doMain()subtract()Cheng()Tuichu() printf(" 輸入

30、長(zhǎng)整數(shù)的位數(shù): ");/* 輸入要計(jì)算的長(zhǎng)整數(shù)的最多位數(shù)*/scanf("%d",&digit4);while(digit4<=0);22a1=(char*)malloc(digit4+1);b1=(char*)malloc(digit4+1);digit4=digit4/4+1;init(&a,digit4);init(&b,digit4);init(&c,digit4); /*初始化 a,b,c */do cf=0;printf(" 輸入要運(yùn)算的兩個(gè)長(zhǎng)整數(shù) ,按中國(guó)對(duì)于長(zhǎng)整數(shù)的表示習(xí)慣,每四位一組,組間用逗號(hào)隔開

31、:n");scanf("%s",a1);printf("+n");scanf("%s",b1);cf|=ston(a1,a);cf|=ston(b1,b);while(cf);/* 輸入被加數(shù)和加數(shù) ,如果轉(zhuǎn)換出錯(cuò) ,則重輸 */ pass(a,b,c); /* 進(jìn)行相加運(yùn)算 */ printlong(a);printf("+");/* 打印結(jié)果 */printlong(b);printf("=");printlong(c);printf("n");printf(&

32、quot;n");int subtract()/* 減*/ char *a1,*b1;23int digit4,cf=0;xlong a,b,c;doprintf(" 輸入長(zhǎng)整數(shù)的位數(shù): ");/* 輸入最多位數(shù) */scanf("%d",&digit4);while(digit4<=0);a1=(char*)malloc(digit4+1);b1=(char*)malloc(digit4+1);digit4=digit4/4+1;init(&a,digit4);init(&b,digit4);init(&

33、c,digit4); /*初始化 a,b,c */do cf=0;printf(" 輸入要運(yùn)算的兩個(gè)長(zhǎng)整數(shù) :n");scanf("%s",a1);printf("-n");scanf("%s",b1);cf|=ston(a1,a);cf|=ston(b1,b);while(cf);/* 輸入被減數(shù)和減數(shù) ,如果轉(zhuǎn)換出錯(cuò) ,則重輸*/passa(a,b,c);/* 執(zhí)行相減運(yùn)算*/printlong(a);printf("-");/* 打印結(jié)果*/24printlong(b);printf(&q

34、uot;=");printlong(c);printf("n");printf("n");3.調(diào)試分析調(diào)試時(shí)遇到的問(wèn)題::yuanchengxuchang.c(30) : error C2143: syntax error : missing '' before 'else'J:yuanchengxuchang.c(109) : warning C4013: 'strlen' undefined; assuming extern returning intJ:yuanchengxuchang.c(

35、207) : warning C4133: 'function' : incompatible types - from 'int *' to 'const char *'執(zhí)行 cl.exe 時(shí)出錯(cuò) .chang.obj - 1 error(s), 0 warning(s)在else前面忘記加上;解決方法:在 else前加上;時(shí)間復(fù)雜度: O(N)空間復(fù)雜度: O(2N)254.測(cè)試結(jié)果圖4。輸入八位數(shù)進(jìn)行運(yùn)算的結(jié)果5.源程序(帶注釋)#define NULL 0#include<stdio.h>#include<stdlib.

36、h>#include<conio.h>typedef struct longnode /* 每個(gè)節(jié)點(diǎn)的結(jié)構(gòu) */int num;/* 數(shù)字 */struct longnode *low1;/* 指向低一位節(jié)點(diǎn) */struct longnode *high1; /* 指向高一位節(jié)點(diǎn) */ longnode;typedef struct xlong/* 每個(gè)長(zhǎng)整數(shù)的結(jié)構(gòu) */longnode *High;/* 每個(gè)長(zhǎng)整數(shù)的最高節(jié)點(diǎn) */longnode *Low;/* 每個(gè)長(zhǎng)整數(shù)的最低節(jié)點(diǎn) */26int digit4; /* 每個(gè)長(zhǎng)整數(shù)的總位數(shù) (不包括高位的 0)/4 */

37、 *xlong;int init(xlong *a,int digit4)/* 初始化 */int i;longnode *j;(*a)=(xlong)malloc(sizeof(struct xlong);/* 為a的頭結(jié)構(gòu)申請(qǐng)空間 ,并賦初始值*/(*a)->High=NULL;(*a)->Low=NULL;(*a)->High=NULL;(*a)->Low=NULL;(*a)->digit4=0;for(i=0;i<digit4;i+)/* 申請(qǐng) digit4 個(gè)節(jié)點(diǎn) ,初始化 */j=(longnode*)malloc(sizeof(longnode

38、);j->num=0;j->high1=NULL;j->low1=(*a)->High;if(*a)->High)(*a)->High->high1=j;else(*a)->Low=j;(*a)->High=j;(*a)->digit4+;27int pass(xlong a,xlong b,xlong c)int cf=0;/* 兩個(gè)數(shù)字的相加*/longnode *a1=a->Low,*b1=b->Low,*c1=c->Low; while(a1)c1->num=a1->num+b1->num+

39、cf;if(c1->num>9999)cf=1;/* 如果產(chǎn)生進(jìn)位 (借位 ) */c1->num-=10000;elsecf=0;a1=a1->high1;b1=b1->high1;c1=c1->high1;return cf;/* 最高位的進(jìn)位 (借位 ) */int passa(xlong a,xlong b,xlong c)int cf=0;/*兩個(gè)數(shù)字的相減*/longnode *a1=a->Low,*b1=b->Low,*c1=c->Low;28while(a1)c1->num=a1->num-b1->num-

40、cf;if(c1->num>9999)/*如果產(chǎn)生進(jìn)位 (借位) */cf=1;c1->num-=10000;elsecf=0;a1=a1->high1;b1=b1->high1;c1=c1->high1;return cf;/* 最高位的進(jìn)位 (借位 ) */nep(xlong a)/* 求a的相反數(shù)*/int cf=1;/* 因?yàn)榍笙喾磾?shù)是取反加一,所以這里 cf=1; */longnode *a1=a->Low;while(a1)a1->num=9999-(a1->num)+cf;if(a1->num>9999) a1-&

41、gt;num=10000;29elsecf=0;a1=a1->high1;return cf;printlong(xlong a)longnode *i=a->High;/*打印長(zhǎng)整數(shù) a */if(i->num>=5000)printf("-"); /*最高位 (bit)=1表示負(fù)數(shù) ,即用補(bǔ)碼表示*/nep(a);/* 求反打印其絕對(duì)值*/while(i&&i->num=0)i=i->low1; /*跳過(guò)最位的 0 */if(i)printf("%d",i->num);i=i->low1

42、;if(i) printf(",");else printf("0");/* a=0 打0 */while(i)30printf("%04d",i->num);if(i->low1)printf(",");i=i->low1;int ston(char in,xlong out)/* 把字符串轉(zhuǎn)化為數(shù)字賦給a */int bit,i,jishu=1,num0=0;longnode *j=out->Low;i=strlen(in)-1;while(i>=0 && j)/*

43、 循環(huán)每一個(gè)字節(jié) */bit=ini-'0'/* 把字符形式的值賦給整數(shù)形式的 bit */ if(bit>=0 && bit <=9)num0+=jishu*bit;/* 加進(jìn) num0 */jishu*=10; /*基數(shù)自乘 10 */if(jishu>1&&(jishu>=10000|bit<0|bit>9) /*數(shù)字以外的字符 */j->num=num0;j=j->high1;/* 存入一個(gè)節(jié)點(diǎn)*/num0=0;31jishu=1;i-;if(num0)j->num=num0;j=j->high1;/*把最后一個(gè)沒存入節(jié)點(diǎn)的數(shù)存入節(jié)點(diǎn) */for(;j;j=j->high1) j->num=0;/* 最位不足補(bǔ) 0 */if(out->High->num>=5000)return 1; /* 如果最高位是 1,返回 1表示出 */if(in0='-') nep(out);/* 如果最后一個(gè)字符是 ''則取反 */return 0;int add()/*

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論