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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  課程 數(shù)據(jù)結(jié)構(gòu) </p><p>  題目 3、三元組表相加 </p><p>  1 問題要求及任務(wù)描述</p><p><b>  1.1 題目要求</b></p><p>  3、三元組表相加(2人)</p><

2、p>  [問題描述] 利用數(shù)組的順序存儲(chǔ)結(jié)構(gòu),實(shí)現(xiàn)特殊矩陣的壓縮存儲(chǔ)和稀疏矩陣的三元組存儲(chǔ)和加法實(shí)現(xiàn)</p><p><b>  [基本要求]</b></p><p>  利用稀疏矩陣的三元組存儲(chǔ),來實(shí)現(xiàn)兩矩陣相加</p><p>  兩個(gè)希疏矩陣分別用兩個(gè)文件存放,相加后的矩陣存入一個(gè)文件后在屏幕上顯示</p><p

3、><b>  [測(cè)試數(shù)據(jù)]</b></p><p>  文件A: 文件B:</p><p>  11 11</p><p>  10

4、 10</p><p>  11,0,0,0,3,0,0,123,0,0 0,0,0,23,3,0,0,0,0,0</p><p>  0,0,0,5,56,0,0,0,0,0 0,0,111,0,6,0,0,78,0,0</p><p>  0,1,0,0,67,0,0,222,

5、0,0 0,0,0,67,0,0,0,0,0,0</p><p>  0,0,0,0,0,0,0,0,567,0 0,0,84,99,0,0,0,0,0,1</p><p>  55,0,0,4,0,0,0,0,0,0 0,0,0,0,0,42,0,0,0,0</p><p>  5

6、6,21,0,0,03,0,0,0,0,0 66,0,0,0,0,0,32,0,0,0</p><p>  0,0,0,0,0,0,0,67,0,23 0,0,0,0,0,0,0,0,0,345</p><p>  0,0,0,0,55,0,0,0,0,0 88,0,0,0,0,0,0,0,0,0</

7、p><p>  0,0,23,0,0,0,0,0,234,0 0,0,0,0,0,0,0,0,0,0</p><p>  0,0,0,0,6,0,0,123,0,0 0,0,0,11,0,0,0,0,0,0</p><p><b>  1.2 主要任務(wù)</b></p><p&

8、gt;  矩陣從文件中讀取,并轉(zhuǎn)化為稀疏矩陣的三元組存儲(chǔ)。</p><p>  相加后的矩陣存入一個(gè)文件,從文件中讀取矩陣在屏幕上顯示。</p><p>  2 解決問題的主要思路和方法</p><p><b>  2.1 關(guān)鍵問題</b></p><p>  矩陣的從文件當(dāng)中讀取,并轉(zhuǎn)化為稀疏矩陣的三元組存儲(chǔ)。<

9、;/p><p>  稀疏矩陣的三元組的加法實(shí)現(xiàn)。</p><p>  相加后的矩陣存入文件。</p><p>  2.2 擬采用解決問題的方法</p><p>  利用fgetc()函數(shù)讀取文件信息,并將讀取到的矩陣轉(zhuǎn)化為稀疏矩陣。程序中的void pp(FILE *fp, TriType *A) 函數(shù);</p><p&g

10、t;  void AddMatrix(TriType a,TriType b,TriType *c)實(shí)現(xiàn)稀疏矩陣的三元組相加;</p><p>  void pull(FILE *fp,TriType &C)將矩陣C存入到文件中!期間用了fputc();fprintf()函數(shù)。</p><p>  2.3 主要算法和處理流程圖</p><p><b&g

11、t;  3 程序?qū)崿F(xiàn)</b></p><p>  3.1 程序?qū)崿F(xiàn)時(shí)應(yīng)考慮的問題</p><p>  3.2 主要源代碼及說明</p><p>  #include<stdio.h></p><p>  #include<string.h></p><p>  #include &

12、lt;stdlib.h> </p><p>  #define MAX_SIZE 100</p><p>  typedef struct</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  i

13、nt j;</b></p><p><b>  int d;</b></p><p>  }DataType;</p><p>  typedef struct</p><p><b>  {</b></p><p><b>  int rn;</

14、b></p><p><b>  int cn;</b></p><p><b>  int tn;</b></p><p>  DataType Data[MAX_SIZE];</p><p><b>  }TriType;</b></p><p&g

15、t;  void pp(FILE *fp, TriType *A) //文件中矩陣轉(zhuǎn)化為三元組表</p><p><b>  {</b></p><p><b>  char ch;</b></p><p>  char a[10];</p><p>  int i=1,j=1,k=0,

