练习2.1

C++ 语言规定short 和 int 至少 16 位, long 至少32位, long long 至少64位.
带符号类型可以表示整数、负数或0, 无符号类型则仅能表示大于等于0的值
The C and C++ standards do not specify the representation of float, double and long double. It is possible that all three implemented as IEEE double-precision.
C 和 C++标准没有指定float、double和long double的表示形式。这三种都有可能为 IEEE 双精度。

练习2.2
使用double或者是float

练习2.3

32
4294967264
32
-32
0
0

练习2.4

练习2.5

(a)字符字面值,宽字符型字面值,字符串字面值,宽字符型字符串字面值

(b)带符号整型,无符号整型,长整型,无符号长整型,八进制整型(可能是带符号也可能是无符号),十六进制整型(可能是带符号也可能是无符号)

(c)浮点类型字面值,单精度浮点类型(float),扩展精度浮点数(long double)

(d)整型,无符号整型,浮点数,浮点数

练习2.6

有区别,第一组定义了两个十进制整数9和7,第二组第一个数是无效的八进制数,第二个是八进制数7.

练习2.7

(a)转义序列,\145为e,\012为换行;
(b)3.41e1L: 扩展精度浮点数,为31.4;
(c)1024f:单精度浮点数;
(d)3.14L: 扩展精度浮点数3.14

练习2.8

#include  <iostream>

int main()
{
std::cout << "2\115\012";
std::cout << "2\t\x4d\012"; return 0;
}

练习2.9

(a)std::cin >> int input_value;

  为默认初始化的整型input_value赋值。input_value还未初始化,无法赋值,错误类型为error C2062: 意外的类型“int”,改成

  int input_value;
  std::cin >> input_value;

(b)int i = {3.14};

  为整型使用浮点型进行列表初始化。可能存在丢失信息的风险,所以无法执行,错误类型为error C2397: 从“double”转换到“int”需要收缩转换

  double i = {3.14};

(c)double salary = wage = 9999.99;

  wage先被定义并赋值,随后被用于初始化salary。wage未被初始化,所以无法被定义,错误类型为error C2065: “wage”: 未声明的标识符

  double wage;
  double salary = wage = 9999.99;

(d)int i=3.14;

  为整型使用浮点型进行初始化。警告,有隐式转化,i值为3。

  double i=3.14;

练习2.10

std::string global_str;//global_str非显式地初始化为一个空串
int global_int;//global_int被初始化为0
int main()
{
int local_int;//local_int其值未定义
std::string local_str;//local_str非显式地初始化为一个空串
}

练习2.11

extern int ix = 1024;//包含显式初始化的声明即成为定义
int iy;//声明并定义iy
extern int iz;//声明iz而非定义iz

练习2.12

int double = 3.14;//非法,double为关键字,不能作为变量名
int _;
int catch - 22;//非法,变量名只能包含字母、数字、下划线
int 1_or_2 = 1;//非法,不能以数字开头
double Double = 3.14;

练习2.13

j=100

练习2.14

合法,输出100 45

练习2.15

(a)合法,用float初始化int变量,可能会有精度丢失,会有警告

(b)不合法,引用类型的初始值必须是一个对象

(c)合法

(d)不合法,引用必须被初始化

练习2.16

(a)合法,为d赋值3.14159

(b)合法,与d=i执行结果一样,但含隐式转换

(c)合法,与i=d执行结果一样,但含隐式转换

(d)合法,与i=d执行结果一样,但含隐式转换

练习2.17

10 10

练习2.18

#include  <iostream>

int main()
{
int i = 1024, *ri = &i;
std::cout << i << " " << ri << std::endl;
*ri = 0;
ri = 0;
std::cout << i << " " << ri << std::endl;
}

练习2.19

引用在定义时必须初始化,而指针可不初始化;引用本身并非一个对象,一旦定义了引用,就无法令其再帮定到另外的对象,而指针本身就是一个对象,可以进行赋值来修改其存放的地址就可以指向一个新的对象。

