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++primer第五版课后练习答案(第六章)
- C++Primer练习与答案——3.3.1节
- C++primer(第五版)9.3.4节,9.3.5节,9.3.6节练习答案
- C++primer(第五版)9.1节,9.2节,9.2.1节练习答案
- C++primer(第五版)9.2.2节,9.2.3节,9.2.4节练习答案
- C++primer(第五版)9.4节练习答案
- 从今天开始,把C++primer(第五版)的课后练习答案贴到我的博客里面
- c++primer第五版课后练习答案(第十章)
- C++primer(第五版)9.5.1节,9.5.2节,9.5.3节,9.5.5节,9.6节练习答案
- C++Primer第五版 3.1节练习
- C++primer(第五版)9.2.5节,9.2.7节练习答案
- C++primer(第五版)8.2.2节练习答案
- C++Primer练习与答案——3.2.3节
- C++primer(第五版)8.2.2节练习答案
- C++primer(第五版)9.3.1节,9.3.2节,9.3.3节练习答案
- C++primer(第五版)8.3.2节练习答案
- C++primer第5版课后练习习题答案9.47
- C++Primer练习与答案——3.3.2节
- c++primer第五版课后练习答案(第五章)
- C++Primer练习与答案——3.3.3节