"C++ Certified Professional Programmer (121-180)的模拟考试题目"
在C++编程中,理解和掌握关键概念对于成为一名认证的专业程序员至关重要。以下是对两个给定问题的详细解释:
问题1:
这段代码展示了如何使用C++的`iostream`库进行浮点数的格式化输出。`ios::floatfield`是`ios_base`类型的成员,用于设置浮点数的显示格式。`unsetf(ios::floatfield)`会取消当前设置的浮点数格式。`scientific`是`iomanip`库中的一个标志,它使得输出使用科学记数法。`setprecision(3)`则设置了小数点后的精度为3位。
```cpp
cout.unsetf(ios::floatfield);
cout << scientific << f << "" << setprecision(3) << f << endl;
```
在这个例子中,首先取消了浮点数的格式设置,然后尝试使用科学记数法输出`f`,但因为`f`的值是10.126,它在默认情况下会以固定记数法(fixed notation)显示,因为没有超过10的指数。接着,`setprecision(3)`会确保小数点后有3位数字。所以,正确答案应该是:
D. 1.0126001.013
输出会先以科学记数法显示1.0126,但因为精度设置为3,所以会有额外的0填充,接着再次以固定记数法显示1.013,同样保留3位小数。
问题2:
这个问题涉及到C++的`algorithm`库中的`find_first_of`函数,它在容器中查找指定序列的第一个匹配项。`find_first_of`会返回第一个匹配元素的迭代器,如果没有找到,则返回`end()`。
```cpp
vector<int>::iterator it = v.begin();
while ((it = find_first_of(it, v.end(), m1, m1 + 3)) != v.end()) {
cout << it - v.begin() << "";
}
```
这里,`m1`数组包含{1,2,3},在`v`向量中查找这三个数字的首次出现。`it`开始指向`v`的起始位置,然后在每次循环中,如果找到了匹配项,它将输出匹配元素的索引。如果找不到匹配项,循环停止。
给定的`v`向量是{1,2,3,4,5,1,2,3,4,5},在第一次迭代中,`it`会指向第一个匹配的1(索引0),然后在第二次迭代中,`it`会指向第二个匹配的2(索引5),因为它们都是`m1`中的元素。由于之后没有更多的匹配项,循环结束,输出的将是匹配元素的索引0和5。
所以,正确答案是:
B. program outputs: 05
此代码会打印出向量`v`中与`m1`数组中的元素匹配的元素的索引。
这两个问题揭示了C++中流(streams)的格式控制、迭代器的使用以及标准库中搜索算法的基本操作,这些都是C++程序员需要熟练掌握的关键技能。