Stroustrup C++ 书籍。如何跟踪while循环中哪个整数输入最小和最大?

Posted

技术标签:

【中文标题】Stroustrup C++ 书籍。如何跟踪while循环中哪个整数输入最小和最大?【英文标题】:Stroustrup C++ Book. How to keep track of which integer input is smallest and largest in while loop? 【发布时间】:2016-08-09 04:28:44 【问题描述】:

我是 C++ 编程新手,只是一般的编程,当我被困在第 4 章第 6 章时,我正在阅读 Stroustrup 的 Programming Principles and Practice Using C++ 2nd Edition。

问题如下: 编写一个包含一个 while 循环的程序,该循环读取两个整数,然后打印它们。 更改程序以写出较小的值和较大的值。 等等等等 现在更改循环的主体,使其每次只读取一个双精度数。定义两个变量来跟踪哪个是最小的,哪个是你迄今为止看到的最大值。通过循环的每个itme 写出输入的vlue 如果它是迄今为止最小的,则在数字之后写入迄今为止最小的。如果它是迄今为止最大的,请在数字后面写迄今为止最大的。

基本上,我很难保持最小值和最大值贯穿所有循环。因为,目前,所发生的只是每次我输入两个数字时,它只会显示我在程序早期已经实现的最大/最小。它不会保持最大/最小值,直到其中一个循环中出现应有的更小/更大的值。

我希望我能够清楚地解释情况。我确信它只是一个非常简单的修复,我是编程新手。 到目前为止,这是我的代码:

#include "../../../std_lib_facilities.h";

int main()

    double val1;
    double val2;
    double largest =0  ;
    double smallest= 0 ;
    double input = 0;

    char exit = ' ';

    while (exit != 'x') 
        cout << "Please enter two numbers.\n";
        cin >> val1 >> val2;
        cout << "The two values you have entered are: " << val1 << " and " << val2 << "\n";

        if (val1 < val2) 
            cout << "The smaller value is: " << val1 << ". The larger value is: " << val2 << ".\n";
            if (val2 - val1 <= .5)
                cout << "The numbers are almost equal.\n";
        
        else if (val2 < val1) 
            cout << "The smaller value is: " << val2 << ". The larger value is: " << val1 << ".\n";
            if (val1 - val2 <= .5)
                cout << " The numbers are almost equal.\n";
        
        else
            cout << "The two numbers " << val1 << " are equal!\n"; \

            if (val1 < smallest && val2>val1) 
                cout << val1 << " is the smallest so far.\n";
                smallest = val1;
            
            else if (val2<smallest && val1>val2) 
                cout << val2 << " is the smallest so far.n";
                smallest = val2;
            
            else 


            if (val1 > largest && val2 < val1) 
                cout << val1 << " is the largest so far.\n";
                val1 = largest;
            
            else if (val2 > largest && val1 < val2) 
                cout << val2 << " is the largest so far.\n";
                val2 = largest;
            
            else 

            

            cout << "If you would like to exit this program, please enter x. Otherwise, enter any other key to continue. \n";
            cin >> exit;
    

【问题讨论】:

为什么在你的else语句后面的第一行代码后面有一个\ cout &lt;&lt; "The two numbers " &lt;&lt; val1 &lt;&lt; " are equal!\n"; \ ,没有大括号()?您还应该删除多余的 else 语句。 嗨。感谢您的建议。我不知道为什么我把“\”放在那里。我可能很累。对于 else 语句,我总是被告知你不一定需要花括号!?!?我在最后添加了 else 语句,这样如果没有条件匹配,代码就不会做任何事情。如果您能纠正任何这些假设,我将不胜感激。 首先,不带大括号的else 语句仅执行紧随其后的代码,直到到达分号 (;)。 forwhile 语句也是如此。我总是在任何if-elseif-elseforwhile 语句中使用大括号,因为不使用它们会导致愚蠢的,有时很难找到的错误。 其次,如果在if 语句中没有任何条件结果为真,则暗示不会执行任何操作。当你添加else 语句时,大括号内的代码将被执行,在这种情况下什么都不执行,所以它们是多余的。 【参考方案1】:

您没有正确跟踪最大值。

            cout << val1 << " is the largest so far.\n";
            val1 = largest;  // Wrong

需要

            cout << val1 << " is the largest so far.\n";
            largest = val1;

            cout << val2 << " is the largest so far.\n";
            val2 = largest;  // Wrong

需要

            cout << val2 << " is the largest so far.\n";
            largest = val2;

【讨论】:

以上是关于Stroustrup C++ 书籍。如何跟踪while循环中哪个整数输入最小和最大?的主要内容,如果未能解决你的问题,请参考以下文章

由于在 Bjarne Stroustrup“使用 c++ 的编程和实践”中找不到符号而导致的链接错误

C++之父Bjarne Stroustrup:程序员在数学上付出的努力,永远也不会白费

代码在 Visual c++ 中无法按预期工作(来自 bjarne stroustrup 编程和原则书 2n 版的示例)

Bjarne Stroustrup 语录1

C++之父Bjarne Stroustrup:程序员在数学上付出的努力,永远也不会白费

C ++内存模型char vs word,并发?来自 Stroustrup 的书