您的位置:首页 > 编程语言 > C语言/C++

C++Primer练习与答案——3.1节

2016-09-03 08:24 204 查看

练习:

3.1:使用恰当的using声明重做1.9, 1.10, 1.11, 2.41的练习。

//1.9:编写程序,使用while循环将50到100的整数相加

//1.10:除了++运算符将运算对象的值增加1之外,还有一个递减运算符(--)实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。

//1.11:编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。


//重做练习1.9
#include<iostream>
//使用using声明使得cout和endl在程序中可见
using std::cout;
using std::endl;

int main()
{
int sum = 0;
int i = 50;
while(i <= 100){
sum += i;
i++;
}
cout << "50到100之间的整数之和为" << sum << endl;
return 0;
}


//重做练习1.10
#include<iostream>
using std::cout;
using std::endl;

int main()
{
int i = 10;
while(i >= 0){
cout << i << " ";
i--;
}
cout << endl;
return 0;
}


//重做练习1.11
#include<iostream>
using std::cin;
using std::cout;
using std::endl;

int main()
{
cout << "请输入两个数";
cout << endl;
int v1, v2;
cin >> v1 >> v2;
if(v1 > v2)     //由大至小打印
while(v1 >= v2){
cout << v1 << " ";
v1--;
}
else            //由小至大打印
while(v1 <= v2){
cout << v1 << " ";
v1++;
}
cout << endl;
return 0;
}


//重做练习2.41
#include<iostream>
#include<string>
//使用using声明使得以下的名字在程序中可见
using std::cin;
using std::cout;
using std::endl;
using std::istream;
using std::ostream;
using std::string;

class Sales_data{
friend istream& operator >> (istream&, Sales_data&);        //友元函数
friend ostream& operator << (ostream&, const Sales_data&);  //友元函数
//友元函数
friend bool operator < (const Sales_data&, const Sales_data&);
//友元函数
friend bool operator == (const Sales_data&, const Sales_data&);
public:          //构造函数的3种形式
Sales_data() = default;
Sales_data(const string &book): bookNo(book) {}
Sales_data(istream &is) {is >> *this;}
public:
Sales_data& operator += (const Sales_data&);
string isbn() const {return bookNo;}
private:
string bookNo;              //书籍编号,隐式初始化为空串
unsigned units_sold = 0;    //销售量,显式初始化为0
double sellingprice = 0.0;  //原始价格,显式初始化为0.0
double saleprice = 0.0;     //实售价格,显式初始化为0.0
double discount = 0.0;      //折扣,显式初始化为0.0
};

inline bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs)
{ return lhs.isbn() == rhs.isbn(); }

Sales_data operator + (const Sales_data&, const Sales_data&);

inline bool operator == (const Sales_data &lhs, const Sales_data &rhs)
{
return lhs.units_sold == rhs.units_sold &&
lhs.sellingprice == rhs.sellingprice &&
lhs.saleprice == rhs.saleprice &&
lhs.isbn() == rhs.isbn();
}

inline bool operator != (const Sales_data &lhs, const Sales_data &rhs)
{
return !(lhs == rhs);       //基于运算符==给出!=的定义
}

Sales_data& Sales_data::operator += (const Sales_data& rhs)
{
units_sold += rhs.units_sold;
saleprice = (rhs.saleprice * rhs.units_sold + saleprice * units_sold)
/ (rhs.units_sold + units_sold);
if(sellingprice != 0)
discount = saleprice / sellingprice;
return *this;
}

Sales_data operator + (const Sales_data& lhs, const Sales_data& rhs)
{
Sales_data ret(lhs);    <
b6c2
span class="hljs-comment">//把lhs的内容拷贝到临时变量ret中,这种做法便于运算
ret += rhs;             //把rhs的内容加入其中
return ret;             //返回ret
}

istream& operator >> (istream& in, Sales_data& s)
{
in >> s.bookNo >> s.units_sold >> s.sellingprice >> s.saleprice;
if(in && s.sellingprice != 0)
s.discount = s.saleprice / s.sellingprice;
else
s = Sales_data();     //输入错误,重置输入的数据
return in;
}

ostream& operator << (ostream& out, const Sales_data& s)
{
out << s.isbn() << " " << s.units_sold << " "
<< s.sellingprice << " " << s.saleprice << " " << s.discount;
return out;
}

int main()
{
Sales_data book;
cout << "请输入销售记录:" << endl;
while(cin >> book) {
cout << " ISBN、售出本数、原始价格、实售价格、折扣为"
<< book << endl;
}

Sales_data trans1, trans2;
cout << "请输入两条ISBN相同的销售记录: " << endl;
cin >> trans1 >> trans2;
if(compareIsbn(trans1, trans2))
cout << "汇总信息: ISBN、售出本数、实售价格、折扣为"
<< trans1 + trans2 << endl;
else
cout << "两条销售记录的ISBN不同" << endl;

Sales_data total, trans;
cout << "请输入几条ISBN相同的销售记录: " << endl;
if(cin >> total){
while(cin >> trans)
if(compareIsbn(total, trans))   //ISBN相同
total = total + trans;
else{   //ISBN不同
cout << "当前书籍ISBN不同" << endl;
break;
}
cout << "有效汇总信息: ISBN、售出本数、原始价格、实售价格、折扣为"
<< total << endl;
}
else{
cout << "没有数据" << endl;
return -1;
}

int num = 1;    //记录当前书籍的销售记录总数
cout << "请输入若干销售记录" << endl;
if(cin >> trans1) {
while(cin >> trans2)
if(compareIsbn(trans1, trans2)) //ISBN相同
num++;
else {  //ISBN不同
cout << trans1.isbn() << "共有"
<< num << "条销售记录" << endl;
trans1 = trans2;
num = 1;
}
cout << trans1.isbn() << "共有"
<< num << "条销售记录" << endl;
}
else{
cout << "没有数据" << endl;
return -1;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ C++Primer 练习