练习2.20

    int i = 42;
int* p = &i;//p被初始化,存有i的地址
*p = *p * *p;//计算i的平方

练习2.21

(1)double* dp = &i;//非法,不能用int型的变量初始化doube指针
(2)int* ip = i;//非法,不能用int值初始化指针,note: 从整型强制转换为指针类型要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
(3)int* p = &i;//合法

练习2.22

if (p);//如果指针存放的地址值不为0
if (*p);//如果所指对象的值为不为0

练习2.23

不能,指针的值之只是它指向的对象的地址,而地址里面的内容是否合法需要人为判断。

练习2.24

不能用long型的变量初始化int指针,但是void指针类型可以存放任意对象的地址

练习2.25

(a)ip是指向int的指针,i是int,r是对i的引用

(b)i是int,ip是指向int的指针,且所指对象的值为0

(c)ip是指向int的指针,ip2是int

练习2.26

(a)不合法,buf是一个未经初始化的常量

(b)合法

(c)合法

(d)不合法,不能在const对象上执行改变其内容的操作

练习2.27

(a)不合法,引用初始化必须与一个对象绑定

(b)合法,p2是一个指向int的常量指针,初始化为指向i2,储存地址不能改变

(c)合法,r为对const的引用,引用初始化必须与一个常量对象绑定

(d)合法,p3是一个指向常量的常量指针,不论是p3所指的对象值还是p3自己存储的那个地址都不能改变

(e)合法,p1位对const的指针,初始化对象应为常量,或者说自以为指向常量

(f)不合法,r2为对const的引用,引用初始化必须与一个常量对象绑定

(g)合法

练习2.28

(a)不合法,cp为常量指针,初始化对象应为常量

(b)不合法,p2为常量指针,初始化对象应为常量

(c)不合法,ic为常量对象,必须初始化

(d)不合法,p3是一个指向常量的常量指针,必须初始化

(e)合法,p为对const的指针,初始化对象应为常量,但是存储地址可以改变

练习2.29

(a)合法,利用一个对象去初始化另一个对象则它们是不是const都无关紧要

(b)不合法,不能把指向非常量的指针指向常量

(c)不合法,不能把指向非常量的指针指向常量

(d)不合法,p3是一个指向常量的常量指针,不论是p3所指的对象值还是p3自己存储的那个地址都不能改变

(e)不合法,p2是一个常量指针,p2自己存储的那个地址不能改变

(f)ic是常量对象,不能在对象上执行改变其内容的操作

练习2.30

const int v2 = 0;// v2是顶层const
int v1 = v2;// 非const
int* p1 = &v1, & r1 = v1; // 非const
const int* p2 = &v2, * const p3 = &i, & r2 = v2;//p2是底层const,p3既是顶层const也是底层const,r2是底层const

练习2.31

r1 = v2;//合法,拷贝v2的值,v2是顶层const,对此操作无影响
p1 = p2; p2 = p1;//不合法,拷贝p2的值给p1时,p2是底层const,p1不是底层const
p1 = p3; p2 = p3;//不合法,拷贝p3的值给p1时,p3包含底层const,p1不是底层const

练习2.32

不合法,null是一个指向整型的指针,不能用整型来为其赋值。

int null = 0, * p = &null;

练习2.33

d非法:d是一个整型指针
e非法:e是一个指向整数常量的指针
g非法:g是一个整型常量引用

练习2.34

int i = 0, & r = i;
auto a = r;
const int ci = i, & cr = ci;
auto b = ci;
auto c = cr;
auto d = &i;
auto e = &ci;
auto& g = ci; a = 42;
b = 42;
c = 42;
std::cout << a << b << c << std::endl; d = 42;
e = 42;
g = 42;

练习2.35

j是一个整数

k是一个对整型常量的常量引用

p指向整型常量的指针

j2是一个整型常量

k2是一个对整型常量的常量引用

练习2.36

a ,b 整型

c 整型

d 整型引用

