我在c 中有以下代码
#include <stdio.h>
int main(void)
{
int a, b, c, sum;
double d, p;
sum = a + b + c;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
d = sum / 3;
printf("3个整数的平均值是:d=%.2f", d);
p = a / sum * 100;
printf(",第一个数占和的比例是:p=%4.2f%%", p);
}
它是关于从键盘输入三个整数,对它们求平均值,然后计算第一个数字与三个数字之和的比率。输出结果保留小数点后2位。我找不出哪里不对。
两个主要问题是:
- 使用
a
、b
和c
的未初始化值计算sum
。将该计算移至成功的scanf()
之后,以确保设置了这些变量 - 您可能希望以双倍精度而不是整数精度计算
d
和p
。我通过分数常数使用自动类型转换。另外两个选项是将sum
的类型从int
更改为double
,或者显式使用类型转换(请参见@FeihuLiu的回答(
次要问题:
- 原始代码格式不好(由于我们的一个朋友修复了:-(
- 对于
main()
是可选的,但最好将return
作为一个整数,正如您的声明所说的那样 - (未修复(如果您不将
p
或d
用于其他任何操作,请考虑删除它们,以便对printf()
进行计算调用 - 一般来说,减少变量的范围是个好主意,所以我在使用这些定义之前将其移动到了
#include <stdio.h>
int main(void) {
printf("请输入三个整数:");
int a, b, c;
if (scanf("%d %d %d", &a, &b, &c) != 3) {
// TBD: translate error message
printf("scanf failedn");
return 1;
}
int sum = a + b + c;
double d = sum / 3.0;
printf("3个整数的平均值是:d=%.2f", );
double p = 100.0 * a / sum;
printf(",第一个数占和的比例是:p=%4.2f%%", p);
return 0;
}
除了sum
问题外,整数除法还会产生整数。您可以使用以下代码:
#include <stdio.h>
int main(void) {
int a, b, c, sum;
double d, p;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
sum = a + b + c;
d = (double) sum / 3;
printf("3个整数的平均值是:d=%.2f", d);
p = (double) a / sum * 100;
printf(",第一个数占和的比例是:p=%4.2f%%", p);
}