C語言程序設計報告矩陣運算_第1頁
C語言程序設計報告矩陣運算_第2頁
C語言程序設計報告矩陣運算_第3頁
C語言程序設計報告矩陣運算_第4頁
C語言程序設計報告矩陣運算_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課程設計設計課程名稱:C語言課程設計題目:矩陣的運算

目錄矩陣運算任務書……………3描述及繪制出系統(tǒng)的功能結構框圖………7C語言程序代碼……………8使用說明……………………15設計日志及心得體會………16

"矩陣運算"任務書一、目的要求本課程設計任務的目的是要求學生按照分析、設計、編碼、調(diào)試和測試的軟件開發(fā)過程獨立完成一個矩陣運算子程序集,并能最終實現(xiàn)本系統(tǒng)的功能要求;二、功能要求題目描述矩陣運算是大多數(shù)科學運算的必要工具;假定所有矩陣均以文本文件形式保存,試編寫程序,處理簡單的矩陣運算;矩陣文件每一行以文本保存矩陣中一行數(shù)據(jù)每個數(shù)據(jù)之間以一個或者多個空格隔開;目前矩陣僅保存整數(shù)值;下面是一個矩陣文件例子:文件名:1123-431-14520056567891011121413你的程序需要實現(xiàn)以下功能:1. 矩陣加法;2. 矩陣轉(zhuǎn)置3. 矩陣乘法程序要求1 程序正確;能夠嚴格實現(xiàn)任務書中描述的功能;2 界面友好;盡可能使界面友好、直觀、易操作;3 風格友好;源程序應有良好的編碼風格,使程序容易閱讀;4從文件中讀矩陣,將矩陣寫入文件,矩陣3個操作均需要以子程序形式編寫;輸入/輸出要求1每項功能在選擇后,應提示用戶輸入源矩陣所在文件名,并檢驗該文件是否存在,但是并不讀取該文件內(nèi)容;然后再提示用戶輸入結果矩陣文件名;通過子程序讀取矩陣數(shù)據(jù),將運算結果同時輸出到文件和屏幕上;2所有源矩陣均可使用記事本生成;3若main函數(shù)帶有參數(shù)repeat則所有讀取矩陣和運算函數(shù)操作均需重復10000次;課程設計報告內(nèi)容要求1 封面:統(tǒng)一采用常州大學課程設計說明書封面2 內(nèi)容提要3 目錄4 “課程設計報告”正文格式1 概述所作系統(tǒng)的主要功能;2 分析和描述任務書的基本要求與內(nèi)容;3 描述及繪制出系統(tǒng)的功能結構框圖;4 C語言程序代碼;5 使用說明;6 設計日志以及心得體會三、難點提示輸入矩陣沒有限定大小,不能采用靜態(tài)數(shù)組來實現(xiàn),需要使用動態(tài)數(shù)組技術;main函數(shù)參數(shù)的檢測和使用參見教材相應內(nèi)容;3、菜單部分樣例代碼可參閱網(wǎng)絡課堂里相關幫助——頂層菜單設計框架;概述系統(tǒng)的主要功能假定矩陣文件每一行以文本形式保存,矩陣中的一行數(shù)據(jù)中每個數(shù)據(jù)之間以一個或多個空格隔開,目前矩陣僅保存整數(shù)值;本程序通過文件操作及動態(tài)內(nèi)存分配技術實現(xiàn)簡單的矩陣運算,包括矩陣加法Plus,矩陣轉(zhuǎn)置Transpose,矩陣乘法Multiply;運行程序時,首先提示用戶選擇相應功能選項,每項功能在選擇后,提示用戶輸入源矩陣所在文件名,程序檢驗該文件是否存在,但不讀取該文件內(nèi)容;然后再提示用戶輸入結果矩陣所在文件名,通過子程序讀取矩陣數(shù)據(jù),將運算結果同時輸?shù)轿募推聊簧?描述及繪制出系統(tǒng)的功能結構框圖首先選擇相應的功能,打開文件,讀取數(shù)據(jù),進行各項功能的操作,輸出結果,關閉文件,再次選擇相應的功能;功能選擇加法功能選擇加法轉(zhuǎn)置相乘打開所要執(zhí)行的文件輸出數(shù)據(jù)關閉相應文件退出C語言程序代碼include<>include<>include<>include<>voidPlus{ FILEfp1,fp2,fp3; printf"請輸入兩個源矩陣所在文件名:\n"; charfilename115,filename215,filename315; scanf"%s%s",filename1,filename2; iffp1=fopenfilename1,"r"==NULL||fp2=fopenfilename2,"r"==NULL { printf"can'topenfile"; exit0; } printf"請輸入結果矩陣所在文件名:\n"; scanf"%s",filename3; fp3=fopenfilename3,"w"; intp,C=0,R=0,l=0,r=0,i,j,jk1,jk2,jk3; printf"\n"; charch; ch=fgetcfp1; whilefeoffp1 { ch=fgetcfp1; ifch=='' C++; ifch=='\n' R++; } C=C/R+1; printf"R=%d,C=%d\n",R,C;rewindfp1;ch=fgetcfp2; whilefeoffp2 { ch=fgetcfp2; ifch=='' l++; ifch=='\n' r++; } l=l/r+1; printf"r=%d,l=%d\n",r,l;rewindfp2; fscanffp1,"%d",&jk1; fscanffp2,"%d",&jk2; ifjk1=''&&jk1='\n' { jk3=jk1+jk2; printf"%d\t",jk3; fprintffp3,"%d\t",jk3; } } printf"\n"; fprintffp3,"\n"; } freep; fclosefp1; fclosefp2; fclosefp3; printf"按任意鍵繼續(xù)\n"; getch; } elseexit0;}voidTranspose{ FILEfp1,fp2; printf"請輸入一個源矩陣所在文件名:\n"; charfilename115,filename215; scanf"%s",filename1; iffp1=fopenfilename1,"r"==NULL//判斷是否能打開文件 { printf"cannotopenfile"; exit0; } printf"請輸入結果矩陣所在名:\n"; scanf"%s",filename2; fp2=fopenfilename2,"w"; intp,C=0,R=0,t=0,i,j,jk1; printf"\n"; charch; ch=fgetcfp1; whilefeoffp1//算出矩陣的行列數(shù) { ch=fgetcfp1; ifch=='' C++; ifch=='\n' R++; } C=C/R+1+1; R=R+1;rewindfp1;p=intmallocRsizeofint;//申請動態(tài)內(nèi)存分配 fori=0;i<R;i++ {pi=intmallocCsizeofint; forj=0;j<C;j++ {fscanffp1,"%d",&jk1;ifjk1=''&&jk1='\n' pij=jk1; } } fori=0;i<C;i++ { forj=0;j<R;j++ { printf"%d\t",pji; fprintffp2,"%d\t",pji; } printf"\n"; fprintffp2,"\n"; } fori=0;i<R;i++{freepi;}freep; fclosefp1; fclosefp2; printf"按任意鍵繼續(xù)\n"; getch;}voidMultiply{ FILEfp1,fp2,fp3; printf"請輸入兩個院矩陣所在文件名:\n"; charfilename115,filename215,filename315; scanf"%s%s",filename1,filename2; iffp1=fopenfilename1,"r"==NULL||fp2=fopenfilename2,"r"==NULL//判斷矩陣是否能打開 { printf"cannotopenfile"; exit0; } printf"請輸入結果矩陣所在文件名:\n"; scanf"%s",filename3; fp3=fopenfilename3,"w"; intp1,p2,C=0,R=0,l=0,r=0,sum=0,a,i,j,jk1; printf"\n"; charch; ch=fgetcfp1; whilefeoffp1//算出矩陣的行列數(shù) { ch=fgetcfp1; ifch=='' C++; ifch=='\n' R++; } C=C/R+1+1; R=R+1;rewindfp1;ch=fgetcfp2; whilefeoffp2 { ch=fgetcfp2; ifch=='' l++; ifch=='\n' r++; } l=l/r+1+1; r=r+1;rewindfp2;p1=intmallocRsizeofint;//申請動態(tài)內(nèi)存分配fori=0;i<R;i++ {p1i=intmallocCsizeofint; forj=0;j<C;j++ {fscanffp1,"%d",&jk1;ifjk1=''&&jk1='\n' p1ij=jk1; } }p2=intmallocrsizeofint;fori=0;i<r;i++ {p2i=intmalloclsizeofint; forj=0;j<l;j++ {fscanffp2,"%d",&jk1;ifjk1=''&&jk1='\n' p2ij=jk1; } } fori=0;i<R;i++ { fora=0;a<l;a++ { sum=0; forj=0;j<C;j++ sum+=p1ijp2ja; printf"%d\t",sum; fprintffp3,"%d\t",sum; } printf"\n"; fprintffp3,"\n"; } fori=0;i<R;i++{freep1i;}freep1;fori=0;i<r;i++{ freep2i;}freep2; fclosefp1; fclosefp2; fclosefp3; printf"按任意鍵繼續(xù)\n"; getch;}voidmain{ chari;loop: system"cls"; printf"\n"; printf"╔═══╧╧矩陣運算╧╧════════════╗\n"; printf"║請輸入運算方式║\n"; printf"║※1:加法║\n"; printf"║※2:轉(zhuǎn)置║\n"; printf"║※3:乘法║\n"; printf"║※4:退出║\n"; printf"╚═════════════════════════════╝\n"; printf"請輸入選項1\\2\\3\\4:\n"; whilei=getch { switchi { case'1':Plus;gotoloop; case'2':Transpose;gotoloop; case'3':Multiply;gotoloop; case'4':exit0; } } gotoloop; { forj=0;j<C;j++ { fscanffp1,"%d",&jk1; fscanffp2,"%d",&jk2; ifjk1=''&&jk1='\n' { jk3=jk1+jk2; printf"%d\t",jk3; fprintffp3,"%d\t",jk3; } } printf"\n"; fprintffp3,"\n"; } freep; fclosefp1; fclosefp2; fclosefp3; printf"按任意鍵繼續(xù)\n"; getch; }}} l=l/r+1; printf"r=%d,l=%d\n",r,l;rewindfp2; ifl==C&&r==R {p=intcallocR,Csizeofint; fori=0;i<R;i++ { forj=0;j<C;j++ { fscanffp1,"%d",&jk1; fscanffp2,"%d",&jk2; ifj==C-1 { printf"%d",jk1+jk2; fprintffp3,"%d",jk1+jk2; continue; }ifjk1=''&&jk1='\n' { jk3=jk1+jk2; printf"%d",jk3; fprintffp3,"%d",jk3; } } printf"\n"; fprintffp3,"\n"; } freep; fclosefp1; fclosefp2; fclosefp3; printf"按任意鍵繼續(xù)\n"; getch; } else {printf"兩個矩陣不能相加"; exit0; }}voidTransposevoidTranspose{ FILEfp1,fp2; printf"請輸入一個源矩陣所在文件名:\n"; charfilename115,filename215; scanf"%s",filename1; iffp1=fopenfilename1,"r"==NULL { printf"can'topenfile"; exit0; } printf"請輸入結果矩陣所在名:\n"; scanf"%s",filename2; fp2=fopenfilename2,"w"; intp,C=0,R=0,t=0,i,j,jk1; printf"\n"; charch; ch=fgetcfp1; whilefeoffp1 { ch=fgetcfp1; ifch=='' C++; ifch=='\n' R++; } C=C/R+1;rewindfp1;p=intmallocRsizeofint; fori=0;i<R;i++ {pi=intmallocCsizeofint; forj=0;j<C;j++ {fscanffp1,"%d",&jk1;ifjk1=''&&jk1='\n' pij=jk1; } }fori=0;i<C;i++fori=0;i<C;i++ { forj=0;j<R;j++ { ifj==R-1 { printf"%d",pji; fprintffp2,"%d",pji; continue; }printf"%d",pji; fprintffp2,"%d",pji; } printf"\n"; fprintffp2,"\n"; } fori=0;i<R;i++{freepi;}freep; fclosefp1; fclosefp2; printf"按任意鍵繼續(xù)\n"; getch;}voidMultiply{ FILEfp1,fp2,fp3; printf"請輸入兩個源矩陣所在文件名:\n"; charfilename115,filename215,filename315; scanf"%s%s",filename1,filename2; iffp1=fopenfilename1,"r"==NULL||fp2=fopenfilename2,"r"==NULL { printf"can'topenfile"; exit0; }printf"printf"請輸入結果矩陣所在文件名:\n"; scanf"%s",filename3; fp3=fopenfilename3,"w"; intp1,p2,C=0,R=0,l=0,r=0,sum=0,a,i,j,jk1; printf"\n"; charch; ch=fgetcfp1; whilefeoffp1 { ch=fgetcfp1; ifch=='' C++; ifch=='\n' R++; } C=C/R+1;rewindfp1;ch=fgetcfp2; whilefeoffp2 { ch=fgetcfp2; ifch=='' l++; ifch=='\n' r++; } l=l/r+1;rewindfp2;ifC==r//判斷兩個矩陣能否相乘{ p1=intmallocRsizeofint;fori=0;i<R;i++ {p1i=intmallocCsizeofint; forj=0;j<C;j++ {fscanffp1,"%d",&jk1;ifjk1=''&&jk1='\n' p1ij=jk1; } }p2=intmallocrsizeofint;fori=0;i<r;i++fori=0;i<r;i++ {p2i=intmalloclsizeofint; forj=0;j<l;j++ {fscanffp2,"%d",&jk1;ifjk1=''&&jk1='\n' p2ij=jk1; } } fori=0;i<R;i++ { fora=0;a<l;a++ { sum=0; forj=0;j<C;j++ sum+=p1ijp2ja;ifa==l-1 { printf"%d\t",sum; fprintffp3,"%d\t",sum; continue; }printf"%d",sum; fprintffp3,"%d",sum; } printf"\n"; fprintffp3,"\n"; } fori=0;i<R;i++{freep1i;}freep1;fori=0;i<r;i++{ freep2i;}freep2; fclosefp1; fclosefp2; fclosefp3; printf"按任意鍵繼續(xù)\n"; getch;}else{ printf"兩個矩陣不能相乘"; exit0;}}getch;getch;}else{ printf"兩個矩陣不能相乘"; exit0;}}voidmain{ chari;loop: system"cls"; printf"\n"; printf"╔═══╧╧矩陣運算╧╧═══════════╗\n"; printf"║請輸入運算方式║\n"; printf"║※1:加法║\n"; printf"║※2:轉(zhuǎn)置║\n"; printf"║※3:乘法║\n"; printf"║※4:退出║\n"; printf"╚════════════════════════════╝\n"; printf"請輸入選項1\\2\\3\\4:\n"; whilei=getch { switchi { case'1':Plus;gotoloop; case'2':Transpose;

溫馨提示

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

評論

0/150

提交評論