0

这段代码现在做了什么:我给出 int 值并计算它们之间的平均值。我花了几个小时试图让它做的事情:我试过让它计算双精度值之间的平均值。我已经尝试了一切,但它总是失败或进入无限循环或无法编译。

问题:那么我应该如何修改我的代码以使其适用于双值/数字?

#include <stdio.h>


void main()
{
int Tau[10]={0,0,0,0,0,0,0,0,0,0};
int r, i = 0;
int m = 0;
int huku = 0;


do{

printf("Enter numbers: ");
scanf_s("%d", &i);
Tau[m]+=i;
huku++;


}while(i != 0);

r = (Tau[m]/(huku-1));


printf("The average of your numbers is; %d\n", r);
}
4

6 回答 6

3

您的代码中有一些问题,但基本上,整数除法不会给您加倍。一个整数除以一个整数的结果是另一个整数,而不是双精度数。如果您想要双精度数,则需要将分子或分母转换为双精度数并将结果存储在双精度数中。

于 2012-11-15T19:15:54.347 回答
1

最简单的更改只涉及四行:

double Tau[10] = {0,0,0,0,0,0,0,0,0,0};
double r, i = 0;
scanf_s("%f", &i);
printf("The average of your numbers is; %f\n", r);

请注意,这并不能解决编码问题;它所做的只是更改要读取和使用的代码,double而不是int.

于 2012-11-15T19:46:53.583 回答
1
  1. 我不明白你为什么需要 Tau 作为你的向量。一个 int 就足够了。
  2. huku-1 -> 那是错误的。应该只是hu​​ku。
  3. 分裂时需要将 Tau 和 huku 施放为双倍。检查 huku 是否为 != 0 也无妨。
  4. m 没用。只需删除它。
  5. 如果您希望将 Tau/huku 存储在其中,则 r 不应该是 int。
  6. 在 printf 中用 %lf 替换 %d
于 2012-11-15T19:24:27.687 回答
1

欢迎来到数值分析 1001。

整数数学:

2 / 3 = 0;
4 / 2 = 2;
5 / 2 = 2;

整数不做分数。

于 2012-11-15T19:19:06.043 回答
0
// Question is tagged for C++, but the code is in C.
// I will change your code a bit, because you had quite a few mistakes.
#include <stdio.h>

void main ()
{
    int sum = 0; // sum of all numbers you entered, to find average you only need total sum and number of entries
    int numOfEntries; // number of entries (numbers taken from input)
    int inputNum; // variable where you will write numbers from input one by one
    double average; // Not really needed, but it can help to simplify the problem to you.

    printf("Enter numbers: ");
    do
    {
        scanf_s("%d", &inputNum);
        sum += inputNum;
        numOfEntries++;
    } while (inputNum != 0); // I understand you read numbers until you read value 0.
    // int / int will give you rounded number, not the true average, so we need to convert one of the operands to a real number, in this case double
    // double / int or int / double will give you a real number as result, which will have true average value, and that is why I converted sum to a real number
    if (numOfEntries != 0)
        average = (double)sum / numOfEntries;
    else
        average = 0;
    printf("The average of your numbers is; %f\n", average); // Here I did it again - print double instead of int to get true value.
}

改变它会更容易:

....
double sum = 0;
...
average = sum / numOfEntries; // Here sum is already double, not int, so you don't need to change it manually.
...

现在,如果你想让它适用于双倍,唯一的区别是:

    double sum = 0;
    double inputNum;
    scanf_s("%lf", &inputNum);
    average = sum / numOfEntries;

所以,为了总结这个故事 - 你有一个变量来从键盘输入一个数字,一个保存到目前为止所有输入数字的总和的变量,一个计算你从键盘输入的数字数量的变量。您输入数字直到输入 0 作为值,然后程序将退出循环。平均数的公式是所有数字的总和除以数字的数量。对于整数,您必须将转换添加到实数,否则您将无法获得准确的结果。

我希望我没有混淆你。:D

于 2012-11-15T20:45:58.090 回答
0
double r = 0;
int i = 0;
r = ((double)Tau[m]/((double)huku-1));
printf("The average of your numbers is; %f\n", r);
于 2012-11-15T20:28:57.797 回答