我正在学习 c,但无法通过 google 找到答案(也许我使用了错误的关键字)
无论如何,这是一个简单的程序,用于获取学生 2 个科目的平均成绩:
#include <stdio.h>
int main() {
int grades[2][2] = {{90, 78}, {92, 83}};
float avg1, avg2;
avg1 = ( grades[1][1] + grades[2][1] ) / 2;
avg2 = ( grades[2][1] + grades[2][2] ) / 2;
printf("Average 1 is: %d \n", avg1);
printf("Average 1 is: %f", avg1);
return 0;
}
我期待 91 的答案。
%d 给我:250732472
%f 给我:16424.000000
为什么会发生这种情况?我在网上找到了一个解决方案,该解决方案使用 int 数据类型作为成绩数组,使用 float 作为平均值,并且他们的解决方案有效。
最佳答案
首先,您没有打印任何内容,因为每个 printf
调用中都缺少一个参数 - 与每个格式说明符匹配的值。
现在,如果您的代码如下所示,
avg1 = ( grades[1][1] + grades[2][1] ) / 2;
avg2 = ( grades[2][1] + grades[2][2] ) / 2;
printf("Average 1 is: %d\n", avg1);
printf("Average 2 is: %f\n", avg2);
那么你正在处理未定义的行为,这就是你的输出看起来很奇怪的原因。这是因为,在您的第一个 printf
调用中,您使用的是 %d
- 这是整数的格式说明符。如果要打印浮点变量,无论是 32 (float
) 还是 64(double
) 位长,您应该使用说明符 %f
.
您的代码还有另一个问题会导致未定义的行为:grades
的长度为 2 个元素,因此 [2]
索引超出范围。
关于c - 为什么在c中打印这个 float 会导致错误的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59492668/