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

下載本文檔

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

文檔簡介

/序號:學(xué)號:課程設(shè)計設(shè)計課程名稱:C語言課程設(shè)計題目:矩陣的運(yùn)算學(xué)生姓名:**********學(xué)院〔系:*********專業(yè)班級:*********指導(dǎo)教師:*******專業(yè)技術(shù)職務(wù):設(shè)計時間:****年*月**日****年*月**日目錄矩陣運(yùn)算任務(wù)書……………3描述及繪制出系統(tǒng)的功能結(jié)構(gòu)框圖………7C語言程序代碼……………8使用說明……………………15設(shè)計日志及心得體會………16"矩陣運(yùn)算"任務(wù)書一、目的要求本課程設(shè)計任務(wù)的目的是要求學(xué)生按照分析、設(shè)計、編碼、調(diào)試和測試的軟件開發(fā)過程獨立完成一個矩陣運(yùn)算子程序集,并能最終實現(xiàn)本系統(tǒng)的功能要求。二、功能要求[題目描述]矩陣運(yùn)算是大多數(shù)科學(xué)運(yùn)算的必要工具。假定所有矩陣均以文本文件形式保存,試編寫程序,處理簡單的矩陣運(yùn)算。矩陣文件每一行以文本保存矩陣中一行數(shù)據(jù)每個數(shù)據(jù)之間以一個或者多個空格隔開。目前矩陣僅保存整數(shù)值。下面是一個矩陣文件例子:文件名:matrix1.txt1123-431-14520056567891011121413你的程序需要實現(xiàn)以下功能:1.矩陣加法。2.矩陣轉(zhuǎn)置3.矩陣乘法[程序要求]〔1 程序正確。能夠嚴(yán)格實現(xiàn)任務(wù)書中描述的功能;〔2 界面友好。盡可能使界面友好、直觀、易操作;〔3 風(fēng)格友好。源程序應(yīng)有良好的編碼風(fēng)格,使程序容易閱讀?!?從文件中讀矩陣,將矩陣寫入文件,矩陣3個操作均需要以子程序形式編寫。[輸入/輸出要求]〔1每項功能在選擇后,應(yīng)提示用戶輸入源矩陣所在文件名,并檢驗該文件是否存在,但是并不讀取該文件內(nèi)容。然后再提示用戶輸入結(jié)果矩陣文件名。通過子程序讀取矩陣數(shù)據(jù),將運(yùn)算結(jié)果同時輸出到文件和屏幕上。〔2所有源矩陣均可使用記事本生成?!?若main函數(shù)帶有參數(shù)repeat則所有讀取矩陣和運(yùn)算函數(shù)操作均需重復(fù)10000次。[課程設(shè)計報告內(nèi)容要求]〔1 封面:統(tǒng)一采用《XX大學(xué)課程設(shè)計說明書》封面〔2 內(nèi)容提要〔3 目錄〔4 "課程設(shè)計報告"正文格式1 概述所作系統(tǒng)的主要功能;2 分析和描述任務(wù)書的基本要求與內(nèi)容;3 描述及繪制出系統(tǒng)的功能結(jié)構(gòu)框圖;4 C語言程序代碼;5 使用說明;6 設(shè)計日志以及心得體會三、難點提示輸入矩陣沒有限定大小,不能采用靜態(tài)數(shù)組來實現(xiàn),需要使用動態(tài)數(shù)組技術(shù)。main函數(shù)參數(shù)的檢測和使用參見教材相應(yīng)內(nèi)容。3、菜單部分樣例代碼可參閱網(wǎng)絡(luò)課堂里相關(guān)幫助——頂層菜單設(shè)計框架。概述系統(tǒng)的主要功能假定矩陣文件每一行以文本形式保存,矩陣中的一行數(shù)據(jù)中每個數(shù)據(jù)之間以一個或多個空格隔開,目前矩陣僅保存整數(shù)值。本程序通過文件操作及動態(tài)內(nèi)存分配技術(shù)實現(xiàn)簡單的矩陣運(yùn)算,包括矩陣加法〔Plus,矩陣轉(zhuǎn)置<Transpose>,矩陣乘法<Multiply>。運(yùn)行程序時,首先提示用戶選擇相應(yīng)功能選項,每項功能在選擇后,提示用戶輸入源矩陣所在文件名,程序檢驗該文件是否存在,但不讀取該文件內(nèi)容。然后再提示用戶輸入結(jié)果矩陣所在文件名,通過子程序讀取矩陣數(shù)據(jù),將運(yùn)算結(jié)果同時輸?shù)轿募推聊簧?。描述及繪制出系統(tǒng)的功能結(jié)構(gòu)框圖首先選擇相應(yīng)的功能,打開文件,讀取數(shù)據(jù),進(jìn)行各項功能的操作,輸出結(jié)果,關(guān)閉文件,再次選擇相應(yīng)的功能。功能選擇加法功能選擇加法轉(zhuǎn)置相乘打開所要執(zhí)行的文件輸出數(shù)據(jù)關(guān)閉相應(yīng)文件退出C語言程序代碼#include<stdio.h>#include<stdio.h>#include<stdlib.h>#include<conio.h>voidPlus<>{ FILE*fp1,*fp2,*fp3; printf<"請輸入兩個源矩陣所在文件名:\n">; charfilename1[15],filename2[15],filename3[15]; scanf<"%s%s",filename1,filename2>; if<<fp1=fopen<filename1,"r">>==NULL||<fp2=fopen<filename2,"r">>==NULL> { printf<"can'topenfile">; exit<0>; } printf<"請輸入結(jié)果矩陣所在文件名:\n">; scanf<"%s",filename3>; fp3=fopen<filename3,"w">; int*p,C=0,R=0,l=0,r=0,i,j,jk1,jk2,jk3; printf<"\n">; charch; ch=fgetc<fp1>; while<!feof<fp1>> { ch=fgetc<fp1>; if<ch==''> C++; if<ch=='\n'> R++; } C=C/R+1; printf<"R=%d,C=%d\n",R,C>;rewind<fp1>;ch=fgetc<fp2>; while<!feof<fp2>> { ch=fgetc<fp2>; if<ch==''> l++; if<ch=='\n'> r++; } l=l/r+1; printf<"r=%d,l=%d\n",r,l>;rewind<fp2>; fscanf<fp1,"%d",&jk1>; fscanf<fp2,"%d",&jk2>; if<jk1!=''&&jk1!='\n'> { jk3=jk1+jk2; printf<"%d\t",jk3>; fprintf<fp3,"%d\t",jk3>; } } printf<"\n">; fprintf<fp3,"\n">; } free<p>; fclose<fp1>; fclose<fp2>; fclose<fp3>; printf<"****************按任意鍵繼續(xù)*****************\n">; getch<>; } elseexit<0>;}voidTranspose<>{ FILE*fp1,*fp2; printf<"請輸入一個源矩陣所在文件名:\n">; charfilename1[15],filename2[15]; scanf<"%s",filename1>; if<<fp1=fopen<filename1,"r">>==NULL>//判斷是否能打開文件 { printf<"cannotopenfile">; exit<0>; } printf<"請輸入結(jié)果矩陣所在名:\n">; scanf<"%s",filename2>; fp2=fopen<filename2,"w">; int**p,C=0,R=0,t=0,i,j,jk1; printf<"\n">; charch; ch=fgetc<fp1>; while<!feof<fp1>>//算出矩陣的行列數(shù) { ch=fgetc<fp1>; if<ch==''> C++; if<ch=='\n'> R++; } C=C/<R+1>+1; R=R+1;rewind<fp1>;p=<int**>malloc<R*sizeof<int*>>;//申請動態(tài)內(nèi)存分配 for<i=0;i<R;i++> {p[i]=<int*>malloc<C*sizeof<int>>; for<j=0;j<C;j++> {fscanf<fp1,"%d",&jk1>;if<<jk1!=''>&&<jk1!='\n'>> p[i][j]=jk1; } } for<i=0;i<C;i++> { for<j=0;j<R;j++> { printf<"%d\t",p[j][i]>; fprintf<fp2,"%d\t",p[j][i]>; } printf<"\n">; fprintf<fp2,"\n">; } for<i=0;i<R;i++>{free<p[i]>;}free<p>; fclose<fp1>; fclose<fp2>; printf<"****************按任意鍵繼續(xù)*****************\n">; getch<>;}voidMultiply<>{ FILE*fp1,*fp2,*fp3; printf<"請輸入兩個院矩陣所在文件名:\n">; charfilename1[15],filename2[15],filename3[15]; scanf<"%s%s",filename1,filename2>; if<<fp1=fopen<filename1,"r">>==NULL||<fp2=fopen<filename2,"r">>==NULL>//判斷矩陣是否能打開 { printf<"cannotopenfile">; exit<0>; } printf<"請輸入結(jié)果矩陣所在文件名:\n">; scanf<"%s",filename3>; fp3=fopen<filename3,"w">; int**p1,**p2,C=0,R=0,l=0,r=0,sum=0,a,i,j,jk1; printf<"\n">; charch; ch=fgetc<fp1>; while<!feof<fp1>>//算出矩陣的行列數(shù) { ch=fgetc<fp1>; if<ch==''> C++; if<ch=='\n'> R++; } C=C/<R+1>+1; R=R+1;rewind<fp1>;ch=fgetc<fp2>; while<!feof<fp2>> { ch=fgetc<fp2>; if<ch==''> l++; if<ch=='\n'> r++; } l=l/<r+1>+1; r=r+1;rewind<fp2>;p1=<int**>malloc<R*sizeof<int*>>;//申請動態(tài)內(nèi)存分配for<i=0;i<R;i++> {p1[i]=<int*>malloc<C*sizeof<int>>; for<j=0;j<C;j++> {fscanf<fp1,"%d",&jk1>;if<<jk1!=''>&&<jk1!='\n'>> p1[i][j]=jk1; } }p2=<int**>malloc<r*sizeof<int*>>;for<i=0;i<r;i++> {p2[i]=<int*>malloc<l*sizeof<int>>; for<j=0;j<l;j++> {fscanf<fp2,"%d",&jk1>;if<<jk1!=''>&&<jk1!='\n'>> p2[i][j]=jk1; } } for<i=0;i<R;i++> { for<a=0;a<l;a++> { sum=0; for<j=0;j<C;j++> sum+=p1[i][j]*p2[j][a]; printf<"%d\t",sum>; fprintf<fp3,"%d\t",sum>; } printf<"\n">; fprintf<fp3,"\n">; } for<i=0;i<R;i++>{free<p1[i]>;}free<p1>;for<i=0;i<r;i++>{ free<p2[i]>;}free<p2>; fclose<fp1>; fclose<fp2>; fclose<fp3>; printf<"****************按任意鍵繼續(xù)*****************\n">; getch<>;}voidmain<>{ chari;loop: system<"cls">; printf<"****************************************\n">; printf<"╔═══╧╧矩陣運(yùn)算╧╧════════════╗\n">; printf<"║*******請輸入運(yùn)算方式*******║\n">; printf<"║※1:加法║\n">; printf<"║※2:轉(zhuǎn)置║\n">; printf<"║※3:乘法║\n">; printf<"║※4:退出║\n">; printf<"╚═════════════════════════════╝\n">; printf<"請輸入選項[1\\2\\3\\4]:\n">; while<i=getch<>> { switch<i> { case'1':Plus<>;gotoloop; case'2':Transpose<>;gotoloop; case'3':Multiply<>;gotoloop; case'4':exit<0>; } } gotoloop; { for<j=0;j<C;j++> { fscanf<fp1,"%d",&jk1>; fscanf<fp2,"%d",&jk2>; if<jk1!=''&&jk1!='\n'> { jk3=jk1+jk2; printf<"%d\t",jk3>; fprintf<fp3,"%d\t",jk3>; } } printf<"\n">; fprintf<fp3,"\n">; } free<p>; fclose<fp1>; fclose<fp2>; fclose<fp3>; printf<"****************按任意鍵繼續(xù)*****************\n">; getch<>; }}} l=l/r+1; printf<"r=%d,l=%d\n",r,l>;rewind<fp2>; if<l==C&&r==R> {p=<int*>calloc<R,C*sizeof<int>>; for<i=0;i<R;i++> { for<j=0;j<C;j++> { fscanf<fp1,"%d",&jk1>; fscanf<fp2,"%d",&jk2>; if<j==C-1> { printf<"%d",jk1+jk2>; fprintf<fp3,"%d",jk1+jk2>; continue; }if<jk1!=''&&jk1!='\n'> { jk3=jk1+jk2; printf<"%d",jk3>; fprintf<fp3,"%d",jk3>; } } printf<"\n">; fprintf<fp3,"\n">; } free<p>; fclose<fp1>; fclose<fp2>; fclose<fp3>; printf<"****************按任意鍵繼續(xù)*****************\n">; getch<>; } else {printf<"兩個矩陣不能相加">; exit<0>; }}voidTranspose<>voidTranspose<>{ FILE*fp1,*fp2; printf<"請輸入一個源矩陣所在文件名:\n">; charfilename1[15],filename2[15]; scanf<"%s",filename1>; if<<fp1=fopen<filename1,"r">>==NULL> { printf<"can'topenfile">; exit<0>; } printf<"請輸入結(jié)果矩陣所在名:\n">; scanf<"%s",filename2>; fp2=fopen<filename2,"w">; int**p,C=0,R=0,t=0,i,j,jk1; printf<"\n">; charch; ch=fgetc<fp1>; while<!feof<fp1>> { ch=fgetc<fp1>; if<ch==''> C++; if<ch=='\n'> R++; } C=C/R+1;rewind<fp1>;p=<int**>malloc<R*sizeof<int*>>; for<i=0;i<R;i++> {p[i]=<int*>malloc<C*sizeof<int>>; for<j=0;j<C;j++> {fscanf<fp1,"%d",&jk1>;if<<jk1!=''>&&<jk1!='\n'>> p[i][j]=jk1; } }for<i=0;i<C;i++>for<i=0;i<C;i++> { for<j=0;j<R;j++> { if<j==R-1> { printf<"%d",p[j][i]>; fprintf<fp2,"%d",p[j][i]>; continue; }printf<"%d",p[j][i]>; fprintf<fp2,"%d",p[j][i]>; } printf<"\n">; fprintf<fp2,"\n">; } for<i=0;i<R;i++>{free<p[i]>;}free<p>; fclose<fp1>; fclose<fp2>; printf<"****************按任意鍵繼續(xù)*****************\n">; getch<>;}voidMultiply<>{ FILE*fp1,*fp2,*fp3; printf<"請輸入兩個源矩陣所在文件名:\n">; charfilename1[15],filename2[15],filename3[15]; scanf<"%s%s",filename1,filename2>; if<<fp1=fopen<filename1,"r">>==NULL||<fp2=fopen<filename2,"r">>==NULL> { printf<"can'topenfile">; exit<0>; }printf<"printf<"請輸入結(jié)果矩陣所在文件名:\n">; scanf<"%s",filename3>; fp3=fopen<filename3,"w">; int**p1,**p2,C=0,R=0,l=0,r=0,sum=0,a,i,j,jk1; printf<"\n">; charch; ch=fgetc<fp1>; while<!feof<fp1>> { ch=fgetc<fp1>; if<ch==''> C++; if<ch=='\n'> R++; } C=C/R+1;rewind<fp1>;ch=fgetc<fp2>; while<!feof<fp2>> { ch=fgetc<fp2>; if<ch==''> l++; if<ch=='\n'> r++; } l=l/r+1;rewind<fp2>;if<C==r>//判斷兩個矩陣能否相乘{(lán) p1=<int**>malloc<R*sizeof<int*>>;for<i=0;i<R;i++> {p1[i]=<int*>malloc<C*sizeof<int>>; for<j=0;j<C;j++> {fscanf<fp1,"%d",&jk1>;if<<jk1!=''>&&<jk1!='\n'>> p1[i][j]=jk1; } }p2=<int**>malloc<r*sizeof<int*>>;for<i=0;i<r;i++>for<i=0;i<r;i++> {p2[i]=<int*>malloc<l*sizeof<int>>; for<j=0;j<l;j++> {fscanf<fp2,"%d",&jk1>;if<<jk1!=''>&&<jk1!='\n'>> p2[i][j]=jk1; } } for<i=0;i<R;i++> { for<a=0;a<l;a++> { sum=0; for<j=0;j<C;j++> sum+=p1[i][j]*p2[j][a];if<a==l-1> { printf<"%d\t",sum>; fprintf<fp3,"%d\t",sum>; continue; }printf<"%d",sum>; fprintf<fp3,"%d",sum>; } printf<"\n">; fprintf<fp3,"\n">; } for<i=0;i<R;i++>{free<p1[i]>;}free<p1>;for<i=0;i<r;i++>{ free<p2[i]>;}free<p2>; fclose<fp1>; fclose<fp2>; fclose<fp3>; printf<"****************按任意鍵繼續(xù)*****************\n">; getch<>;}else{ printf<"兩個矩陣不能相乘">; exit<0>;}}getch<>;getch<>;}else{ printf<"兩個矩陣不能相乘">; exit<0>;}}voidmain<>{ chari;loop: system<"cls">; printf<"****************************************\n">; printf<"╔═══╧╧矩陣運(yùn)算╧╧═══════════╗\n">; printf<"║*******請輸入運(yùn)算方式*******║\n">; printf<"║※1:加法║\n">; printf<"║※2:轉(zhuǎn)置║\n">; printf<"║※3:乘法║\n">; printf<"║※4:退出║\n">; printf<"╚═══════

溫馨提示

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

最新文檔

評論

0/150

提交評論