编程从键盘输入三个整数其中最大得数_「C++ Primer plus 习题」第十七章编程题...

d83faeeab6463d44df2abd35e6b09b13.png

1.编写一个程序计算输入流中第一个$之前的字符数目,并将$留在输入流中。

答案:

#includeint main(){ using namespace std; cout << "Enter a text,report the number(end with $):"; int count=0; char r; while (cin.peek()!='$') { cin.get(r); if (r != '$') { cout << r; count++; } } char next; cin >> next; cout << "The number of character is: " << count << endl; cout << "And the next character is: " << next << endl; return 0;}

2.编写一个程序,将键盘输入(知道模拟的文件尾)复制到通过命令行制定的文件中。

答案:

#include#include#includeint main(int argc,char *argv[]){ using namespace std; if (argc != 2) { cerr << "Usage: " << argv[0] << " filename[s]"; exit(EXIT_FAILURE); } ofstream fin; fin.open(argv[1]);  if (!fin.is_open())  { cerr << "Could not open " << argv[0] << ""; exit(EXIT_FAILURE); }  cout << "Give me something you want add to the file(++ to end): "; string ch; while (cin.fail()==false)  { getline(cin, ch); cout << ch; fin << ch; } cout << "Input complete!"; fin.close(); return 0;}

3.编写一个程序,将一个文件复制到另一个文件中。让程序通过命令行获取文件名。如果文件无法打开,程序将支出这一点。

答案:

#include#includeint main(int argc, char *argv[]){ using namespace std; if (argc != 3) { cerr << "Usage: " << argv[0] << " resource filename[s] target[s]"; exit(EXIT_FAILURE); } ofstream fin; fin.open(argv[2]);  if (!fin.is_open()) { cerr << "Could not open " << argv[0] << ""; exit(EXIT_FAILURE); } ifstream fou; fou.open(argv[1]); if (!fou.is_open()) { cerr << "Could not open " << argv[0] << ""; exit(EXIT_FAILURE); } char c; while (fou.get(c)) { cout << c; fin.put(c);  } cout << "Copy complete!";  fou.close(); fin.close(); return 0;}

4.编写一个程序,它打开两个文本文件进行输入,打开一个文本文件进行输出。该程序将两个输入文件汇总对应的行并接起来,并用空格分隔,然后将结果写入DOA输出文件中。如果一个文件比另一个短,则将较长文件中余下的几行直接复制到输出文件中。例如,假设第一个输入文件的内容如下:

eggs kites donutsballoons hammersstones而第二个输入文件的内容如下:zero lassitudefinance drama则得到的文件的内容将如下:eggs kites donuts zero lassitudeballons hammers finance dramastones

答案:

#include#include#include#includeint main(){ using namespace std; ofstream fin; cout << "This program is connect two file content to another file."; cout << "Enter the frist filename: "; string filename; getline(cin, filename); fin.open(filename.c_str()); cout << "Now,give me something to the frist resource file:"; string file; while (cin.fail() == false)  { getline(cin, file); fin<

5.Mat和Pat想邀请他们的朋友来参加派对,就像第16章中的变成练习8那样,但现在他们希望程序使用文件。他们请您编写一个完成下述任务的程序。

a.从文本文件mat.dat中读取Mat朋友的姓名清单,其中每行为一个朋友。姓名将被存储在容器中,然后按顺序显示出来。

b.从文本文件pat.dat中读取Pat朋友的姓名清单,其中每行为一个朋友。姓名将被存储在容器中,然后按顺序显示出来。

c.合并两个清单,删除重复的条目,并将结果保存在文件matnpat.dat中,其中每行为一个朋友。

答案:

#include#include#include#include#include#include int main(){ using namespace std; ostream_iteratorout(cout, "");  ifstream fin; char filename[10]; setfresource; char temp[10]; string file; cout << "Enter the Mat friends filename: "; cin.getline(filename, 10); fin.open(filename); if (!fin.is_open()) { cerr << "Cant open the file " << filename << endl; exit(EXIT_FAILURE); } while (!fin.eof()) { fin.getline(temp,10); fresource.insert(temp);  cout << temp<fresource2;  while (!fin.eof()) { fin.getline(temp, 10); fresource2.insert(temp); cout << temp << endl; } fin.close(); cout << "Enter the Target filename: "; cin.getline(filename, 10); ofstream fou; fou.open(filename); settarget;  set_union(fresource.begin(), fresource.end(), fresource2.begin(), fresource2.end(), insert_iterator>(target, target.begin())); cout << "Friends they have:"; copy(target.begin(), target.end(), out); ostream_iteratorfileout(fou, "");  copy(target.begin(), target.end(), fileout); fou.close(); return 0;}

6.考虑14章的编程联系5中的类定义,如果还没有完成这个练习,请现在就做,然后完成下面的任务。

编写一个程序,它使用标准C++ I/O、文件I/O以及14章变成联系5中定义的employee、managerfink和highfink类型的数据。该程序应该包含程序清单17.17中的代码行,即允许用户将新数据添加到文件中。该程序首次被运行时,将要求用户输入数据,然后显示所有的数据,并将这些信息保存到一个文件中。当该程序再次被运行时,将首先读取并显示i文件中的数据,然后让用户添加数据,并显示所有的数据。差别之一是,应通过一个纸箱employee类型的指针数组来处理数据。这样,指针可以指向employee对象,也可以纸箱从employee派生出来的其他三种对象中的任何一种。使数组较小有助于检查程序,例如,您可能将数组限定为最多包含10个元素:

const int MAX = 10;...employee * pc[MAX];

为通过键盘输入,程序应使用一个菜单,让用户选择要创建的对象类型。菜单将使用一个switch,以便使用new来创建制定类型的对象,并将它的地址赋给pc数组的一个指针。然后该对象可以使用虚函数setall()来提示用户输入相应的数据:

pc[i]->setall(); //invokes function corresponding to type of object

为将数据保存到文件中,应设计一个虚函数writeall():

for(i = 0; i < index; i++) pc[i]->writeall(fout); //fout ofstream connected to output file

比较难处理的部分是使用文件恢复数据。问题在于:程序如何才能知道接下来要恢复的项目是employee对象、manager对象、fink对象还是highfink对象?一种方法时,在对象的数据写入文件时,在数据前面加上一个知识对象类型的整数。这样,在文件输入时,程序便可以读取该整数,并使用switch语句创建一个适当的对象来接受数据:

 enum classkind{Employee, Manager, Fink, Highfink}; //in class header ... int classtype; while((fin >> classtype).get(ch)){ switch(classtype){ case Employee: pc[i] = new employee; break; } }

然后便可以使用指针调用虚函数getall()来读取信息:

 pc[i++]->getall();

答案:

