學(xué)生成績管理系統(tǒng)55464_第1頁
學(xué)生成績管理系統(tǒng)55464_第2頁
學(xué)生成績管理系統(tǒng)55464_第3頁
學(xué)生成績管理系統(tǒng)55464_第4頁
學(xué)生成績管理系統(tǒng)55464_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、軟件綜合課程設(shè)計 學(xué)生成績管理系統(tǒng)稀疏矩陣應(yīng)用 二一四 年 六 月學(xué)生成績管理系統(tǒng)一、問題陳述現(xiàn)有學(xué)生成績信息文件1(1.txt),內(nèi)容如下姓名    學(xué)號   語文  數(shù)學(xué)   英語     張明明  01     67    78      82李成友  02     78  

2、;  91      88張輝燦  03     68    82      56王露   04     56    45      77陳東明  05     67    38 

3、     47.   .     .    .      學(xué)生成績信息文件2(2.txt),內(nèi)容如下:姓名  學(xué)號   語文  數(shù)學(xué)   英語     陳果   31     57    68  &#

4、160;   82李華明  32     88    90      68張明東  33     48    42      56 李明國  34     50    45      87陳

5、道亮  35     47    58      77.    .     .    .      試編寫一管理系統(tǒng),要求如下:1)實現(xiàn)對兩個文件數(shù)據(jù)進行合并,生成新文件3.txt。2)抽取出三科成績中有補考的學(xué)生并保存在一個新文件4.txt。3)合并后的文件3.txt中的數(shù)據(jù)按總分降序排序(至少采用兩種排序方法實現(xiàn))。4)輸入

6、一個學(xué)生姓名后,能查找到此學(xué)生的信息并輸出結(jié)果(至少采用兩種查找方法實現(xiàn))。5)要求使用結(jié)構(gòu)體,鏈或數(shù)組等實現(xiàn)上述要求。6)采用多種方法且算法正確者,可適當加分。二、需求分析本系統(tǒng)要求實現(xiàn)具體的五項功能,根據(jù)提供的這五項功能,運行時系統(tǒng)提供了相應(yīng)的功能菜單,選擇不同的選項來實現(xiàn)相應(yīng)的功能。1采用了讀文件和寫文件的方式,邊讀邊寫,合并兩個文件成為一個文件。2.采用結(jié)構(gòu)體數(shù)組存入從文件中讀入的數(shù)據(jù),再通過對于數(shù)據(jù)中的相關(guān)成績判斷該學(xué)生是否需要補考,如果需要補考則將其信息寫入另外一個文件。3.采用快速排序、選擇排序、冒泡排序的方法按總分對學(xué)生數(shù)據(jù)進行排序。4.采用了二種查找的方法找到學(xué)生信息并輸出。

7、5.通過調(diào)用函數(shù)exit(0)退出程序。三、概要設(shè)計1、實現(xiàn)對文件1.txt和文件2.txt數(shù)據(jù)進行合并,生成新文件3.txt。調(diào)用函數(shù)Unitedfile()來實現(xiàn),函數(shù)以讀的方式打開1.txt文件,以寫的方式打開3.txt文件,從1.txt讀入一個數(shù)據(jù)并寫入3.txt文件,直到遇到1.txt文件結(jié)束。關(guān)閉1.txt文件,再以讀的方式打開2.txt文件,用上述方式直到遇到2.txt文件結(jié)束。關(guān)閉2.txt,3.txt文件。實現(xiàn)對于文件的合并。2、抽取出三科成績中有補考的學(xué)生并保存在一個新文件4.txt。調(diào)用函數(shù)findout()來實現(xiàn)。函數(shù)以讀的方式打開3.txt文件,以寫的方式打開4.tx

