您的位置:首页 > 编程语言 > C语言/C++

C++Primer第五版 5.4.2节练习

2015-09-14 19:41 471 查看
练习5.15:说明下列循环的含义并改正其中的错误。

(a). for (int ix = 0; ix != sz; ++ix) {/*…*/} 
   if( ix != sz)
//…


答:错误原因,if中,ix只在for循环中有效

改正:

for (int ix = 0; ix != sz; ++ix) { 
   if( ix != sz)
//… 
    }


(b).

int ix;
 for (ix != sz; ++x) {/*…*/}


答:错误原因,ix没有初始化。

改正:
for (int ix = 0; ix != sz; ++x) {/*…*/}


(c).for (int ix = 0; ix != sz; ++ix, ++sz) {/*…*/}


答:sz没有明确定义,因此条件ix != sz可能一直成立,需要在语句里进行判断,将循环停止。

练习5.16:while循环特别适用于那种条件保持不变,反复执行操作的情况,例如,当未达到文件末尾时不断读取下一个值。For循环则更像是在按步骤迭代,它的索引值在某个范围内依次变化。根据每种循环的习惯用法各自编写一段程序,然后分别用另一种循环改写。如果只能用一种循环,你倾向于使用哪种呢?为什么?

答:如果只能一种循环,我更倾向于for循环,原因是,习惯了,按步骤迭代,跑一遍到底。

个人觉得用性格来形容的话,for更暴力一点,不管三七二十一,就是要跑到底,而while更理性一点,会不断检查。

程序见云盘程序练习5.16,简单的一个求和比较。

练习5.17:假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。为了实现这一目标,对于两个不等长的vector对象,只需挑出长度较短的那个,把它的所有元素和另一个vector对象比较即可。例如,如果两个vector对象的元素分别是0,1,1,2和0,1,1,2,3,5,8,则程序的返回结果为真。

答:见云盘程序练习5.17。

练习5.16

#include <iostream>

using namespace std;

int main()
{
    int sum = 0;
    int sum2 = 0;
    int i = 0;
    for (i = 0; i != 10; ++i)
        sum += i;

    int j = 0;
    while (j != 10)
        {
            sum2 += j;
            ++j;
        }
    cout << "For sum :" << sum << endl;
    cout << "While sum :" << sum2 << endl;
    return 0;
}


练习5.17

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    int ivec1, ivec2;
    vector<int> vec1;
    vector<int> vec2;

    while (cin >> ivec1 && ivec1 != 999) //输入999 结束 
        vec1.push_back(ivec1);

    while (cin >> ivec2 && ivec2 != 999) //输入999 结束 
        vec2.push_back(ivec2);

    decltype(vec1.size()) length = ( vec1.size() <= vec2.size() ? vec1.size() : vec2.size() ); 
    //返回两者中,长度较短的那个 

    for (int i = 0; i != length; ++i)
    {
        if (vec1[i]==vec2[i])
            cout << vec1[i] << " ";
        else  break; //未找到合适的循环停止 
    }

    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: