C语言数组除法运算错误及修正:为什么结果不是预期值?
#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为什么不是100110321?该程序的功能是用数组每行元素除以该对角线上的元素内容:该程序的功能是将数组每行的元素除以该行对角线上的元素。这里有一个错误,即在除法运算之前没有将数组元素的类型转换为浮点数类型。由于数组元素的类型是整数,所以除法运算会取整数部分,导致结果不正确。
修正代码如下:
#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] = (float)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;
}
修正后的结果为:
1
0
0
1
0
0
1
0
0
每行的元素已经成功除以了该行对角线上的元素。
原文地址: https://www.cveoy.top/t/topic/bg8U 著作权归作者所有。请勿转载和采集!