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。

如何得到小数结果?

如果想要得到小数结果,可以将数组的元素类型改为floatdouble,并修改相应的输出格式。例如:

#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;
}

这样就可以得到更准确的计算结果。

C语言数组元素除以对角线元素详解:为何结果是142114321?

原文地址: https://www.cveoy.top/t/topic/bg7J 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录