以Echelon形式制作矩阵?

时间:2017-01-28 17:20:24

标签: c arrays forms matrix ref

  嘿,所以我想制作一个以Echelon形式制作Matrix的程序(Not Reduced Echelon Form)。一切似乎工作得很好,除非矩阵的最后一个元素是0.那时,它只是划分行并使其成为1!   所以,我添加了一个while循环来修复它,但它仍然没有工作,因为while循环没有被执行!谁能告诉我为什么?

#include <stdio.h>
#include <stdlib.h>



void Interchange(float A[][3],int row_pos,int column_pos,int m);
void RowDivide(float A[][3],int row_pos,int column_pos,int m);
void RowOperation(float A[][3],int row_pos,int row_op,int column_pos,int m);



int main()
{
int m;

printf("Enter the number of rows in the Matrix: ");
scanf("%d",&m);

float A[m][3];
printf("\nEnter the Matrix:\n");
for(int i=0 ; i<m ; i++)
{
    for(int j=0 ; j<3 ; j++)
    {
        scanf("%f",&A[i][j]);
    }
}

int column_pos=0;
for(int row_pos=0 ; row_pos<m ; row_pos++)
{
    ///For Interchanging
    if(A[row_pos][column_pos] == 0)
    {
        Interchange(A,row_pos,column_pos,m);
    }

    ///For Row Division
  

这个While循环没有被执行!!!     我知道它没有被执行因为它没有打印&#34; a&#34;就像我写的那样     谁能告诉我为什么?!

    while(A[row_pos][column_pos] == 0)
    {
        printf("a");
        column_pos++;
    }
    RowDivide(A,row_pos,column_pos,m);
  

如果此处的最后一个元素为0,则将其除以并使其为1!为什么呢?

    ///For Row Operations
    if(row_pos == m-1)
    {
        break;
    }
    else
    {
        for(int row_op = row_pos+1 ; row_op<m ; row_op++)
        RowOperation(A,row_pos,row_op,column_pos,m);
    }

    column_pos++;
}


printf("\nThe Matrix in Echolen Form:\n");
for(int i=0 ; i<m ; i++)
{
    for(int j=0 ; j<3 ; j++)
    {
        printf("%0.2f ",A[i][j]);
    }
    printf("\n");
}

return 0;
}




void Interchange(float A[][3],int row_pos,int column_pos,int m)
{
float temp;
int cal_pos;
cal_pos=row_pos;
while(A[cal_pos][column_pos] == 0)
{
    cal_pos++;
}
for(int i=row_pos ; i<row_pos+1 ; i++)
{
    for(int j=column_pos ; j<3 ; j++)
    {
        temp = A[i][j];
        A[i][j] = A[cal_pos][j];
        A[cal_pos][j] =  temp;
    }
}

printf("\nThe Matrix after Interchanging Row %d is:\n",row_pos+1);
for(int i=0 ; i<m ; i++)
{
    for(int j=0 ; j<3 ; j++)
    {
        printf("%0.2f ",A[i][j]);
    }
    printf("\n");
}
}




void RowDivide(float A[][3],int row_pos,int column_pos,int m)
{
float temp;   ///To store the value of A[i][0] since it will get changed to     1 after dividing

for(int i=row_pos ; i<row_pos+1 ; i++)
{
    temp = A[i][column_pos];
    for(int j=0 ; j<3 ; j++)
    {
        A[i][j] = (A[i][j] / temp);
    }
}

printf("\nThe Matrix after dividing the Row %d is:\n",row_pos+1);
for(int i=0 ; i<m ; i++)
{
    for(int j=0 ; j<3 ; j++)
    {
        printf("%0.2f ",A[i][j]);
    }
    printf("\n");
}
}



void RowOperation(float A[][3],int row_pos,int row_op,int column_pos,int m)
{
float Cal_Operation;    ///For the value of row that must be added

for(int i=row_op ; i<row_op+1 ; i++)
{
    if(A[i][column_pos] == 0)
    {
        break;
    }
    else
    {
        Cal_Operation = -A[i][column_pos];
        printf("\nCalculated Variable for Row %d=     %0.2f\n",row_op+1,Cal_Operation);
        for(int j=column_pos ; j<3 ; j++)
        {
            A[i][j] = A[i][j] + (Cal_Operation*A[row_pos][j]);
        }
        printf("The Matrix after Operating on Row %d is:\n",row_op+1);
        for(int i=0 ; i<m ; i++)
        {
            for(int j=0 ; j<3 ; j++)
            {
                printf("%0.2f ",A[i][j]);
            }
            printf("\n");
        }
    }

}
}

1 个答案:

答案 0 :(得分:0)

我不确定你在做什么,但如果你想在while循环中找到第0个元素,你应该把它改成:

while(A[row_pos][column_pos] != 0)

我可能误解了你的意图,让我知道是不是这样。