//fileemp.h#ifndef FILEEMP_H#define FILEEMP_H#include#include#includeusing std::string;using namespace std;enum classkin { Employee, Manager, Fink, Highfink };class abstr_emp{private: string fname; string lname; string job;public: abstr_emp() :fname("No name"), lname("no name "), job("no job") {}; abstr_emp(const string&fn, const string&ln, const string &j) :fname(fn) , lname(ln), job(j) {}; virtual void ShowAll()const; virtual void SetAll(); virtual void writeall(ofstream &fo);  virtual void getall(ifstream &fi);  friend std::ostream&operator<> inchargeof; }private: int inchargeof;}; class fink :virtual public abstr_emp{private: string reportsto;protected: const string ReportsTo()const { return reportsto; } string &ReportsTo() { return reportsto; } void FileReportsTo(std::ofstream &fou) {fou << reportsto;} void FileReportsTo(std::ifstream&fin) { fin >> reportsto; }public: fink() :abstr_emp(), reportsto("null") {}; fink(const string &fn, const string &ln, const string &j, const string &rpo) :abstr_emp(fn, ln, j), reportsto(rpo) {}; fink(const abstr_emp&e, const string &rpo) :abstr_emp(e), reportsto(rpo) {}; fink(const fink&e); virtual void ShowAll()const; virtual void SetAll(); void writeall(std::ofstream &fo);  void getall(std::ifstream &fi); };class highfink :public manager, public fink{public: highfink() {};  highfink(const string &fn, const string &ln, const string &j, const string &rpo, int ico) :abstr_emp(fn, ln, j), fink(fn, ln, j, rpo), manager(fn, ln, j, ico) {}; highfink(const abstr_emp&e, const string &rpo, int ico) :abstr_emp(e), fink(e, rpo), manager(e, ico) {}; highfink(const fink &f, int ico) :abstr_emp(f), fink(f), manager(f, ico) {}; highfink(const manager &m, const string &rpo) :abstr_emp(m), manager(m), fink(m, rpo) {}; highfink(const highfink&h) :abstr_emp(h), manager(h), fink(h) {}; virtual void ShowAll()const; virtual void SetAll(); void writeall(std::ofstream &fo);  void getall(std::ifstream &fi); };#endif // !EMP_H//fileemp.cpp#include"fileemp.h"using std::cout;using std::endl;using std::cin;//abstr_emp methods void abstr_emp::ShowAll()const{ cout <
C++_Primer_Plus中文第五版   C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过量短小精悍的程序详细而全面地阐 述了C++的基本概念和技术。   全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系 表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、 虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出等内 容。   本书针对C++初学者,从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要 求读者有较多C语言方面的背景知识。本书可作为高等院校C++课程的教材,也可供初学者自学C++时使用。 本书享有“程序员和开发人员学习C++的完整教程”的美誉,它经过仔细的测试,制作精细,是计算机 行业的经典著作。前4版在美国的总销售量超过了10万册。该书阐述了包括结构化代码和自顶向下设计在内 的编程原理,涵盖了类。继承。模板。异常以及新的面向对象编程技术等内容。 作者Stephen Prata是受人尊敬的作者和教育家,他以清晰的语言,对C++做了具有启发性的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过量简短、易于输入的范例,每 次阐述一两个概念,激励读者通过立刻应用来掌握全新的主题;而每章后的复习题编程练习则强调了 重要的信息,并帮助读者消化难以理解的概念。本书是一本友好而易于使用的自学指南,适合用做编 程课程的教材,也可供熟悉其他语言的开发人员参考,以更深入地理解C++语言的基本知识。 本书采用了各种教学技巧,以提高读者的学习效率: ● 兼顾基本c语言知识和C++特性; ● 就何时以及为何使用特性提供了概念性指南; ● 强调实践,通过简短、易于输入的范例每次阐述一两个概念; ● 包含几百个范例程序; ● 通过示意图、注意、提示等来组织和区分相关的概念; ● 提供了复习题编程练习,让读者能够测试自己对所学知识的理解程度; ● 以极的灵活性实际使用通用c++——不要求读者使用特定的计算机、操作系统或编译器; ● 以ISO/ANSI标准为基础,对模板、标准模板库、字符串类、异常、RTTI和名称空间进行了讨论。 译者介绍:Stephen Prata在加州肯特菲尔得的马林学院教授天文、物理和计算机科学。他毕业于加州理工 学院,在加州学伯克利分校获得博士学位。Stephen本人或与他人合作编写的图书有十多本。他撰写的 The Waite Group's New C Primer Plus一书获得了计算机出版联合会1990年度佳“How-to”计算机图书 奖;他撰写的The Waite Group's C++ Primer Plus一书获得了计算机出版联合会1991年度佳“How-to” 计算机图书奖的提名。 前言 学习C++是一次探索之旅,因为这种语言容纳了好几种编程模式,其中包括面向对象编程、通用编程和 传统的过程化编程。随着新特性的不断添加,C++一度成为一个活动目标,不过现在有了2003年的ISO/ ANSIC++标准第二版后,已经稳定下来了。现代编译器支持该标准要求的多数或全部特性,程序员要花时间 来习惯这些特性的应用。本书第五版是按ISO/ANSI标准编写的,将介绍这种成熟的C++版本。 本书在介绍C++特性的同时,讨论了基本C语言,使二者成为有机的整体。书中介绍了C++的基本概念, 并通过短小精悍的程序来阐明,这些程序都很容易复制和试验。还介绍了输入和输出、如何让程序执行重 复性任务、如何让程序做出选择、处理数据的多种方式以及如何使用函数等内容。另外,还讲述了C++在C 语言的基础上新增的许多特性,其中包括: ● 类和对象。 ● 继承。 ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(或独立于类型的)编程,这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的名称空间。 本书在传授知识方面有几个优点。约20年前,《C Primer Plus))一书开创了优良的初级教程传统,本书 建立在这样的基础之上,吸收了其中很多成功的理念: ● 初级教程应当是友好的、便于使用的指南。 ● 初级教程不要求读者已经熟悉相关的编程概念。 ● 初级教程强调的是“实践性”学习,通过简短、容
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页