C++Primer第五版 5.4.2节练习
2015-09-14 19:41
471 查看
练习5.15:说明下列循环的含义并改正其中的错误。
答:错误原因,if中,ix只在for循环中有效
改正:
(b).
答:错误原因,ix没有初始化。
改正:
答: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
练习5.17
(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; }
相关文章推荐
- 区分接口继承和实现继承(Effective C++_34)
- C++,C程序设计入门——《高质量程序设计第4章》
- C++Primer第五版 5.4.1节练习
- C++开发中指针易错点
- C++Primer第五版 5.3.2节练习
- 黑马程序员-------C语言----const修饰符
- C++Primer第五版 5.3.1节练习
- A very hard mathematic problem
- 避免遮掩继承而来的名称(Effective C++_33)
- C++Primer第五版 5.2节练习
- C++Primer第五版 5.1节练习
- 24.c++-lib文件简述
- C++一个一个Hwd类库
- C++ Primer学习总结_1_开始
- AVL平衡树的c++实现
- 时间戳转日期的算法(C语言实现)
- C语言中将结构体写入文件
- C/C++语言中const的用法
- C/C++一些问题的理解
- C语言中函数参数入栈的顺序