-1

関数で配列を渡そうとしています。合計は 0 として返されます

/

void CalcAvg(int tests[], int numTests, float& avg)

{

    int sum=0;
    for (int i = 0; i < numTests; i++)
    {
        sum = sum + tests[i];
    }
avg = (float)sum/numTests;
}
4

5 に答える 5

4
void CalcAvg(int tests[], int numTests, float& avg)

この関数の合計はローカルで宣言されます。平均のように、メインからの合計を参照として取得するように関数を変更する必要があります。

void CalcAvg(int tests[], int numTests, float& avg, int& sum)

または、以下に示すように、CalcAvg関数を変更して合計を返します。

int CalcAvg(int tests[], int numTests, float& avg)
{
  int sum=0;
  for (int i = 0; i < numTests; i++)
  {
      sum = sum + tests[i];
  }
  avg = (float)sum/numTests;
  return sum;
}

次に、メインセットの合計はCalcAvg

int main(){
    ...
    sum = CalcAvg (tests, 6, avg);
于 2012-12-04T19:28:17.310 に答える
2

sum合計として計算した値を変数に割り当てる必要があります(合計を返す ように関数をCalcAvg変更しました)CalcAvg

#include <iostream>
using namespace std;
//prototype (fixed to return the sum)
int CalcAvg(int tests[], int numTests, float& avg);

int main ()
{

    int tests[6]; //array declaration
    float avg;
    int sum=0;

    //input test scores
    cout<<"Enter"<<6<<"test scores:"<<endl;
    for (int i=0; i<6; i++)
    {
        cout<<"enter Test"<<i+1<<":";
        cin>>tests[i];
    }

    //2.print first test score

    cout<<tests[0]<<endl;

    //3.print the last test score

    cout<<tests[5]<<endl;

    //4.print all test scores

    for(int i=0; i<6; i++)
    {
        cout<<tests[i]<<endl;
    }

    //7. Calculate Sum & Avg using function

    sum = CalcAvg (tests, 6, avg);

    cout<<"Your sum is"<<sum<<" and your average is "<<avg<<endl;

return 0;
}

int CalcAvg(int tests[], int numTests, float& avg)

{

    int sum=0;
    for (int i = 0; i < numTests; i++)
    {
        sum = sum + tests[i];
    }
avg = (float)sum/numTests;
return sum;
}
于 2012-12-04T19:27:09.603 に答える
2

これは「スコープ」の問題のように見えます

suminCalcAvgはinmainとは別であることに注意してくださいsum

于 2012-12-04T19:29:48.430 に答える
0

cout<<"Enter"<<6<<"test scores:"<<endl;まず、 insted を使用する理由を尋ねなければなりませんcout<<"Enter 6 test scores:"<<endl;

関数内で sum を宣言しました。ic c++ 関数内に変数を作成し、関数の最後で破棄します。sumメイン関数内で宣言したものが CalcAvg 関数によって変更されたと思いますか。sumこれを行うには、main() で宣言した値を変更したい場合は、関数内でポインターを再実行する必要があります。

または、return ステートメントを使用して、CalcAvg 関数内の合計を返します。

于 2012-12-04T19:32:32.657 に答える
0

この例を参照して、ポインターを使用して関数から値を変更する方法に注意してください。

main(){
  int x=5;      
  change(&x);
  cout<<x;
  }

void change(int *p){
   *p=10;
  }
于 2012-12-04T19:43:13.650 に答える