(C++) For 循环运算符。典型任务


任务
求出 100 到 500 之间所有整数的总和。 

让我们编写一个程序来解决这个问题而不使用公式。 如果我们只是将加法的结果写入变量s,例如,作为
\(s=100+101+102+103+...+500\),

我们将在录音本身上花费大量时间,因为计算机不会理解如何在算术表达式中使用省略号,我们将不得不写下从 100 到 500 的所有数字。这样一个程序的价值将是微不足道。特别是如果我们想改变我们的数字并采用不同的范围。

我们该怎么办?
如果我们注意上面的条目,那么我们经常使用加法“+”。
您可以尝试逐渐向 s 变量添加数字。例如,使用这个符号
s = s + i.
我们做了什么:
1) 在右边我们放上表达式s + i, ,也就是我们取变量s的值 并加上变量的值给它i;
2)左边我们设置了变量的名称 s,即右边的整个计算结果都会存储在同一个 变量s中,所以我们将更改变量 s 的值。 
它仍然只是在所需范围内更改变量 i 的值。这可以通过 for.
循环来完成  
我们范围内的100到500的数字依次进入i变量。 
例子
// 重要的!首先你需要重置变量s, // 因此在第一步中数字 100 被添加到零, // 而不是内存中的内容! s=0; for ( i = 100; i <= 500; i++) // 变量 i 所在的循环头 小号 = 小号 + 我; // 以 1 为增量将其值从 100 更改为 500, // 在循环体中逐渐到变量s,   // 添加变化变量 i 的值, // 并将结果存储回变量 s 此解决方案与计算操作的总和非常相似:
\(s = 0 + 100 = 100, \\ s = 100 + 101 = 201, \\ s = 201 + 102 = 303 \\ ... \)

给定数中的最大数

在研究条件运算符时,我们谈到了从输入的多个数字中找到最大数字的主题。在“四个数的最大值”问题中我们使用了以下算法:
1. 将变量M的值赋给四个变量中的第一个;
2. 如果第二个变量的值大于变量M中的值,则将变量的值替换为第二个变量的值;
3. 如果第三个变量的值大于变量M中的值,则用第三个变量的值替换变量M的值;< br /> 4. 如果第四个变量的值大于M变量中的值,则用第四个变量的值替换变量的值。

可以看出,每一个 我们与变量M比较的数字 (让我们用X表示),如下:
 
伪代码
<前> 输入 X 如果 (M < X) 那么   M = X
这段代码的主要内容是确定变量 M 的初始值。
通常,在解决寻找最大值或最小值的问题时,变量 M 的初始值被分配为等于第一个数字。
因此,上面的代码必须执行小于数字个数的1次(因为第一个数字必须被输入并存储为变量M的初始值)。
如果我们从键盘上设置了数字的数量(例如,在变量 n 中),那么我们可以组织一个循环(from 2 to n),使用相同的数字来存储数字变量。

尝试自己编写程序。

最大不在所有之中

如果我们不需要在所有输入的数字中找到最大值(最小值),而只是在满足特定条件的数字中找到最大值(最小值),那么我们必须考虑到这样一个事实,即我们取的第一个数字作为最大值的初始值(最低)并不总能满足我们的要求。

例如,如果我们正在寻找最大负数,那么数据集为:\(\{5, -2, 4, 2, -1, -3\}\ ) 我们将得到最大值初始值中的数字5,它是正数并且大于任何负数。因此条件 X > M 永远是 false。

因此,仅在上一题的算法中添加一个负数检查是不够的,还需要考虑到第一个数字可能不满足要求的条件(在这种情况下,为负数) ).

您可以通过在循环内添加以下条件来解决此问题:

伪代码
<前> 如果 X 为负,则 如果 M >= 0 或 M <; X,那么 M=X
在指定的代码中, M >= 0 条件允许您执行  M = X 操作,即使 变量最初包含一个明显大于其余值的值(在我们的示例中,该值等于 5)。

我们还注意到,如果已知数字的范围,则可以将指定范围内的最小(最大)数字作为最大(最小)值的初始值。

任务

给出了 N 个数字。查找序列中第二大的元素。

这个问题有两种解释。
例如,如果给我们一组数字:\(10\ 15\ 20\ 35\ 14\ 35\ 10\),那么答案应该是什么?
在“第二大元素”下或者简称“次大”,可以理解为:
1) 如果我们将所有值\u200b\u200bin 非降序排列(排序)(每一个都大于或等于前一个),将会在倒数第二位的值。那么对于所考虑的一组数字,答案将是值 35;
2) 元素的值,仅大于最大值。那么答案是20。
如果数字集合中只有一个最大元素(其他的都更少),那么两种解释都是一样的,两种情况的答案都是一样的,否则答案是不同的。

考虑第一种情况(我们将在 伪代码).
为了找到答案,我们将使用两个变量:
1)maximum1——最大值(第一个最大值);
2) maximum2 - 第二个最大值(我们的答案)。

如果值变化的范围是已知的,那么我们取一个明显小于范围下限的数字作为初始值(例如,范围从 -1000 1000 -取数 -1001)
如果取值范围未知,那么可以将前两个输入的数分别写入变量max1max2的初始值,然后比较这些两个变量。 <前> input N //数字个数 输入 a, b 最大值 1 = 一个 最大值2 = b 如果 b >一个,然后    最大值 1 = b     max2 = 一个
接下来,我们考虑所有其他元素(前2个已经看过,所以我们从第3个开始) <前> nc 代表我从 3 到 n 输入一个 如果一个> maximum1 //有一个值大于maximum1 那 max2 = max1 //之前的第一个高点变成第二个 max1 = a //新元素将是第一个最大值 否则 //下一个元素不超过max1 // 需要和maximum2值比较 如果一个>最多 2 那 max2 = a //作为新值max2 // 在这种情况下 max1 不会改变 全部 全部 节拍
尝试自己实现这个算法。