【发布时间】:2013-03-25 18:49:25
【问题描述】:
我已经为高斯消除方法编写了这段代码:
#include <stdio.h>
int main()
{
float arr[3][4]={{0}}, i, j, k, p;
printf("Enter the coefficients:-\n");
for(i=0; i<3;i++)
{
printf("Row #(%d)\n", (int)(i+1));
for(j=0; j<4; j++)
{
scanf("%f", &arr[(int)i][(int)j]);
}
}
for(k=1, p=(k-1); (k<=2); k++, p++)
{
for(i=k; i<=2; i++)
{
for(j=0; j<=3; j++)
{
arr[(int)i][(int)j]-=((arr[(int)i][(int)p]/arr[(int)p][(int)p])*arr[(int)p][(int)j]);
}
}
}
for(i=0; i<3;i++)
{
for(j=0; j<4; j++)
{
printf("%0.3f ", arr[(int)i][(int)j]);
}
printf("\n");
}
return 0;
}
但是,它不会打印正确的输出值。对输出的分析表明这些值已被四舍五入或其他东西。我猜在某个地方已经考虑了二维数组的整数值,即使我将该数组作为双精度数组并且仅对语法有效的元素地址使用类型转换。你可以自己试试这个矩阵:
R1- 10 -1 2 4
R2- 1 10 -1 3
R3- 2 3 20 7
正确的输出应该是:
R1- 10 -1 2 4
R2- 0 10.1 -1.2 2.6
R3- 0 0 19.980 5.376
我正在使用 GNU GCC 编译器。
【问题讨论】:
-
为什么将 i、j、k 和 p 声明为浮点数,然后将它们转换为整数?您是否反对将它们声明为整数?
-
我尝试将它们声明为整数,但它们仍然给出了一个四舍五入的值。帮助。
-
您的算法是否甚至修改了您的想法?运行您的程序会导致左下角的 1,2,3 三角形被归零 - 仅此而已。
标签: c floating-point int printf