![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++ Primer 5th 课后练习汇总
Focus5679
学生一枚
展开
-
《C++ Primer》5th 课后练习 第八章 IO库 11-14
练习8.11 本节的程序在外层while循环中定义了istringstream 对象。如果record 对象定义在循环之外,你需要对程序进行怎样的修改?重写程序,将record的定义移到while 循环之外,验证你设想的修改方法是否正确。#include <iostream>#include <fstream>#include <sstream>#inc...原创 2020-03-19 17:48:38 · 224 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第八章 IO库 1-10
练习8.1 编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直至遇到文件结束标识时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。istream &func(istream &in) { char c; while (in >> c) { c...原创 2020-03-19 17:48:06 · 229 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第七章 类 51~58
练习7.51 vector 将其单参数的构造函数定义成 explicit 的,而string则不是,你觉得原因何在?因为vector的单参数构造函数指定的是vector的期望大小,相当于构造了一个指定长度的空vector,这显然不合常理的。而string的单参数构造函数则是指定的string的内容,可以在局部构造出一个string类型的临时变量,这符合调用者的初衷,也可以提高编写程序的效率练习...原创 2020-02-21 17:20:00 · 420 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第七章 类 41~50
练习7.41 使用委托构造函数重新编写你的Sales_data 类,给每个构造函数体添加一条语句,令其一旦执行就打印一条信息。用各种可能的方式分别创建 Sales_data 对象,认真研究每次输出的信息直到你确实理解了委托构造函数的执行顺序。//Sale_data.h#pragma once#include <iostream>#include <string>u...原创 2020-02-21 17:18:38 · 280 阅读 · 1 评论 -
《C++ Primer》5th 课后练习 第七章 类 31~40
练习7.31 定义一对类X 和Y,其中X 包含一个指向 Y 的指针,而Y 包含一个类型为 X 的对象。class Y;class X{private: Y* p = nullptr;};class Y{private: X p;};练习7.32 定义你自己的Screen 和 Window_mgr,其中clear是Window_mgr的成员,是Screen的友元。//Sc...原创 2020-02-21 17:18:10 · 346 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第七章 类 21~30
练习7.21 修改你的Sales_data 类使其隐藏实现的细节。你之前编写的关于Sales_data操作的程序应该继续使用,借助类的新定义重新编译该程序,确保其正常工作。//Sale_data.h#pragma once#include <iostream>#include <string>using namespace std;struct Sales_da...原创 2020-02-21 17:17:33 · 204 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第七章 类 11~20
练习7.11 在你的Sales_data类中添加构造函数,然后编写一段程序令其用到每个构造函数。//Sale_data.h#pragma once#include <iostream>#include <string>using namespace std;struct Sales_data { Sales_data() = default; Sales_d...原创 2020-02-21 17:16:45 · 257 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第七章 类 1~10
练习7.1 使用2.6.1节定义的Sales_data类为1.6节的交易处理程序编写一个新版本。#include<iostream>#include<string>#include<vector>using namespace std;struct Sales_data { string bookNo; unsigned units_sold = ...原创 2020-02-21 17:15:55 · 243 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第六章 函数 51~56
练习 6.51 编写函数f的4版本,令其各输出一条可以区分的消息。验证上一个练习的答案,如果你的回答错了,反复研究本节内容直到你弄清自己错在何处。#include<iostream>#include<string>#include<vector>using namespace std;void f() { cout << "i'm f()...原创 2020-02-08 16:56:51 · 254 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第六章 函数 41~50
练习 6.41 下面的哪个调用是非法的?为什么?哪个调用虽然合法但显然与程序员的初衷不符?为什么?char *init(int ht, int wd = 80, char bckgrnd = ' ');(a) init();(b) init(24,10);(c) init(14,'*');a) 非法,第一个参数没有默认值,调用也未传入值。b) 合法。c) 合法,参数的类型是int...原创 2020-02-08 16:56:23 · 301 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第六章 函数 31~40
练习 6.31 什么情况下返回的引用无效?什么情况下返回常量的引用无效?当返回的是局部变量的引用时引用无效,当我们希望返回的对象被修改时,返回常量的引用无效。练习 6.32 下面的函数合法吗?如果合法,说明其功能;如果不合法,修改其中的错误并解释原因。int &get(int *array, int index) { return array[index]; }int main()...原创 2020-02-08 16:54:58 · 334 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第六章 函数 21~30
练习 6.21 编写一个函数,令其接受两个参数:一个是int型的数,另一个是int指针。函数比较int的值和指针所指的值,返回较大的那个。在该函数中指针的类型应该是什么?int maxxorp(const int x,const int *p) { return (x > *p) ? x : *p;}应该是const int *类型练习 6.22 编写一个函数,令其交换两个int...原创 2020-02-08 16:53:58 · 328 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第六章 函数 11~20
练习 6.11 编写并验证你自己的reset函数,使其作用于引用类型的参数。#include<iostream>using namespace std;void reset(int &a) { a = 0;}int main(){ int x = 10; cout << "x: " << x << endl; reset(...原创 2020-02-08 16:53:27 · 234 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第六章 函数 1~10
练习 6.1 实参和形参的区别的什么?实参是调用函数时实际传入的值,是形参的初始值。练习 6.2 请指出下列函数哪个有错误,为什么?应该如何修改这些错误呢?(a) int f() { string s; // ... return s; }(b) f2(int i) { /* ... */ }(c) int calc(i...原创 2020-02-08 16:52:58 · 179 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第五章 语句 21~25
练习5.21 修改5.5.1节练习题的程序,使其找到的重复单词必须以大写字母开头。#include<iostream>#include<string>#include<vector>using namespace std;int main(){ string s, pres=""; bool flag = true; while (cin &g...原创 2020-01-28 14:47:03 · 170 阅读 · 1 评论 -
《C++ Primer》5th 课后练习 第五章 语句 11~21
练习5.11 修改统计元音字母的程序,使其也能统计空格、制表符、和换行符的数量。#include<iostream>#include<string>using namespace std;int main(){ string s; int sum_a = 0, sum_e = 0, sum_i = 0, sum_o = 0, sum_u = 0, sum_...原创 2020-01-28 14:46:33 · 220 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第五章 语句 1~10
练习5.1 什么是空语句?什么时候用空语句?空语句是不做任何操作的语句,当语法上需要一条语句但是逻辑上不需要的时候,可以使用空语句。练习5.2 什么是块?什么时候会用到块?块是指用花括号括起来的语句和声明序列,当语法上需要一条语句但是逻辑上需要一组语句的时候,可以使用块。练习5.3 使用逗号运算符重写1.4.1节的 while 循环,使它不再需要块,观察改写之后的代码可读性提高了还是降低了...原创 2020-01-28 14:46:05 · 213 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第四章 表达式 31~38
练习4.31 本节的程序使用了前置版本的递增运算符和递减运算符,解释为什么要用前置版本而不用后置版本。要想使用后置版本的递增递减运算符需要做哪些改动?使用后置版本重写本节的程序。尽可能用前置的递增递减运算符。可以直接将前置的递增递减运算符改成后置的递增递减运算符。练习4.32 解释下面这个循环的含义。constexpr int size = 5;int ia[size] = { 1, 2,...原创 2020-01-15 12:13:45 · 269 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第四章 表达式 21~30
练习4.21 编写一段程序,使用条件运算符从 vector 中找到哪些元素的值是奇数,然后将这些奇数值翻倍。#include<iostream>#include<vector>using namespace std;int main(){ int temp{}; vector<int> vec; while (cin >&...原创 2020-01-15 12:13:23 · 198 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第四章 表达式 11~21
练习4.11 书写一条表达式用于测试4个值a、b、c、d的关系,确保a大于b、b大于c、c大于d。if(a>b && b>c && c>d)练习4.12 假设i,j,k 是三个整数,说明表达式 i != j < k 的含义。相当于i!=(j<k)在进行i!=()时会先将bool类型转换成int类型,值为0或1。练习4.13 在...原创 2020-01-15 12:12:41 · 224 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第四章 表达式 1~10
练习4.1 表达式 5 + 10 * 20 / 2 的求值结果是多少?105练习4.2 根据4.12节中的表,在下述表达式的合理位置添加括号,使得添加括号后运算对象的组合顺序与添加括号前一致。/*- (a)*/ *vec.begin()/*- (b)*/ *vec.begin() + 1*(vec.begin())(*(vec.begin()))+1练习4.3 C++语言没有明确...原创 2020-01-15 12:09:16 · 164 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第三章 字符串、向量和数组 41~45
练习3.41 编写一段程序,用整型数组初始化一个vector对象。#include<iterator>#include<vector>#include<iostream>using namespace std;int main(){ int arr[] = { 1,2,3,4,5 }; vector<int> vec(be...原创 2019-10-24 22:17:07 · 154 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第三章 字符串、向量和数组 31~40
练习3.31 编写一段程序,定义一个含有10个int的数组,令每个元素的值就是其下标值。#include<cstddef>#include<iostream>using namespace std;int main(){ constexpr size_t arr_size = 10; int arr[arr_size] = {}; for ...原创 2019-10-24 22:16:01 · 243 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第三章 字符串、向量和数组 21~30
练习3.21 请使用迭代器重做3.3.3节的第一个练习。#include<iostream>#include<vector>#include<string>using namespace std;void check_and_print(vector<int> &vec, int num){ cout << "...原创 2019-10-24 22:14:47 · 253 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第三章 字符串、向量和数组 11~20
练习3.11 下面的范围for语句合法吗?如果合法,c的类型是什么?const string s = "Keep out!";for(auto &c : s){ /* ... */ }如果for循环体中不对c做修改,则是合法的,c为const string &型。练习3.12 下列vector对象的定义有不正确的吗?如果有,请指出来。对于正确的,描述其执行结果;对于不正确...原创 2019-10-24 22:13:52 · 177 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第三章 字符串、向量和数组 1~10
练习3.1 使用恰当的using 声明重做 1.4.1节和2.6.2节的练习。练习3.2 编写一段程序从标准输入中一次读入一行,然后修改该程序使其一次读入一个词。#include <iostream>#include <string>using namespace std;int main(){ string s(""); while(getli...原创 2019-10-24 22:13:15 · 246 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第二章 变量和基本类型 31~40
练习2.31 假设已有上一个练习中所做的那些声明,则下面的哪些语句是合法的?请说明顶层const和底层const在每个例子中有何体现。r1 = v2; // 合法, 顶层const在拷贝时不受影响p1 = p2; // 不合法, p2 是底层const,如果要拷贝必须要求 p1 也是底层constp2 = p1; // 合法, int* 可以转换成const int*p1 = p3; //...原创 2019-09-28 19:41:33 · 253 阅读 · 3 评论 -
《C++ Primer》5th 课后练习 第二章 变量和基本类型 21~30
练习2.21 请解释下述定义。在这些定义中有非法的吗?如果有,为什么?int i = 0;(a) double* dp = &i;(b) int *ip = i;(c) int *p = &i;a非法,double型指针指向了int型对象;b非法,不能将int型变量赋给指针;c合法练习2.22 假设 p 是一个 int 型指针,请说明下述代码的含义。if (p) /...原创 2019-09-28 19:41:02 · 222 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第二章 变量和基本类型 11~20
练习2.11 指出下面的语句是声明还是定义:(a) extern int ix = 1024;(b) int iy;© extern int iz;a 声明+定义b 声明+定义c 声明练习2.12 请指出下面的名字中哪些是非法的?(a) int double = 3.14;(b) int _;© int catch-22;(d) int 1_or_2 = 1;(e) ...原创 2019-09-28 19:40:26 · 181 阅读 · 0 评论 -
《C++ Primer》5th 课后练习 第二章 变量和基本类型 1~10
练习2.1 类型 int、long、long long 和 short 的区别是什么?无符号类型和带符号类型的区别是什么?float 和 double的区别是什么?它们的最小存储空间不同,分别为int(16位),long(32位),long long(64位),short(16位)。无符号类型只能表示大于等于0的数。带符号类型可以表示正数,负数和0。它们存储位数不同(float为32位,do...原创 2019-09-28 11:28:36 · 234 阅读 · 0 评论