我正在做一个家庭作业,我在'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;
}
答案 0 :(得分:3)
这是一个提示:每当你需要在程序中“保留一些东西”时,这意味着你需要将它存储在一个变量中。该变量是本地变量,全局变量还是传递变量取决于您需要保留多长时间。这称为变量的“范围”。将任何变量的范围保持在最小值是一种良好的做法,因此指南不鼓励全局变量。
答案 1 :(得分: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++) {
此外,仅仅是FYI,循环边界通常被指定为half-open intervals,以避免lbound
和ubound
代表int
数据类型限制的潜在问题。这意味着您通常使用<
代替<=
。
目前尚不清楚你是在代数课还是CS课......