0

我正在做一个家庭作业,我在一个“for”循环中计算一个函数的整数区间 (f(x) = x * x – 12 * x + 40) 中的值。我需要找到一个最小值。没关系,但我还需要保留值最小的索引号。目前我在另一个循环中再次重申该功能,但这看起来真的很混乱。我也可以导出 x 并使用已知的最小值计算答案,但这也很奇怪,因为推导并不那么简单。你对我有什么建议吗?谢谢。

#include <iostream>
#include "limits.h"
using namespace std;

int main ()
{
    int lBound, uBound, y, min;

    cout << "Give the lower and the upper bounds of integer numbers: " << endl;
    cin >> lBound >> uBound;        

    min=INT_MAX;
    int x = lBound;
    for (int i = x; i <=uBound; i ++) {
        y = i * i - 12 * i + 40;
        cout << x << " " << y << endl;
        if (y<min) {
            min=y;
        }
        x++;            
    }
    for (int i = lBound; i <= uBound; i++) {
        y = lBound * lBound - 12 * lBound + 40;
        if (y==min) {
            y = lBound;
            i=uBound; // terminates the loop
        }
        lBound++;
    }               
    cout << "smallest value of the function is " << min << " for x = " <<  y << endl;                
    return 0;
}
4

2 回答 2

3

这里有一个提示:每当你需要在程序中“保留一些东西”时,这意味着你需要将它存储在一个变量中。该变量是本地的、全局的还是传递的,取决于您需要保留它多长时间。这称为变量的“范围”。将任何变量的范围保持在最低限度被认为是一种很好的做法,因此指导方针不鼓励使用全局变量。

于 2012-06-03T15:13:49.750 回答
1
        i=uBound; // terminates the loop

这不是一个很好的编码实践。要终止循环,您应该使用流控制结构,例如break. 在这种情况下这样做会保留最小元素的索引。

编辑:如果你想i超过循环,你只需要在外面声明它。以机智:

改变

for (int i = lBound; i <= uBound; i++) {

int i; // variable exists outside loop
for (i = lBound; i <= uBound; i++) {

此外,仅供参考,循环边界通常被指定为半开区间,以避免潜在的问题,lboundubound表示int数据类型的限制。这意味着您通常使用<而不是<=.

不清楚你是上代数课还是CS课……</p>

于 2012-06-03T15:14:21.623 回答