0

このコードの機能:int値を指定すると、それらの間の平均が計算されます。私がそれを成し遂げるために何時間も費やしたこと:私はそれがdouble値の間の平均を計算するようにそれを作ろうとしました。私はすべてを試しましたが、常に失敗するか、無限ループに陥るか、コンパイルされません。

質問:では、コードを変更して、2つの値/数値で機能するようにするにはどうすればよいですか?

#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

コードにいくつかの問題がありますが、基本的に、整数除算では double は得られません。整数を整数で割った結果は、double ではなく別の整数になります。double が必要な場合は、分子または分母のいずれかを double にキャストし、結果を double に格納する必要があります。

于 2012-11-15T19:15:54.347 に答える
1

数値解析1001へようこそ。

整数数学:

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

整数は分数を行いません。

于 2012-11-15T19:19:06.043 に答える
1
  1. あなたの場合、タウをベクトルにする必要がある理由がわかりません。int で十分です。
  2. huku-1 → それは違う。フクだけのはず。
  3. 分割するときは、タウとフクをダブルにキャストする必要があります。huku が != 0 であることを確認しても問題ありません。
  4. mは駄目です。削除するだけです。
  5. Tau/huku を格納したい場合は、r を int にしないでください。
  6. printf で %d を %lf に置き換えます
于 2012-11-15T19:24:27.687 に答える
1

最も単純な変更には、次の 4 行のみが含まれます。

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 に答える
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 に答える
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.
...

さて、それを2倍に機能させたい場合、唯一の違いは次のとおりです。

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

つまり、話をまとめると、キーボードから数値を入力する変数、これまでに入力したすべての数値の合計を保持する変数、キーボードから入力した数値の数をカウントする変数があります。値として0を入力するまで数値を入力すると、プログラムはループを終了します。平均数の式は、すべての合計を数で割ったものです。整数の場合、実数への変換を追加する必要があります。そうしないと、正確な結果が得られません。

私はあなたを混乱させなかったと思います。:D

于 2012-11-15T20:45:58.090 に答える