c语言,怎么求一个.txt文件中252*504矩阵的秩,然后再把它化为上三角矩阵,大家帮忙看看,谢谢
昨天在大神的帮助下,把矩阵转化成了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编辑过]