這段**是我剛寫的,不是什麼技巧性很強的東西,完全都是基礎。上午線性代數講了矩陣乘法,下午沒課,尋思著自己也好久沒寫程式了,不如就拿矩陣乘法開刀,熟悉一下c語言…順便也可以用來做線性代數的作業…=_=
恩,**有些長,我只是想多回顧一下以前的知識…這段**用到了函式、指向指標的指標、函式指標、檔案操作…加了注釋方便需要的童鞋理解…
**可能還不完善…以後學得更多了再改吧…
2009.3.23 增加記憶體釋放函式
/*
矩陣乘法c語言實現
slyar 2009.3.20
*/#include
#include
/* 給 int 型別定義別名 datatype */
typedef
int datatype;
/* 函式宣告部分 */
datatype** create(int m, int n);
void reset(datatype**, int, int);
void input(datatype**, int, int);
void output(datatype**, int, int);
void matrixmutiply(datatype**, datatype**, datatype**);
void matrixfree(datatype** , int);
/* 定義三個矩陣的行列大小 */
int row_a, col_a;
int row_b, col_b;
int row_c, col_c;
/* 定義檔案指標 */
file *fp;
int main()
/* 建立並讀入矩陣a */
fscanf(fp,"%d%d", &row_a, &col_a);
a=create(row_a, col_a);
input(a,row_a, col_a);
/* 建立並讀入矩陣b */
fscanf(fp,"%d%d", &row_b, &col_b);
b = create(row_b, col_b);
input(b,row_b, col_b);
/* 關閉輸入檔案 */
fclose(fp);
/* 以寫入方式開啟輸出檔案 out.txt */
if((fp = fopen("out.txt","w")) == null)
/* 判斷兩個矩陣能否相乘 */
if(col_a == row_b)
else
/* 建立並初始化結果矩陣c */
c = create(row_c, col_c);
reset(c, row_c, col_c);
/* 進行矩陣乘法運算 */
matrixmutiply(a, b, c);
/* 輸出結果矩陣c */
output(c, row_c, col_c);
/* 關閉輸出檔案 */
fclose(fp);
/* 釋放矩陣記憶體 */
matrixfree(a,row_a);
matrixfree(b,row_b);
matrixfree(c,row_c);
//system("pause");
return0;}
/* 為矩陣動態分配記憶體的函式 */
datatype** create(int m, int n)
return matrix;
}/* 初始化矩陣函式 */
void reset(datatype** matrix, int m, int n)
}}/* 讀入資料函式 */
void input(datatype** matrix, int m, int n)
}}/* 輸出資料函式 */
void output(datatype** matrix, int m, int n)
fprintf(fp,"\n");
}}/* 矩陣乘法運算函式 */
void matrixmutiply(datatype** a, datatype** b, datatype** c)}}
}/* 釋放矩陣記憶體函式 */
void matrixfree(datatype** matrix, int m)
free(matrix);
}
很多人可能會對in.txt內容有疑問 貼圖一張(我是在sublime text中編輯的文字plain text,儲存為了in.txt)
矩陣行 矩陣列(空格分開)
矩陣內容(空格分開)
矩陣行 矩陣列(空格分開)
矩陣內容(空格分開)
執行完成後在工作目錄產生了乙個out.txt檔案
內容如下
檔案輸入輸出I O
file主要用於在磁碟上讀寫檔案 1 在程式中,用file和jfilechoose讓使用者定義或者指定乙個檔案 2 在檔案中,用fileoutputstream和fileinputstream讀寫位元組 3 在檔案中,用dataoutputstream和datainputstream讀寫原始資料型別...
檔案輸入輸出(IO)
模式描述 r開啟乙個已有的文字檔案,允許讀取檔案。w開啟乙個文字檔案,允許寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會從檔案的開頭寫入內容。如果檔案存在,則該會被截斷為零長度,重新寫入。a開啟乙個文字檔案,以追加模式寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會...
fork子程序使用 exit而不是用exit函式
exit 與 exit 有不少區別在使用 fork 特別是 vfork 時變得很 突出。exit 與 exit 的基本區別在於前乙個呼叫實施與呼叫庫里使用者狀態結構 user mode constructs 有關的清除工作 clean up 而且呼叫使用者自定義的清除程式 譯者注 自定義清除程式由a...