C语言数组元素除以对角线元素详解:为何结果是142114321?
C语言数组元素除以对角线元素详解:为何结果是142114321?
以下程序的功能是将数组每行元素除以该行对角线上的元素:
#include <stdio.h>
void fun(int n,int a[3][3])
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=a[i][j]/a[i][i];
}
int main()
{
int a[3][3]={6,4,2,8,6,4,9,6,3};
fun(3,a);
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf('%d',a[i][j]);
printf('\n');
}
printf('\n');
}
return 0;
}
结果为什么是142114321?4/6不应该是0吗?
程序中的fun函数中的循环通过除以a[i][i]来实现该功能。但是在计算过程中,整数除法会向下取整,所以4/6的结果是0而不是0.6667。因此,最终输出的结果为142114321。
如何得到小数结果?
如果想要得到小数结果,可以将数组的元素类型改为float或double,并修改相应的输出格式。例如:
#include <stdio.h>
void fun(float n,float a[3][3])
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=a[i][j]/a[i][i];
}
int main()
{
float a[3][3]={6,4,2,8,6,4,9,6,3};
fun(3,a);
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf('%.2f',a[i][j]); // 保留两位小数
printf('\n');
}
printf('\n');
}
return 0;
}
这样就可以得到更准确的计算结果。
原文地址: https://www.cveoy.top/t/topic/bg7J 著作权归作者所有。请勿转载和采集!