16、t=0,n=0;</p><p>  while((ch=fgetc(fp))!=EOF) </p><p><b>  {</b></p><p>  if((ch!='\n')&&(ch!=','))</p><p><b>  {</b>

17、;</p><p><b>  a[k]=ch;</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {

18、</b></p><p>  a[k]='\0';</p><p><b>  k=0;</b></p><p>  if((t=atoi(a))!=0) //t=atoi(a)把字符串a(chǎn)轉(zhuǎn)換成整型數(shù)并賦值給t</p><p><b>  {</b></p>

19、;<p>  A->Data[n].d=t;</p><p>  A->Data[n].i=i;</p><p>  A->Data[n].j=j;</p><p><b>  n++;</b></p><p><b>  }</b></p><p

20、>  if(ch==',') j++;</p><p>  else if(ch=='\n')</p><p><b>  {</b></p><p><b>  i++;</b></p><p><b>  A->rn=j;</b>

21、</p><p><b>  j=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  A->cn=i-1;</p>

22、;<p><b>  A->tn=n;</b></p><p><b>  }</b></p><p>  void AddMatrix(TriType a,TriType b,TriType *c) //實(shí)現(xiàn)a,b相加</p><p><b>  {</b><

23、/p><p>  int i=0,j=0,k=0; //下標(biāo)置初始值</p><p>  while(i<a.tn&&j<b.tn) //a,b均未超出有效數(shù)!</p><p><b>  {</b></p><

24、p>  if(a.Data[i].i==b.Data[j].i) //a的行號(hào)等于b的行號(hào)</p><p><b>  {</b></p><p>  if(a.Data[i].j==b.Data[j].j) //a的列號(hào)等于b的列號(hào)</p><p><b>  {</b><

25、;/p><p>  c->Data[k].i=a.Data[i].i;</p><p>  c->Data[k].j=a.Data[i].j;</p><p>  c->Data[k].d=a.Data[i].d+b.Data[j].d; //此時(shí)將他們的數(shù)據(jù)直接相加</p><p><b>  i++;</b

26、></p><p><b>  j++;</b></p><p><b>  k++; </b></p><p><b>  }</b></p><p>  else if(a.Data[i].j<b.Data[j].j) //a的列號(hào)小于b的列號(hào)</p

27、><p><b>  {</b></p><p>  c->Data[k].i=a.Data[i].i;</p><p>  c->Data[k].j=a.Data[i].j;</p><p>  c->Data[k].d=a.Data[i].d; //如果行號(hào)相等,則相加后的值等于列號(hào)更小的矩陣</

28、p><p><b>  //中對(duì)應(yīng)元素的值</b></p><p><b>  i++;</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p>  else if(a.Data[i

29、].j>b.Data[j].j) //a的列號(hào)大于b的列號(hào)</p><p><b>  {</b></p><p>  c->Data[k].i=b.Data[j].i;</p><p>  c->Data[k].j=b.Data[j].j;</p><p>  c->Data[k].d=b.

30、Data[j].d; //如果行號(hào)相等,則相加后的值等于列號(hào)更小的矩//陣中對(duì)應(yīng)元素的值</p><p><b>  j++;</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b

31、></p><p>  else if(a.Data[i].i<b.Data[j].i) //a的行號(hào)小于b的行號(hào)</p><p><b>  {</b></p><p>  c->Data[k].i=a.Data[i].i;</p><p>  c->Data[k].j=a.Data[i]

32、.j;</p><p>  c->Data[k].d=a.Data[i].d; //如果列號(hào)相等,則相加后的值等于行號(hào)更小的矩陣//中對(duì)應(yīng)元素的值</p><p><b>  i++;</b></p><p><b>  k++;</b></p><p><b>  }<

33、;/b></p><p>  else if(a.Data[i].i>b.Data[j].i) //a的行號(hào)大于b的行號(hào)</p><p><b>  {</b></p><p>  c->Data[k].i=b.Data[j].i;</p><p>  c->Data[k].j=b.Data

34、[j].j;</p><p>  c->Data[k].d=b.Data[j].d; //如果列號(hào)相等,則相加后的值等于行號(hào)更小的矩//陣中對(duì)應(yīng)元素的值</p><p><b>  j++;</b></p><p><b>  k++;</b></p><p><b> 

35、 }</b></p><p><b>  }</b></p><p>  while(i>=a.tn&&j<=b.tn)//a超出a的有效數(shù)個(gè)數(shù),而b未超出,直接把b中超出部分復(fù)制到c</p><p><b>  {</b></p><p>  c->D

36、ata[k].i=b.Data[j].i;</p><p>  c->Data[k].j=b.Data[j].j;</p><p>  c->Data[k].d=b.Data[j].d; </p><p><b>  j++;</b></p><p><b>  k++;</b>

37、</p><p><b>  }</b></p><p>  while(j>=b.tn&&i<=a.tn) //超出b的有效數(shù)個(gè)數(shù),而a未超出,直接把a(bǔ)中超出部分復(fù)制給c</p><p><b>  {</b></p><p>  c->Data[k].i=a.D

38、ata[i].i;</p><p>  c->Data[k].j=a.Data[i].j;</p><p>  c->Data[k].d=a.Data[i].d; </p><p><b>  i++;</b></p><p><b>  k++;</b></p>&

39、lt;p><b>  }</b></p><p>  c->rn=a.rn;</p><p>  c->cn=a.cn;</p><p><b>  c->tn=k;</b></p><p><b>  }</b></p><p>

40、;  void pull(FILE *fp,TriType &C) //將C存入fp所指向的文件</p><p><b>  {</b></p><p>  int ch1=0;</p><p>  char ch2=',' ,ch3='\n';</p><p&g

41、t;  int i=1,j=1,k=0;</p><p>  for(i=1;i<=C.cn;i++) </p><p>  for(j=1;j<=C.rn;j++)</p><p><b>  {</b></p><p>  if(j==C.Data[k].j&&i==C.Dat

42、a[k].i) //如果i,j分別等于C中元素的行和列!寫入C</p><p>  //中的第k個(gè)元素!否則寫入'0,'</p><p><b>  {</b></p><p>  fprintf(fp,"%4d",C.Data[k].d);</p><p>  if(j!=C.rn

43、)fputc(ch2,fp);</p><p><b>  k++;</b></p><p><b>  } </b></p><p><b>  else </b></p><p><b>  {</b></p><p>  fp

44、rintf(fp,"%4d",ch1);</p><p>  if(j!=C.rn)fputc(ch2,fp);</p><p><b>  }</b></p><p>  if(j==C.rn) fputc(ch3,fp);</p><p><b>  }</b></p&

45、gt;<p>  fclose(fp);</p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  TriType A;</p><p>  TriType B;</p

46、><p>  TriType C;</p><p>  FILE *fp1;</p><p>  if((fp1=fopen("A.txt","r"))==NULL) //只讀方式打開A.txt</p><p><b>  {</b></p><p

47、>  printf("文件A.txt不能打開!\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  FILE *fp2;</p><p>  if((fp2=fopen("B.txt"

48、,"r"))==NULL) //只讀方式打開B.txt</p><p><b>  {</b></p><p>  printf("文件B.txt不能打開!\n");</p><p><b>  return;</b></p><p>&l

49、t;b>  }</b></p><p>  FILE *fp3;</p><p>  if((fp3=fopen("C.txt","w+"))==NULL) //讀寫方式打開C.txt</p><p><b>  {</b></p><p> 

50、 printf("文件C.txt不能打開!\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  pp(fp1, &A); //文件A.txt中矩陣轉(zhuǎn)化為三元組表A</p

51、><p>  pp(fp2, &B); //文件B.txt中矩陣轉(zhuǎn)化為三元組表B</p><p>  if(A.cn==B.cn&&A.rn==B.rn) //判斷A,B是否是相同類型的矩陣</p><p><b>  {</b></p&g

52、t;<p>  AddMatrix(A,B,&C); //矩陣相加后存入C</p><p>  pull(fp3,C); //C存入到文件C.txt</p><p>  printf("矩陣相加后結(jié)果如下:\n");</p><p><b&g

53、t;  char ch; </b></p><p>  if((fp3=fopen("C.txt","r"))==NULL) //只讀方式打開C.txt</p><p><b>  {</b></p><p>  printf("文件C.txt不能打開!\n"

54、;);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  ch=fgetc(fp3); //從文件C.txt中輸出矩陣C</p><p>  while(ch!=EOF)</p><p><b&

55、gt;  {</b></p><p>  putchar(ch);</p><p>  ch=fgetc(fp3);</p><p><b>  }</b></p><p>  fclose(fp3);</p><p>  printf("有效數(shù)字共:%d\n行數(shù):%d\n列

56、數(shù):%d\n",C.tn,C.cn,C.rn);</p><p><b>  }</b></p><p>  else printf("A,B不是同種類型矩陣,即矩陣行數(shù)或列數(shù)不相等??!\n");</p><p><b>  }</b></p><p><b&g

57、t;  4 測(cè)試</b></p><p>  4.1 測(cè)試結(jié)果及分析</p><p><b>  程序結(jié)果如下:</b></p><p><b>  5 小結(jié)</b></p><p>  5.1本問題解決方法及程序?qū)崿F(xiàn)小結(jié)</p><p>  程序中對(duì)A,B文件的

58、存儲(chǔ)方式有嚴(yán)格要求,不允許多出回車或少回車。對(duì)于文件的讀取和寫入,主要是參考“譚浩強(qiáng).C程序設(shè)計(jì)(第三版).清華大學(xué)出版社 . 2005(2007重印)”這本書,并經(jīng)過自己組織函數(shù)寫出代碼解決!</p><p>  5.2 尚未解決的問題及下一步工作思路</p><p>  程序中對(duì)A,B文件的存儲(chǔ)方式有嚴(yán)格要求,不允許多出回車或少回車。這是已知的本程序缺點(diǎn),也是尚未解決的問題。有待進(jìn)一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論