作者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