作者markoo (上行下笑阿..)
看板NCTU-STAT98G
标题0730 程式 EX 1
时间Sat Aug 1 23:53:45 2009
EX1: 将pc1.txt的矩阵,依下列规则处理:
1. 将第一行的第一个非0元素所处的列 调到第一列
2. 将第二行的第一个非0元素所处的列 掉到第二列
3. 如果第K行的第K列为非0元素 则不必对调
程式码如下:
#include <stdio.h>
#include "matrix.h"
#include <stdlib.h>
#include <math.h>
FILE *in;
int main()
{
int i,j,k,temp;
double **A;
A = (double **) malloc (5*sizeof(*A));
*A = (double *) malloc (5*5*sizeof(**A));
for (i=0;i<5;i++) *(A+i) = *A+5*i;
in=fopen("pc1.txt","rt");
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
fscanf(in,"%lf",&A[i][j]);
printf("%8.4lf",A[i][j]);
//这边读文字档的方式为一次读一个
}
printf("\n");
}
for (i=0;i<5;i++)
{
if (A[i][i]==0)
{
//i行i列的数字为0的时候 才需要与第一个非0值交换
for (j=0;j<5;j++)
{
if (A[j][i]!=0)
{
// 找出i行的第1个非0值 其列数为第j列
for (k=0;k<5;k++)
{
temp = A[i][k];
A[i][k] = A[j][k];
A[j][k] = temp;
//这边是大家应该很熟悉的两列互调的过程
}
break;
/* 跳出所在的回圈,
这边是跳出for (j=0;j<5;j++)回圈
去执行外层的for (i=0;i<5;i++) 回圈*/
}
}
}
printf("the matrix is:\n");
matrix_print(5,5,A);
system("pause");
}
fclose(in);
return 0;
}
pc1.txt档案内容如下
0 0 0 0 5
1 0 2 8 0
0 0 4 0 6
3 3 5 2 3
2 1 0 2 1
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.48.157