C++Primer第五版 5.4.2节练习

练习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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值