8、t文件。讀入3.txt文件的一個數(shù)據(jù)到結(jié)構(gòu)體stud中,判斷學(xué)生信息中語文、數(shù)學(xué)和英語成績中是否有不及格的,如果有,則將數(shù)據(jù)寫入4.txt中,直至遇到3.txt文件結(jié)束。3、對合并后的文件3.txt中的數(shù)據(jù)按總分降序排序。調(diào)用函數(shù)sortfile()來實現(xiàn)。函數(shù)提供了三種排序方法,通過調(diào)用函數(shù)kuaisu()來實現(xiàn)快速排序,通過調(diào)用函數(shù)xuanze()來實現(xiàn)選擇排序,通過調(diào)用函數(shù)maopao()來實現(xiàn)冒泡排序。4、輸入一個學(xué)生姓名后,能查找到此學(xué)生的信息并輸出結(jié)果。調(diào)用函數(shù)findoutstudent()來實現(xiàn)。函數(shù)也提供了兩種查找方法:(1) 通過調(diào)用函數(shù)derectfindoutstude

9、nt()實現(xiàn)從文件從3.txt中逐個讀入數(shù)據(jù),再進行查找判斷,如果找到所需要的數(shù)據(jù),則查找結(jié)束,否則繼續(xù)查找直至文件結(jié)束。(2) autofindoutstudent()在進行第三步的過程中,已經(jīng)把3.txt中的學(xué)生數(shù)據(jù)讀入了結(jié)構(gòu)體數(shù)組當中,調(diào)用函autofindoutstudent()直接從結(jié)構(gòu)體中進行查找。5、通過調(diào)用函數(shù)exit()退出。mainfindout()sortfile()findoutstudent()exit()Unitedfile()Kuaisu()Maopao()Xuanzhe()derectfindoutstudent()autofindoutstudent()四、詳

10、細設(shè)計1把1.txt和2.txt文件中的內(nèi)容放到3.txt文件中。調(diào)用Unitedfile()文件,打開文件1和文件3,從1.txt中讀入學(xué)生數(shù)據(jù)進結(jié)構(gòu)體,把結(jié)構(gòu)體中學(xué)生數(shù)據(jù)放到文件3中。關(guān)閉文件1,從2.txt中讀入學(xué)生數(shù)據(jù)進結(jié)構(gòu)體,把結(jié)構(gòu)體中學(xué)生數(shù)據(jù)放到文件3中。關(guān)閉文件2和文件3。void Unitedfile()FILE *fp,*p;Student stud;fp=fopen("d:1.txt","r");p=fopen("d:3.txt","w");while(fscanf(fp,"%s%s%

11、d%d%d",,stud.id,&stud.chinese,&stud.math,&stud.english )!=EOF)fprintf(p,"%-6s %-6s %-6d %-6d %-6dn",,stud.id,stud.chinese,stud.math,stud.english );fclose(fp);fp=fopen("d:2.txt","r");while(fscanf(fp,"%s%s%d%d%d",,stud

12、.id,&stud.chinese,&stud.math,&stud.english )!=EOF)fprintf(p,"%-6s %-6s %-6d %-6d %-6dn",,stud.id,stud.chinese,stud.math,stud.english );fclose(fp);fclose(p);2. 抽取出三科成績中有分數(shù)低于60分的學(xué)生并保存在一個新文件4.txt從3.txt中讀入學(xué)生數(shù)據(jù)進結(jié)構(gòu)體,判斷是否有不及格的課程,如果有,則寫入文件4.txt中void findout()FILE *fp,*p;Studen

