用文件IO而不是stdio输入输出
2016-07-17 17:12
519 查看
文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。
这段代码是我刚写的,不是什么技巧性很强的东西,完全都是基础。上午线性代数讲了矩阵乘法,下午没课,寻思着自己也好久没写程序了,不如就拿矩阵乘法开刀,熟悉一下C语言…顺便也可以用来做线性代数的作业…=_=
恩,代码有些长,我只是想多回顾一下以前的知识…这段代码用到了函数、指向指针的指针、函数指针、文件操作…加了注释方便需要的童鞋理解…
代码可能还不完善…以后学得更多了再改吧…
2009.3.23 增加内存释放函数
很多人可能会对in.txt内容有疑问 贴图一张(我是在sublime text中编辑的文本plain text,保存为了in.txt)
矩阵行 矩阵列(空格分开)
矩阵内容(空格分开)
矩阵行 矩阵列(空格分开)
矩阵内容(空格分开)
运行完成后在工作目录产生了一个out.txt文件
内容如下
这段代码是我刚写的,不是什么技巧性很强的东西,完全都是基础。上午线性代数讲了矩阵乘法,下午没课,寻思着自己也好久没写程序了,不如就拿矩阵乘法开刀,熟悉一下C语言…顺便也可以用来做线性代数的作业…=_=
恩,代码有些长,我只是想多回顾一下以前的知识…这段代码用到了函数、指向指针的指针、函数指针、文件操作…加了注释方便需要的童鞋理解…
代码可能还不完善…以后学得更多了再改吧…
2009.3.23 增加内存释放函数
/* 矩阵乘法C语言实现 Slyar 2009.3.20 */ #include <stdio.h> #include <stdlib.h> /* 给 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() { int i; datatype **a, **b, **c; /* 以只读方式打开输入文件 in.txt */ if((fp = fopen("in.txt","r")) == NULL) { printf("Cannot open this file.\n"); exit(0); } /* 创建并读入矩阵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) { printf("Cannot open this file.\n"); exit(0); } /* 判断两个矩阵能否相乘 */ if(col_a == row_b) { row_c = row_a; col_c = col_b; } else { fprintf(fp,"Matrix Can't Mutiply !\n"); exit(0); } /* 创建并初始化结果矩阵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"); return 0; } /* 为矩阵动态分配内存的函数 */ datatype** Create(int m, int n) { int i; datatype **Matrix; Matrix = (datatype **) malloc(sizeof(datatype *) * m); for(i = 0; i < m; i++) { Matrix[i] = (datatype *) malloc(sizeof(datatype) * n); } return Matrix; } /* 初始化矩阵函数 */ void Reset(datatype** Matrix, int m, int n) { int i,j; for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { Matrix[i][j] = 0; } } } /* 读入数据函数 */ void Input(datatype** Matrix, int m, int n) { int i,j; for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { fscanf(fp,"%d", &Matrix[i][j]); } } } /* 输出数据函数 */ void Output(datatype** Matrix, int m, int n) { int i,j; for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { fprintf(fp,"%d ", Matrix[i][j]); } fprintf(fp,"\n"); } } /* 矩阵乘法运算函数 */ void MatrixMutiply(datatype** a, datatype** b, datatype** c) { int i,j,k; for(i = 0; i < row_c; i++) { for(j = 0; j < col_c; j++) { for(k = 0; k < col_a; k++) { c[i][j] += a[i][k] * b[k][j]; } } } } /* 释放矩阵内存函数 */ void MatrixFree(datatype** Matrix, int m) { int i; for(i = 0; i < m; i++) { free(Matrix[i]); } free(Matrix); }
很多人可能会对in.txt内容有疑问 贴图一张(我是在sublime text中编辑的文本plain text,保存为了in.txt)
矩阵行 矩阵列(空格分开)
矩阵内容(空格分开)
矩阵行 矩阵列(空格分开)
矩阵内容(空格分开)
运行完成后在工作目录产生了一个out.txt文件
内容如下
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- Lua和C语言的交互详解
- C# Pointer指针应用实例简述
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C和指针小结(推荐)
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总