1

我是 C++ 编程的新手,目前正在上一门课程作为编程入门。我目前正在做一个家庭作业项目,我输入 10 个整数并确定这些数字是否按升序排列。

我遇到的问题是程序总是认为有提升,无论提供什么输入。我认为问题出在 IsInOrder() 函数的 for 循环中,但是我无法弄清楚它到底为什么不起作用或如何修复它。

另一个潜在问题是如何确定所有值的提升,例如,如果我的代码有效,我认为它会将 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] 视为提升,即使它不是。

我试过在网上搜索,发现了一些类似的作业问题,但没有答案。

这是我到目前为止的代码:

#include <iostream>

using namespace std;

bool IsInOrder (int numHold[]);

//This portion takes the numeral inputs and outputs the answer
int main()

{
int numHold[10];

bool status;

cout << "Welcome to the Ascension detector 5000" << endl;
cout << "This program will detect whether the numbers you input are in ascending   
order" << endl;
cout << "Isn't that neat?" << endl <<endl;

for (int i=0; i < 10;i++)
{
    cout << "Please enter a number: ";
    cin >> numHold[i];
}
cout << endl;

for(int i=0;i < 10;i++)
{
    cout << numHold[i] << endl;
}

status = IsInOrder(numHold);

if (status == true)
{
    cout << "The numbers are in ascending order" << endl;
}
else
{
     cout << "The numbers are not in ascending order" << endl;
}



system("PAUSE");
return 0;
}

//This function determines whether the inputs are in ascending order

 bool IsInOrder (int numHold[])
{
for (int i = 0; i < 10; i++)
{
        if (numHold[i] < numHold [i++])
        {
            return false;
        }
        else
        {
            return true;
        }
}
}  

提前感谢任何帮助,如果代码格式不正确,代码没有很好地复制/粘贴到代码示例中,我们深表歉意。

4

4 回答 4

2

IsInOrder函数中,运行 for 循环直到i<9并删除 else 部分并放在循环return true之外for

为什么return true在for循环之外?

因为true仅在您检查了所有元素时才返回,而不是每次都返回。看看你的代码,你会得到它。

于 2012-12-08T08:04:06.880 回答
0

首先,trueandfalse分支是错误的。

其次(假设true/false已修复),一旦您看到两个有序的数字,您就会得出结论,整个序列是按升序排列的。return true这是不正确的:在检查完每一对之前,你不能这样做。

最后,循环的终止条件为 1。

bool IsInOrder(int numHold[]) {
    for (int i = 0; i < 9; i++) {
        if (numHold[i] >= numHold[i+1]) {
            return false;
        }
    }
    return true;
}
于 2012-12-08T09:02:46.330 回答
0

您的IsInOrder例程不会检查数组中的所有值,它会在遇到两个不同的数字后立即返回。

此外,如果它会遍历整个数组(即,当所有数字都相同时),它会在结束时检查 11 个元素而不是 10 个元素,并且它不会返回任何内容。

于 2012-12-08T07:42:58.100 回答
0
bool IsInOrder(int numHold[])
{
    bool inOrder = true;
    for (int i = 0; i < 9; i++)
    {
        if (numHold[i] > numHold[i+1])
        {
            inOrder = false;
            break;
        }
    }
    return inOrder;
}
于 2012-12-08T07:46:06.527 回答