C++Primer学习-习题(1)
来源:互联网 发布:黄连上清丸河南淘宝 编辑:程序博客网 时间:2024/05/01 05:17
第一章
习题1.1 查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的main程序。
运行结果为:
习题1.2 修改程序使其返回-1。… 看系统如何处理。
我所使用的系统并没有报错,结果与1.1一致。
习题1.3 编写一个程序,在标准输出上打印“Hello,World”。
#include<iostream>using namespace std;int main(){ cout << "Hello,World" << endl; return 0;}
书中这个地方还没有开始使用namespace,我按照自己的习惯用了。
习题1.4 编写程序,使用乘法操作符“*”产生两个数的积。
#include<iostream>using namespace std;int main(){cout << "请输入两个数:" << endl;int a, b;cin >> a >> b;cout <<a<<"与"<<b<<"的乘积为:"<<a*b<< endl;return 0;}
习题1.5 我们的程序使用了一条较长的输出语句。重写程序,使用单独的语句打印每一个操作数。
#include<iostream>using namespace std;int main(){cout << "请输入两个数:" << endl;int a, b;cin >> a >> b;cout << a;cout << "与";cout << b;cout << "的乘积为:";cout << a*b;cout<< endl;return 0;}
习题1.6 解释下面的程序段:
std::cout<<"The Sum of"<<v1; <<"and"<<v2; <<"is"<<v1+v2 <<std::endl;
这段代码合法吗?
这段代码不合法。
注意,第1、2、4行的末尾有分号,表示这段代码包含三条语句,即第1、2行各为一个语句,第3、4行构成一个语句。“<<”为二元操作符,在第2、3两条语句中,第一个“<<”缺少左操作数,因此不合法。
在第2、3行的开头加上“std::cout”,即可更正。
习题1.7 编译有不正确嵌套注释的程序
如:
#include<iostream>using namespace std;/*623872489362/* */8373*/int main(){ cout << "Hello,World" << endl; return 0;}
产生错误:
1>—— 已启动生成: 项目: Test, 配置: Debug Win32 ——
1> 1v1.cpp
1>d:\vs\test\test\1v1.cpp(5): error C2059: 语法错误:“常量”
1>d:\vs\test\test\1v1.cpp(5): warning C4138: 在注释外找到“*/”
1>d:\vs\test\test\1v1.cpp(7): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\vs\test\test\1v1.cpp(7): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
习题1.8 指出下列输出语句哪些(如果有)是合法的,预测结果并编译。
std::cout<<"/*";std::cout<<"*/";std::cout<</*"*/"*/;
第一和第二条语句是合法的,第三条语句有一个“被注释掉了,会出现错误。
第三条语句中<<操作符之后至第二个双引号之前的部分被注释掉了,导致<<操
作符的右操作数不是一个完整的字符串,所以不合法。在分号之前加上一个双
引号即可更正。
习题1.9 下列循环做什么?sum的最终值是什么?
int sum=0;for(int i=-100;i<=100;++i) sum+=i;
求-100到100中所有整数的和,最终值为0.
习题1.10 用for循环编程,求从50到100的所有自然数的和。然后用while循环重写改程序。
for
#include<iostream>using namespace std;int main(){int sum = 0;for (int i = 50; i <= 100; i++){sum += i;}cout << sum << endl;return 0;}
while
#include<iostream>using namespace std;int main(){int sum = 0;int i = 50;while ( i <= 100){sum += i;i++;}cout << sum << endl;return 0;}
习题1.11 用while循环编程,输出10到0递减的自然数,然后用for循环重写该程序。
使用while:
#include<iostream>using namespace std;int main(){ int num = 10; while (num >= 0) { cout << num << " "; num--; } return 0;}
使用for:
#include<iostream>using namespace std;int main(){ int num ; for (num = 10; num >= 0;num--) { cout << num << " "; } return 0;}
结果均为:
习题1.12 对比前面两个习题中的循环,两种形式各有何优缺点?
在for循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,
且特别适用于循环次数已知的情况。在while循环中,循环控制变量的初始化
一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不
如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制
循环)。两种形式各有优点,但它们在功能上是等价的,可以相互转换。
习题1.13 编译器不同,理解其诊断内容的难易程度也不同。编写一些程序,包含本节“再谈编译”部分讨论的那些常见错误。研究编译器产生的信息,这样你在编译更复杂的程序遇到这些信息时就不会感到陌生。
常见的有语法错误、类型错误、声明错误。
暂略。
习题1.14 如果输入值相等,本节展示的程序将产生什么问题?
本节展示的程序为求用户提供的两个数之间的数的和,代码如下:
#include<iostream>using namespace std;int main(){ cout << "Enter two numbers:" << endl; int v1, v2; cin >> v1 >> v2;//read input //使用较小的数作为下界lower,较大的数作为上界upper int lower, upper; if (v1 <= v2) { lower = v1; upper = v2; } else { lower = v2; upper = v1; } int sum = 0; for (int val = lower; val <= upper; val++) sum += val; cout << "Sum of " << lower << " to " << upper << " inclusive is " << sum << endl; return 0;}
若输入值相等,则sum等于该值
习题1.15 验证你的预测
习题1.16 编写程序,输出用户输入的两个数中的较大者。
#include<iostream>using namespace std;int main(){ cout << "Enter two numbers:" << endl; int v1, v2; cin >> v1 >> v2;//read input if (v1 > v2) cout << v1 << endl; else cout << v2; return 0;}
习题1.17 编写程序,要求用户输入一组数。输出信息说明其中有多少个负数。
#include<iostream>using namespace std;int main(){ cout << "请输入一组数,以Ctrl+Z结束:" << endl; int v1; int num = 0; while (cin >> v1) { if (v1 < 0) num++; } cout <<"负数的个数为:"<< num << endl; return 0;}
结果如图:
习题1.18 编写程序,提示用户输入两个数并将这两个数范围内的每个数写到标准输出。
#include<iostream>using namespace std;int main(){ int a, b; int temp; cout << "请输入两个数:" << endl; cin >> a >> b; if (a >b) { temp = a; a = b; b = temp; } cout << a << "和" << b << "之间的数有:" << endl; for (int i = a;i<=b; i++) { cout << i << " "; } return 0;}
习题1.19 如果给上题定数1000和2000,会产生什么结果?修改程序,使每一行输出不超过十个数。
输入1000和2000得出的结果为:
修改程序:
#include<iostream>using namespace std;int main(){ int a, b; int temp; int count = 1; cout << "请输入两个数:" << endl; cin >> a >> b; if (a >b) { temp = a; a = b; b = temp; } cout << a << "和" << b << "之间的数有:" << endl; for (int i = a;i<=b; i++) { cout << i << " "; if (count % 10 == 0) cout << endl; count++; } return 0;}
测试:
习题1.20 编写程序,求用户指定范围内数的和,省略设置上界和下界的if测试,假定输入的是7与3,预测结果并运行,看实际是否与预测相符。若不相符,反复研究关于for和while循环的讨论直至弄清楚其中的原因。
#include<iostream>using namespace std;int main(){ int a, b; int sum=0; cout << "请输入两个数:" << endl; cin >> a >> b; for (int i = a;i<=b; i++) sum += i; cout << a << "与" << b << "之间所有数的和为:" << sum << endl; return 0;}
预测:输入7和3后输出的sum应为0。因为for循环不能进行,sum为初始化时的值。
运行程序后结果为: (与预测结果相同)
习题1.21 复制Sale_item.h源文件到工作目录,编写程序,循环遍历一组书的销售交易,读入每笔交易写至标准输出。
#include<iostream>#include"Sales_item.h"using namespace std;int main(){ Sales_item book; cout << "请输入书的销售信息:" << endl; while (cin >> book) { cout << "书的ISBN、销售数、总金额、单价分别为:" << endl; cout << book << endl; } return 0;}
习题1.22 编写程序,读入两个具有相同ISBN的Sales_item对象并产生它们的和。
- C++Primer学习-习题(1)
- c++primer第三章习题(1)
- c++primer 第九章习题(1)
- c++primer第十章习题(1)
- C++primer学习:string的操作习题(1):
- C primer plus第1章(概览)习题
- C++primer[习题][第一章][1-10]
- C++primer[习题][第二章][1-10]
- C++Primer第三章习题(1)
- C++primer[习题][第三章][1-10]
- C++primer[习题][第四章][1-10]
- c++primer(第四版)习题10.18
- 《c++primer(第四版)》习题8.6
- 《c++primer(第四版)》习题8.7
- 《c++primer(第四版)》习题8.9
- 《c++primer(第四版)》习题8.16
- 《c++primer(第四版)》习题11.9
- 《c++primer(第四版)》习题11.10
- (七)freeMarker之XML处理
- 携程开源数据库访问框架Ctrip DAL
- 常见的分页方式
- 深度RNN解决语义搜索难题
- 文章标题
- C++Primer学习-习题(1)
- 一些小知识点
- iOS开发 提交构建版本 在AppStore后台找不到构建版本 iOS10 xcode8
- 简单学习了MVP模式,谈谈自己的认识
- 预处理-分节1(宏定义)
- 什么是存储过程,存储过程的作用及优点
- 编码和加密算法的使用
- JQuery EasyUi之界面设计——前言与界面效果(一)
- android studio打jar包的相关处理及命令