a=4,b=4,c=4,d=4

练习2.37

a ,b 整型

c 整型

d 整型引用

a=3,b=4,c=3,d=3

练习2.38

相同点:都通过已知变量或表达式的类型来指定类型。如:int i = 2; auto j = i; decltype(i) j = i; 两者相同。

  例子:

int i = 2;
auto j = i;
decltype(i) k = i;

不同点:(1)auto会忽略顶层const,但decltype不会。

​ (2)auto定义变量必须有初始值,但decltyple不一定

  例子:

const int i = 2;
auto j = i;
decltype(i) k = i;

练习2.39

源.cpp(3): error C2628: “Foo”后面接“int”是非法的(是否忘记了“;”?)
源.cpp(4): error C3874: “main”的返回类型应为“int”而非“Foo”
源.cpp(5): error C2440: “return”: 无法从“int”转换为“Foo”
源.cpp(5): note: 无构造函数可以接受源类型,或构造函数重载决策不明确

练习2.40

struct Sales_data {
std::string bookNo;
unsigned units_sold = { 0 };
double revenue = { 0.0 };
};

练习2.41

struct Sales_data {
std::string bookNo;
unsigned units_sold = { 0 };
double revenue = { 0.0 };
};
int main()
{
Sales_data data;
double price;
while (std::cin >> data.bookNo >> data.units_sold >> price) {
data.revenue = data.units_sold * price;
std::cout << "Record:" << data.bookNo << " " << data.units_sold << " " << data.revenue << std::endl;
}
}
#include  <iostream>
struct Sales_data {
std::string bookNo;
unsigned units_sold = { 0 };
double revenue = { 0.0 };
};
int main()
{
Sales_data data1,data2;
double price;
if (std::cin >> data1.bookNo >> data1.units_sold >> price) {
data1.revenue = data1.units_sold * price;
}
if (std::cin >> data2.bookNo >> data2.units_sold >> price) {
data2.revenue = data2.units_sold * price;
}
if (data1.bookNo == data2.bookNo) {
unsigned totalCnt = data1.units_sold + data2.units_sold;
double totalRevenue = data1.revenue + data2.revenue;
std::cout << data1.bookNo << " " << totalCnt << " " << totalRevenue << std::endl;
return 0;
}
else {
return -1;
}
}
#include  <iostream>
struct Sales_data {
std::string bookNo;
unsigned units_sold = { 0 };
double revenue = { 0.0 };
};
int main()
{
Sales_data data1,data2;
unsigned totalCnt = 0;
double totalRevenue = 0.0;
double price;
while (std::cin >> data1.bookNo >> data1.units_sold >> price) {
data1.revenue = data1.units_sold * price;
totalCnt += data1.units_sold;
totalRevenue += data1.revenue;
}
std::cout << data1.bookNo << " " << totalCnt << " " << totalRevenue << std::endl;
return 0;
}
#include  <iostream>
struct Sales_data {
std::string bookNo;
unsigned units_sold = { 0 };
double revenue = { 0.0 };
};
int main()
{
Sales_data data1,data2;
double price;
if (std::cin >> data1.bookNo >> data1.units_sold >> price) {
data1.revenue = data2.units_sold * price;
int cnt = 1;
while (std::cin >> data2.bookNo >> data2.units_sold >> price) {
data1.revenue = data2.units_sold * price;
if (data1.bookNo == data2.bookNo)
cnt++;
else {
std::cout << data1.bookNo << " " << cnt << std::endl;
cnt = 1;
data1 = data2;
}
}
std::cout << data1.bookNo << " " << cnt << std::endl;
}
return 0;
}

练习 2.42

#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <string>
struct Sales_data {
std::string bookNo;
unsigned units_sold = { 0 };
double revenue = { 0.0 };
};
#endif // !SALES_DATA_H

