c++primer第五版练习第一章答案.docx
- 文档编号:29277295
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:16
- 大小:1.46MB
c++primer第五版练习第一章答案.docx
《c++primer第五版练习第一章答案.docx》由会员分享,可在线阅读,更多相关《c++primer第五版练习第一章答案.docx(16页珍藏版)》请在冰豆网上搜索。
c++primer第五版练习第一章答案
1.1
如图,程序文件(源文件)后缀为cpp。
在debug中有exe后缀的可执行文件
sln:
在开发环境中使用的解决方案文件。
它将一个或多个项目的所有元素组织到单个的解决方案中。
此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合。
vcxproj是项目信息文件,就是你解决方案里面看到的那个项目
filters是过滤信息文件,某些特殊的文件是不显示在vs里面的
user是本地化用户配置,允许多个用户使用自己喜好的方式配置这个项目(例如打开项目时候窗体位置等与项目内容无关的配置)
编译第二页的程序
intmain()
{
return0;
}
1.2
若改为返回-1,系统如何处理程序错误的标识。
如下
1.3
1.4
1.5
1.6修改如下
1.7注意字体颜色
1.8
前2句合法,如下图
3,4句肯定不合法,这两句是要闹怎样!
!
1.9
1.10
1.11
1.12
很显然结果为0;完成的为-100到100的累加。
1.13用for做前面的用while做的练习(以1.11为例)
1.14比较while和for
for循环更适用于循环的开始和结束已知,循环次数固定的场合;while循环更适合于条件不确定的场合。
知道循环次数的时候for和while都可以用,比如
for(inti=0;i<100;i++)
{......}
就可以写成inti=0;
while(i<100){i++;},
不知道循环次数只能用while,如while(x>0)
{......}
1.15
见再探编译试验。
1.16
1.17若全部重复值
若没有重复
1.18和1.17重复
1.19
1.20
首先看头文件
#ifndefSALESITEM_H
#defineSALESITEM_H//检验是否定义了SALESITEM_H,若没有则重新定义
#include
#include
classSales_item
{
public:
Sales_item(conststd:
:
string&book):
isbn(book),units_sold(0),revenue(0.0){}//类型转换构造函数,根据一个指定的类型的对象创建一个本类的对象,isbn初始化为形参的值
Sales_item(std:
:
istream&is){is>>*this;}//形参为istream类型的引用从输入流中读取并存入this指针中
friendstd:
:
istream&operator>>(std:
:
istream&,Sales_item&);//重载>>和<<作为友元函数可以访问类成员
friendstd:
:
ostream&operator<<(std:
:
ostream&,constSales_item&);
public:
Sales_item&operator+=(constSales_item&);//成员函数
public:
doubleavg_price()const;//一成员函数
boolsame_isbn(constSales_item&rhs)const//函数参数列表后的const使用在类的成员函数中表示不会对成员变量进行修改
{
returnisbn==rhs.isbn;
}
Sales_item():
units_sold(0),revenue(0.0){}//无参数构造函数
public:
std:
:
stringisbn;
unsignedunits_sold;
doublerevenue;
};
usingstd:
:
istream;
usingstd:
:
ostream;
Sales_itemoperator+(constSales_item&,constSales_item&);//在重载加前,重载+=中用到+所以要先声明一次
inlinebooloperator==(constSales_item&lhs,constSales_item&rhs)//参数为类,保证不被修改用const,简单用inline,重载了==和!
=
{
returnlhs.units_sold==rhs.units_sold&&lhs.revenue==rhs.revenue&&lhs.same_isbn(rhs);
}
inlinebooloperator!
=(constSales_item&lhs,constSales_item&rhs)
{
return!
(lhs==rhs);
}
inlineSales_item&Sales_item:
:
operator+=(constSales_item&rhs)//重载+=
{
units_sold+=rhs.units_sold;
revenue+=rhs.revenue;
return*this;
}
inlineSales_itemoperator+(constSales_item&lhs,constSales_item&rhs)
{
Sales_itemret(lhs);
ret+=rhs;
returnret;
}
//每次用到istream则istream指向this指针,此处一旦构造了Sales_items则istream就会指//向s。
inlineistream&operator>>(istream&in,Sales_item&s)
{
doubleprice;
in>>s.isbn>>s.units_sold>>price;
if(in)
s.revenue=s.units_sold*price;
else
s=Sales_item();//此时调用无参数构造函数
returnin;
}
inlineostream&operator<<(ostream&out,constSales_item&s)
{
out< returnout; } inlinedoubleSales_item: : avg_price()const { if(units_sold) returnrevenue/units_sold; else return0; } #endif//和#ifndef一起使用否则可能报错 直接cout该类,显然重载的运算符<<并不能满足1.20题目要求。 将 inlineostream&operator<<(ostream&out,constSales_item&s) { out< returnout; } 改为 inlineostream&operator<<(ostream&out,constSales_item&s) { out< returnout; } 然后就可以敲一条记录进去就打出一条出来了 若题目中读取一组理解为文档读取的话,代码如下。 文档如下 1.21书上22页就有还弄个习题! ! 1.22 练习1.25(包含1.231.24) #include #include"Sales_item.h" #include #include usingnamespacestd; intmain() { Sales_itemtotal;//一个total表示同isbn的和 if(std: : cin>>total)//第一个输入即是total { Sales_itemtrans;//用trans保存每个读取记录 intcounter=1; while(std: : cin>>trans) { if(total.isbn==trans.isbn) { total+=trans;//如果isbn同则更新总额 ++counter; } else { std: : cout< : endl; std: : cout< : endl; total=trans; counter=1; } std: : cout< : endl; std: : cout< : endl; } } else { std: : cerr<<"wrong"< : endl; return-1; } return0; } 结果如下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- primer 第五 练习 第一章 答案