c语言,怎么求一个.txt文件中252*504矩阵的秩,然后再把它化为上三角矩阵,大家帮忙看看,谢谢
data &上三角矩阵.rar
(23.19 KB)
昨天在大神的帮助下,把矩阵转化成了252*504的稀疏矩阵,以为自己能够对其进行求秩,并上三角化,可是看了一天还是不会,自己c语言刚入门,大家能帮忙看一下吗?
谢谢了!
#include <stdio.h> #include <stdlib.h> #include <string.h> #include<cmath> int rank( void ) //对一个252*512的矩阵求秩 { FILE* fin = fopen("data.txt","rt"); //打开 H矩阵.txt if( !fin ) // 检查H矩阵.txt是否被打开 { puts( "源文件打开失败." ); return 1; } FILE* fout = fopen("data1.txt","wt"); //打开 data.txt if( !fout ) { fclose( fin ); puts( "输出文件创建失败." ); return 2; } unsigned line_num = 0; unsigned row_number = -1; unsigned col_number = -1; char matrix[252][504]; for( char line[2000]; fgets(line,sizeof(line)/sizeof(*line),fin); ) //把字符串相继的从文件fin中读入line数组 //中从文件fin中读取sizeof(line)/sizeof(*line)-1个字符, //存到以s为起始地址的空间里,直到读完一行,如果成功则返回line的指针 { int i=0; int j=0,r; size_t n = strlen(line); if( line[n-1]!='\n' && n+1==sizeof(line)/sizeof(*line) ) { fclose( fout ); fclose( fin ); puts( "把line[]数组开大些." ); return 3; } for( j=0;j<sizeof(line)/sizeof(*line);matrix[i++][1000]=line[j++]) ; //把line中的元素赋给matrix的第i行 while(i<252 && j<504) { //找一行第一个数为一的替换 r=i; for(int k=i; k<252; k++) { if(matrix[k][j]) { r=k; break; } } if(matrix[r][j]) { if(r!=i) for(int k=0; k<=504; k++) { int temp; temp=matrix[i][k]; matrix[i][k]=matrix[r][k]; matrix[r][k]=temp; } //消元 for(int u=i+1; u<252; u++) { if(matrix[u][j]) for(int k=j; k<=504; k++) { matrix[u][k]^=matrix[i][k]; } } i++; } j++; } return i; for(j=0;matrix!='\0';j++) for(int k=0;matrix!='\0';line[i++]=matrix[j][k++]) fputs(line,fout); fclose( fout ); fclose( fin ); } }
[此贴子已经被作者于2016-1-23 23:26编辑过]