0

これまでのところ、ここに私のコードがあります

#include <iostream>
using namespace std;

int main ()
{
int num1 = 0;
int num2 = 0;
int sum = 0;


for(num2 = num1; num1 <= num2; num1 +=2) sum += num1;
    num1 = num1 / 2 == 0? num1 : num1 + 1;
    num2 = num2 / 2 == 0? num2 : num2 - 1;

cout << "Enter the First Number:" << endl;
cin >> num1;
cout << "Enter the Second Number:" << endl;
cin >> num2;
cout << "Total Sum: " << sum << endl;
  } //end for

しかし、合計は 0 になり続けます :/

ここに問題があります。

ユーザーが入力した 2 つの数値の間の偶数の合計を表示するプログラムを作成します。つまり、ユーザーが偶数を入力した場合、その数値は合計に含まれる必要があります。たとえば、ユーザーが整数 2 と 7 を入力すると、合計は 12 (2 + 4 + 6) になります。ユーザーが整数 2 と 8 を入力すると、合計は 20 (2 + 4 + 6 + 8 ) になります。ユーザーが入力した最初の整数が 2 番目の整数より大きい場合、エラー メッセージを表示します。

4

4 に答える 4

1

You need to calculate the sum after getting the input!

But your whole calculation and loop usage is wrong. Here it's fixed:

#include <iostream>
using namespace std;

int main ()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;

    cout << "Enter the First Number:" << endl;
    cin >> num1;
    cout << "Enter the Second Number:" << endl;
    cin >> num2;

    if (num1 % 2 == 1) num1 += 1;
    if (num2 % 2 == 1) num2 -= 1;

    while (num1 <= num2) {
        sum += num1;
        num1 += 2;
    }

  cout << "Total Sum: " << sum << endl;
}

Note the following:

  1. % returns modulus - num1 % 2 ==1 implies that num1 is odd. I took out your ternary ?: operators not because they're bad, but just because if is easier to read and in this case you're not doing anything if num1 is even.

  2. You were setting num2 at the start of your for loop. A while loop makes more sense in this situation, or a for loop without initialization for (;num1<=num2; num1+=2) {.

于 2012-10-19T22:56:30.803 に答える
1

コードは順次実行され、for ループの初期化により、ループの境界が失われます。代わりに、このコードを検討してください。

#include <iostream>
using namespace std;

int main ()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;

    cout << "Enter the First Number:" << endl;
    cin >> num1;
    cout << "Enter the Second Number:" << endl;
    cin >> num2;

    if (num1 > num2) // swap the numbers and do not print error message
    {
        int temp = num1;
        num1 = num2;
        num2 = temp;
    }
    //make sure to start from even number
    num1 = num1 % 2 ? num1+1 : num1;

    for(; num1 <= num2; num1 +=2) 
        sum += num1;    
    cout << "Total Sum: " << sum << endl;
  } //en
于 2012-10-19T23:03:30.010 に答える
1

宿題 (私が思うに) はあなたが解決する必要がありますが、ここにあなたを助けるためのいくつかのヒントがあります:

1) for ループでは、ループするはずのコードを中括弧で囲む必要があります。

for(num2 = num1; num1 <= num2; num1 +=2)
{
    sum += num1;
    num1 = num1 / 2 == 0? num1 : num1 + 1;
    num2 = num2 / 2 == 0? num2 : num2 - 1;
}

2) ループはcoutandcinステートメントの上にあるため、ユーザーが数字を入力する前にループが実行されます。ユーザーがプログラムに番号を指定した後 (下) にループを移動する必要があります。

3)ループのロジックは、おそらくあなたが望むものではありません。中括弧が追加されると、次のようになります (「疑似コード」で)。

Let num2 equal num1 // Both are set to zero so this doesn't do anything
While num1 is less than or equal to num2:
{
    Add the current value of num1 to sum.
    if num1 /2 (ignoring remainder) is 0, then set num1 equal to itself. Otherwise, add 1 to it.
    // num1 already equals itself, so this doesn't do anything when num1 / 2 is zero.
    // 
    if num2 /2 (ignoring remainder) is 0, then set num1 equal to itself. Otherwise, subtract 1 from it.
    Add 2 to num1.
}

代入で別段の指示がない限り、3 項 (? と :) 構文を使用しないことをお勧めします。プログラミングを始めたばかりのときはかなり混乱するからです (少なくとも、私はそう思いました)。

C++ は習得が難しい言語ですが、頑張ってください!

于 2012-10-19T23:06:08.417 に答える
0

1.) 数値を取得する 2.) 最大値と最小値を決定する 3.) 間の偶数を合計する

#include <iostream>
using namespace std;

void main()
{
   int num1 = 0;
   int num2 = 0;
   int sum = 0;
   int temp = 0;
   int i;

   //Get your input values
   cout << "Enter the First Number:" << endl;
   cin >> num1;
   cout << "Enter the Second Number:" << endl;
   cin >> num2;
   cout << endl;    

   //just to reorganize and make num1 the smallest of the two
   if ( num2 << num1 )
   {
       temp = num1;
       num1 = num2;
       num2 = temp;
   }    

   //loop through and add even values
   for(i = num1; i < num2; i++)
   {
       if(i%2 == 0)
       {
           sum = sum + i;
       }
   }

   cout << "Sum: " << sum << endl;
}
于 2012-10-19T23:40:47.667 に答える