題目如下
有一個文本文件保存了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; }