题目如下
有一个文本文件保存了9*9矩阵数据
通过回车换行分隔行
行内通过,分隔元素
1-9的数字是有效元素,其他内容都认为是空
要求
1. 实现矩阵转置
2. 矩阵内元素如果是数字进行1-9,2-8,3-7,4-6互相映射,即如果原来数字是1,改成9,如果是9改成1
有一个文本matrix.txt,内容如下:
, , , ,1, , ,3, 5, ,4, , , , , , , , , ,5,3,8, ,9 ,8,9, , , , , , , , , , ,1,6, , , , ,5,9, ,3,1, ,6, ,8, , ,9, , 8,4,1, , , , , , 2, , , ,6, , , ,7
代码:
#include <stdio.h> #include <stdlib.h> /* *作者没拉链的布加拉提 */ int main(int argc,const char *argv[]) { char buff[9][9]; FILE *fp; //判断是否成功读取 if ((fp = fopen("matrix.txt","r")) == NULL) { perror("fail to read"); exit(1); } //把文件的数字字符提取到buff[9][9]中 for (int i = 0; i < 9; i++) { for (int j = 0; j < 18; j++) { char buf = fgetc(fp); if (buf == EOF) break; if(buf != ',' && buf != '\n') buff[i][j/2] = buf; } } //把buff[9][9]反转并且数字对应 for (int i = 0; i < 9; i++) { for (int j = i; j < 9; j++) { char temp = buff[j][i]; if(buff[i][j] != ' ') buff[j][i] = '9' + '1' - buff[i][j]; else buff[j][i] = buff[i][j]; if(temp != ' ') buff[i][j] = '9' + '1' - temp; else buff[i][j] = temp; } } fclose(fp); //写入到一个新文件 fp = fopen("matrix1.txt","w+"); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { fputc(buff[i][j],fp); if(j<8) fputc(',',fp); } fputc('\n',fp); } fclose(fp); return 0; }