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;

否则,您将平方错误的变量并将其添加到错误的累加器中。

有关解决问题的信息,请参阅下面的其他答案main

此外,您应该学会正确地格式化您的代码——这将使他人和您自己更容易阅读、调试和维护。

于 2012-10-16T23:42:51.367 回答
1

你只是调用了函数而没有得到它的返回值。

第一个选项:

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

第二种选择:

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变量 insumofsquares不会影响num变量 in main。将您的while声明替换为:

while (num != -1) {
    num = sumofsquares(num);
}
于 2012-10-16T23:43:10.960 回答
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 回答
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 回答