版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件綜合課程設(shè)計(jì)學(xué)生成績(jī)管理系統(tǒng)稀疏矩陣應(yīng)用二一四 年 六 月學(xué)生成績(jī)管理系統(tǒng)一、問題陳述現(xiàn)有學(xué)生成績(jī)信息文件1(1.txt),內(nèi)容如下姓名 學(xué)號(hào) 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 張明明 01 67 78 82李成友 02 78 &
2、#160; 91 88張輝燦 03 68 82 56王露 04 56 45 77陳東明 05 67 38
3、60; 47。 。 。 。 學(xué)生成績(jī)信息文件2(2。txt),內(nèi)容如下:姓名 學(xué)號(hào) 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 陳果 31 57 68 &
4、#160; 82李華明 32 88 90 68張明東 33 48 42 56李明國(guó) 34 50 45 87陳道亮
5、0; 35 47 58 77。 。 。 。. 試編寫一管理系統(tǒng),要求如下:1)實(shí)現(xiàn)對(duì)兩個(gè)文件數(shù)據(jù)進(jìn)行合并,生成新文件3。txt。2)抽取出三科成績(jī)中有補(bǔ)考的學(xué)生并保存在一個(gè)新文件4。txt。3)合并后的文件3.txt中的數(shù)據(jù)按總分降序排序(至少采用兩種排序方法實(shí)現(xiàn))。4)輸入一個(gè)學(xué)生姓名
6、后,能查找到此學(xué)生的信息并輸出結(jié)果(至少采用兩種查找方法實(shí)現(xiàn)).5)要求使用結(jié)構(gòu)體,鏈或數(shù)組等實(shí)現(xiàn)上述要求。6)采用多種方法且算法正確者,可適當(dāng)加分。二、需求分析本系統(tǒng)要求實(shí)現(xiàn)具體的五項(xiàng)功能,根據(jù)提供的這五項(xiàng)功能,運(yùn)行時(shí)系統(tǒng)提供了相應(yīng)的功能菜單,選擇不同的選項(xiàng)來實(shí)現(xiàn)相應(yīng)的功能。1采用了讀文件和寫文件的方式,邊讀邊寫,合并兩個(gè)文件成為一個(gè)文件。2。采用結(jié)構(gòu)體數(shù)組存入從文件中讀入的數(shù)據(jù),再通過對(duì)于數(shù)據(jù)中的相關(guān)成績(jī)判斷該學(xué)生是否需要補(bǔ)考,如果需要補(bǔ)考則將其信息寫入另外一個(gè)文件。3。采用快速排序、選擇排序、冒泡排序的方法按總分對(duì)學(xué)生數(shù)據(jù)進(jìn)行排序.4.采用了二種查找的方法找到學(xué)生信息并輸出。5。通過調(diào)用
7、函數(shù)exit(0)退出程序.三、概要設(shè)計(jì)1、實(shí)現(xiàn)對(duì)文件1。txt和文件2。txt數(shù)據(jù)進(jìn)行合并,生成新文件3.txt。調(diào)用函數(shù)Unitedfile()來實(shí)現(xiàn),函數(shù)以讀的方式打開1.txt文件,以寫的方式打開3.txt文件,從1。txt讀入一個(gè)數(shù)據(jù)并寫入3.txt文件,直到遇到1。txt文件結(jié)束.關(guān)閉1。txt文件,再以讀的方式打開2。txt文件,用上述方式直到遇到2.txt文件結(jié)束.關(guān)閉2.txt,3.txt文件。實(shí)現(xiàn)對(duì)于文件的合并。2、抽取出三科成績(jī)中有補(bǔ)考的學(xué)生并保存在一個(gè)新文件4.txt。調(diào)用函數(shù)findout()來實(shí)現(xiàn)。函數(shù)以讀的方式打開3。txt文件,以寫的方式打開4。txt文件。讀入
8、3。txt文件的一個(gè)數(shù)據(jù)到結(jié)構(gòu)體stud中,判斷學(xué)生信息中語(yǔ)文、數(shù)學(xué)和英語(yǔ)成績(jī)中是否有不及格的,如果有,則將數(shù)據(jù)寫入4。txt中,直至遇到3。txt文件結(jié)束.3、對(duì)合并后的文件3。txt中的數(shù)據(jù)按總分降序排序。調(diào)用函數(shù)sortfile()來實(shí)現(xiàn).函數(shù)提供了三種排序方法,通過調(diào)用函數(shù)kuaisu()來實(shí)現(xiàn)快速排序,通過調(diào)用函數(shù)xuanze()來實(shí)現(xiàn)選擇排序,通過調(diào)用函數(shù)maopao()來實(shí)現(xiàn)冒泡排序。4、輸入一個(gè)學(xué)生姓名后,能查找到此學(xué)生的信息并輸出結(jié)果。調(diào)用函數(shù)findoutstudent()來實(shí)現(xiàn)。函數(shù)也提供了兩種查找方法:(1) 通過調(diào)用函數(shù)derectfindoutstudent()實(shí)現(xiàn)
9、從文件從3.txt中逐個(gè)讀入數(shù)據(jù),再進(jìn)行查找判斷,如果找到所需要的數(shù)據(jù),則查找結(jié)束,否則繼續(xù)查找直至文件結(jié)束.(2) autofindoutstudent()在進(jìn)行第三步的過程中,已經(jīng)把3。txt中的學(xué)生數(shù)據(jù)讀入了結(jié)構(gòu)體數(shù)組當(dāng)中,調(diào)用函autofindoutstudent()直接從結(jié)構(gòu)體中進(jìn)行查找.5、通過調(diào)用函數(shù)exit()退出.mainfindout()sortfile()findoutstudent()exit()Unitedfile()Kuaisu()Maopao()Xuanzhe()derectfindoutstudent()autofindoutstudent()四、詳細(xì)設(shè)計(jì)1把1
10、。txt和2。txt文件中的內(nèi)容放到3.txt文件中.調(diào)用Unitedfile()文件,打開文件1和文件3,從1。txt中讀入學(xué)生數(shù)據(jù)進(jìn)結(jié)構(gòu)體,把結(jié)構(gòu)體中學(xué)生數(shù)據(jù)放到文件3中。關(guān)閉文件1,從2.txt中讀入學(xué)生數(shù)據(jù)進(jìn)結(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%dd%d”,,stud。id,&stud。chinese,&s
11、tud。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%sddd”,,stud.id,&stud。chinese,stud。math,stud.english )!=EOF)fprintf(p,"%6s 6s 6d %6d -6
12、dn”,,stud.id,stud。chinese,stud。math,stud。english );fclose(fp);fclose(p);2. 抽取出三科成績(jī)中有分?jǐn)?shù)低于60分的學(xué)生并保存在一個(gè)新文件4。txt從3。txt中讀入學(xué)生數(shù)據(jù)進(jìn)結(jié)構(gòu)體,判斷是否有不及格的課程,如果有,則寫入文件4。txt中void findout()FILE *fp,*p;Student stud;fp=fopen("d:3.txt”,”r”);p=fopen(”d:4。txt”,”w”);while(fscanf(fp,"ssddd",,stu
13、d。id,stud。chinese,stud.math,stud。english )!=EOF)if(stud.chinese60|stud。english<60stud.math60)fprintf(p,”%6s %-6s %6d 6d -6dn”,,stud。id,stud.chinese,stud。math,stud.english );fclose(fp);fclose(p);3對(duì)文件3。txt中的數(shù)據(jù)按總分以降序進(jìn)行排序(三種方法:選擇排序、快速排序、冒泡排序)void sortfile()char c;cout<<"請(qǐng)選擇排序方法:”e
14、ndl;cout<"1。選擇排序"<endl;cout”2.快速排序”<endl;cout<<”3。冒泡排序”endl;cinc;switch(c)case1:xuanze();/選擇排序break;case2: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(fscan
15、f(fp,”%s%s%d%d%d”,,studi。id,&studi.chinese,studi.math,studi.english )!=EOF)i+;fclose(fp);for(j=0;ji;j+)studj。sum=studj.chinese +studj。math+studj.english;for(j=0;j<i1;j+)/對(duì)結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)進(jìn)行選擇排序max1=j;sum1=studj.sum;for(k=j+1;ki;k+)sum2=studk.sum;if(sum1<sum2)max1=k;sum1=sum2;if(max1!=j)
16、temp=studmax1;studmax1=studj;studj=temp;studj。sum=sum1;fp=fopen("d:3.txt”,"w");/將排序后的數(shù)據(jù)寫入3。txt中for(q=0;qi;q+)fprintf(fp,”-8s 8s 8d 8d -8d -8dn”,,studq。id,studq。chinese,studq。math,studq。english,studq.sum );fclose(fp);3.2 快速排序void kuaisu()int i,low,high;FILE fp;fp=fopen(”d:3。t
17、xt","r");i=0;while(fscanf(fp,”ssd%dd",,studi。id,studi。chinese,&studi.math,&studi.english )!=EOF)studi.sum=studi。chinese+studi。math+studi。english;i+;fclose(fp);low=0;high=i1;QSort(low,high);/快速排序fp=fopen(”d:3。txt",”w”);/將排序后的數(shù)據(jù)寫入3。txt中for(int j=0;ji;j+)fprin
18、tf(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.txt","r”);i=0;while(fscanf(fp,”s%sddd”,,studi.id,studi。chinese,studi。math,studi.english )!=EO
19、F)studi。sum=studi。chinese+studi。math+studi.english;i+;int n=i;for( i=0;i<n1;i+) k=i;for(j=i+1;jn;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;qn;q+)fprintf(fp,”%8s -8s %-8d 8d 8d 8dn",,studq。id,studq.ch
20、inese,studq。math,studq。english,studq。sum );fclose(fp);4. 輸入一個(gè)學(xué)生姓名后,能查找到此學(xué)生的信息并輸出結(jié)果。(1、從文件3中直接查找;2、在運(yùn)行第三步的基本上查找)void findoutstudent()/提供兩種查找方法char c;cout<”請(qǐng)選擇查找方法”<endl;cout<”1。從文件3中直接查找"<endl;cout"2。在運(yùn)行第三步的基礎(chǔ)上查找"endl;cin>>c;cout<”請(qǐng)輸入學(xué)生姓名:"if(sign1=0&c=2
21、39;)cout<<”請(qǐng)執(zhí)行操作3后再執(zhí)行此項(xiàng)操作!”<endl;return;switch(c)case1:derectfindoutstudent();/從文件3中直接查找break;case2':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%sddd%d&
22、quot;,,stud1。id,stud1。chinese,stud1.math,stud1。english,stud1.sum )!=EOF)if(strcmp(,NAME)=0)flag=1;cout<”*姓名*學(xué)號(hào)*語(yǔ)文數(shù)學(xué)英語(yǔ)*總分*"endl;cout” ”<” ”stud1.id<<” ”;cout<stud1.chinese<<” ”<stud1。math” "<stud1.english" ”<<stud1。sum<e
23、ndl;break;if(flag=0)cout<”無(wú)此學(xué)生相關(guān)信息”endl;fclose(fp);4。2在運(yùn)行第三步的基礎(chǔ)上查找void autofindoutstudent()/從結(jié)構(gòu)體數(shù)組中查找int n,flag=0,k;char Name30; i=0;FILE *fp;fp=fopen("d:3。txt”,"r");while(fscanf(fp,”%s%s%d%d%dd”,,stud1.id,stud1。chinese,stud1。math,&stud1.english,stud1。sum )!=EOF)i+;n=
24、i-1;cin>>Name;for(k=1;k<=n;k+)if(strcmp(,Name)=0)flag=1;cout<<"*姓名學(xué)號(hào)*語(yǔ)文*數(shù)學(xué)*英語(yǔ)*總分*”<endl;cout<” "<<” "<studk.id” ”;coutstudk。chinese<” "<<studk.math<<” ”<studk。english” ”<studk.sumendl;break; if(flag=0)cout&quo
25、t;無(wú)此學(xué)生相關(guān)信息”<<endl;fclose(fp);五、程序代碼includeiostream>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 stud;fp=fopen(”d:1。txt”,”r”)
26、;/以讀的方式打開1。txtp=fopen(”d:3.txt",”w");/以寫的方式打開3.txtwhile(fscanf(fp,”ss%dd%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 );/讀取1。txt的數(shù)據(jù)進(jìn)入結(jié)構(gòu)體中,寫入3.txt,繼續(xù)讀取直結(jié)束fclose(fp);/關(guān)閉文件1。txtfp=fope
27、n(”d:2。txt",”r");/以寫的方式打開2。txtwhile(fscanf(fp,”ss%ddd”,,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);fclose(p);void findout()FILE fp,*p;Student stud;fp=fopen("d:3。txt
28、”,”r");p=fopen(”d:4.txt”,”w”);while(fscanf(fp,"s%s%dd%d”,,stud。id,&stud。chinese,&stud。math,stud。english )!=EOF)if(stud.chinese60stud.english60stud.math60)fprintf(p,”6s %6s 6d %6d %-6dn”,,stud。id,stud。chinese,stud。math,stud.english );fclose(fp);fclose(p);void xuanz
29、e() /對(duì)合并后的文件3。txt中的數(shù)據(jù)按總分降序排序int j,k,max1,sum1,sum2,q;i=0;Student temp;FILE fp;fp=fopen("d:3.txt”,"r");i=0;while(fscanf(fp,”%ss%ddd”,,studi。id,&studi。chinese,studi.math,studi。english )!=EOF)i+;/從3。txt中讀入數(shù)據(jù)進(jìn)結(jié)構(gòu)體數(shù)組stud中fclose(fp);for(j=0;j<i;j+)studj。sum=studj.chinese +st
30、udj。math+studj。english;for(j=0;j<i1;j+)/對(duì)結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)進(jìn)行選擇排序max1=j;sum1=studj.sum;for(k=j+1;ki;k+)sum2=studk。sum;if(sum1sum2)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 %-8
31、d %8d -8dn”,,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%sd%d%d”,,studi。id,studi.chinese,studi。math,&studi.english )!=EOF)studi.sum=studi。chinese+studi
32、.math+studi。english;i+;int n=i;for( i=0;in-1;i+) k=i;for(j=i+1;jn;j+)if(studj.sumstudk。sum)k=j;temp=studi;studi=studk;studk=temp;fp=fopen("d:3。txt",”w”);/將排序后的數(shù)據(jù)寫入3.txt中for(q=0;qn;q+)fprintf(fp,”-8s 8s %8d 8d 8d 8dn",,studq。id,studq。chinese,studq。math,studq.english,studq.sum
33、 );fclose(fp);int Partition(int low,int high)/區(qū)分int p;/p是pivotkey初始關(guān)鍵字Student temp;temp=studlow;p=studlow。sum;while(lowhigh)while(low<highstudhigh。sum=p)-high;studlow=studhigh;while(lowhighstudlow。sum=p)+low;studhigh=studlow;studlow=temp;return low;void QSort(int low,int high)/快速排序int k;if(low<
34、;high)k=Partition(low,high);QSort(low,k1);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%ddd",,studi。id,&studi。chinese,studi。math,studi。english )!=EOF)studi。sum=studi。chinese+studi。math+studi.english;i+;/從文
35、件3。txt中讀入數(shù)據(jù)進(jìn)結(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+)fprintf(fp,”%8s -8s 8d 8d %-8d 8dn”,,studj。id,studj.chinese,studj.math,studj.english,studj。sum );fclose(fp);void derectfindoutstudent()char NAME30;in
36、t flag=0;FILE fp;fp=fopen(”d:3。txt”,"r");cin>NAME;while(fscanf(fp,"%s%sd%dd%d",,stud1。id,&stud1。chinese,&stud1.math,stud1.english,stud1。sum )!=EOF)if(strcmp(,NAME)=0)flag=1;cout”*姓名*學(xué)號(hào)*語(yǔ)文*數(shù)學(xué)*英語(yǔ)*總分*”endl;cout” "" "<stud1.i
37、d<” ”;cout<stud1。chinese<” "<stud1。math<” ”<<stud1.english” ”<<stud1。sum<endl;break;if(flag=0)cout<"無(wú)此學(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:3.txt”,”r");while(fscanf(fp,"s
38、sddd%d",,stud1。id,&stud1。chinese,stud1。math,stud1。english,stud1。sum )!=EOF)i+;n=i1;cinName;for(k=1;k<=n;k+)if(strcmp(,Name)=0)flag=1;cout<"*姓名*學(xué)號(hào)*語(yǔ)文*數(shù)學(xué)*英語(yǔ)*總分*”<endl;cout" ”” ”<studk。id<” ”;coutstudk.chinese<" "<studk。mat
39、h” ”studk。english” ”studk。sum<endl;break; if(flag=0)cout"無(wú)此學(xué)生相關(guān)信息”<endl;fclose(fp);void findoutstudent()/提供兩種查找方法char c;cout"請(qǐng)選擇查找方法"endl;cout<”1.從文件3中直接查找”<endl;cout"2。在運(yùn)行第三步的基礎(chǔ)上查找”<endl;cin>c;cout"請(qǐng)輸入學(xué)生姓名:”;if(sign1=0c='2)cout”請(qǐng)執(zhí)行操作3后再執(zhí)行此項(xiàng)操作!”<endl
40、;return;switch(c)case'1':derectfindoutstudent();/從文件3中直接查找break;case'2':autofindoutstudent();/從結(jié)構(gòu)體數(shù)據(jù)中直接查找break;void sortfile()/提供兩種排序方法char c;cout”請(qǐng)選擇排序方法:”<endl;cout<"1。選擇排序"<endl;cout<<”2.快速排序"endl;cout<”3。冒泡排序”<endl;cinc;switch(c)case'1:xuan
41、ze();/選擇排序break;case2:kuaisu();/快速排序break;case3: maopao();/直接插入排序break;int main()/主程序/ int choice; while(1) /*主菜單/if(sign3=0)printf(”*學(xué)生成績(jī)管理系統(tǒng)*n”);printf(”t1。 合并1。txt和2。txt為3。txtn”); printf("t2。 抽取出三科成績(jī)中有補(bǔ)考的學(xué)生并保存在一個(gè)新文件4。txtn"); printf(”t3。 對(duì)合并后的文件3。txt中的數(shù)據(jù)按總分降序排序n”); printf("t4。 輸入一個(gè)學(xué)
42、生姓名,查找到此學(xué)生的信息并輸出結(jié)果n”);printf("t5。 退出n");printf("請(qǐng)選擇(1-5):n”);printf(”*n");sign3=1;scanf("%d”,choice);switch(choice) case 1: Unitedfile();sign=1;cout<"操作1成功!”endl;break; case 2: if(sign=0)cout”請(qǐng)執(zhí)行操作1后再執(zhí)行此項(xiàng)操作!”endl;break;cout”操作2成功!"<endl;;findout();break; case
43、 3:if(sign=0)cout<”請(qǐng)執(zhí)行操作1后再執(zhí)行此項(xiàng)操作!"<endl;break;sortfile();cout”操作3成功!"<endl;sign1=1;break; case 4:while(1)char c;findoutstudent();cout<”繼續(xù)查找請(qǐng)輸入Y:”endl;cout<<”返回主菜單請(qǐng)輸入N:"<<endl;cin>>c;if(c=Nc=n)break;sign3=0;break;case 5:exit(0);break; return 0;六、運(yùn)行結(jié)果與測(cè)試七、
44、設(shè)計(jì)體會(huì)與總結(jié)通過本次課程設(shè)計(jì),進(jìn)一步熟悉了數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的基本設(shè)計(jì)思想,加深了對(duì)于數(shù)據(jù)結(jié)構(gòu)的認(rèn)識(shí)。本系統(tǒng)為學(xué)生成績(jī)管理系統(tǒng),能夠用于基本的學(xué)生成績(jī)管理。在設(shè)計(jì)這個(gè)程序時(shí),首先我們要弄清楚文件的存儲(chǔ),你是怎么把文件中的數(shù)據(jù)轉(zhuǎn)移到另一個(gè)文件中去,之間的過程是什么樣的。按照題目的要求一步一步下來。怎么抽取文件3中三科成績(jī)中有補(bǔ)考的學(xué)生成績(jī)到文件4中。在設(shè)計(jì)這個(gè)程序時(shí),我遇到了很多困難,不知道文件是如何的進(jìn)行存儲(chǔ)的,怎么把其他文件中的數(shù)據(jù)傳遞到另個(gè)一文件中,兩個(gè)文件能同時(shí)打開吧數(shù)據(jù)傳遞到第三個(gè)文件中去嗎?怎么把文件中的數(shù)據(jù)調(diào)用到程序中來,被使用。在這次課程設(shè)計(jì)中,我發(fā)現(xiàn)寫代碼不是重要的,了解題目的
45、意思,會(huì)設(shè)計(jì)程序框架才是最重要的。知道程序內(nèi)部是怎么進(jìn)行實(shí)現(xiàn)的才是設(shè)計(jì)程序的關(guān)鍵。如果沒有以上的基本,根本學(xué)不出一個(gè)好的程序.稀疏矩陣應(yīng)用一、問題陳述:實(shí)現(xiàn)三元組,十字鏈表下的稀疏矩陣的加、轉(zhuǎn)、乘的實(shí)現(xiàn).(1)稀疏矩陣的存儲(chǔ)(2)稀疏矩陣加法(3)矩陣乘法(4)矩陣轉(zhuǎn)置二、程序代碼:#includestdio。hincludestdlib。hdefine MAXSIZE 100 int num100; typedef struct OLNodeint i,j;int e;struct OLNode right,down;OLNode,*OLink;typedef struct int mu,n
46、u,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("請(qǐng)輸入稀疏矩陣的行數(shù),列數(shù),非零元素的個(gè)數(shù):”); scanf("d%dd”,M。mu,&M。nu,M。tu)
47、;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("請(qǐng)輸入稀疏矩陣,如果行為0,則退出n”);scanf("ddd”,i,j,e);while(i!=0)p=(OLink)malloc(sizeof(OLNode));p>i=i;p>j=j;p->e=e;if
48、(M.rheadi=NULLM。rheadijj)pright=M.rheadi;M。rheadi=p;Elseq=M.rheadi;while(qright&qright>jj)q=qright;pright=q-right;qright=p;if(M。cheadj=NULLM。cheadj>ii)p-down=M。cheadj;M。cheadj=p;elseq=M。cheadj;while(q-down&&q-down>ii)q=q-down;pdown=q->down;qdown=p;scanf("dd%d”,i,j,&e
49、);return 0;/創(chuàng)建十字鏈表void CreateSMatrix(TSMatrix M)printf(”請(qǐng)輸入稀疏矩陣的行數(shù)、列數(shù)和非零元個(gè)數(shù):");scanf(”ddd”,M.mu,&M。nu,M。tu);if(M.mu<=0)|(M.nu=0)(M。tu<=0)(M。tu>M.muM。nu)) printf("輸入有誤!”);for(int i=1;i<=M。tu;i+)/輸入稀疏矩陣元素printf(”請(qǐng)輸入元素坐標(biāo)(所在行,所在列)及大小:”);scanf("%d%dd”,&M。datai.i,&M。
50、datai。j,&M。datai。e);if((M.datai。i<=0)(M。datai。j<=0))printf(”輸入錯(cuò)誤,請(qǐng)重新輸入”);scanf("%ddd”,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;for(i = 2; i <= M。mu; i+) M.rposi = M。rpos
51、i-1 + numi-1;/創(chuàng)建三元組Void TransposeSMatrix(TSMatrix M,TSMatrix T) T。nu=M。mu;T。mu=M。nu;T。tu=M.tu;int q=1;for(int col=1;col=M。nu;col+) for(int p=1;p=M。tu;p+)if(M。datap。j=col) T.dataq.i=M.datap。j;T.dataq.j=M。datap。i;T。dataq。e=M.datap.e;q+;/三元組轉(zhuǎn)置int Compare(int a1,int b1,int a2,int b2)if(a1>a2)return 1;else if(a1a2)return -1;else if(b1>b2)return 1;if(b1b2)return 1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版學(xué)校多功能廳裝修及音響設(shè)備采購(gòu)合同3篇
- 二零二五年度抽油煙機(jī)產(chǎn)品召回與責(zé)任承擔(dān)合同3篇
- 2025版學(xué)校游泳池水處理設(shè)備采購(gòu)與安裝承包合同示范3篇
- 二零二五年度文化藝術(shù)品交易合同三要素及鑒定流程2篇
- 2025年個(gè)人房產(chǎn)買賣交易資金托管服務(wù)合同2篇
- 2025借款采用什么形式訂立合同
- 2025培訓(xùn)機(jī)構(gòu)教師合同范本范文
- 2025個(gè)人承包合同樣本
- 二零二五年度新型門衛(wèi)管理系統(tǒng)采購(gòu)合同3篇
- 2025年度程序員入職及項(xiàng)目合作合同范本4篇
- 《企業(yè)人力資源管理師考試用書考試通過必備一級(jí)》
- 2023年高考英語(yǔ)考前必練-非謂語(yǔ)動(dòng)詞(含近三年真題及解析)
- 風(fēng)電工程需要編寫的專項(xiàng)施工方案及危大工程目錄
- 商業(yè)計(jì)劃書(BP)財(cái)務(wù)計(jì)劃風(fēng)險(xiǎn)控制資本退出與附錄的撰寫秘籍
- 全國(guó)職工拔河比賽執(zhí)行方案
- 冶金廠、軋鋼廠工藝流程圖
- 七年級(jí)下冊(cè)《Reading 1 A brave young man》優(yōu)質(zhì)課教案牛津譯林版-七年級(jí)英語(yǔ)教案
- 中國(guó)人婚戀狀況調(diào)查報(bào)告公布
- 《木蘭詩(shī)》第1第2課時(shí)示范公開課教學(xué)PPT課件【統(tǒng)編人教版七年級(jí)語(yǔ)文下冊(cè)】
- GB/T 11144-2007潤(rùn)滑液極壓性能測(cè)定法梯姆肯法
- 國(guó)家開發(fā)銀行
評(píng)論
0/150
提交評(píng)論