0

私のプログラムは、ユーザーが入力するまでのすべての平方数の合計を計算することになっています。たとえば、ユーザーが2を入力すると、関数は次のように実行されます。(1 ^ 2 + 2 ^ 2)ただし、私のプログラムは実行時に何も実行しません。(これが機能の問題なのか、本体の問題なのかわからない。)

#include <iostream>
#include <cmath>
using namespace std;

int sumofsquares (int num)

{
int i;
int answer;

for(int i=0; i <= num; i++){
answer = (num * num)+ num;
}
return (answer);

}


int main(){
int num;
cout<< "Enter a number" <<endl;
cin >> num;
while( num != -1){
sumofsquares(num);
}
cout<< "The sum of squares is "<< num <<endl;


return 0;
}
4

7 に答える 7

2

関数の戻り値を何かに割り当てる必要があります-あなたの場合、印刷numしているので、numそれ自体に:

num = sumofsquares(num);

numこれを行った後、関数を変更しないため、そうでない場合、関数は無限ループに入ります-1。あなたはおそらく意味しました:

while( num != -1){
   cin << num;
}
sumofsquares(num);

この後、関数のバグが残ります。

int answer;
for(int i=0; i <= num; i++){
answer = (num * num)+ num;
}

する必要があります

int answer = 0;
for(int i=0; i <= num; i++){
answer += i*i;
}

ただし、本当の問題は、基本的なC ++ /論理の知識が不足していることです。これに対する唯一の解決策は、優れた本から学ぶことです。

于 2012-10-16T23:42:23.910 に答える
2

変更sumofsquares点:

int answer;

に:

int answer = 0;

これanswerが適切に初期化されます。

また、変更する必要があります:

answer = (num * num)+ num;

に:

answer = (i * i) + answer;

そうしないと、間違った変数を2乗して、間違ったアキュムレータに追加することになります。

の問題を修正する方法については、以下の他の回答を参照してくださいmain

また、コードを適切にフォーマットする方法を学ぶ必要があります。これにより、他の人にとっても自分自身にとっても、読み取り、デバッグ、および保守がはるかに簡単になります。

于 2012-10-16T23:42:51.367 に答える
1

戻り値を取得せずに関数を呼び出しただけです。

最初のオプション:

cout<< "The sum of squares is "<< sumofsquares(num) <<endl;

2番目のオプション:

num=sumofsquares(num);
cout<< "The sum of squares is "<< num <<endl;
于 2012-10-16T23:42:46.423 に答える
0

そのはず

int answer = 0;
...
...
...
answer = answer + (i * i);
于 2012-10-16T23:42:56.017 に答える
0

終了条件が変更されることはないため、プログラムはwhileループに陥りnum != -1ます。これは、変数が参照ではなく値によってnum渡されるためです。sumofsquaresしたがって、の変数を変更しても、のnum変数にはsumofsquares影響しません。ステートメントを次のように置き換えます。nummainwhile

while (num != -1) {
    num = sumofsquares(num);
}
于 2012-10-16T23:43:10.960 に答える
0

どうぞ!

#include <iostream>
#include <cmath>
using namespace std;

//Prototype
int sumofsquares(int num);

void main()
{
    int num;  
    int answer;

    cout >> "Enter a number.\n";
    //Get number input
    cin << num;
    //Call your workhorse function
    answer = sumofsquares(num);
    //Double check my >> directions :P  Format may be wrong here 
    cout >> "Sum of squares for " >> num >> "is " >> answer >> "\n";
}

int sumofsquares(num)
{
    int answer;
    int i = 0;

    for (i = 0; i < num; i++)
    {
        answer = answer + ( i * i );
    }

    return answer;
}
于 2012-10-17T00:02:13.067 に答える
0

また、cin を使用して num を初期化したことに注意してください。したがって、他の人が指摘した問題の中で、cin を使用して文字列/文字を初期化し、それを整数に変更する必要があることに注意してください。

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

int sumofsquares (int num){
  //should have initialized answer to zero
  int i, answer = 0;
  //this for loop now accomplishes what you want
  for(i=0; i <= num; i++){
    answer = (i^2) + answer;
  }
  return (answer);
}


int main(){
  int num, ans;
  string input;
  cout<< "Enter a number" <<endl;
  cin >> input;
  num = atoi(input.c_str());
  //this was an infinite loop, here's how to check what you wanted to check.
  if (num >= 0){
    ans = sumofsquares(num);
    cout << "The sum of squares is: " << ans << endl;
    return 0;
  }
  else { 
    cout<< "Error: The number you have called this function with is invalid." << endl;
    return 0;
  }
}

これらの線に沿った何か...

于 2012-10-17T00:13:58.300 に答える