13、t stud;fp=fopen("d:3.txt","r");p=fopen("d:4.txt","w");while(fscanf(fp,"%s%s%d%d%d",,stud.id,&stud.chinese,&stud.math,&stud.english )!=EOF)if(stud.chinese<60|stud.english<60|stud.math<60)fprintf(p,"%-6s %-6s %-6d %-6

14、d %-6dn",,stud.id,stud.chinese,stud.math,stud.english ); fclose(fp);fclose(p);3對文件3.txt中的數(shù)據(jù)按總分以降序進行排序(三種方法:選擇排序、快速排序、冒泡排序)void sortfile()char c;cout<<"請選擇排序方法:"<<endl;cout<<"1.選擇排序"<<endl;cout<<"2.快速排序"<<endl;cout<<

15、;"3.冒泡排序"<<endl;cin>>c;switch(c)case'1':xuanze();/選擇排序break;case'2':kuaisu();/快速排序break;case'3': maopao();/直接插入排序break;3.1選擇排序void xuanze()int j,k,max1,sum1,sum2,q;i=0;Student temp;FILE *fp;fp=fopen("d:3.txt","r");i=0;while(fscanf(fp,

16、"%s%s%d%d%d",,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF)i+;fclose(fp);for(j=0;j<i;j+)studj.sum=studj.chinese +studj.math+studj.english;for(j=0;j<i-1;j+)/對結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)進行選擇排序max1=j;sum1=studj.sum;for(k=j+1;k<i;k+)sum2=studk.sum;if(sum1<sum2)max1

17、=k;sum1=sum2;if(max1!=j)temp=studmax1;studmax1=studj;studj=temp;studj.sum=sum1;fp=fopen("d:3.txt","w");/將排序后的數(shù)據(jù)寫入3.txt中for(q=0;q<i;q+)fprintf(fp,"%-8s %-8s %-8d %-8d %-8d %-8dn",,studq.id,studq.chinese,studq.math,studq.english,studq.sum );fclose(fp);3.2 快速排

18、序void kuaisu()int i,low,high;FILE *fp;fp=fopen("d:3.txt","r");i=0;while(fscanf(fp,"%s%s%d%d%d",,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF)studi.sum=studi.chinese+studi.math+studi.english;i+; fclose(fp);low=0;high=i-1;QSort(low,high)

19、;/快速排序fp=fopen("d:3.txt","w");/將排序后的數(shù)據(jù)寫入3.txt中for(int j=0;j<i;j+)fprintf(fp,"%-8s %-8s %-8d %-8d %-8d %-8dn",,studj.id,studj.chinese,studj.math,studj.english,studj.sum );fclose(fp); 3.3 冒泡排序void maopao() int j,k,q; Student temp;FILE *fp;fp=fopen("d:3.t

20、xt","r");i=0;while(fscanf(fp,"%s%s%d%d%d",,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF)studi.sum=studi.chinese+studi.math+studi.english;i+;int n=i;for( i=0;i<n-1;i+) k=i;for(j=i+1;j<n;j+)if(studj.sum>studk.sum)k=j;temp=studi;studi

21、=studk;studk=temp;fp=fopen("d:3.txt","w");/將排序后的數(shù)據(jù)寫入3.txt中for(q=0;q<n;q+)fprintf(fp,"%-8s %-8s %-8d %-8d %-8d %-8dn",,studq.id,studq.chinese,studq.math,studq.english,studq.sum );fclose(fp);4. 輸入一個學(xué)生姓名后,能查找到此學(xué)生的信息并輸出結(jié)果。(1、從文件3中直接查找;2、在運行第三步的基本上查找)void findou

22、tstudent()/提供兩種查找方法char c;cout<<"請選擇查找方法"<<endl;cout<<"1.從文件3中直接查找"<<endl;cout<<"2.在運行第三步的基礎(chǔ)上查找"<<endl;cin>>c;cout<<"請輸入學(xué)生姓名:"if(sign1=0&&c='2')cout<<"請執(zhí)行操作3后再執(zhí)行此項操作!"<<endl;

23、return;switch(c)case'1':derectfindoutstudent();/從文件3中直接查找break;case'2':autofindoutstudent();/從結(jié)構(gòu)體數(shù)據(jù)中直接查找break;4.1從文件3中直接查找void derectfindoutstudent()char NAME30;int flag=0;FILE *fp;fp=fopen("d:3.txt","r");cin>>NAME;while(fscanf(fp,"%s%s%d%d%d%d",st

24、,stud1.id,&stud1.chinese,&stud1.math,&stud1.english,&stud1.sum )!=EOF)if(strcmp(,NAME)=0)flag=1;cout<<"*姓名*學(xué)號*語文*數(shù)學(xué)*英語*總分*"<<endl;cout<<" "<<<<" "<<stud1.id<<" "cout<<s

25、tud1.chinese<<" "<<stud1.math<<" "<<stud1.english<<" "<<stud1.sum<<endl;break;if(flag=0)cout<<"無此學(xué)生相關(guān)信息"<<endl;fclose(fp);4.2在運行第三步的基礎(chǔ)上查找void autofindoutstudent()/從結(jié)構(gòu)體數(shù)組中查找int n,flag=0,k;char Name30; i=0;FI

26、LE *fp;fp=fopen("d:3.txt","r");while(fscanf(fp,"%s%s%d%d%d%d",,stud1.id,&stud1.chinese,&stud1.math,&stud1.english,&stud1.sum )!=EOF)i+;n=i-1;cin>>Name;for(k=1;k<=n;k+)if(strcmp(,Name)=0)flag=1;cout<<"*姓名*學(xué)號*語文*數(shù)學(xué)*英

27、語*總分*"<<endl;cout<<" "<<<<" "<<studk.id<<" "cout<<studk.chinese<<" "<<studk.math<<" "<<studk.english<<" "<<studk.sum<<endl;break; if(flag=0)c

28、out<<"無此學(xué)生相關(guān)信息"<<endl;fclose(fp); 五、程序代碼#include<iostream>using namespace std;#define SIZE 100typedef struct char name8;char id2;int chinese;int math;int english;int sum;Student;Student studSIZE;int i;int sign=0,sign1=0,sign2=0,sign3=0;void Unitedfile()FILE *fp,*p;Student

29、 stud;fp=fopen("d:1.txt","r");/以讀的方式打開1.txtp=fopen("d:3.txt","w");/以寫的方式打開3.txtwhile(fscanf(fp,"%s%s%d%d%d",,stud.id,&stud.chinese,&stud.math,&stud.english )!=EOF)fprintf(p,"%-6s %-6s %-6d %-6d %-6dn",,stud.id,

30、stud.chinese,stud.math,stud.english );/讀取1.txt的數(shù)據(jù)進入結(jié)構(gòu)體中,寫入3.txt,繼續(xù)讀取直結(jié)束fclose(fp);/關(guān)閉文件1.txtfp=fopen("d:2.txt","r");/以寫的方式打開2.txtwhile(fscanf(fp,"%s%s%d%d%d",,stud.id,&stud.chinese,&stud.math,&stud.english )!=EOF)fprintf(p,"%-6s %-6s %-6d %-6d

31、%-6dn",,stud.id,stud.chinese,stud.math,stud.english );fclose(fp);fclose(p);void findout()FILE *fp,*p;Student stud;fp=fopen("d:3.txt","r");p=fopen("d:4.txt","w");while(fscanf(fp,"%s%s%d%d%d",,stud.id,&stud.chinese,&stud.

32、math,&stud.english )!=EOF)if(stud.chinese<60|stud.english<60|stud.math<60)fprintf(p,"%-6s %-6s %-6d %-6d %-6dn",,stud.id,stud.chinese,stud.math,stud.english ); fclose(fp);fclose(p);void xuanze() /對合并后的文件3.txt中的數(shù)據(jù)按總分降序排序int j,k,max1,sum1,sum2,q;i=0;Student temp;FILE *f

33、p;fp=fopen("d:3.txt","r");i=0;while(fscanf(fp,"%s%s%d%d%d",,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF)i+;/從3.txt中讀入數(shù)據(jù)進結(jié)構(gòu)體數(shù)組stud中fclose(fp);for(j=0;j<i;j+)studj.sum=studj.chinese +studj.math+studj.english;for(j=0;j<i-1;j+)/對結(jié)構(gòu)體

34、數(shù)組中的數(shù)據(jù)進行選擇排序max1=j;sum1=studj.sum;for(k=j+1;k<i;k+)sum2=studk.sum;if(sum1<sum2)max1=k;sum1=sum2;if(max1!=j)temp=studmax1;studmax1=studj;studj=temp;studj.sum=sum1;fp=fopen("d:3.txt","w");/將排序后的數(shù)據(jù)寫入3.txt中for(q=0;q<i;q+)fprintf(fp,"%-8s %-8s %-8d %-8d %-8d %-8dn",

35、,studq.id,studq.chinese,studq.math,studq.english,studq.sum );fclose(fp);void maopao() int j,k,q; Student temp;FILE *fp;fp=fopen("d:3.txt","r");i=0;while(fscanf(fp,"%s%s%d%d%d",,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF)stu

36、di.sum=studi.chinese+studi.math+studi.english;i+;int n=i;for( i=0;i<n-1;i+) k=i;for(j=i+1;j<n;j+)if(studj.sum>studk.sum)k=j;temp=studi;studi=studk;studk=temp;fp=fopen("d:3.txt","w");/將排序后的數(shù)據(jù)寫入3.txt中for(q=0;q<n;q+)fprintf(fp,"%-8s %-8s %-8d %-8d %-8d %-8dn",s

37、,studq.id,studq.chinese,studq.math,studq.english,studq.sum );fclose(fp);int Partition(int low,int high)/區(qū)分int p;/p是pivotkey初始關(guān)鍵字Student temp;temp=studlow;p=studlow.sum;while(low<high)while(low<high&&studhigh.sum<=p)-high;studlow=studhigh;while(low<high&&studlow.s

38、um>=p)+low;studhigh=studlow;studlow=temp;return low;void QSort(int low,int high)/快速排序int k;if(low<high)k=Partition(low,high);QSort(low,k-1);QSort(k+1,high);void kuaisu()/讀取文件,快速排序,將結(jié)果寫入3.txtint i,low,high;FILE *fp;fp=fopen("d:3.txt","r");i=0;while(fscanf(fp,"%s%s%d%d%d

39、",,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF)studi.sum=studi.chinese+studi.math+studi.english;i+;/從文件3.txt中讀入數(shù)據(jù)進結(jié)構(gòu)體數(shù)組stud中fclose(fp);low=0;high=i-1;QSort(low,high);/快速排序fp=fopen("d:3.txt","w");/將排序后的數(shù)據(jù)寫入3.txt中for(int j=0;j<i;j+)fprint

40、f(fp,"%-8s %-8s %-8d %-8d %-8d %-8dn",,studj.id,studj.chinese,studj.math,studj.english,studj.sum );fclose(fp);void derectfindoutstudent()char NAME30;int flag=0;FILE *fp;fp=fopen("d:3.txt","r");cin>>NAME;while(fscanf(fp,"%s%s%d%d%d%d",

41、,stud1.id,&stud1.chinese,&stud1.math,&stud1.english,&stud1.sum )!=EOF)if(strcmp(,NAME)=0)flag=1;cout<<"*姓名*學(xué)號*語文*數(shù)學(xué)*英語*總分*"<<endl;cout<<" "<<<<" "<<stud1.id<<" "cout<<stud1.chi

42、nese<<" "<<stud1.math<<" "<<stud1.english<<" "<<stud1.sum<<endl;break;if(flag=0)cout<<"無此學(xué)生相關(guān)信息"<<endl;fclose(fp);void autofindoutstudent()/從結(jié)構(gòu)體數(shù)組中查找int n,flag=0,k;char Name30; i=0;FILE *fp;fp=fopen("d

43、:3.txt","r");while(fscanf(fp,"%s%s%d%d%d%d",,stud1.id,&stud1.chinese,&stud1.math,&stud1.english,&stud1.sum )!=EOF)i+;n=i-1;cin>>Name;for(k=1;k<=n;k+)if(strcmp(,Name)=0)flag=1;cout<<"*姓名*學(xué)號*語文*數(shù)學(xué)*英語*總分*"<<endl

44、;cout<<" "<<<<" "<<studk.id<<" "cout<<studk.chinese<<" "<<studk.math<<" "<<studk.english<<" "<<studk.sum<<endl;break; if(flag=0)cout<<"無此學(xué)生相關(guān)

45、信息"<<endl;fclose(fp);void findoutstudent()/提供兩種查找方法char c;cout<<"請選擇查找方法"<<endl;cout<<"1.從文件3中直接查找"<<endl;cout<<"2.在運行第三步的基礎(chǔ)上查找"<<endl;cin>>c;cout<<"請輸入學(xué)生姓名:"if(sign1=0&&c='2')cout<&

46、lt;"請執(zhí)行操作3后再執(zhí)行此項操作!"<<endl;return;switch(c)case'1':derectfindoutstudent();/從文件3中直接查找break;case'2':autofindoutstudent();/從結(jié)構(gòu)體數(shù)據(jù)中直接查找break;void sortfile()/提供兩種排序方法char c;cout<<"請選擇排序方法:"<<endl;cout<<"1.選擇排序"<<endl;cout<<

47、"2.快速排序"<<endl;cout<<"3.冒泡排序"<<endl;cin>>c;switch(c)case'1':xuanze();/選擇排序break;case'2':kuaisu();/快速排序break;case'3': maopao();/直接插入排序break;int main()/*主程序*/ int choice; while(1) /*主菜單*/if(sign3=0)printf("*學(xué)生成績管理系統(tǒng)*n");prin

48、tf("t1. 合并1.txt和2.txt為3.txtn"); printf("t2. 抽取出三科成績中有補考的學(xué)生并保存在一個新文件4.txtn"); printf("t3. 對合并后的文件3.txt中的數(shù)據(jù)按總分降序排序n"); printf("t4. 輸入一個學(xué)生姓名,查找到此學(xué)生的信息并輸出結(jié)果n");printf("t5. 退出n");printf("請選擇(1-5):n");printf("*n");sign3=1;scanf("%d

49、",&choice);switch(choice) case 1: Unitedfile();sign=1;cout<<"操作1成功!"<<endl;break; case 2: if(sign=0)cout<<"請執(zhí)行操作1后再執(zhí)行此項操作!"<<endl;break;cout<<"操作2成功!"<<endl;findout();break; case 3:if(sign=0)cout<<"請執(zhí)行操作1后再執(zhí)行此項操作!&

50、quot;<<endl;break;sortfile();cout<<"操作3成功!"<<endl;sign1=1;break; case 4:while(1)char c;findoutstudent();cout<<"繼續(xù)查找請輸入Y:"<<endl;cout<<"返回主菜單請輸入N:"<<endl;cin>>c;if(c='N'|c='n')break;sign3=0;break;case 5:exit

51、(0);break; return 0; 六、運行結(jié)果與測試七、設(shè)計體會與總結(jié)通過本次課程設(shè)計,進一步熟悉了數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的基本設(shè)計思想,加深了對于數(shù)據(jù)結(jié)構(gòu)的認識。本系統(tǒng)為學(xué)生成績管理系統(tǒng),能夠用于基本的學(xué)生成績管理。在設(shè)計這個程序時,首先我們要弄清楚文件的存儲,你是怎么把文件中的數(shù)據(jù)轉(zhuǎn)移到另一個文件中去,之間的過程是什么樣的。按照題目的要求一步一步下來。怎么抽取文件3中三科成績中有補考的學(xué)生成績到文件4中。在設(shè)計這個程序時,我遇到了很多困難,不知道文件是如何的進行存儲的,怎么把其他文件中的數(shù)據(jù)傳遞到另個一文件中,兩個文件能同時打開吧數(shù)據(jù)傳遞到第三個文件中去嗎?怎么把文件中的數(shù)據(jù)調(diào)用到程序中

52、來,被使用。在這次課程設(shè)計中,我發(fā)現(xiàn)寫代碼不是重要的,了解題目的意思,會設(shè)計程序框架才是最重要的。知道程序內(nèi)部是怎么進行實現(xiàn)的才是設(shè)計程序的關(guān)鍵。如果沒有以上的基本,根本學(xué)不出一個好的程序。稀疏矩陣應(yīng)用一、問題陳述:實現(xiàn)三元組,十字鏈表下的稀疏矩陣的加、轉(zhuǎn)、乘的實現(xiàn)。(1)稀疏矩陣的存儲(2)稀疏矩陣加法(3)矩陣乘法(4)矩陣轉(zhuǎn)置二、程序代碼:#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100 int num100; typedef struct OLNodeint i,j;int e;struct OLNod

53、e *right,*down;OLNode,*OLink;typedef struct int mu,nu,tu;OLink *rhead,*chead;CrossList; /十字鏈表結(jié)構(gòu)體定義typedef structint i,j;int e;Triple;typedef structTriple dataMAXSIZE;int rposMAXSIZE + 1;int nu,mu,tu;TSMatrix; /三元組結(jié)構(gòu)體定義;int CreateSMatix_OL(CrossList &M)int i,j,e;OLink q;OLink p;printf("請輸入稀疏

54、矩陣的行數(shù),列數(shù),非零元素的個數(shù):"); scanf("%d%d%d",&M.mu,&M.nu,&M.tu);M.rhead=(OLink *)malloc(M.mu+1)*sizeof(OLNode); M.chead=(OLink *)malloc(M.nu+1)*sizeof(OLNode); for( i=1;i<=M.mu;i+)M.rheadi=NULL; for( i=1;i<=M.nu;i+)M.cheadi=NULL;printf("請輸入稀疏矩陣,如果行為0,則退出n");scanf(&q

55、uot;%d%d%d",&i,&j,&e);while(i!=0)p=(OLink)malloc(sizeof(OLNode);p->i=i;p->j=j;p->e=e;if(M.rheadi=NULL|M.rheadi->j>j)p->right=M.rheadi;M.rheadi=p;Elseq=M.rheadi;while(q->right&&q->right->j<j)q=q->right;p->right=q->right;q->right=p;if(

56、M.cheadj=NULL|M.cheadj->i>i) p->down=M.cheadj;M.cheadj=p;elseq=M.cheadj;while(q->down&&q->down->i<i)q=q->down;p->down=q->down;q->down=p;scanf("%d%d%d",&i,&j,&e);return 0;/創(chuàng)建十字鏈表void CreateSMatrix(TSMatrix &M)printf("請輸入稀疏矩陣的行數(shù)、列

57、數(shù)和非零元個數(shù):");scanf("%d%d%d",&M.mu,&M.nu,&M.tu);if(M.mu<=0)|(M.nu<=0)|(M.tu<=0)|(M.tu>M.mu*M.nu) printf("輸入有誤!");for(int i=1;i<=M.tu;i+)/輸入稀疏矩陣元素printf("請輸入元素坐標(所在行,所在列)及大?。?quot;);scanf("%d%d%d",&M.datai.i,&M.datai.j,&M.datai.e);if(M.datai.i<=0)|(M.datai.j<=0)printf("輸入錯誤,請重新輸入");scanf("%d%d%d",&M.datai.i,&M.datai.j,&M.datai.e);int num100;if(M.tu)int i;for(i = 1; i <= M.mu; i+) numi = 0;/初始化for(int t = 1; t <= M.tu; t+) +numM.datat.i; M.rpos1 =

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論