嘿,所以我想制作一个以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");
}
}
}
}
答案 0 :(得分:0)
我不确定你在做什么,但如果你想在while循环中找到第0个元素,你应该把它改成:
while(A[row_pos][column_pos] != 0)
我可能误解了你的意图,让我知道是不是这样。