C++Primer学习
键客小E
中年大叔一枚,不从事编程行业,但和软件行业沾点边。
展开
-
C++Primer 练习9.52(续) 中缀表达式转后缀表达式求值
练习9.52:使用stack处理括号化的表达式。当你看到一个左括号,将其记录下来。当你在一个左括号之后看到一个右括号,从stack中pop对象,直至遇到右括号,将左括号也一起弹出栈。让后将一个值(括号内的运算结果)push到栈中,表示一个括号化的(子)表达式已经处理完毕,被其运算结果所替代。说明:上一篇写了关于中缀表达式求值的问题,对计算机而言,后缀表达式求值更加方便,不需要考虑符号的优先级,原创 2015-08-09 22:18:26 · 1086 阅读 · 0 评论 -
C++ Primer 第五版 练习9.52 解答
练习9.52:使用stack处理括号化的表达式。当你看到一个左括号,将其记录下来。当你在一个左括号之后看到一个右括号,从stack中pop对象,直至遇到右括号,将左括号也一起弹出栈。让后将一个值(括号内的运算结果)push到栈中,表示一个括号化的(子)表达式已经处理完毕,被其运算结果所替代。说实话:看见题目,第一回读没有读懂,读了几回之后,脑中忽然想起了大二还是大三刘sir(数据结构老原创 2015-08-09 22:11:28 · 1784 阅读 · 0 评论 -
C++Primer 第五版 练习9.43 解答
练习9.43:编写一个函数,接受三个string参数s,oldVal和newVal。使用迭代器及insert和erase函数将s中所有oldVal替换为newVal。测试你的程序,用它替换通用的简写形式,如,将“tho”替换为“though”,将“though”。思路:刚开始做这道题的时候,没成想会有多难,真正写的时候,发现问题很多。最开始,期望走循环方式来标记相符的迭代器原创 2015-08-06 11:25:45 · 1360 阅读 · 3 评论 -
C++Primer 练习9.44 解答
练习9.43:编写一个函数,接受三个string参数s,oldVal和newVal。使用迭代器及insert和erase函数将s中所有oldVal替换为newVal。测试你的程序,用它替换通用的简写形式,如,将“tho”替换为“though”,将“though”。练习9.44:重写上一题的函数,这次使用一个下标和replace。然而,看到网上很多人写的解答,觉得这题很简单,原创 2015-08-06 23:41:48 · 631 阅读 · 1 评论 -
C++Primer第五版 练习11.8(解答)
练习11.8:编写一个程序,在一个vector而不是一个set中保存不重复的单词。使用set的优点是什么? 答:见练习11.8.cpp。 set的优点,set是按照关键字进行存储,因此,当集合里已经有了一个同样的关键字,那即将要存入的关键字就会被忽略。因此set里面的关键字唯一。 /**C++Primer(第五版)*2015/9/24*练习11.8 *问题描述:练习11.8:编写一个程原创 2015-09-24 23:42:29 · 1433 阅读 · 0 评论 -
C++Primer第五版 练习11.11(解答)
练习11.11:不使用decltype重新定义bookstore。/**C++Primer(第五版) *11.2.2节练习 *练习11.11 *问题描述:练习11.11:不使用decltype重新定义bookstore。* 说明:这道题是让你明白decltype(compareIsbn)*的类型究竟是什么,顺便复习了一下函数指针的内容 *作者:Nick Feng *邮箱:nickgre原创 2015-09-25 15:17:35 · 1262 阅读 · 0 评论 -
C++Primer第五版 2.1.2节练习
练习2.3:读程序写结果usinged u = 10, u2 = 42;std::cout std::cout int i = 10, i2 = 42;std::cout std::cout std::cout std::cout 练习2.4:编写程序检查你的估计是否正确,如果不正确,请仔细阅读本节直到弄明白问题所在。 答:上面的结果(从上到原创 2015-09-10 21:51:03 · 789 阅读 · 0 评论 -
C++Primer第五版 2.3.3节练习
练习2.25:说明下列变量的类型和值。 (a) int * ip , i ,&r = I; (b) int i , *ip = 0; (c) int* ip, ip2; 答: (a). ip存放的是地址,ip指向int型对象,i是int型对象,r是对i的引用,值都不确定 (b).i 是int型对象,值不确定,ip是int型的空指针,存放地址为空 (c). ip存放的原创 2015-09-11 07:20:58 · 1604 阅读 · 0 评论 -
C++Primer第五版 2.4节练习
练习2.26:下面那些句子是合法的?如果有不合法的句子,请说明为什么? (a) const int buf; //不合法,buf需要赋值 (b) int cnt = 0;//合法,不用说了 (c) const int sz = cnt ;//合法,只不过sz的值需要看cnt (d) ++cnt;++sz; // 如果根据(c)项目来看,cnt可以自增,sz不可以自增原创 2015-09-11 07:25:39 · 1152 阅读 · 0 评论 -
C++Primer第五版 2.4.2节练习
练习2.27:下面的哪些初始化是合法的?请说明原因。 (a)int I = -1,&r = 0; (b)int *const p2 = &i2; (c) const int I = -1, &r = 0; (d) const int *const p3 =&i2; (e) const int *p1 = &i2; (f). const int &const r2; (g) cons原创 2015-09-11 07:27:31 · 2522 阅读 · 0 评论 -
C++Primer第五版 2.4.3节练习
练习2.30:对于下面的这些语句,请说明对象被声明成了顶层const还是底层const? const int v2 = 0; //v2的值不能被改变,所以这是一个顶层const int v1 = v2; int *p1 = &v1, &r1 = v1; const int *p2 = &v2; //p2存放的是v2的地址,不能间接改变v2的值,但p2的值可以改//变,所以这是一个底层co原创 2015-09-11 07:28:36 · 1914 阅读 · 1 评论 -
C++Primer第五版 2.5.2节练习
练习2.33:利用本节定义的变量,判断下列语句的运行结果。练习2.34;基于上一个练习中的变量和语句编写一段程序,输出赋值前后变量的内容,你刚才的推断正确吗?如果不对,请反复研读本节的示例直到你明白错在何处为止。 答案:2.3,2.4 int i = 0, &r = i; auto a = r;// int a =r; const int ci = i, &cr = ci;auto原创 2015-09-11 07:33:48 · 1698 阅读 · 0 评论 -
C++Primer第五版 2.6.2节练习
练习2.41:使用你自己的Sales_data类节重写1.51节(第20页)、1.5.2节(第21页)和1.6节(第22页)的练习。眼下把Sales_data类的定义和main函数放在同一个文件里。 答案:看下一节程序原创 2015-09-11 07:42:04 · 814 阅读 · 0 评论 -
C++Primer第五版 3.2.3节练习
练习 3.6:编写一段程序,使用范围for语句将字符串内的所有字符用X代替。 答案见云盘程序练习 3.7:就上一题完成的程序而言,如果将循环控制变量的类型设为char将发生什么?先估计一下结果,然后实际编程进行验证。 答:合法,可以执行练习 3.8:分别用while循环和传统的for循环重写第一题的程序,你觉得哪种形式更好呢,为什么?答:各有千秋,我觉得差不多,看个人习惯,for是条件检验一次,原创 2015-09-11 09:18:53 · 1913 阅读 · 1 评论 -
C++Primer第五版 3.3.2节练习
练习3.14:编写一段程序,用cin输入一组整数并把它们存入一个vector对象。 练习3.15:改写上题的程序,不过这次读入的是字符串。 答案:见云盘程序练习3.14#include <iostream>#include <vector>using namespace std;int main(){ int v1; vector<int> vec1; while (cin >> v1原创 2015-09-11 09:33:16 · 1193 阅读 · 1 评论 -
C++Primer第五版 1.4.3节练习
练习1.16:编写程序,从cin读取一组数,输出其和答;程序见百度盘目录/***2015-4-26 page 15 *练习1.16 */ #includeint main(){ int sum = 0, value = 0; while(std::cin >> value) sum += value; std::cout << "Sum is: "原创 2015-09-10 21:00:55 · 864 阅读 · 2 评论 -
C++Primer第五版 1.4.4节练习
练习 1.17:如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的? 练习 1.18:编译并运行本节的程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。 练习 1.19:修改你为1.4.1节练习1.10(第11页)所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。 答:1.17-1.18 如果输入的原创 2015-09-10 21:04:46 · 1373 阅读 · 0 评论 -
C++Primer第五版 1.5.1节练习
练习1.20 在网站(书上提供)上,第一章的代码目录中包含了头文件Sales_item.h。将它拷贝到你自己的工作目录中。用它编写一个程序,读取一组书籍销售记录,将每条记录打印到标准输出上。 练习 1.21 编写程序,读取两个ISBN相同的Sales_item对象,输出它们的和。 练习 1.22 编写程序,读取多个具有相同ISBN的销售记录,输出其所有记录的和 答:1.20原创 2015-09-10 21:13:24 · 2209 阅读 · 5 评论 -
C++Primer中文版 1.5.2节练习
练习1.23 编写程序,读取多条销售记录,并统计每个ISBN有几条销售记录?练习1.24 输入表示多个ISBN的多条销售记录来测试上一个程序,每个ISBN的程序应该聚在一起。 答:见云盘程序练习1.23-1.25(合在一起)#include #include "Sales_item.h" /* run this program using the console pause原创 2015-09-10 21:20:33 · 1982 阅读 · 1 评论 -
C++Primer第五版 1.6节练习
练习 1.25:借助网站上的Sales_item.h 头文件,编译并运行本节给出的书店程序。答:同上#include #include "Sales_item.h" /* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(原创 2015-09-10 21:22:30 · 937 阅读 · 0 评论 -
C++Primer第五版 2.1.1节练习
练习2.1: 类型int ,long ,long long 和 short的区别是什么?无符号类型和带符号类型的区别是什么?float和double的区别是什么? 练习2.2:计算按揭贷款时,对于利率、本金和付款分别应选择何种数据类型?说明你的理由。 个人回答:2.1 int 是整形 ,最小尺寸16位。 long 是长整形,32位 long long 也是长整型 最原创 2015-09-10 21:44:56 · 1648 阅读 · 0 评论 -
C++Primer第五版 2.1.3节练习
练习2.5:指出下述字面值的数据类型并说明每一组内几种字面值的区别。(a).‘a’,L’a’, “a”,L”a” (b).10 , 10u , 10L, 10uL, 012, 0xC (c).3.14 , 3.14f , 3.14L (d).10 , 10u, 10. ,10e-2 练习2.6:下面两组定义是否有区别,如果有,请叙述之?Int month = 9, da原创 2015-09-10 21:56:36 · 2176 阅读 · 3 评论 -
C++Primer第五版 2.2.1节练习
练习2.9:解释下列定义的含义。对于非法的定义,请说明错在何处并将其改正。(a) std::cin >> intinput_value; 错误,先定义,后使用。//报错,意外的类型改正:Int input_value ;Std::cin >> input_value;(b) int I = {3.14 } 。C++11新特性,但精度肯定丢失(c) doub原创 2015-09-10 22:10:34 · 1728 阅读 · 0 评论 -
C++Primer第五版 2.2.2节练习
练习2.11指出下面的语句是声明还是定义:(a) extern int ix =1024; //定义(b) int iy; //声明并定义iy(c) extern int iz; //仅声明iz原创 2015-09-10 22:14:35 · 933 阅读 · 0 评论 -
C++Primer第五版 2.2.3节练习
练习2.12:请指出下面的名字中哪些是非法的?(a) int double = 3.14 //错误,关键字double不能做变量名(b) int _;//错误,标识符必须由字母,数字和下划线组成,但必须以字母或者下划线开头,函数体外的标识符也不能以下划线开头//有不同答案(c) int catch-22; //错误,不能有连字符(d) int 1_or_原创 2015-09-10 22:16:22 · 1178 阅读 · 0 评论 -
C++Primer第五版 2.2.4节练习
练习2.13 下面程序中j的值是多少?#include int i = 42;int main(){ inti = 100; //std::cout intj = i; //std::cout return0;}练习 2.14 下面程序合法吗?如果合法?它将输出什么?原创 2015-09-10 22:18:22 · 1276 阅读 · 0 评论 -
C++Primer第五版 2.3.1节练习
练习2.15: 下面的那个定义是不合法的?为什么?(a) int ival = 1.01; (b)int&rvall = 1.01; (c) int &rval12 = ival; (d): int &rval13;答:(a)合法,但赋值后精度丢失,变成1(b)不合法,引用需要与一个变量绑定,不能直接赋值(c)合法(d)不合法,没有初始化,引用必须要和一个对象绑定原创 2015-09-10 22:22:35 · 2026 阅读 · 0 评论 -
C++Primer第五版 2.3.2节练习
练习2.18:编写代码分别更改指针的值以及指针所指对象的值。答案:见程序练习2.18 练习2.19:说明指针和引用的主要区别。答:其实P49页就说得很好了。指针引用都能提供对其他对象的间接访问。指针本身是一个对象,而引用本身并非一个对象。引用一旦绑定,就只能很那个绑定值同生共死,特别专一。每次使用这个引用都是访问它最初绑定的那个对象。指针和它存放的地址之间就没有这种限制。和原创 2015-09-10 22:38:24 · 4491 阅读 · 0 评论 -
C++Primer第五版 1.2节练习(解答)
练习1.3:编写程序,在标准输出上打印Hello, World 练习1.4:我们的程序使用加法运算符+来将两个数相加。编写程序使用运算符“*”来打印两个数的积。 练习1.5:我们将所有输出操作放在一条很长的语句中。重写程序,将每个运算符对象的打印操作放在一条独立的语句中。 练习1.6:解释下面程序是否合法。 Std:原创 2015-09-10 17:14:30 · 1096 阅读 · 0 评论 -
C++Primer第五版 1.3节练习
练习1.7:编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。练习1.8:指出下列哪些输出语句是合法的(如果有的话):A std::cout B std::cout C std::cout D std::cout /* “*/;预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述原创 2015-09-10 17:19:43 · 680 阅读 · 0 评论 -
C++Primer第五版 1.4.1节练习
练习1.9:编写程序,使用while循环将50到100的整数相加。 练习 1.10:除了++运算符将运算对象的值增加1之外,还有一个递减运算符(--)实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。 练习1.11:编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。 答:1.9原创 2015-09-10 17:26:49 · 1456 阅读 · 1 评论 -
C++Primer第五版 1.4.2节练习
练习1.12下面的for循环完成了什么功能? Sum的终值是多少?int sum = 0;for (int i = -100; i sum += i; 练习1.13:使用for循环重做1.4.1节中所有练习(第11节) 练习 1.14:对比for循环和while循环,两种形式的优缺点各是什么? 练习 1原创 2015-09-10 17:33:49 · 1052 阅读 · 1 评论 -
C++Primer第五版 2.4.4节练习
练习2.32:下面的代码是否合法?如果非法,请设法将其修改正确。 int null = 0,*p = null;//非法 //修改 const int *p = nullptr;原创 2015-09-11 07:29:28 · 1642 阅读 · 1 评论 -
C++Primer第五版 2.5.3节练习
练习 2.36:关于下面的代码,请指出一个变量的类型以及程序结束时它们各自的值。#include <iostream>int main(){ int a = 3, b = 4; decltype (a) c = a; // a = 3, c = 3,c是int型 std::cout << c << a << std::endl; decltype ((b))原创 2015-09-11 07:36:08 · 1568 阅读 · 3 评论 -
C++Primer第五版 2.6.1节练习
练习2.39:编译下面的程序观察其运行结果,注意,如果忘记写类定义后面的分号会发生什么情况?记录下相关信息,以后可能会用。#include <iostream>struct Foo {}int main(){ return 0;}4 1 E:\C++ Primer 第五版 练习和解答\第二章 变量和基本类型\书后程序题\练习2.39.cpp [Error] expecte原创 2015-09-11 07:37:13 · 1333 阅读 · 0 评论 -
C++Primer第五版 2.6.3节练习
练习2.42:根据你自己的理解重写一个Sales_data.h头文件,并以此为基础重做2.6.2节(第67页)的练习。 答案:见程序练习2.42#include <iostream>struct Sales_data{ std::string bookNo; unsigned units_sold; double price = 0.0; double revenu原创 2015-09-11 07:43:52 · 1525 阅读 · 3 评论 -
C++Primer第五版 3.2.2节练习
练习3.2:编写一段程序从标准输入中一次读入一整行,然后修改该程序使其一次读入一个词。练习3.3:请说明string类的输入运算符和getline函数分别是如何处理空白字符的。练习 3.4:编写一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等,输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。练习 3.5:编写一段程序从标准输入中读入原创 2015-09-11 08:09:53 · 2467 阅读 · 1 评论 -
C++Primer第五版 3.3.1节练习
练习3.12 下列vector对象的定义有不正确的吗?如果有,请指出来。对于正确的,描述其执行结果;对于不正确的,说明其错误的原因。(a). vector<vector<int>> ivec;(b). vector<string> svec = ivec;(c). vector<string> svec(10,"null");练习3.13: 下列的vector对象包含多少个元素?这些元素的值原创 2015-09-11 09:29:47 · 1692 阅读 · 0 评论 -
C++Primer第五版 3.3.3节练习
练习3.16:编写一段程序,把练习3.13中vector对象的容量和具体内容输出出来。检验你之前的回答是否正确,如果不对,回过头重新学习3.3.1节(第87页)直到弄明白错在何处为止。练习3.17:从cin读入一组词并把它们存入一个vector对象,然后设法把所有词都改写为大写形式。输出改变后的结果,每个词占一行。练习3.18:下面的程序合法吗?如果不合法,你准备如何修改? Vector ive原创 2015-09-11 09:49:23 · 1864 阅读 · 2 评论 -
C++Primer第五版 11.2.1节练习
练习11.5:解释map和set的区别。你如何选择使用哪个? 答:map和set都是关联容器。当定义一个map时,必须既指明关键字类型又指明值类型:而定义一个set时,只需指明关键字类型,因为set中没有值。每个关联容器都定义了一个默认构造函数,它创建一个指定类型的空容器。(参见P376 11.2.1节) 练习11.6:解释set和list的区别。你如何选择使用哪个? 答:set是关联容器,原创 2015-09-24 23:36:58 · 2846 阅读 · 0 评论