簡體   English   中英

循環幫助。 在不應有的情況下終止。 C ++

[英]for loop help. Terminates when it isnt supposed to. c++

我是stackoverflow的新手,但我確實嘗試尋找答案,但找不到。 我自己也似乎無法弄清楚。 因此,對於學校C ++項目,我們需要找到曲線下的面積。 我已經將所有公式都硬編碼了,所以不用擔心。 因此,該程序應該為(n)提供更高的精度和更高的值。 但是似乎當我將(n)的值設置為大於(b)時,該程序僅循環0並且不會終止。 你們能幫我嗎。 謝謝。 這是代碼:

/* David */

#include <iostream>
using namespace std;

int main()
{

cout << "Please Enter Lower Limit: " << endl;
int a;
cin >> a;

cout << "Please Enter Upper Limit: " << endl;
int b;
cin >> b;

cout << "Please Enter Sub Intervals: " << endl;
int n;
cin >> n;

double Dx = (b - a) / n;
double A = 0;
double X = a;

for (X = a; X <= (b - Dx); X += Dx)
{
    A = A + (X*X*Dx);
    X = X * Dx;
    cout << A << endl;
}

cout << "The area under the curve is: " << A << endl;

return 0;
}

abn是整數。 因此,以下內容:

(b - a) / n

可能為0。您可以將其替換為:

double(b - a) / n

由於(b - a) / n中的所有變量均為int ,因此您正在執行整數除法,這將丟棄結果中的分數。 分配給double不會改變這一點。

您應該將至少一個變量轉換為double以便獲得保留分數的浮點結果:

double Dx = (b - a) / (double)n;

其他答案是正確的。 您的問題可能是整數除法。 您必須將操作數轉換為兩倍。

但是您應該使用static_cast <>而不是C風格的強制類型轉換 即使用

static_cast<double>(b - a) / n

而不是double(b - a) / n((double) (b - a)) / n

您正在執行整數除法。 整數除法將僅通過截斷小數來返回整數:

3/2 == 1 //Because 1.5 will get cut to 1
3/3 == 1
3/4 == 0 //Because 0.5 will get cut to 0

您需要至少在“ /”左側或右側的兩個值之一為十進制類型。

3 / 2.0f == 1.5f
3.0f / 2 == 1.5f
3.0f / 2.0f == 1.5f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM