用文件IO而不是stdio输入输出
来源:互联网 发布:web php工程师招聘 编辑:程序博客网 时间:2024/06/05 10:56
文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。
这段代码是我刚写的,不是什么技巧性很强的东西,完全都是基础。上午线性代数讲了矩阵乘法,下午没课,寻思着自己也好久没写程序了,不如就拿矩阵乘法开刀,熟悉一下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文件
内容如下
0 0
- 用文件IO而不是stdio输入输出
- stdio.h输入输出头文件
- 文件的输入输出 IO
- 输入输出函数stdio.h
- IO之文件输入输出流
- IO 文件输入输出的通道
- C++IO类&文件输入输出
- Java IO 文件与文件流输入输出
- stdio.h: C++输入输出操作
- IO(1) 文件字节输入输出流
- IO编程——文件输入输出
- IO编程——文件输入输出
- JAVA输入输出(IO)之文件
- java IO之文件输入输出流
- Java-IO框架-文件输入输出流
- C# System.IO 文件流输入输出
- JAVA的IO文件的输入输出
- 46-不要将 IO 复用与 stdio 混合
- Spring学习笔记五: AOP入门
- CSS3过渡transition
- 编程是一种美德,是促使一个人不断向上发展的一种原动力。
- maven中下载jar包源码和javadoc的命令介绍
- hibernate3之核心组件configuration
- 用文件IO而不是stdio输入输出
- runtime结合category和block动态增加方法以及属性
- java笔记
- 今日头条面试相关
- 动态规划算法详解
- Java单例模式
- android异步更新UI的几种方法
- HTML5-3
- 狂战士VS驱逐者