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 << "The two numbers " << val1 << " are equal!\n"; \
,没有大括号(
)?您还应该删除多余的 else
语句。
嗨。感谢您的建议。我不知道为什么我把“\”放在那里。我可能很累。对于 else 语句,我总是被告知你不一定需要花括号!?!?我在最后添加了 else 语句,这样如果没有条件匹配,代码就不会做任何事情。如果您能纠正任何这些假设,我将不胜感激。
首先,不带大括号的else
语句仅执行紧随其后的代码,直到到达分号 (;
)。 for
和 while
语句也是如此。我总是在任何if-elseif-else
、for
或while
语句中使用大括号,因为不使用它们会导致愚蠢的,有时很难找到的错误。 其次,如果在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 版的示例)