C++ Primer第5版 第二章课后练习的更多相关文章

  1. C++ Primer第5版 第一章课后练习

    练习1.9 #include <iostream> int main() { int sum = 0, val = 50; while (val <= 100) { sum += v ...

  2. Java程序设计(2021春)——第二章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 第二章选择题 2.1 面向对象方法的特性 ...

  3. 《C++ Primer》读书笔记—第二章 变量和基本类型

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...

  4. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  5. Pro ASP.NET Core MVC 第6版 第二章(前半章)

    目录 第二章 第一个MVC 应用程序 学习一个软件开发框架的最好方法是跳进他的内部并使用它.在本章,你将用ASP.NET Core MVC创建一个简单的数据登录应用.我将它一步一步地展示,以便你能看清 ...

  6. C++ Primer Plus学习:第二章

    C++入门第二章:开始学习C++ 进入C++ 首先,以下是一个C++程序: //myfirst.cpp 显示一行文字 #include<iostream> //预处理器编译指令 int m ...

  7. C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

    C语言程序小练习 1.用C语言设计程序算出1-1/2+1/3-14+1/5...+1/99-1/100的值 #include<stdio.h> int main() { ; double ...

  8. c++ primer plus 第二章 课后题答案

    #include<iostream> using namespace std; int main() { cout << "My name is Jiantong C ...

  9. Java语言程序设计(第三版)第二章课后习题答案(仅供参考)

    2.1   注意不同类型转换 import java.util.Scanner; public class Ch02 { public static void main(String[] args) ...

随机推荐

  1. JVM运行时数据区--堆

    一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器.本地方法栈和虚拟机栈. 核心概述 1.一个jvm实例只存在一个堆内存,堆也是java内 ...

  2. vSphere Client上安装虚拟机工具VMware Tools

    vSphere Client上安装虚拟机工具VMware Tools 1.安装虚拟机 具体安装步骤就不详述了,安装虚拟机之后右击虚拟机名->客户机->安装/升级VMware Tools,这 ...

  3. 我的Python自学之路-001 列表的知识

    #_date_:2020/9/11 '''列表和字典是python中用的最多的数据类型 假如要存储一个班级的人名,需要怎么做?有这么几种方法:1.定义很多个变量: name0 = 'wucaho' n ...

  4. Linux实战(2):Linux传输文件

    此次使用的是scp命令,只是针对文件或者文件的传输,并没有什么高端的使用,主要是怕自己忘记了记一下. 传输文件,命令说明:scp+文件路径针确到文件名+账号+上传到另一台的路径并另存为文件名 scp ...

  5. 将ImageMagic库编译进nginx

    1.首先要将ImageMagick库的相应头文件加到环境变量中 export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/ImageMagick/include ...

  6. SpringMVC初始化阶段流程源码分析

    1.都知道SpringMVC项目启动的时候都会初始化一个类:DispatcherServlet,看这个类的源码我们可以发现他其实就是一个servlet, 为什么这么说呢?请看: DispatcherS ...

  7. linux 上部署 YApi 可视化接口管理平台

    linux 上部署 YApi 可视化接口管理平台: YApi 是一个高效.易用.功能强大的可视化接口管理平台,官方地址 : http://yapi.demo.qunar.com/ 环境要求 nodej ...

  8. Mac 系统下如何显示和隐藏文件

    苹果Mac OS X操作系统下,隐藏文件是否显示有很多种设置方法,最简单的要算在Mac终端输入命令.显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写): 第一种方式: 显示Mac隐藏文件 ...

  9. burp suite 之 intruder(入侵者)

    intruder:包括自动提交请求的功能 登录密码 撞库 注入 脱裤 Fuzz Burp intruder包含四个模块: Target:攻击的网站目标的详情信息 Positions :用来设置攻击类型 ...

  10. react-router 路由切换动画

    路由切换动画 因为项目的需求,需要在路由切换的时候,加入一些比较 zb 的视觉效果,所以研究了一下.把这些学习的过程记录下来,以便以后回顾.同时也希望这些内容能够帮助一些跟我一样的菜鸟,让他们少走些坑 ...