C++ primer plus(第6版)中文版编程练习答案第14章
- 格式:docx
- 大小:21.51 KB
- 文档页数:23
第十四章重载操作符与转换1。
在什么情况下重载操作符与内置操作符不同?在什么情况下重载操作符与内置操作符相同?重载操作符必须具有至少一个类类型或枚举类型的操作数。
重载操作符不保证操作数的求值顺序,例如对&& 和|| 的重载版本不再具有“短路求值”的特性,两个操作数都要进行求值,而且不规定操作数的求值顺序。
对于优先级和结合性及操作数的数目都不变。
2。
为Sales_item编写输入、输出。
加以及复合赋值操作符的重载声明。
class Sales_item{friend std::istream& operator >> ( std::istream&, Sales_item& );friend std::ostream& operator <<(std::ostream&, const Sales_item&);public:Sales_item& operator += ( const Sales_item& );};Sales_item operator+ ( const Sales_item&, const Sales_item& )3。
解释如下程序,假定Sales_item构造函数的参数是一个string,且不为explicit.解释如果构造函数为explicit会怎样。
string null_book = “0-000-00000-0”;Sales_item item(cin);item += null_book;第一句:调用接受一个C风格的字符串形参的string构造函数,创建一个string临时对象,然后使用string复制构造函数用这个临时对象初始化string对象null_book,第二句:从标准输入设备读入数据,创建Sales_item对象item。
第三句:首先调用接受一个string参数的Sales_item构造函数,创建一个临时对象,然后调用Sales_item的复合重载操作符+=,将这个Sales_item临时对象加到item对象上,如果构造函数为explicit,则不能进行从string对象到Sales_item对象的隐式转换,第三句将不能被编译。
c + + p r i me r p l u s (第六版)课后编程练习答案〃ex2.1--display your n ame and address #in clude<iostream>int main(v oid){using n amespace std;cout<<"My n ame is liao chu ngua ng and I live in hunan che nzhou.\”〃ex2.2--convert the furlong units to yard uints扌把浪单位换位码单位#include<iostream>double fur2yd(double);int main(){using n amespace std;cout<<"e nter the dista nee measured by furl ong un its:"; double fur;cin»fur;cout<<"c onvert the furlo ng to yard"<<e ndl;double yd;yd=fur2yd(fur);coutvvfurvv" furlong is "<<yd<<" yard"<<e ndl;return 0;}double fur2yd(double t){return 220*t;}〃ex2.3-每个函数都被调用两次#in clude<iostream>void mice();void see();using n amespace std;int main(){mice();mice();see();see();return 0;}void mice(){cout«"three bli nd mice"«e ndl;}void see(){cout<<"see how they run"<<en dl;}〃ex2.4#in clude<iostream>int mai n(){using n amespace std;cout<<"E nter your age:";int age;cin> >age;in t mon th;mon th=age*12;coutvvagevv" years is "<<mon th<<" mon ths"<<e ndl;return 0;}〃ex2.5---convert the Celsius valve to Fahre nheit value#in clude<iostream>double C2F(double);int main(){using n amespace std;cout«"please en ter a Celsius value:";double C;cin> >C;double F;F=C2F(C);coutvvCvv" degrees Celsius is "<<F<<" degrees Fahre nheit."«e ndl; return 0; }double C2F(double t){return 1.8*t+32;}〃ex2.6---convert the light years valve to astronomical units-把光年转换为天文单位#in clude<iostream>double conv ert(double);//函数原型int main(){using n amespace std;cout<<"E nter the nu mber of light years:";double light_years;cin> >light_years;double astro_ un its;astro_ un its=co nv ert(light_years);cout<<light_years<<" light_years = "<<astro_u ni ts<<" astr ono mical un its."v<e ndl; return 0;}double conv ert(double t){return 63240*t;//1 光年=63240 天文单位}〃ex2.7--显示用户输入的小时数和分钟数#in clude<iostream>void show();mai n(){using n amespace std;show();return 0;}void show(){using n amespace std;int h,m;cout<<"e nter the nu mber of hours:"; cin> >h;cout<<"e nter the nu mber of minu tes:";cin>>m; coutvv"Time:"v<hvv":"vvmvve ndl;〃ex3.1—将身高用英尺(feet)和英寸(inch)表示#in clude<iostream> const int in ch_per_feet=12;〃cons常量--1feet=12i nches--1 英尺=12 英寸int main() {using n amespace std;cout<<"please en ter your height in inches: __ \b\b\b";〃\b表示为退格字符intht_in ch;cin> >ht_i nch;int ht_feet=ht_i nch/i nch_per_feet;//取商int rm_i nch=ht_i nch%i nch_per_feet;〃取余cout<<"your height is "<<ht_feet<<" feet,a nd " <<rm_i nch<< "in ches\n";return 0;}//ex3.2--计算相应的body mass index (体重指数)#in clude<iostream>const int in ch_per_feet=12;const double meter_per_i nch=0.0254;const double poun d_per_kilogram=2.2;int main(){using n amespace std;cout<<"Please en ter your height:"<<e ndl;cout«"First,enter your height of feet part (输入你身高的英尺部分):_\b";int ht_feet;cin> >ht_feet;cout«"Seco nd,e nter your height of inch part (输入你身高的英寸部分):_\b";int ht_in ch;cin> >ht_i nch;cout«"Now,please en ter your weight in pound: __ \b\b\b";double wt_po und;cin> >wt_po und;int in ch;in ch=ht_feet*i nch_per_feet+ht_i nch;double ht_meter;ht_meter=i nch*meter_per_i nch;double wt_kilogram;wt_kilogram=wt_po un d/po un d_per_kilogram; cout«e ndl;cout<<"Your pensonal body in formatio n as follows:"<<e ndl;cout«"身高:"<<inch<<"(英尺inch)\n"<<"身高:"<<ht_meter<<"(米meter)\n"<<"体重:"<<wt_kilogram<<"(千克kilogram八n";double BMI;BMI=wt_kilogram/(ht_meter*ht_meter);cout<<"your Body Mass In dex(体重指数)is "<<BMI<<e ndl;return 0;}〃ex3.3以度,分,秒输入,以度输出#in clude<iostream>const int minu tes_per_degree=60;const int sec on ds_per_m inu te=60;int main(){using n amespace std;cout<<"E nter a latitude in degrees, minu tes,a nd sec on ds:\n"; cout<<"First,e nter the degrees:";int degree;cin> >degree;cout<<"Next,e nter the minu tes of arc:";int min ute;cin»minu te;cout«"Fia nlly,e nter the sec onds of arc:";int sec ond;cin> >sec ond;double show_i n_degree;show_in_degree=(double)degree+(double)mi nute/mi nutes_per_degree+(doubl e)seco nd/mi nu tes_per_degree/sec on ds_per_mi nu te;cout<<degree<<" degrees,"<< minu te<<" minu tes,"<<sec on d<<"sec onds ="<<show_i n_degree<<" degrees\n";return 0;}//ex3.4#in clude<iostream>const int hours_per_day=24;const int minu tes_per_hour=60;const int sec on ds_per_m inu te=60;int main(){using n amespace std;cout<<"E nter the nu mber of sec on ds:";long sec on ds;cin> >sec on ds;int Day,Hour,M inu te,Sec ond;Day=sec on ds/sec on ds_per_mi nute/mi nu tes_per_hour/hours_per_day;Hour=sec on ds/sec on ds_per_mi nute/mi nu tes_per_hour%hours_per_day;Min ute=seco nds/seco nds_per_mi nute%mi nu tes_per_hour;Secon d=sec on ds%sec on ds_per_m inu te;cout«sec on ds<<"sec onds = "<<Day<<" days,"<<Hour<<"hours,"<< Minu te<<" minu tes,"<<Sec on d<<" sec onds\n";return 0;}〃ex3.5#in clude<iostream>int mai n(){using n amespace std;cout<<"E nter the world populati on:";long long world_populati on;cin> >world_populati on;cout<<"E nter the populati on of the US:";long long US_populati on;cin»U S_populati on;double perce ntage;perce ntage=(double)US_populati on/world_populati on *100;cout<<"The population of the US is "<<percentage<<"% of the world population.\n"; return 0;}〃ex3.6汽车耗油量-美国(mpg)or欧洲风格(L/100Km)#in clude<iostream> int main(){using n amespace std;cout«"E nter the miles of dista nee you have drive n:";double m_dista nee;cin>> m_dista nee;cout<<"E nter the gallo ns of gasoli ne you have used:";double m_gasoli ne;cin>> m_gasoli ne;cout<<"Your car can run "<<m_dista nce/m_gasoli ne<<" miles per gallo n\n";cout«"Computi ng by Europea n style:\n";cout<<"Enter the distance in kilometers:";double k_dista nce;cin>> k_dista nce;cout<<"E nter the petrol in liters:";double k_gasoli ne;cin>> k_gasoli ne;cout<<"I n Europea n style:"«"your can used "<<100*k_gasoli ne/k_dista nce<<" liters of petrol per 100 kilometers\n";return 0;}//ex3.7 automobile gaso line con sumption 耗油量--欧洲风格(L/100Km)转换成美国风格(mpg)#in clude<iostream>int main(){using n amespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"Europea n style(liters per 100 kilometers):";double Euro_style;cin> >Euro_style;cout<<"C onv erts to U.S. style(miles per gallo n):"«e ndl;coutv<Euro_stylevv" L/100Km = "v<62.14*3.875/Euro_style<v" mpg\n"; return 0; }// Note that 100 kilometers is 62.14 miles, and 1 gallon is 3.875 liters.//Thus, 19 mpg is about 12.4 L/100Km, and 27 mpg is about 8.7 L/100Km.Enter the automobile gasoline consumption figure inEuropean style(liters per 100 kilometers):12.4Conv erts to U.S. style(miles per gallo n):12.4 L/100Km = 19.4187 mpgPress any key to con ti nue // ex3.7 automobile gasol ine con sumption耗油量--美国风格(mpg )转换成欧洲风格(L/100Km)#in clude<iostream>int main(){using n amespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"U.S. style(miles per gallo n):";double US_style;cin >>US_style;cout<<"C onv erts to Europea n style(miles per gall on ):"<<e ndl;cout<<US_style<<" mpg = "<< 62.14*3.875/US_style<<"L/100Km\n"; return 0; }// Enter the automobile gasoline consumption figure inU.S. style(miles per gallo n) :19Conv erts to Europea n style(miles per gallo n):19 mpg = 12.6733L/100KmPress any key to con ti nue//ex4.1 display the information of student #in clude<iostream>const int Asize=20;using n amespace std;struct stude nt/定义结构描述{char first name[Asize]; char last name[Asize]; char grade;int age;};void display(stude nt);〃函数原型放在结构描述后int main(){cout«"what is your first n ame?"<<e ndl;stude nt leg;//创建结构变量(结构数据对象)cin .getli ne(lcg.first name,Asize); cout<<"what is your last n ame?"<<e ndl;cin .getli ne(lcg .l ast name,Asize);cout<<"what letter grade do you deserve?"<<e ndl;cin> >lcg.grade;cout<<"what is your age?"<<e ndl;cin> >lcg.age;display(lcg);return 0;}void display(stude nt n ame){cout«"Name: " <<n ame.first name<<","< <n ame .l ast name«e ndl;cout<v"Grade:"vvchar( name.grade+1)«e ndl;cout<<"Age:"< <n ame.age<<e ndl;} //ex4.2 use the stri ng-class in stead of char-array #in clude<iostream>#in clude<stri ng>int main(){using n amespace std;stri ng n ame,dessert;cout<<"E nter your n ame: \n";getl in e(ci n,n ame);cout<<"E nter your favorite dessert: \n"; getli ne(ci n, dessert);cout<<"I have some delicious "<<dessert; cout«" for you, "< <n ame<<".\n";return 0;〃有时候会遇到需要按下两次回车键才能正确的显示结果,这是VC++6.0的一个BUG,更改如下:else if (_Tr::eq((_E)_C, _D)){_Chg = true;_I .rdbuf()->sbumpc(); 〃修改后的break; }ex4.3输入其名和姓,并组合显示#in clude<iostream>#in clude<cstri ng>const int Asize=20;int main(){using n amespace std;char fn ame[Asize];char In ame[Asize];char full name[2*Asize+1];cout<<"Enter your first name:";//输入名字,存储在fname[]数组中cin .getli ne(fname,Asize);cout<<"Enter your last name:";//输入姓,存储在Iname[]数组中cin .getli ne(l name,Asize);strncpy(full name,l name,Asize);〃把姓ln ame 复制到full name 空数组中strcat(full name,",");// 把“,”附加到上述full name 尾部strn cat(full name,fname,Asize);//把fname 名字附加至U 上述full name 尾部fullname[2*Asize ]='\0';//为防止字符型数组溢出,在数组结尾添加结束符cout<<"Here's the information in a single string:"<<fullname<<endl;//显示组合结果return 0;} //ex4.4使用string对象存储、显示组合结果#in clude<iostream>#in cludevstri ng>int main(){using n amespace std;stri ng fname ,ln ame,attach,full name; cout<<"E nter your first n ame:";getline(cin,fname);//note将一行输入读取到string类对象中使用的是getli ne(ci n, str)//它没有使用句点表示法,所以不是类方法cout<<"E nter your last n ame:";getli ne(ci n,ln ame);attach=",";full name=In ame+attach+f name;cout<<"Here's the information in a single string:"<<fullname<<endl; return 0;}〃ex4.5 declare a struct and in itialize it 声明结果并创建一个变量#in clude<iostream> const int Asize=20; struct Can dyBar{char bran d[Asize];double weight;int calory;};int main(){using n amespace std;Ca ndyBar sn ack={"Mocha Mun ch",2.3,350}; cout<<"Here's the information of snack:\n"; cout<<"bra nd:"<<s nack.bra nd<<e ndl; 8山<<妝6:9“:"<<$ nack.weight<<e ndl; coutvv"calory:"vvs nack.calory<<e ndl; return 0; } //ex4.6结构数组的声明及初始化#in clude<iostream> const int Asize=20;struct Can dyBar{char bran d[Asize];double weight;int calory;};int main(){using n amespace std;Ca ndyBar sn ack[3]={ {"Mocha Mun ch",2.3,350}, {"XuFuJi",1.1,300},{"Alps",0.4,100}};for(int i=0;i<3;i++)〃利用for循环来显示snack变量的内容{cout«s nack[i].bra nd<<e ndl<<s nack[i].weight<<e ndl<<s nack[i].calory«e ndl«e ndl;}return 0;}〃ex4.7 pizza 披萨饼#in clude<iostream> #in clude<stri ng> const int Size=20;struct pizza//声明结构{char compa ny [Size]; double diameter; double weight;};int main(){using n amespace std;pizza pie;//创建一个名为pie的结构变量cout<<"What's the n ame of pizzacompa ny:"; cin. getl in e(pa ny ,Size); cout«"What's the diameter ofpizza:";cin> >pie.diameter; cout<<"What's the weight of pizza:";cin> >pie.weight;cout<<"compa ny:"«pa ny«en dl; cout<v"diameter:"vvpie.diameter<v"i nches"«e ndl; cout<v"weight:"vvpie.weight<v"o un ches"<<e ndl; return 0;}〃ex4.8 pizza pie披萨饼使用new创建动态结构#in clude<iostream>#in clude<stri ng>const int Size=20;struct pizza//声明结构{char compa ny [Size];double diameter;double weight;};int main(){using n amespace std;pizza *pie=new pizza;//使用new 仓U建动态结构cout<<"What's the diameter of pizza:";cin> >pie->diameter;cin. get();//读取下一个字符cout<<"What's the n ame of pizza compa ny:";cin .get(pie->compa ny,Size); cout<<"What's the weight of pizza:";cin> >pie->weight; cout<v"diameter:"vvpie->diameter< <" in ches"<<e ndl;cout<<"compa ny:"«pie->compa ny«en dl; cout<v"weight:"vvpie->weight<v" oun ches"<<e ndl;delete pie;//delete释放内存return 0;〃ex.4.9使用new动态分配数组一方法1#in clude<iostream>#in clude<stri ng>using n amespace std;struct Can dyBar{stri ng brand;double weight;int calory;};int main(){Can dyBar *sn ack= new Can dyBar[3];snack[0].brand="A";〃单个初始化由new动态分配的内存sn ack[0].weight=1.1; sn ack[0].calory=200; sn ack[1].bra nd="B";sn ack[1].weight=2.2; sn ack[1].calory=400; sn ack[2].bra nd="C";sn ack[2].weight=4.4;sn ack[2].calory=500;for(int i=0;i<3;i++){cout << " bran d: " << sn ack[i].bra nd << en dl;cout << " weight: " << sn ack[i].weight << en dl;cout << " calorie: " << sn ack[i].calory << en dl<<e ndl; }delete [] sn ack;return 0;} //ex.4.10数组一方法1#i nclude <iostream> int main(){using n amespace std;const int Size = 3;int success[Size];cout<<"E nter your success of the three times 40 meters runnin g:\n"; cin >> success[0]»success[1]»success[2];cout<v"success1:"v<success[0]vve ndl;cout<v"success2:"vvsuccess[1]v<e ndl;cout<v"success3:"v<success[2]vve ndl;double average=(success[0]+success[1]+success[2])/3;cout<<"average:"<<average<<e ndl;return 0;}//ex.4.10 array—方法2#i nclude <iostream>#in clude <array>int main(){using n amespace std;array<double,4>ad={0};cout<<"E nter your success of the three times 40 meters runnin g:\n"; cin >> ad[0]»ad[1]»ad[2];cout<v"success1:"v<ad[0]vve ndl;cout<v"success2:"vvad[1]v<e ndl;cout<v"success3:"v<ad[2]vve ndl;ad[3]=(ad[0]+ad[1]+ad[2])/3;cout<<"average:"<<ad[3]<<e ndl;return 0;}//ex.5.1#in clude <iostream> int mai n(){using n amespace std;cout<<"Please en ter two in tegers:" int n um1, num2;cin»n um1> >n um2;int sum=O;for(i nt temp=n um1;temp<=n um2;++temp)//or temp++sum+=temp;cout<<"The sum from "<<n um1<<" to "<<n um2<<" is "<<sum<<e ndl; return 0; }//ex.5.2#in clude <iostream>#in clude<array>int mai n(){using n amespace std;array vlong double,101>ad={0};ad[1]=ad[0]=1L;for(int i=2;i<101;i++)ad[i]=i*ad[i-1];for(int i=0;i<101;i++)coutvvivv"! = "v<ad[i]v<e ndl;return 0;}〃ex.5.3#in clude <iostream>int mai n(){using n amespace std;cout<<"Please en ter an in teger:";int sum=0,n um;while((ci n»num)&&n um!=0){sum+=n um;cout<<"So far, the sum is "v<sumv<e ndl; cout<<"Please en ter an in teger:";}return 0;}//ex.5.4 #in clude <iostream>int main(){using n amespace std;double sum1,sum2;sum仁sum2=0.0;int year=0;while(sum2<=sum1){++year;sum1+=10;sum2=(100+sum2)*0.05+sum2;}coutvv"经过"vvyearvv"年后,Cleo的投资价值才能超过Daphne的投资价值。
参考答案第6章一、选择题1. B2. D3. B二、填空题1. int *pa; char *pc; float *pf;2. int *pa = &a; *pa = 20;3. int &ra = a; ra = 20;4. int *pa = new int; *pa = 10; delete pa;5. int *pc = new char[12]; strcpy(pc,”Hello,World!”); delete [ ] pc;6. *p=0 b=3 c=57. 19三、思考题1. void指针可以指向任何类型的C++数据。
也就是说,可以用任何类型的指针直接给void 指针赋值。
不过,如果需要将void指针的值赋给其他类型的指针,则需要进行强制类型转换。
2. 通过引用和指针,都可以操作它们所指向的目标对象,但是它们在使用上有很大的差别。
这种差别主要体现在:指针是个变量,可以在程序中改变指针所指向的目标;而引用是一个声明,在声明引用时必须给它初始化,并且引用在初始化后,不可以在关联其他的目标对象。
3. 在C++中,指针与一维数组有密切的联系。
一维数组元素存放在一段连续的内存区域里,每个元素占用的内存单元大小相同,数组名就是数组所占存储区域的首地址,也就是指向该数组第一个元素的地址(指针)。
数组元素的访问可以通过下标访问,也可以通过指针访问。
4. C++中使用new运算符可以从堆上分配内存。
使用new运算符分配空间是必须是以定义的数据类型。
new运算符会向系统申请足够的存储空间,如果申请成功,则返回该内存块的首地址,如果申请不成功,则返回零值。
使用new运算符的一般格式:格式1:指针变量名=new 类型标识符;格式2:指针变量名=new 类型标识符(初始值);格式3:指针变量名=new 类型标识符[内存单元个数]。
使用new运算符分配的内存一定要释放,否则会产生系统内存泄漏。
第6章分支语句和逻辑运算符//ex6.1#include<iostream>#include<cctype>int main(){using namespace std;char ch;cin.get(ch);while (ch != '@'){if (!isdigit(ch)){if (isupper(ch))ch = tolower(ch);else if (islower(ch))ch = toupper(ch);cout << ch;}cin.get(ch);}return 0;}//ex6.2#include<iostream>const int Max = 10;int main(){using namespace std;double num[Max];int i = 0;cout << "Number 1: ";while (i < Max && cin >> num[i]){if (++i < Max)cout << "Number " << i+1 << ": ";}double total = 0.0;for (int j = 0; j < i; j++)total += num[j];double Average = total/i;cout << "Average = " << Average << endl;int q = 0;for (int j = 0; j < i; j++)if (num[j] > Average)q++;cout << q << " numbers > average.\n";return 0;}//ex6.3#include<iostream>int main(){using namespace std;char ch;cout << "Please enter one of the choice:\n"<< "c) carnivore p) pianist\n"<< "t) tree g) game\n";cin >> ch;while (ch != 'c' && ch != 'p' && ch != 't' && ch != 'g'){cout << "Please enter a c, p, t, or g: ";cin >> ch;}switch (ch){case'c' : cout << "A cat is a carnivore.\n";break;case'p' : cout << "Radu Lupu is a pianist.\n";break;case't' : cout << "A maple is a tree.\n";break;case'g' : cout << "Golf is a game.\n";break;default : cout << "The program shouldn't get here!\n";}return 0;}//ex6.4#include<iostream>const int strsize = 20;struct bop{char fullname[strsize];char title[strsize];char bopname[strsize];int preference;};int main(){using namespace std;bop member[5] = {{"Wimp Macho", "English Teacher", "DEMON", 0},{"Raki Rhodes", "Junior Programmer", "BOOM", 1},{"Celia Laiter", "Super Star", "MIPS", 2},{"Hoppy Hipman", "Analyst Trainee", "WATEE", 1},{"Pat Hand", "Police", "LOOPY", 2}};char ch;cout << "Benevolent Order of Programmers Report\n"<< "a. display by name b. display by title\n"<< "c. display by bopname d. display by preference\n"<< "q. quit\n";cout << "Enter your choice: ";while (cin >> ch && ch != 'q'){switch (ch){case'a': for (int i = 0; i < 5; i++)cout << member[i].fullname << endl;break;case'b': for (int i = 0; i < 5; i++)cout << member[i].title << endl;break;case'c': for (int i = 0; i < 5; i++)cout << member[i].bopname << endl;break;case'd': for (int i = 0; i < 5; i++){if (member[i].preference == 0)cout << member[i].fullname << endl;else if (member[i].preference == 1)cout << member[i].title << endl;elsecout << member[i].bopname << endl;}break;}cout << "Next choice: ";}cout << "Bye!" << endl;return 0;}//ex6.5#include<iostream>const double LEV1 = 5000;const double LEV2 = 15000;const double LEV3 = 35000;const double RATE1 = 0.10;const double RATE2 = 0.15;const double RATE3 = 0.20;int main(){using namespace std;double income, tax;cout << "Enter your annual income in tvarps: ";cin >> income;if (income <= LEV1)tax = 0;else if (income <= LEV2)tax = (income - LEV1) * RATE1;else if (income <= LEV3)tax = RATE1 * (LEV2 - LEV1) + RATE2 * (income - LEV2);elsetax = RATE1 * (LEV2 - LEV1) + RATE2 * (LEV3 - LEV2)+ RATE3 * (income - LEV3);cout << "You owe Neutronia " << tax << " tvarps in taxes.\n";return 0;}//ex6.6#include<iostream>#include<string>using namespace std;struct Patrons{string name;double money;};int main(){cout << "输入捐赠者的数目: ";int num;cin >> num;Patrons* ps = new Patrons[num];cout << "输入每一个捐赠者的姓名和款项:\n";for (int i=0; i<num; i++){cout << "输入第" << i+1 << "位姓名: ";cin >> ps[i].name;cout << "输入第" << i+1 << "位款项: ";cin >> ps[i].money;}cout << "Grand Patron\n";for (int i=0; i<num; i++){if (ps[i].money > 10000)cout << ps[i].name << endl;}cout << "\nPatron\n";for (int i=0; i<num; i++){if (ps[i].money <= 10000)cout << ps[i].name << endl;}return 0;}//ex6.7#include<iostream>#include<string>#include<cctype>int main(){using namespace std;string word;int vowel = 0;int consonant = 0;int other = 0;char ch;cout << "Enter words (q to quit):\n";cin >> word;while (word != "q"){ch = tolower(word[0]);if (isalpha(ch)){if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')vowel ++;elseconsonant ++;}elseother ++;cin >> word;}cout << vowel << " words beginning with vowel\n"<< consonant << " words beginning with consonants\n"<< other << " others\n";return 0;}//ex6.8#include<iostream>#include<fstream>#include<cstdlib>const int SIZE = 60;int main(){using namespace std;char filename[SIZE];ifstream inFile;cout << "Enter name of data file: ";cin.getline(filename, SIZE);inFile.open(filename);if (!inFile.is_open()){cout << "Could not open the file " << filename << endl;cout << "Program terminating.\n";exit(EXIT_FAILURE);}int count = 0;char ch;inFile >> ch;while (inFile.good()){count ++;inFile >> ch; // get next value}cout << count << " characters in " << filename << endl;inFile.close(); // finished with the filereturn 0;}//ex6.9#include<iostream>#include<string>#include<fstream>#include<cstdlib>const int SIZE = 60;using namespace std;struct Patrons{string name;double money;};int main(){char filename[SIZE];ifstream inFile;cout << "Enter name of data file: ";cin.getline(filename, SIZE);inFile.open(filename);if (!inFile.is_open()){cout << "Could not open the file " << filename << endl;cout << "Program terminating.\n";exit(EXIT_FAILURE);}int num;inFile >> num;inFile.get();Patrons* ps = new Patrons[num];for (int i = 0; i<num; i++){getline(inFile, ps[i].name);inFile >> ps[i].money;inFile.get();}cout << "\nGrand Patrons:\n";int count1 = 0;for (int i = 0; i < num; i++){if (ps[i].money > 10000){cout << ps[i].name <<endl;count1++;}}if (count1 == 0)cout << "none";cout << "\nPatrons:\n";int count2 = 0;for (int i = 0; i < num; i++){if (ps[i].money <= 10000){cout << ps[i].name <<endl;count2++;}}if (count2 == 0)cout << "none";delete [] ps;inFile.close();return 0;}第7章函数——C++的编程模块//ex7.1#include<iostream>double t_av(double x, double y);int main(){using namespace std;double x, y;double result;cout << "Please enter two numbers (0 to stop): ";while ((cin >> x >> y) && x != 0 && y != 0){result = t_av(x, y);cout << "调和平均数 = " << result << endl;cout << "Please enter two numbers (0 to stop): ";}return 0;}double t_av(double x, double y){return 2.0 * x * y / (x + y);}//ex7.2#include<iostream>const int MAX = 10;using namespace std;int fill_ar(double ar[], int limit);void show_ar(const double ar[], int n);double average(const double ar[], int n);int main(){double scores[MAX];int size = fill_ar(scores, MAX);show_ar(scores, size);if (size > 0)cout << "The average of scores is: "<< average(scores, size) << endl;return 0;}int fill_ar(double ar[], int limit){double temp;int i;for (i = 0; i < limit; i++){cout << "Enter score #" << i+1 << ": ";cin >> temp;if (!cin){cin.clear();while (cin.get() != '\n')continue;cout << "Bad input; enter a number: ";break;}if (temp < 0)break;ar[i] = temp;}return i;}void show_ar(const double ar[], int n){for (int i = 0; i < n; i++)cout << "score #" << i+1 << ": " << ar[i] << endl; }double average(const double ar[], int n){double sum = 0.0;for (int i = 0; i < n; i++)sum += ar[i];return sum / n;}//ex7.3#include<iostream>struct box{char maker[40];float height;float width;float length;float volume;};void set_box(box *);void show_box(box);int main(){using namespace std;box carton = {"Bingo Boxer", 2, 3, 5};set_box(&carton);show_box(carton);return 0;}void set_box(box * pb){pb->volume = pb->height * pb->length * pb->width;}void show_box(box b){using namespace std;cout << "Box maker: " << b.maker<< "\nheight: " << b.height<< "\nlwidth: " << b.width<< "\nlength: " << b.length<< "\nvolume: " << b.volume << endl;}//ex7.4#include<iostream>long double probability(unsigned numbers, unsigned picks);int main(){using namespace std;double total, choices, mtotal;long double probability1, probability2;cout << "Enter total number of game card choices and\n""number of picks allowed for the field:\n";while ((cin >> total >> choices) && choices < total){cout << "Enter total number of game card choices and\n""number of picks allowed for the mega:\n";if (!(cin >> mtotal))break;probability1 = probability(total, choices);probability2 = probability(mtotal, 1);cout << "The chances of getting all "<< choices << " picks is one in "<< probability1 << ".\n";cout << "The chances of getting the megaspot is one in "<< probability2 << ".\n";cout << "You have one chance in ";cout << probability1 * probability2;cout << " of winning.\n";cout << "Next set of numbers (q to quit): ";}cout << "bye\n";return 0;}long double probability(unsigned numbers, unsigned picks){long double result = 1.0;long double n;unsigned p;for (n = numbers, p = picks; p > 0; n--, p--)result = result * n / p;return result;}//ex7.5#include<iostream>long long int recure(int);int main(){using namespace std;int number;cout << "Enter a integer (q to stop): ";while (cin >> number){long long int result = recure(number);cout << number << "! = " << result << endl;cout << "Next:";}cout << "Done!" << endl;return 0;}long long int recure(int n){long long int result;if (n > 0)result = n * recure(n-1);elseresult = 1;return result;}//ex7.6#include<iostream>const int Size = 10;int Fill_array(double ar[], int n);void Show_array(const double ar[], int n); void Reverse_array(double ar[], int n);int main(){using namespace std;double values[Size];int len = Fill_array(values, Size);cout << "Array values:\n";Show_array(values, len);cout << "Array reversed:\n";Reverse_array(values, len);Show_array(values, len);cout << "All but end values reversed:\n";Reverse_array(values+1, len-2);Show_array(values, len);return 0;}int Fill_array(double ar[], int n){using namespace std;double temp;int i;for (i=0; i<n; i++){cout << "Enter value #" << i+1 << ": ";cin >> temp;if (!cin)break;ar[i] = temp;}cout << endl;return i;}void Show_array(const double ar[], int n){using namespace std;for (int i=0; i<n; i++)cout << "Property #" << i+1 << ": "<< ar[i] << endl;cout << endl;}void Reverse_array(double ar[], int n){double temp;for (int i=0,j=n-1; i<j; i++,j--){temp = ar[i];ar[i] = ar[j];ar[j] = temp;}}//ex7.7#include<iostream>const int Max = 5;double * fill_array(double * begin, double * end);void show_array(const double * begin, const double * end); void revalue(double r, double * begin, double * end);int main(){using namespace std;double properties[Max];double * pbegin = properties;double * pend = fill_array(pbegin, pbegin + Max);show_array(pbegin, pend);if (pend-pbegin > 0){cout << "Enter revaluation factor: ";double factor;while (!(cin >> factor)){cin.clear();while (cin.get() != '\n')continue;cout << "Bad input; Please enter a number: ";}revalue(factor, pbegin, pend);show_array(pbegin, pend);}cout << "Done.\n";return 0;}double * fill_array(double * begin, double * end){using namespace std;double temp;int i = 1;while (begin < end){cout << "Enter value #" << i << ": ";cin >> temp;if (!cin){cin.clear();while (cin.get() != '\n')continue;cout << "Bad input; input process terminated.\n";break;}else if (temp < 0)break;*begin = temp;begin++;i++;}return begin;}void show_array(const double * begin, const double * end){using namespace std;int i = 1;while (begin < end){cout << "Property #" << i << ": $";cout << *begin << endl;begin++;i++;}}void revalue(double r, double * begin, double * end){while (begin < end){*begin *= r;begin++;}}//ex7.8a#include<iostream>const int Seasons = 4;const char * Snames[] = {"Spring", "Summer", "Fall", "Winter"}; void fill(double ar[], int n);void show(double ar[], int n);int main(){using namespace std;double expenses[Seasons];fill(expenses, Seasons);show(expenses, Seasons);return 0;}void fill(double ar[], int n){using namespace std;for (int i=0; i<n; i++){cout << "Enter " << Snames[i] << " expenses: ";cin >> ar[i];}}void show(double ar[], int n){using namespace std;cout << "\nEXPENSES\n";double total = 0.0;for (int i=0; i<n; i++){cout << Snames[i] << ": $" << ar[i] <<endl;total += ar[i];}cout << "Total Expenses: $" << total << endl;}//ex7.8b(传递结构值)#include<iostream>const int Seasons = 4;struct data{double arr[Seasons];};const char * Snames[] = {"Spring", "Summer", "Fall", "Winter"}; data fill();void show(data);int main(){using namespace std;data expenses = fill();show(expenses);return 0;}data fill(){using namespace std;data expenses;for (int i=0; i<Seasons; i++)cout << "Enter " << Snames[i] << " expenses: ";cin >> expenses.arr[i];}return expenses;}void show(data expenses){using namespace std;cout << "\nEXPENSES\n";double total = 0.0;for (int i=0; i<Seasons; i++){cout << Snames[i] << ": $" << expenses.arr[i] <<endl;total += expenses.arr[i];}cout << "Total Expenses: $" << total << endl;}//ex7.8b(传递结构指针)#include<iostream>const int Seasons = 4;struct data{double arr[Seasons];};const char * Snames[] = {"Spring", "Summer", "Fall", "Winter"}; void fill(data * pd);void show(data * pd);int main(){using namespace std;data expenses;fill(&expenses);show(&expenses);return 0;}void fill(data * pd){using namespace std;for (int i=0; i<Seasons; i++)cout << "Enter " << Snames[i] << " expenses: ";cin >> pd->arr[i];}}void show(data * pd){using namespace std;cout << "\nEXPENSES\n";double total = 0.0;for (int i=0; i<Seasons; i++){cout << Snames[i] << ": $" << pd->arr[i] <<endl;total += pd->arr[i];}cout << "Total Expenses: $" << total << endl;}//ex7.9#include<iostream>using namespace std;const int SLEN = 30;struct student {char fullname[SLEN];char hobby[SLEN];int ooplevel;};int getinfo(student pa[], int n);void display1(student st);void display2(const student * ps);void display3(const student pa[], int n);int main(){cout << "Enter class size: ";int class_size;cin >> class_size;while (cin.get() != '\n')continue;student * ptr_stu = new student[class_size];int entered = getinfo(ptr_stu, class_size);for (int i = 0; i < entered; i++)display1(ptr_stu[i]);display2(&ptr_stu[i]);}display3(ptr_stu, entered);delete [] ptr_stu;cout << "Done\n";return 0;}// getinfo() has two arguments: a pointer to the first element of // an array of student structures and an int representing the// number of elements of the array. The function solicits and// stores data about students. It terminates input upon filling// the array or upon encountering a blank line for the student// name. The function returns the actual number of array elements // filled.int getinfo(student pa[], int n){int num_array_elem = n;char tmp[SLEN];for (int i = 0; i < n; ++i){cout << "Enter name: ";cin.getline(tmp, SLEN);bool blank_line = true;for (unsigned j = 0; j < strlen(tmp); ++j){if (!isspace(tmp[j])){blank_line = false;break;}}if (blank_line){num_array_elem = i;break;}strcpy(pa[i].fullname, tmp);cout << "Enter hobby: ";cin.getline(pa[i].hobby, SLEN);cout << "Enter ooplevel: ";cin >> pa[i].ooplevel;cin.get();}cout << endl;return num_array_elem;}// display1() takes a student structure as an argument// and displays its contentsvoid display1(student st){cout << st.fullname << '\t'<< st.hobby << '\t'<< st.ooplevel << endl;}// display2() takes the address of student structure as an// argument and displays the structure’¡¥s contentsvoid display2(const student * ps){cout << ps->fullname << '\t'<< ps->hobby << '\t'<< ps->ooplevel << endl;}// display3() takes the address of the first element of an array// of student structures and the number of array elements as// arguments and displays the contents of the structuresvoid display3(const student pa[], int n){for (int i = 0; i < n; ++i)cout << pa[i].fullname << '\t' << pa[i].hobby << '\t' <<pa[i].ooplevel << endl;}//ex7.10#include<iostream>double calculate(double x, double y, double (*pf)(double, double)); double add(double x, double y);double sub(double x, double y);double mean(double x, double y);int main(){using namespace std;double a, b;double (*pf[3])(double, double) = {add, sub, mean};char * op[3] = {"add", "sub", "mean"};cout << "Enter pairs of numbers (q to quit): ";while (cin >> a >> b){for (int i=0; i<3; i++){cout << op[i] << ": " << a << " and " << b << " = "<< calculate(a, b, pf[i]) << endl;}}}double calculate(double x, double y, double (*pf)(double, double)) {return (*pf)(x, y);}double add(double x, double y){return x + y;}double sub(double x, double y){return x - y;}double mean(double x, double y){return (x + y) / 2.0;}第8章函数探幽//ex8.1#include<iostream>void show(const char * ps, int n = 0);int main(){using namespace std;char * pstr = "Hello\n";show(pstr);int num;cout << "Enter a number: ";cin >> num;show(pstr, num);cout << "Done\n";return 0;}void show(const char * ps, int n){using namespace std;int lim = n;if (n == 0)lim = 1;for (int i=0; i<lim; i++)cout << ps;}//ex8.2#include<iostream>#include<string>using namespace std;struct CandyBar{string name;double weight;int hot;};void set(CandyBar & cb, char * ps, double w, int h); void show(const CandyBar & cb);int main(){using namespace std;CandyBar candy;char * p = "Millennium Munch";double x = 2.85;int y = 350;set(candy, p, x, y);show(candy);return 0;}void set(CandyBar & cb, char * ps, double w, int h){ = ps;cb.weight = w;cb.hot = h;}void show(const CandyBar & cb){cout << "Name: " << << endl<< "Weight: " << cb.weight << endl<< "Hot: " << cb.hot << endl;}//ex8.3#include<iostream>#include<string>#include<cctype>using namespace std;void str_to_upper(string & str);int main(){string str1;cout << "Enter a string (q to quit): ";while (getline(cin, str1) && str1!="q" && str1!="Q") {str_to_upper(str1);cout << str1 << endl;cout << "Next string (q to quit): ";}cout << "Bye.";return 0;}void str_to_upper(string & str){int limit = str.size();for (int i=0; i<limit; i++){if (isalpha(str[i]))str[i] = toupper(str[i]);}}// ex8.4#include<iostream>#include<cstring>// for strlen(), strcpy()using namespace std;struct stringy {char * str; // points to a stringint ct; // length of string (not counting '\0')};void show(const char *str, int cnt = 1);void show(const stringy & bny, int cnt = 1);void set(stringy & bny, const char * str);int main(void){stringy beany;char testing[] = "Reality isn't what it used to be.";set(beany, testing); // first argument is a reference,// allocates space to hold copy of testing,// sets str member of beany to point to the// new block, copies testing to new block,// and sets ct member of beany show(beany); // prints member string onceshow(beany, 2); // prints member string twicetesting[0] = 'D';testing[1] = 'u';show(testing); // prints testing string onceshow(testing, 3); // prints testing string thriceshow("Done!");return 0;}void show(const char *str, int cnt){while(cnt-- > 0)cout << str << endl;}}void show(const stringy & bny, int cnt){while(cnt-- > 0){cout << bny.str << endl;}}void set(stringy & bny, const char * str){bny.ct = strlen(str);bny.str = new char[bny.ct+1];strcpy(bny.str, str);}//ex8.5#include<iostream>const int Limit = 5;template <typename T>T max5(T ar[]);int main(){using namespace std;int ari[Limit] = {1, 2, 3, 5, 4};double ard[Limit] = {1.1, 2.2, 3.3, 5.5, 4.4};int maxi = max5(ari);double maxd = max5(ard);cout << "maxi = " << maxi << endl;cout << "maxd = " << maxd << endl;return 0;}template <typename T>T max5(T ar[]){T max = ar[0];for (int i=1; i<Limit; i++)if (max < ar[i])max = ar[i];}return max;}//ex8.6#include<iostream>template <typename T>T maxn(T ar[], int n);template <> const char* maxn(const char* ar[], int n);int main(){using namespace std;int ari[6] = {1, 2, 3, 4, 6, 5};double ard[4] = {1.1, 2.2, 4.4, 3.3};const char * ars[5] = {"a","bb","ccc","ddddd","eeee"};cout << "The max integer of array is: " << maxn(ari, 6) << endl;cout << "The max double of array is: " << maxn(ard, 4) << endl;cout << "The max string of array is: " << maxn(ars, 5)<<endl; }template <typename T>T maxn(T ar[], int n){T maxar = ar[0];for (int i=1; i<n; i++){if (maxar < ar[i])maxar = ar[i];}return maxar;}template <> const char* maxn(const char* ar[],int n) {const char * maxs = ar[0];for (int i=1; i<n; i++){if (strlen(maxs) < strlen(ar[i]))maxs = ar[i];}return maxs;}//ex8.7#include<iostream>template <typename T>T SumArrray(T arr[], int n);template <typename T>T SumArrray(T * arr[], int n);struct debts{char name[50];double amount;};int main(){using namespace std;int things[6] = {13, 31, 103, 301, 310, 130};struct debts mr_E[3] ={{"Ima Wolfe", 2400.0},{"Ura Foxe", 1300.0},{"Iby Stout", 1800.0}};double * pd[3];for (int i=0; i<3; i++)pd[i] = &mr_E[i].amount;cout << "Sum: Mr.E's counts of things: "<< SumArrray(things, 6) << endl;cout << "Sum: Mr.E's debts: "<< SumArrray(pd, 3) << endl;return 0;。
第二章:开始学习C++n”;}<<endl;return 0;}double C2F(double t){return *t+32;}<<endl;return 0;}double convert(double t){return 63240*t;n";return 0;}style(miles per gallon):"<<endl;cout<<Euro_style<<" L/100Km = "<<*Euro_style<<" mpg\n";return 0;}Enter the automobile gasoline consumption figure inEuropean style(liters per 100 kilometers):Converts to . style(miles per gallon):L/100Km = mpgPress any key to continuestyle(miles per gallon):";double US_style;cin>>US_style;cout<<"Converts to European style(miles per gallon):"<<endl;cout<<US_style<<" mpg = "<< *US_style<<"L/100Km\n";return 0;}style(miles per gallon):19Converts to European style(miles per gallon):19 mpg = 100KmPress any key to continue第四章复合类型n";return 0;}rand<<endl<<snack[i].weight<<endl<<snack[i].calory<<endl<<endl;}return 0;}rand="A";eight=;snack[0].calory=200;snack[1].brand="B";snack[1].weight=;snack[1].calory=400;snack[2].brand="C";snack[2].weight=;snack[2].calory=500;for(int i=0;i<3;i++){cout << " brand: " << snack[i].brand << endl;cout << " weight: " << snack[i].weight << endl;cout << " calorie: " << snack[i].calory << endl<<endl;}delete [] snack;return 0;}et();car* ps=new car[num];for(int i=0;i<num;++i){cout<<"Car #"<<i+1<<":\n";cout<<"Please enter the make: ";getline(cin,ps[i].name);cout<<"Please enter the year made: ";(cin>>ps[i].year).get();}cout<<"Here is your collection:\n";for(int i=0;i<num;++i)cout<<ps[i].year<<" "<<ps[i].name<<endl;delete [] ps;return 0;}n";return 0;}n";return 0;};for(int k=0;k<=i;++k) cout<<"*";cout<<endl;}return 0;}。
Chapter 2 Programming ExercisesPE 2-‐1/* Programming Exercise 2-1 */#include <stdio.h> intmain(void){ printf("Gustav Mahler\n");printf("Gustav\nMahler\n");printf("Gustav ");printf("Mahler\n"); return 0;}PE 2-‐3/* Programming Exercise 2-3 */#include <stdio.h> intmain(void){ int ageyears; /* age in years */int agedays; /* age in days *//* large ages may require the long type */ageyears = 101; agedays = 365 * ageyears;printf("An age of %d years is %d days.\n", ageyears, agedays); return 0;}PE 2-‐4/* Programming Exercise 2-4 */#include <stdio.h>void jolly(void); voiddeny(void); intmain(void){ jolly(); jolly();jolly();deny();return 0; }void jolly(void){printf("For he's a jolly good fellow!\n");}void deny(void){printf("Which nobody can deny!\n");}PE 2-‐6/* Programming Exercise 2-6 */#include <stdio.h> intmain(void){ inttoes;toes = 10;printf("toes = %d\n", toes);printf("Twice toes = %d\n", 2 * toes); printf("toessquared = %d\n", toes * toes); return 0;}/* or create two more variables, set them to 2 * toes and toes * toes */PE 2-‐8/* Programming Exercise 2-8 */#include <stdio.h>void one_three(void);void two(void); intmain(void){printf("starting now:\n");one_three(); printf("done!\n");return 0;}void one_three(void){printf("one\n");two();printf("three\n");}void two(void){printf("two\n");}Chapter 3 Programming ExercisesPE 3-‐2/* Programming Exercise 3-2 */#include <stdio.h> intmain(void){int ascii;printf("Enter an ASCII code: "); scanf("%d",&ascii);printf("%d is the ASCII code for %c.\n", ascii, ascii); return 0;}PE 3-‐4/* Programming Exercise 3-4 */#include <stdio.h> intmain(void){ floatnum;printf("Enter a floating-point value: "); scanf("%f",&num);printf("fixed-point notation: %f\n", num);printf("exponential notation: %e\n", num);printf("p notation: %a\n", num); return 0;}PE 3-‐6/* Programming Exercise 3-6 */#include <stdio.h> intmain(void){float mass_mol = 3.0e-23; /* mass of water molecule in grams */ floatmass_qt = 950; /* mass of quart of water in grams */ float quarts;float molecules;printf("Enter the number of quarts of water: "); scanf("%f",&quarts);molecules = quarts * mass_qt / mass_mol;printf("%f quarts of water contain %e molecules.\n", quarts, molecules); return 0;}Chapter 4 Programming ExercisesPE 4-‐1/* Programming Exercise 4-1 */#include <stdio.h> intmain(void){ charfname[40]; charlname[40];printf("Enter your first name: ");scanf("%s", fname); printf("Enter yourlast name: "); scanf("%s", lname);printf("%s, %s\n", lname, fname); return0;}PE 4-‐4/* Programming Exercise 4-4 */#include <stdio.h> intmain(void){ floatheight; charname[40];printf("Enter your height in inches: ");scanf("%f", &height); printf("Enter your name:"); scanf("%s", name);printf("%s, you are %.3f feet tall\n", name, height / 12.0);return 0;}PE 4-‐7/* Programming Exercise 4-7 */#include <stdio.h>#include <float.h> intmain(void){ float ot_f = 1.0 / 3.0;double ot_d = 1.0 / 3.0;printf(" float values: ");printf("%.4f %.12f %.16f\n", ot_f, ot_f, ot_f); printf("doublevalues: ");printf("%.4f %.12f %.16f\n", ot_d, ot_d, ot_d);printf("FLT_DIG: %d\n", FLT_DIG); printf("DBL_DIG: %d\n",DBL_DIG); return 0;}Chapter 5 Programming ExercisesPE 5-‐1/* Programming Exercise 5-1 */#include <stdio.h> intmain(void){ const int minperhour = 60;int minutes, hours, mins;printf("Enter the number of minutes to convert: ");scanf("%d", &minutes); while (minutes > 0 ){ hours = minutes /minperhour; mins = minutes %minperhour;printf("%d minutes = %d hours, %d minutes\n", minutes, hours, mins); printf("Enter next minutes value (0 to quit): "); scanf("%d", &minutes);}printf("Bye\n");return 0;}PE 5-‐3/* Programming Exercise 5-3 */#include <stdio.h> intmain(void){ const int daysperweek = 7;int days, weeks, day_rem;printf("Enter the number of days: ");scanf("%d", &days); while (days > 0){ weeks = days / daysperweek;day_rem = days % daysperweek;printf("%d days are %d weeks and %d days.\n",days, weeks, day_rem);printf("Enter the number of days (0 or less to end): "); scanf("%d", &days);}printf("Done!\n");return 0;}PE 5-‐5/* Programming Exercise 5-5 */ #include<stdio.h>int main(void) /* finds sum of first n integers */{int count, sum;int n;printf("Enter the upper limit: ");scanf("%d", &n); count = 0;sum = 0; while (count++< n) sum = sum + count; printf("sum= %d\n", sum); return 0;}PE 5-‐7/* Programming Exercise 5-7 */#include <stdio.h> voidshowCube(double x);int main(void) /* finds cube of entered number */{ doubleval;printf("Enter a floating-point value: ");scanf("%lf", &val); showCube(val);return 0; }void showCube(double x){printf("The cube of %e is %e.\n", x, x*x*x );}Chapter 6 Programming ExercisesPE 6-‐1/* pe6-1.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include <stdio.h> #define SIZE26 int main( void ) { charlcase[SIZE]; int i; for(i = 0; i < SIZE; i++)lcase[i] = 'a' + i; for (i = 0; i< SIZE; i++) printf("%c",lcase[i]); printf("\n");return 0;}PE 6-‐3/* pe6-3.c *//* this implementation assumes the character codes *//* are sequential, as they are in ASCII. */#include <stdio.h> intmain( void ){ char let ='F'; char start;char end;for (end = let; end >= 'A'; end--){for (start = let; start >= end; start--) printf("%c", start); printf("\n");}return 0;}PE 6-‐6/* pe6-6.c */ #include<stdio.h> int main( void ){ int lower, upper, index;int square, cube;printf("Enter starting integer: ");scanf("%d", &lower); printf("Enter endinginteger: "); scanf("%d", &upper);printf("%5s %10s %15s\n", "num", "square", "cube"); for (index = lower; index <= upper; index++){ square = index *index; cube = index * square;printf("%5d %10d %15d\n", index, square, cube);}return 0;}PE 6-‐8/* pe6-8.c */ #include<stdio.h> int main( void ){ double n,m; double res;printf("Enter a pair of numbers: ");while (scanf("%lf %lf", &n, &m) == 2){res = (n - m) / (n * m);printf("(%.3g - %.3g)/(%.3g*%.3g) = %.5g\n", n, m, n, m, res);printf("Enter next pair (non-numeric to quit): ");}return 0;}PE 6-‐11/* pe6-11.c */#include<stdio.h> #defineSIZE 8 intmain( void ){ intvals[SIZE]; int i;printf("Please enter %d integers.\n", SIZE);for (i = 0; i < SIZE; i++) scanf("%d", &vals[i]);printf("Here, in reverse order, are the values you entered:\n"); for(i = SIZE - 1; i >= 0; i--) printf("%d ", vals[i]); printf("\n"); return 0;}PE 6-‐13/* pe6-13.c *//* This version starts with the 0 power */#include<stdio.h> #defineSIZE 8 intmain( void ){int twopows[SIZE];int i;int value = 1; /* 2 to the 0 */for (i = 0; i < SIZE; i++){ twopows[i] =value; value *= 2;}i = 0;do {printf("%d ", twopows[i]);i++; } while (i < SIZE);printf("\n");return 0;}PE 6-‐14/* pe-14.c *//* Programming Exercise 6-14 */#include<stdio.h> #defineSIZE 8 int main(void){ double arr[SIZE];double arr_cumul[SIZE]; inti;printf("Enter %d numbers:\n", SIZE);for (i = 0; i < SIZE; i++){printf("value #%d: ", i + 1);scanf("%lf", &arr[i]); /* or scanf("%lf",arr + i); */}arr_cumul[0] = arr[0]; /* set first element */ for (i = 1; i < SIZE; i++)arr_cumul[i] = arr_cumul[i-1] + arr[i];for (i = 0; i < SIZE; i++)printf("%8g ", arr[i]); printf("\n");for (i = 0; i < SIZE; i++)printf("%8g ", arr_cumul[i]);printf("\n");return 0;}PE 6-‐16/* pe6-16.c */#include <stdio.h>#define RATE_SIMP 0.10#define RATE_COMP 0.05#define INIT_AMT 100.0 intmain( void ){double daphne = INIT_AMT;double deidre = INIT_AMT; intyears = 0;while (deidre <= daphne){ daphne += RATE_SIMP *INIT_AMT; deidre += RATE_COMP * deidre;++years; }printf("Investment values after %d years:\n", years);printf("Daphne: $%.2f\n", daphne); printf("Deidre: $%.2f\n",deidre); return 0;}Chapter 7 Programming ExercisesPE 7-‐1/* Programming Exercise 7-1 */#include <stdio.h> int main(void){ char ch;int sp_ct = 0;int nl_ct = 0;int other = 0;while ((ch =getchar()) != '#'){if (ch == ' ')sp_ct++; else if (ch =='\n') nl_ct++;else other++;}printf("spaces: %d, newlines: %d, others: %d\n", sp_ct, nl_ct, other);return 0;}PE 7-‐3/* Programming Exercise 7-3 */#include <stdio.h> intmain(void){ int n; doublesumeven = 0.0; int ct_even= 0; double sumodd = 0.0;int ct_odd = 0;while (scanf("%d", &n) == 1 && n != 0){if (n % 2 == 0){sumeven += n;++ct_even;}else // n % 2 is either 1 or -1{sumodd += n;++ct_odd;}}printf("Number of evens: %d", ct_even); if(ct_even > 0)printf(" average: %g", sumeven / ct_even);putchar('\n');printf("Number of odds: %d", ct_odd); if(ct_odd > 0)printf(" average: %g", sumodd / ct_odd);putchar('\n'); printf("\ndone\n");return 0;}PE 7-‐5/* Programming Exercise 7-5 */#include <stdio.h> intmain(void){ char ch;int ct1 = 0;int ct2 = 0;while ((ch =getchar()) != '#'){switch(ch){case '.' : putchar('!');++ct1; break;case '!' : putchar('!');putchar('!'); ++ct2; break; default : putchar(ch);}}printf("%d replacement(s) of . with !\n", ct1); printf("%d replacement(s) of ! with !!\n", ct2);return 0;}PE 7-‐7// Programming Exercise 7-7#include <stdio.h>#define BASEPAY 10 // $10 per hour#define BASEHRS 40 // hours at basepay#define OVERTIME 1.5 // 1.5 time#define AMT1 300 // 1st rate tier#define AMT2 150 // 2st rate tier#define RATE1 0.15 // rate for 1st tier#define RATE2 0.20 // rate for 2nd tier #defineRATE3 0.25 // rate for 3rd tier int main(void){double hours;double gross; doublenet; double taxes;printf("Enter the number of hours worked this week: ");scanf("%lf", &hours); if (hours <= BASEHRS) gross = hours* BASEPAY; elsegross = BASEHRS * BASEPAY + (hours - BASEHRS) * BASEPAY * OVERTIME; if(gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1 + AMT2) taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; elsetaxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; net = gross - taxes;printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes, net);return 0;}PE 7-‐9/* Programming Exercise 7-9 */#include <stdio.h>#include <stdbool.h> intmain(void){int limit;int num; intdiv;bool numIsPrime; // use int if stdbool.h not availableprintf("Enter a positive integer: "); while(scanf("%d", &limit) == 1 && limit > 0){if (limit > 1)printf("Here are the prime numbers up through %d\n", limit);elseprintf("No primes.\n");for (num = 2; num <= limit; num++){for (div = 2, numIsPrime = true; (div * div) <= num; div++)if (num % div == 0) numIsPrime = false; if (numIsPrime)printf("%d is prime.\n", num);}printf("Enter a positive integer (q to quit): ");}printf("Done!\n");return 0;}PE 7-‐11/* pe7-11.c *//* Programming Exercise 7-11 */#include <stdio.h>#include <ctype.h> intmain(void){const double price_artichokes = 2.05;const double price_beets = 1.15; constdouble price_carrots = 1.09; const doubleDISCOUNT_RATE = 0.05; const double under5 =6.50; const double under20 = 14.00; constdouble base20 = 14.00; const double extralb= 0.50;char ch;double lb_artichokes = 0;double lb_beets = 0; doublelb_carrots = 0; double lb_temp;double lb_total;doublecost_artichokes; doublecost_beets; doublecost_carrots; doublecost_total; doublefinal_total; double discount;double shipping;printf("Enter a to buy artichokes, b for beets, ");printf("c for carrots, q to quit: "); while ((ch =getchar()) != 'q' && ch != 'Q'){ if (ch == '\n')continue; while (getchar() !='\n') continue; ch =tolower(ch); switch (ch){case 'a' : printf("Enter pounds of artichokes: ");scanf("%lf", &lb_temp); lb_artichokes += lb_temp; break;case 'b' : printf("Enter pounds of beets: ");scanf("%lf", &lb_temp); lb_beets += lb_temp; break;case 'c' : printf("Enter pounds of carrots: "); scanf("%lf", &lb_temp); lb_carrots += lb_temp; break;default : printf("%c is not a valid choice.\n", ch);}printf("Enter a to buy artichokes, b for beets, "); printf("c forcarrots, q to quit: ");}cost_artichokes = price_artichokes * lb_artichokes; cost_beets= price_beets * lb_beets; cost_carrots = price_carrots * lb_carrots;cost_total = cost_artichokes + cost_beets + cost_carrots; lb_total =lb_artichokes + lb_beets + lb_carrots; if (lb_total <= 0)shipping = 0.0; else if (lb_total < 5.0) shipping = under5;else if (lb_total < 20) shipping = under20; elseshipping = base20 + extralb * lb_total; if(cost_total > 100.0)discount = DISCOUNT_RATE * cost_total;else discount = 0.0;final_total = cost_total + shipping - discount; printf("Yourorder:\n");printf("%.2f lbs of artichokes at $%.2f per pound:$ %.2f\n",lb_artichokes, price_artichokes, cost_artichokes); printf("%.2f lbs ofbeets at $%.2f per pound: $%.2f\n", lb_beets, price_beets,cost_beets); printf("%.2f lbs of carrots at $%.2f per pound: $%.2f\n", lb_carrots, price_carrots, cost_carrots); printf("Total cost ofvegetables: $%.2f\n", cost_total); if (cost_total > 100)printf("Volume discount: $%.2f\n", discount);printf("Shipping: $%.2f\n", shipping); printf("Totalcharges: $%.2f\n", final_total); return 0; }Chapter 8 Programming ExercisesPE 8-‐1/* Programming Exercise 8-1 */#include <stdio.h>int main(void) { int ch; intct = 0; while ((ch =getchar()) != EOF) ct++;printf("%d characters read\n", ct);return 0;}PE 8-‐3/* Programming Exercise 8-3 *//* Using ctype.h eliminates need to assume consecutive coding */#include <stdio.h> #include<ctype.h> int main(void){ int ch; unsigned longuct = 0; unsigned long lct= 0; unsigned long oct = 0;while ((ch = getchar()) != EOF)if (isupper(ch)) uct++;else if (islower(ch)) lct++;else oct++;printf("%lu uppercase characters read\n", uct); printf("%lulowercase characters read\n", lct); printf("%lu other charactersread\n", oct);return 0;}/* or you could use if(ch >= 'A' && ch <= 'Z')uct++;else if (ch >= 'a' && ch <= 'z')lct++; else oct++;*/PE 8-‐5/* Programming Exercise 8-5 *//* binaryguess.c -- an improved number-guesser *//* but relies upon truthful, correct responses */#include <stdio.h> #include<ctype.h> int main(void) { int high= 100; int low = 1; int guess =(high + low) / 2; char response;printf("Pick an integer from 1 to 100. I will try to guess ");printf("it.\nRespond with a y if my guess is right, with"); printf("\na h if it ishigh, and with an l if it is low.\n"); printf("Uh...is your number %d?\n", guess);while ((response = getchar()) != 'y') /* get response */{if (response == '\n')continue;if (response != 'h' && response != 'l'){printf("I don't understand that response. Please enter h for\n"); printf("high, l for low, or y for correct.\n"); continue;}if (response == 'h')high = guess - 1; else if(response == 'l') low =guess + 1; guess = (high + low)/ 2;printf("Well, then, is it %d?\n", guess);}printf("I knew I could do it!\n"); return 0;}PE 8-‐7/* Programming Exercise 8-7 */#include <stdio.h>#include <ctype.h>#include <stdio.h>#define BASEPAY1 8.75 // $8.75 per hour#define BASEPAY2 9.33 // $9.33 per hour#define BASEPAY3 10.00 // $10.00 per hour#define BASEPAY4 11.20 // $11.20 per hour#define BASEHRS 40 // hours at basepay#define OVERTIME 1.5 // 1.5 time#define AMT1 300 // 1st rate tier#define AMT2 150 // 2st rate tier#define RATE1 0.15 // rate for 1st tier#define RATE2 0.20 // rate for 2nd tier#define RATE3 0.25 // rate for 3rd tier intgetfirst(void); void menu(void); int main(void){ doublehours; doublegross; double net;double taxes;double pay; charresponse;menu();while ((response = getfirst()) != 'q'){if (response == '\n') /* skip over newlines */continue;response = tolower(response); /* accept A as a, etc. */ switch (response){case 'a': pay = BASEPAY1; break;case 'b': pay = BASEPAY2; break; case 'c':pay = BASEPAY3; break; case 'd': pay = BASEPAY4;break;default : printf("Please enter a, b, c, d, or q.\n"); menu();continue; // go to beginning of loop}printf("Enter the number of hours worked this week: ");scanf("%lf", &hours); if (hours <= BASEHRS) gross =hours * pay; elsegross = BASEHRS * pay + (hours - BASEHRS) * pay * OVERTIME;if (gross <= AMT1) taxes = gross * RATE1; else if (gross <= AMT1+ AMT2)taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; elsetaxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; net = gross - taxes;printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes, net); menu(); }printf("Done.\n");return 0;}void menu(void){printf("********************************************************""*********\n");printf("Enter the letter corresponding to the desired pay rate"" or action:\n");printf("a) $%4.2f/hr b) $%4.2f/hr\n", BASEPAY1,BASEPAY2);printf("c) $%5.2f/hr d) $%5.2f/hr\n", BASEPAY3, BASEPAY4); printf("q) quit\n");printf("********************************************************""*********\n");}int getfirst(void){ int ch;ch = getchar();while (isspace(ch)) ch =getchar(); while(getchar() != '\n')continue; return ch;}Chapter 9 Programming ExercisesPE 9-‐1/* Programming Exercise 9-1 */#include <stdio.h>double min(double, double); intmain(void){double x, y; printf("Enter two numbers(q to quit): "); while (scanf("%lf %lf", &x, &y) ==2){ printf("The smaller number is %f.\n", min(x,y));printf("Next two values (q to quit): ");}printf("Bye!\n");return 0;}double min(double a, double b){return a < b ? a : b;}/* alternative implementation doublemin(double a, double b){ if (a < b)return a; elsereturn b;}*/PE 9-‐3/* Programming Exercise 9-3 */#include <stdio.h>void chLineRow(char ch, int c, int r); intmain(void){ char ch; int col, row;printf("Enter a character (# to quit): "); while( (ch = getchar()) != '#'){ if (ch =='\n') continue;printf("Enter number of columns and number of rows: ");if (scanf("%d %d", &col, &row) != 2) break;chLineRow(ch, col, row);printf("\nEnter next character (# to quit): ");}printf("Bye!\n");return 0;}// start rows and cols at 0 voidchLineRow(char ch, int c, int r){int col, row;for (row = 0; row < r ; row++){for (col = 0; col < c; col++)putchar(ch); putchar('\n');}return;}PE 9-‐5/* Programming Exercise 9-5 */#include <stdio.h>void larger_of(double *p1, double *p2); intmain(void){double x, y; printf("Enter two numbers(q to quit): "); while (scanf("%lf %lf", &x, &y) ==2){larger_of(&x, &y);printf("The modified values are %f and %f.\n", x, y); printf("Next two values (q to quit): ");}printf("Bye!\n");return 0;}void larger_of(double *p1, double *p2){ if (*p1 >*p2) *p2 =*p1; else*p1 = *p2;}// alternatively:/*void larger_of(double *p1, double *p2){*p1= *p2 = *p1 > *p2 ? *p1 : *p2;}*/PE 9-‐8/* Programming Exercise 9-8 */ #include<stdio.h>double power(double a, int b); /* ANSI prototype */ intmain(void) { double x, xpow; int n; printf("Enter a number andthe integer power"); printf(" to which\nthe number will be raised.Enter q"); printf(" to quit.\n"); while (scanf("%lf%d", &x, &n)== 2){ xpow = power(x,n); /* function call */ printf("%.3g to the power %d is %.5g\n", x, n, xpow);printf("Enter next pair of numbers or q to quit.\n");} printf("Hope you enjoyed this power trip -- bye!\n");return 0;} double power(double a, int b) /* function definition */{ double pow =1; int i; if(b == 0){ if (a == 0)printf("0 to the 0 undefined; using 1 as the value\n"); pow = 1.0; } else if (a == 0) pow = 0.0; else if (b > 0)for(i = 1; i <= b; i++) pow *= a; else /* b < 0 */ pow = 1.0 / power(a, - b);return pow; /* return the value of pow */}PE 9-‐10/* Programming Exercise 9-10 */ #include<stdio.h> void to_base_n(int x, int base); intmain(void) { int number; int b; int count;printf("Enter an integer (q to quit):\n"); while(scanf("%d", &number) == 1){ printf("Enter number base (2-10): ");while ((count = scanf("%d", &b))== 1&& (b < 2 || b > 10)){printf("base should be in the range 2-10: ");} if(count != 1)break;printf("Base %d equivalent: ", b);to_base_n(number, b); putchar('\n');printf("Enter an integer (q to quit):\n");}printf("Done.\n");return 0;}void to_base_n(int x, int base) /* recursive function */{ int r; r = x % base; if(x >= base) to_base_n(x / base,base); putchar('0' + r); return;}Chapter 10 Programming ExercisesPE 10-‐1/* Programming Exercise 10-1 */#include <stdio.h>#define MONTHS 12 // number of months in a year#define YRS 5 // number of years of data int main(void){// initializing rainfall data for 2010 - 2014 constfloat rain[YRS][MONTHS] = {{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},{8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},{9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},{7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},{7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}}; int year,month; float subtot,total;printf(" YEAR RAINFALL (inches)\n");for (year = 0, total = 0; year < YRS; year++){ /* for each year, sum rainfall for each month */for (month = 0, subtot = 0; month < MONTHS; month++) subtot +=*(*(rain + year) + month); printf("%5d %15.1f\n", 2010 + year, subtot);total += subtot; /* total for all years */}printf("\nThe yearly average is %.1f inches.\n\n", total/YRS);printf("MONTHLY AVERAGES:\n\n");printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct "); printf(" Nov Dec\n");for (month = 0; month < MONTHS; month++){ /* for each month, sum rainfall over years */ for (year = 0, subtot =0; year < YRS; year++) subtot += *(*(rain + year) + month); printf("%4.1f ", subtot/YRS);}printf("\n");return 0;}PE 10-‐3/* Programming Exercise 10-3 */#include <stdio.h>#define LEN 10int max_arr(const int ar[], int n);void show_arr(const int ar[], int n);int main(void){int orig[LEN] = {1,2,3,4,12,6,7,8,9,10}; intmax;show_arr(orig, LEN); max =max_arr(orig, LEN); printf("%d = largestvalue\n", max);return 0;}int max_arr(const int ar[], int n){ int i; intmax = ar[0];/* don't use 0 as initial max value -- fails if all array values are neg */for (i = 1; i < n; i++)if (max < ar[i]) max= ar[i]; return max;}void show_arr(const int ar[], int n){ int i; for (i =0; i < n; i++) printf("%d", ar[i]); putchar('\n');}PE 10-‐5/* Programming Exercise 10-5 */#include <stdio.h>#define LEN 10double max_diff(const double ar[], int n); voidshow_arr(const double ar[], int n);。
14.4#ifndef WORKERMI_H_#define WORKERMI_H_#include<iostream>#include<string>#include<cstdlib>usingnamespace std;class person{private:stringfirstname;stringlastname;protected:virtualvoid data(){cout<<"firstname: "<<firstname<<endl;cout<<"lastname: "<<lastname<<endl;};virtualvoid get(){getline(cin,firstname);cout<<"enter person's lastname: ";getline(cin,lastname);cin.get();}public:person():firstname("no one"),lastname("no one"){}person(string & s1,string & s2):firstname(s1),lastname(s2){} person(person & s){firstname=s.firstname;lastname=stname;}virtual ~person()=0;virtualvoid set()=0;virtualvoid show() =0;};class gunslinger:virtualpublic person{private:double time;int nick;protected:void data(){cout<<"time: "<<time<<endl;cout<<"nick: "<<nick<<endl;}void get(){cout<<"enter time to draw the gun: ";cin>>time;cout<<"enter nick of the gun: ";cin>>nick;cin.get();}public:gunslinger():person(),time(0),nick(0){}gunslinger(string & s1 ,string s2,double t=0,int n=0):person(s1,s2),time(t),nick(n){} gunslinger( person &p,double t=0,int n=0):person(p),time(t),nick(n){}void set(){cout<<"enter gunslinger's firstname: ";person::get();get();}void show(){cout<<"category: gunslinger\n";person::data();data();}double draw(){return time;}};class pokerplayer : virtualpublic person{private:int value;protected:void data(){cout<<"playing card: "<<value<<endl;}void get(){value=rand()%52;}public:pokerplayer():person(),value(0){}pokerplayer(string & s1,string & s2,int v=0):person(s1,s2),value(v){} pokerplayer(person &p,int v=0):person(p),value(v){}void set(){cout<<"enter pokerplayer'sfirstname: ";person::get();get();}void show(){cout<<"category: pokerplayer\n";person::data();data();}int draw(){return value;}};class baddude: public gunslinger, public pokerplayer{protected:void data(){gunslinger::data();pokerplayer::data();}void get(){gunslinger::get();pokerplayer::get();}public:baddude(){}baddude(string & s1,string & s2,double t=0,int n=0,int v=0):person(s1,s2),gunslinger(s1,s2,t,n),pokerplayer(s1,s2,v){}baddude(person &p,double t=0,int n=0,int v=0):person(p),gunslinger(p,t,n),pokerplayer(p,v){}baddude(person &p,double t=0,int n=0):person(p),gunslinger(p,t,n),pokerplayer(p){} baddude(person &p,int v=0):person(p),gunslinger(p),pokerplayer(p,v){}void set(){cout<<"enter baddue'sfirstname: ";person::get();get();}void show(){cout<<"category: baddue\n";person::data();data();}};#endif#include<iostream>#include<cstring>#include"person.h"int main(){usingnamespace std;person * lolas[5];int ct;for(ct=0;ct<5;ct++){char choice;cout<<"enter the category:\n"<<"g: gunslinger p: pokerplayer "<<"b: baddude q: quit\n";cin>>choice;while(strchr("gpbq",choice)==NULL){cout<<"please enter a g,p,b, or q: ";cin>>choice;}if (choice=='q')break;switch(choice){case'g': lolas[ct]=new gunslinger;break;case'p': lolas[ct]=new pokerplayer;break;case'b': lolas[ct]=new baddude;break;}cin.get();lolas[ct]->set();}cout<<"\nhere is your staff:\n";for(int i=0;i<5;i++){cout<<endl;lolas[i]->show();}for(int i=0;i<5;i++)delete lolas[i];cout<<"bye.\n";return 0;}14.5emp.h#include<iostream>#include<string>usingnamespace std;class abstr_emp{private:string fname;string lname;string job;public:abstr_emp(){fname="no";lname="no";job="no";}abstr_emp(const string &fn,const string &ln,const string & j):fname(fn),lname(ln),job(j){}virtualvoid showall() const{cout<<"firstname: "<<fname<<endl;cout<<"lastname: "<<lname<<endl;cout<<"job: "<<job<<endl;}virtualvoid setall(){cout<<"enter first name: ";cin>>fname;cin.get();cout<<"enter last name: ";cin>>lname;cin.get();cout<<"enter job: ";getline(cin,job);}friend std::ostream&operator<<(ostream&os,const abstr_emp& e){os<<"firstname: "<<e.fname<<endl;os<<"lastname: "<<e.lname<<endl;return os;};virtual ~abstr_emp()=0{};};class employee: public abstr_emp{public:employee():abstr_emp(){}employee(const string &fn,const string &ln,const string & j):abstr_emp(fn,ln,j){} virtualvoid showall () const{abstr_emp::showall();}virtualvoid setall(){abstr_emp::setall();}};class manager: virtualpublic abstr_emp{private:int inchargeof;protected:int inchargeof1() const {return inchargeof;}int& inchargeof1(){return inchargeof;}public:manager():abstr_emp(),inchargeof(0){}manager(const string &fn,const string &ln,const string&j,int ico=0):abstr_emp(fn,ln,j),inchargeof(ico){}manager(const abstr_emp&e,int ico):abstr_emp(e),inchargeof(ico){} manager(const manager & m):abstr_emp(m){inchargeof=m.inchargeof;}virtualvoid showall() const{abstr_emp::showall();cout<<"inchargeof: "<<inchargeof<<endl;}virtualvoid setall(){abstr_emp::setall();cout<<"enter inchargeof: ";cin>>inchargeof;while(cin.get()!='\n')continue;}};class fink:virtualpublic abstr_emp{private:string reportsto;protected:const string reportsto1() const{return reportsto;}string & reportsto1(){return reportsto;public:fink():abstr_emp(),reportsto("none"){}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):abstr_emp(e){reportsto=e.reportsto;}virtualvoid showall() const{abstr_emp::showall();cout<<"reportsto: "<<reportsto<<endl;}virtualvoid setall(){abstr_emp::setall();cout<<"enter reportsto: ";cin>>reportsto;while(cin.get()!='\n')continue;}};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),manager(e,ico),fink(e,rpo){}highfink(const fink &f,int ico):abstr_emp(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){}virtualvoid showall() const{abstr_emp::showall();cout<<"inchargeof: "<<manager::inchargeof1()<<endl;cout<<" reportsto: "<<fink::reportsto1()<<endl;virtualvoid setall(){abstr_emp::setall();cout<<"enter inchargeof: ";cin>>manager::inchargeof1();while(cin.get()!='\n')continue;cout<<"enter reportsto: ";cin>>fink::reportsto1();while(cin.get()!='\n')continue;}};main.cpp#include<iostream>#include"emp.h"usingnamespace std;int main(){employee em("Trip","Harris","Thumper");cout<<em<<endl;em.showall();manager ma("Amorphia","Spindragon","Nuancer",5);cout<<ma<<endl;ma.showall();fink fi("Matt","Oggs","Oiler","Juno Barr");cout<<fi<<endl;fi.showall();highfinkhf(ma,"Curly Kew");hf.showall();cout<<"Press a key for next phase:\n";cin.get();highfink hf2;hf2.setall();cout<<"Using an abstr_emp * pointer: \n";abstr_emp * tri[4]={&em, &fi, &hf, &hf2};for(int i=0;i<4;i++)tri[i]->showall();cin.get();return 0;}15.1remote.h#include<iostream>usingnamespace std;class tv{friendclass remote;public:enum{off,on};enum{minval,maxval=20};enum{antenna,cable};enum{Tv,dvd};tv(int s=off,intmc=125):state(s),volume(5),maxchannel(mc),channel(2),mode(cable),input(Tv){} void onoff(){state=(state==on)?off:on;}bool ison()const{return state==on;}bool volup(){if(volume<maxval){volume++;returntrue;}elsereturnfalse;}bool voldown(){if(volume>minval){volume--;returntrue;}elsereturnfalse;}void chanup(){if(channel<maxchannel)channel++;elsechannel=1;}void chandown(){if(channel>1)channel--;elsechannel=20;}void set_mode(){mode=(mode==antenna)?cable:antenna;}void set_input(){input=(input=Tv)?dvd: Tv;}void settings()const{cout<<"tv is "<<(state==off?"off":"on")<<endl;if(state==on){cout<<"volume setting = "<<volume<<endl;cout<<"channel setting = "<<channel<<endl;cout<<"mode = "<<(mode == antenna?"antenna":"cable")<<endl;cout<<"input = "<<(input == Tv?"Tv":"dvd")<<endl;}}void set_condition(remote & r);private:int state;int volume;int maxchannel;int channel;int mode;int input;};class remote{friendclass tv;enum{default1,interact};private:int mode;int condition;public:remote(int m=tv::Tv,int c=default1):mode(m),condition(c){}bool volup(tv& t){return t.volup();}bool voldown(tv& t){return t.voldown();}void onoff(tv& t){t.onoff();}void chanup(tv& t){t.chanup();}void chandown(tv& t){t.chandown();}void set_chan(tv&t,int c){t.channel=c;}void set_mode(tv& t){t.set_mode();}void set_input(tv& t){t.set_input();}void show(){cout<<"remote condition: "<<condition<<endl;}void set_condition(){condition=(condition==default1)?interact:default1;} };inlinevoid tv:: set_condition(remote & r){if(tv::state==on)r.set_condition();}main.cpp#include<iostream>#include"remote.h"int main(){usingnamespace std;tv s42;cout<<"initial settings for 42\"Tv: \n";s42.settings();s42.onoff();s42.chanup();cout<<"\nadjusted settings for 42\"Tv: \n";s42.settings();remote grey;grey.set_chan(s42,10);grey.volup(s42);grey.volup(s42);cout<<"\n42\"settings after using remote: \n";s42.settings();grey.show();s42.set_condition(grey);cout<<"set condition using tv: "<<endl;grey.show();tv s58(tv::on);s58.set_mode();grey.set_chan(s58,28);cout<<"\n58\"settings: \n";s58.settings();cin.get();return 0;}15.2error.h#include<exception>#include<iostream>usingnamespace std;class bad_hmean:public exception{public:bad_hmean(){}constchar * what(){ return"bad arguments to hmean()";} };class bad_gmean:public exception{public:bad_gmean(){}constchar * what(){return"bad arguments to gmean()";} };main.cpp#include<iostream>#include"erroe.h"#include<cmath>double hmean(double a,double b);double gmean(double a,double b);int main(){usingnamespace std;double x,y,z;cout<<"enter two numbers: ";while(cin>>x>>y){try{z=hmean(x,y);cout<<"harmonic mean of "<<x<<" and "<<y<<" is "<<z<<endl;cout<<"geometric mean of "<<x<<" and "<<y<<" is "<<gmean(x,y)<<endl;cout<<"enter next set of numbers <q to quit>: ";}catch (bad_hmean&bg){cout<<bg.what()<<endl;cout<<"try again.\n";continue;}catch (bad_gmean& hg){cout<<hg.what()<<endl;cout<<"values used: "<<x<<", "<<y<<endl;cout<<"sorry,you don't get to play any more.\n";break;}}cout<<"bye!\n";cin.get();cin.get();return 0;}double hmean(double a,double b){if (a==-b)throw bad_hmean();return 2.0*a*b/(a+b);}double gmean(double a,double b){if(a<0||b<0)throw bad_gmean();return std::sqrt(a*b);}15.3erroe.h#include<exception>#include<iostream>usingnamespace std;class logic:public exception{private:double v1;double v2;public:logic(double a=0,double b=0):v1(a),v2(b){}virtualvoid show() const{cout<<"values used: "<<v1<<","<<v2<<endl;}};class bad_hmean:public logic{public:bad_hmean(double a=0,double b=0):logic(a,b){} void show() const{logic::show();cout<<"invalid argument: a= -b\n";}};class bad_gmean:public logic{public:bad_gmean(double a=0,double b=0):logic(a,b){}void show()const{logic::show();cout<<"gmean() arguments: "<<" should be >=0\n";}};main.cpp#include<iostream>#include"erroe.h"#include<cmath>double hmean(double a,double b);double gmean(double a,double b);int main(){usingnamespace std;double x,y,z;cout<<"enter two numbers: ";while(cin>>x>>y){try{z=hmean(x,y);cout<<"harmonic mean of "<<x<<" and "<<y<<" is "<<z<<endl;cout<<"geometric mean of "<<x<<" and "<<y<<" is "<<gmean(x,y)<<endl;cout<<"enter next set of numbers <q to quit>: ";}catch(logic & e){e.show();break;}/*catch (bad_hmean&bg){cout<<bg.what()<<endl;bg.mesg();cout<<"try again.\n";continue;}catch (bad_gmean& hg){cout<<hg.what();hg.mesg();cout<<"values used: "<<x<<", "<<y<<endl;cout<<"sorry,you don't get to play any more.\n";break;}*/}cout<<"bye!\n";cin.get();cin.get();return 0;}double hmean(double a,double b){if (a==-b)throw bad_hmean(a,b);return 2.0*a*b/(a+b);}double gmean(double a,double b){if(a<0||b<0)throw bad_gmean(a,b);return std::sqrt(a*b);}15.4sales.h#include<stdexcept>#include<string>usingnamespace std;class sales{public:enum {MONTHS=12};class bad_index:public logic_error{private:int bi;public:explicit bad_index(int ix,const string & s="index error in sales object\n");int bi_val() const{return bi;}virtual ~bad_index() throw() {}};explicit sales(int yy=0);sales(int yy,constdouble * gr, int n);virtual ~sales(){}int year1() const {return year;}virtualdoubleoperator[](int i)const;virtualdouble&operator[](int i);private:double gross[MONTHS];int year;};class labeledsales: public sales{private:string label;public:class nbad_index: public sales::bad_index{private:stringlbl;public:nbad_index(const string &lb,int ix,const string & s="Index error in labeledsales object\n");const string &label_val()const{return lbl;}virtual ~nbad_index() throw(){}};explicit labeledsales(const string &lb="none",int yy=0);labeledsales(const string &lb,int yy, constdouble * gr ,int n);virtual ~labeledsales(){}const string & label1() const {return label;}virtualdoubleoperator[](int i)const;virtualdouble&operator[](int i);};sales.cpp#include"sale.h"usingnamespace std;sales::bad_index::bad_index(int ix,const string & s):logic_error(s),bi(ix) {}sales::sales(int yy){year=yy;for(int i=0;i<MONTHS;++i)gross[i]=0;}sales::sales(int yy,constdouble * gr,int n){year=yy;int lim=(n<MONTHS)?n:MONTHS;int i;for(i=0;i<lim;++i)gross[i]=gr[i];for(;i<MONTHS;++i)gross[i]=0;}double sales::operator[](int i)const{if(i<0||i>=MONTHS)thrownew bad_index(i);return gross[i];}double& sales::operator[](int i){if(i<0||i>=MONTHS)thrownew bad_index(i);return gross[i];}labeledsales::nbad_index::nbad_index(const string &lb,int ix,const string & s):sales::bad_index(ix,s){lbl=lb;}labeledsales::labeledsales(const string &lb, int yy):sales(yy){label=lb;}labeledsales::labeledsales(const string &lb,int yy,constdouble * gr,int n):sales(yy,gr,n) {label=lb;}double labeledsales::operator[](int i)const{if(i<0||i>=MONTHS)thrownew nbad_index(label1(),i);return sales::operator[](i);}double&labeledsales::operator[](int i){if(i<0||i>=MONTHS)thrownew nbad_index(label1(),i);return sales::operator[](i);}main.cpp#include<iostream>#include"sale.h"int main(){usingnamespace std;double vals1[12]={1220,1100,1122,2212,1232,2334,2884,2393,3302,2922,3002,3544};double vals2[12]={12,11,22,21,32,34,28,29,33,29,32,35};sales sales1(2011,vals1,12);labeledsales sales2("blogstar",2012,vals2,12);cout<<"first try block:\n";labeledsales::nbad_index * ps;try{int i;cout<<"year = "<<sales1.year1()<<endl;for(i=0;i<12;++i){cout<<sales1[i]<<" ";if(i % 6==5)cout<<endl;}cout<<"year = "<<sales2.year1()<<endl;cout<<"label = "<<bel1()<<endl;for(i=0;i<=12;++i){cout<<sales2[i]<<" ";if(i % 6==5)cout<<endl;}cout<<"end of try block 1.\n";}catch(sales::bad_index * bad){cout<<bad->what();cout<<"bad index: "<<bad->bi_val()<<endl;if(ps=dynamic_cast<labeledsales::nbad_index * >(bad)) cout<<"company: "<<ps->label_val()<<endl;}labeledsales::nbad_index * ps1;try{sales2[2]=37.5;sales1[20]=23345;cout<<"end of try block 2.\n";}catch(sales::bad_index * bad){cout<<bad->what();cout<<"bad index: "<<bad->bi_val()<<endl;if(ps1=dynamic_cast<labeledsales::nbad_index * >(bad)) cout<<"company: "<<ps1->label_val()<<endl;}cout<<"done\n";cin.get();cin.get();return 0;}。
目录第一章快速入门 (2)第二章变量和基本类型 (7)第三章标准库类型 (13)第四章数组和指针 (21)第五章表达式 (31)第六章语句 (37)第七章函数 (37)第八章标准IO库 (37)第九章顺序容器 (43)第十章关联容器 (60)第十一章泛型算法 (75)第十二章类和数据抽象 (86)第十三章复制控制 (94)第十四章重载操作符与转换 (102)第十五章面向对象编程 (116)第十六章部分选做习题 (133)第十七章用于大型程序的工具 (138)第十八章特殊工具与技术 (138)第一章快速入门习题 1.1查看所用的编译器文档,了解它所用的文件命名规范。
编译并运行本节的main程序。
【解答】一般而言,C++编译器要求待编译的程序保存在文件中。
C++程序中一般涉及两类文件:头文件和源文件。
大多数系统中,文件的名字由文件名和文件后缀(又称扩展名)组成。
文件后缀通常表明文件的类型,如头文件的后缀可以是.h 或.hpp 等;源文件的后缀可以是.cc 或.cpp 等,具体的后缀与使用的编译器有关。
通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。
习题1.2修改程序使其返回-1。
返回值-1 通常作为程序运行失败的指示器。
然而,系统不同,如何(甚至是否)报告main 函数运行失败也不同。
重新编译并再次运行程序,看看你的系统如何处理main 函数的运行失败指示器。
【解答】笔者所使用的Windows 操作系统并不报告main 函数的运行失败,因此,程序返回-1 或返回0 在运行效果上没有什么区别。
但是,如果在DOS 命令提示符方式下运行程序,然后再键入echo %ERRORLEVEL%命令,则系统会显示返回值-1。
习题1.3编一个程序,在标准输出上打印“Hello, World”。
【解答】#include<iostream>int main(){std::cout << "Hello, World" << std::endl;return 0;}习题1.4我们的程序利用内置的加法操作符“+”来产生两个数的和。
第二章:开始学习C++ n”;}<<endl;return 0;}double C2F(double t){return *t+32;,}<<endl;return 0;}double convert(double t){return 63240*t;n";return 0;}`style(miles per gallon):"<<endl;cout<<Euro_style<<" L/100Km = "<<*Euro_style<<" mpg\n";return 0;}Enter the automobile gasoline consumption figure inEuropean style(liters per 100 kilometers):Converts to . style(miles per gallon):L/100Km = mpg。
Press any key to continuestyle(miles per gallon):";double US_style;cin>>US_style;cout<<"Converts to European style(miles per gallon):"<<endl;cout<<US_style<<" mpg = "<< *US_style<<"L/100Km\n";return 0;}style(miles per gallon):19Converts to European style(miles per gallon):`19 mpg = 100KmPress any key to continue第四章复合类型n";return 0;}rand<<endl<<snack[i].weight<<endl<<snack[i].calory<<endl<<endl;&}return 0;}rand="A";eight=;snack[0].calory=200;snack[1].brand="B";snack[1].weight=;snack[1].calory=400;)snack[2].brand="C";snack[2].weight=;snack[2].calory=500;for(int i=0;i<3;i++){cout << " brand: " << snack[i].brand << endl;cout << " weight: " << snack[i].weight << endl;cout << " calorie: " << snack[i].calory << endl<<endl; (}delete [] snack;return 0;}et();car* ps=new car[num];for(int i=0;i<num;++i){cout<<"Car #"<<i+1<<":\n";—cout<<"Please enter the make: ";getline(cin,ps[i].name);cout<<"Please enter the year made: ";(cin>>ps[i].year).get();}cout<<"Here is your collection:\n";for(int i=0;i<num;++i)cout<<ps[i].year<<" "<<ps[i].name<<endl;delete [] ps;return 0;.}n";return 0;}n";return 0;}…;for(int k=0;k<=i;++k)cout<<"*";cout<<endl;}return 0;}。
//winec.h#ifndef WINEC_H_#define WINEC_H_#include <iostream>#include <string>#include <valarray>using namespace std;template<class T1, class T2>class Pair{private:T1 year;T2 bottles;public:Pair(const T1 &yr, const T2 &bt) :year(yr), bottles(bt){} Pair(){}void Set(const T1 &yr, const T2 &bt);int Sum()const;void Show(int y)const;};template<class T1, class T2>void Pair<T1,T2>::Set(const T1 &yr, const T2 &bt){year = yr;bottles = bt;}template<class T1,class T2>int Pair<T1, T2>::Sum()const{returnbottles.sum();}template<class T1, class T2>void Pair<T1,T2>::Show(int y)const{for (inti = 0; i< y; i++)cout<< "\t" << year[i] << "\t" << bottles[i] <<endl;typedefvalarray<int>ArrayInt;typedef Pair<ArrayInt, ArrayInt>PairArray;class Wine{private:PairArrayyb;stringfullname;intyrs;public:Wine(){}Wine(const char *l, int y, constintyr[], constint bot[]);Wine(const char *l, int y);voidGetBottles();string&Label();void Show()const;int sum()const;};#endif//winec.cpp#include "winec.h"Wine::Wine(const char *l, int y, constintyr[], constint bot[]) {fullname = l;yrs = y;yb.Set(ArrayInt(yr, yrs), ArrayInt(bot, yrs));}Wine::Wine(const char *l, int y){fullname = l;yrs = y;}void Wine::GetBottles(){ArrayIntyr(yrs), bt(yrs);for (inti = 0; i<yrs; i++){cout<< "Enter the year: ";cin>>yr[i];cout<< "Enter the bottles: ";cin>>bt[i];}while (cin.get() != '\n')continue;yb.Set(yr, bt);}string&Wine::Label(){returnfullname;}void Wine::Show()const{cout<< "Wine: " <<fullname<<endl;cout<< "\tYear\tBottles\n";yb.Show(yrs);}int Wine::sum()const{returnyb.Sum();}//main.cpp#include "winec.h"int main(void){cout<< "Enter name of wine: ";char lab[50];cin.getline(lab, 50);cout<< "Enter number of years: ";intyrs;cin>>yrs;Wine holding(lab, yrs);holding.GetBottles();holding.Show();constint YRS = 3;int y[YRS] = { 1993, 1995, 1998 };int b[YRS] = { 48, 60, 72 };Wine more("Gushing Grape Red", YRS, y, b);more.Show();cout<< "Total bottles for " <<bel() << ": " <<more.sum() <<endl;cout<< "Bye\n";system("pause");return 0;}2、//winec.h#ifndef WINEC_H_#define WINEC_H_#include <iostream>#include <string>#include <valarray>using namespace std;template<class T1, class T2>class Pair{private:T1 year;T2 bottles;public:Pair(const T1 &yr, const T2 &bt) :year(yr), bottles(bt){} Pair(){}void Set(const T1 &yr, const T2 &bt);int Sum()const;void Show(int y)const;};template<class T1, class T2>void Pair<T1,T2>::Set(const T1 &yr, const T2 &bt){year = yr;bottles = bt;}template<class T1,class T2>int Pair<T1, T2>::Sum()const{returnbottles.sum();}template<class T1, class T2>void Pair<T1,T2>::Show(int y)const{for (inti = 0; i< y; i++)cout<< "\t" << year[i] << "\t" << bottles[i] <<endl;}typedefvalarray<int>ArrayInt;typedef Pair<ArrayInt, ArrayInt>PairArray;class Wine :private PairArray, private string{private:intyrs;public:Wine(){}Wine(const char *l, int y, constintyr[], constint bot[]);Wine(const char *l, int y);voidGetBottles();string&Label();void Show()const;int sum()const;};#endif//winec.cpp#include "winec.h"Wine::Wine(const char *l, int y, constintyr[], constint bot[]) :string(l), yrs(y), PairArray(ArrayInt(yr, y), ArrayInt(bot, y)){}Wine::Wine(const char *l, int y) : string(l), yrs(y){}void Wine::GetBottles(){ArrayIntyr(yrs), bt(yrs);for (inti = 0; i<yrs; i++){cout<< "Enter the year: ";cin>>yr[i];cout<< "Enter the bottles: ";cin>>bt[i];}while (cin.get() != '\n')continue;PairArray::Set(yr, bt);}string&Wine::Label(){return (string &)(*this);}void Wine::Show()const{cout<< "Wine: " << (string &)(*this) <<endl;cout<< "\tYear\tBottles\n";PairArray::Show(yrs);}int Wine::sum()const{returnPairArray::Sum();}//main.cpp#include "winec.h"int main(void){cout<< "Enter name of wine: ";char lab[50];cin.getline(lab, 50);cout<< "Enter number of years: ";intyrs;cin>>yrs;Wine holding(lab, yrs);holding.GetBottles();holding.Show();constint YRS = 3;int y[YRS] = { 1993, 1995, 1998 };int b[YRS] = { 48, 60, 72 };Wine more("Gushing Grape Red", YRS, y, b);more.Show();cout<< "Total bottles for " <<bel() << ": " <<more.sum() <<endl;cout<< "Bye\n";system("pause");return 0;}3、//queuetp.h#ifndef QUEUETP_H_#define QUEUETP_H_#include <iostream>#include <string>#include <cstring>using namespace std;template<typename T>classQueueTp{private:struct Node { T item; struct Node *next; };Node *front;Node *rear;int items;constintqsize;QueueTp(constQueueTp&q) :qsize(0){}QueueTp&operator=(constQueueTp&q){ return *this; } public:QueueTp(intqs = 10);~QueueTp();boolisempty()const;boolisfull()const;intqueuecount()const;boolenqueue(const T &item);booldequeue(T &item);};template<typename T>QueueTp<T>::QueueTp(intqs) :qsize(qs){front = rear = NULL;items = 0;}template<typename T>QueueTp<T>::~QueueTp(){Node *temp;while (front != NULL){temp = front;front = front->next;delete temp;}}template<typename T>boolQueueTp<T>::isempty()const{return items == 0;}template<typename T>boolQueueTp<T>::isfull()const{return items == qsize;}template<typename T>intQueueTp<T>::queuecount()const{return items;}template<typename T>boolQueueTp<T>::enqueue(const T &item) {if (isfull())return false;Node *add = new Node;add->item = item;add->next = NULL;items++;if (front == NULL)front = add;elserear->next = add;rear = add;return true;}template<typename T>boolQueueTp<T>::dequeue(T &item){if (front == NULL)return false;item = front->item;items--;Node *temp = front;front = front->next;delete temp;if (items == 0)rear = NULL;return true;}class Worker{private:stringfullname;long id;public:Worker() :fullname("no one"), id(0L){}Worker(const string &s, long n) :fullname(s), id(n){} ~Worker();void Set();void Show()const;};#endif//workermi.cpp#include "queuetp.h"Worker::~Worker(){}void Worker::Show()const{cout<< "Name: " <<fullname<<endl;cout<< "Employee ID: " << id <<endl;}void Worker::Set(){cout<< "Enter worker's name: ";getline(cin, fullname);cout<< "Enter worker's ID: ";cin>> id;while (cin.get() != '\n')continue;}//main.cpp#include "queuetp.h"constint Size = 5;int main(){QueueTp<Worker *>lolas(Size);Worker *temp;intct;for (ct = 0; ct< Size; ct++){charch;cout<< "Enter the command:\n"<< "A or a enter queue, "<< "P or p delete queue, "<< "Q or q quit.\n";cin>>ch;while (strchr("apq", ch) == NULL){cout<< "Please enter a p or q: ";cin>>ch;}if (ch == 'q')break;switch(ch){case'a':temp = new Worker;cin.get();temp->Set();if (lolas.isfull())cout<< "Queue already full\n";elselolas.enqueue(temp);break;case'p':if (lolas.isempty())cout<< "Queue already empty\n";elselolas.dequeue(temp);break;}}cout<< "\nHere the total count: ";cout<<lolas.queuecount();cout<< "Done.\n";system("pause");return 0;}4、//person.h#ifndef PERSON_H_#define PERSON_H_#include <iostream>#include <string>#include <cstdlib>#include <cstring>using namespace std;class Person{private:stringfirstname;stringlastname;protected:virtual void Data()const;virtual void Get();public:Person():firstname("no one"),lastname("no one"){}Person(const string &f,const string &l):firstname(f),lastname(l){} Person(const Person &p):Person(p){}virtual ~Person() = 0;virtual void Set() = 0;virtual void Show()const = 0;};classGunslinger:virtual public Person{private:intnumsk;protected:void Data()const;void Get();public:Gunslinger():numsk(0),Person(){}Gunslinger(intnk, const string &f, const string &l) :numsk(nk), Person(f, l){} Gunslinger(intnk, const Person &p):numsk(nk),Person(p){}void Show()const;void Set();double Draw()const;};classPokerPlayer:virtual public Person{protected:void Data()const;public:PokerPlayer():Person(){}PokerPlayer(const string &f, const string &l) : Person(f, l){}PokerPlayer(const Person &p):Person(p){}int Draw()const;void Show()const;void Set(){ Person::Set(); }};classBadDude:publicGunslinger,publicPokerPlayer{protected:void Data()const;void Get();public:BadDude(){}BadDude(intnk , const string &f, const string &l):Person(f, l), Gunslinger(nk, f, l), PokerPlayer(f, l){}BadDude(intnk, const Person &p):Person(p), Gunslinger(nk, p), PokerPlayer(p){}BadDude(const Gunslinger &g):Person(g),Gunslinger(g),PokerPlayer(g){}BadDude(intnk, constPokerPlayer&po):Person(po), Gunslinger(nk, po), PokerPlayer(po){}doubleGdraw()const;intCdraw()const;void Set();void Show()const;};#endif//person.cpp#include "person.h"Person::~Person(){}void Person::Data()const{cout<< "First name is : " <<firstname<<endl;cout<< "Last name is : " <<lastname<<endl;}void Person::Get(){cout<< "Enter first name: \n";getline(cin, firstname);cout<< "Enter last name: \n";getline(cin, lastname);}void Person::Show()const{Data();}void Person::Set(){Get();}void Gunslinger::Data()const{cout<< "Nick is :" <<numsk<<endl;cout<< "The time of get the gun :" << Gunslinger::Draw() <<endl; }void Gunslinger::Get(){cout<< "Enter Nick: \n";cin>>numsk;}void Gunslinger::Set(){cout<< "Enter Guns name: \n";Person::Get();Get();}void Gunslinger::Show()const{cout<< "Gunslinger: \n";Person::Data();Data();}double Gunslinger::Draw()const{return rand() % 3 + 1;}intPokerPlayer::Draw()const{return rand() % 52 + 1;}voidPokerPlayer::Data()const{cout<< "The cards :" << Draw() <<endl; }voidPokerPlayer::Show()const{cout<< "PokerPlayer :\n";Person::Data();Data();}doubleBadDude::Gdraw()const{return Gunslinger::Draw();}intBadDude::Cdraw()const{returnPokerPlayer::Draw();}voidBadDude::Data()const{Gunslinger::Data();PokerPlayer::Data();cout<< "The next cards: " <<Cdraw() <<endl;cout<< "The time of BadDude get the gun: " <<Gdraw() <<endl; }voidBadDude::Get(){Gunslinger::Get();}voidBadDude::Set(){cout<< "Enter BadDude name: \n";Person::Get();Get();}voidBadDude::Show()const{cout<< "BadDude: \n";Person::Data();Data();}//main.cpp#include "person.h"constint Size=5;int main (){Person *per[Size];intct;for (ct = 0; ct< Size; ct++){char choice;cout<< "Enter the Person: \n"<< "g: gunslinger p: poker "<< "b: bad dude q: quit\n";cin>> choice;while (strchr("gpbq", choice) == NULL){cout<< "Please enter a p,g,o,q: ";cin>> choice;}if (choice == 'q')break;switch (choice){case'g':per[ct] = new Gunslinger;break;case'p':per[ct] = new PokerPlayer;break;case'b':per[ct] = new BadDude;break;}cin.get();per[ct]->Set();}cout<< "\nHere is your staff:\n";inti;for (i = 0; i<ct; i++){cout<<endl;per[i]->Show();}for (i = 0; i<ct; i++)delete per[i];cout<< "Bye\n";system("pause");return 0;}5、//emp.h#ifndef EMP_H_#define EMP_H_#include <iostream>#include <string>using namespace std;classabstr_empprivate:stringfname;stringlname;string job;public:abstr_emp();abstr_emp(const string &fn, const string &ln,const string &j);virtual void ShowAll()const;virtual void SetAll();friendostream&operator<<(ostream&os, constabstr_emp&e);virtual ~abstr_emp() = 0;};class employee :public abstr_emp{public:employee();employee(const string &fn, const string &ln,const string &j);virtual void ShowAll()const;virtual void SetAll();};class manager :virtual public abstr_emp{private:intinchargeof;protected:intInChargeOf()const { return inchargeof; }int&InChargeOf(){ return inchargeof; }public:manager();manager(const string &fn, const string &ln,const string &j, intico = 0);manager(constabstr_emp&e, intico = 0);manager(const manager &m);virtual void ShowAll()const;virtual void SetAll();voidgetInCharge(){cout<< "Enter inchargeof: ";cin>>inchargeof;}class fink :virtual public abstr_emp{private:stringreportsto;protected:const string ReportsTo()const{ return reportsto; }string&ReportsTo(){ return reportsto; }public:fink();fink(const string &fn, const string &ln,const string &j, const string &rpo);fink(constabstr_emp&e, const string &rpo);fink(const fink &e);virtual void ShowAll()const;virtual void SetAll();voidgetReportsTo(){cout<< "Enter reportsto: ";cin>>reportsto;}};classhighfink :public manager, public fink{public:highfink();highfink(const string &fn, const string &ln,const string &j, const string &rpo, intico = 0);highfink(constabstr_emp&e, const string &rpo, intico = 0);highfink(const fink &f, intico = 0);highfink(const manager &m, const string &rpo);highfink(consthighfink&h);virtual void ShowAll()const;virtual void SetAll();};#endif//emp.cpp#include "emp.h"abstr_emp::abstr_emp() :fname("no one"), lname("no one"), job("no job") {}abstr_emp::abstr_emp(const string &fn, const string &ln, const string &j) : fname(fn), lname(ln), job(j){}voidabstr_emp::ShowAll()const{cout<< "Firstname: " <<fname<<endl;cout<< "Lastname: " <<lname<<endl;cout<< "Job is: " << job <<endl;}voidabstr_emp::SetAll(){cout<< "Enter firstname: ";getline(cin, fname);cout<< "Enter lastname: ";getline(cin, lname);cout<< "Enter position: ";getline(cin, job);}ostream&operator<<(ostream&os, constabstr_emp&e) {os<<e.fname<< " " <<e.lname<< ", " <<e.job<<endl;returnos;}abstr_emp::~abstr_emp(){}employee::employee() :abstr_emp(){}employee::employee(const string &fn, const string &ln, const string &j) : abstr_emp(fn, ln, j){}void employee::ShowAll()constabstr_emp::ShowAll();}void employee::SetAll(){abstr_emp::SetAll();}manager::manager() :abstr_emp(){}manager::manager(const string &fn, const string &ln,const string &j, intico) : abstr_emp(fn, ln, j), inchargeof(ico){}manager::manager(constabstr_emp&e, intico) : abstr_emp(e), inchargeof(ico) {}manager::manager(const manager &m) : abstr_emp(m){}void manager::ShowAll()const{abstr_emp::ShowAll();cout<< "Inchargeof: " <<InChargeOf() <<endl;}void manager::SetAll(){abstr_emp::SetAll();cout<< "Enter inchargeof: ";(cin>>inchargeof).get();}fink::fink() :abstr_emp(){}fink::fink(const string &fn, const string &ln,const string &j, const string &rpo) : abstr_emp(fn, ln, j), reportsto(rpo){}fink::fink(constabstr_emp&e, const string &rpo) : abstr_emp(e), reportsto(rpo){}fink::fink(const fink &e) : abstr_emp(e){}void fink::ShowAll()const{abstr_emp::ShowAll();cout<< "Reportsto: " <<ReportsTo() <<endl;}void fink::SetAll(){abstr_emp::SetAll();cout<< "Enter reportsto: ";cin>>reportsto;}highfink::highfink() :abstr_emp(), manager(), fink(){}highfink::highfink(const string &fn, const string &ln,const string &j, const string &rpo, intico) : abstr_emp(fn, ln, j), manager(fn, ln, j, ico), fink(fn, ln, j, rpo){}highfink::highfink(constabstr_emp&e, const string &rpo, intico) : abstr_emp(e), manager(e, ico), fink(e, rpo){}highfink::highfink(const fink &f, intico) : abstr_emp(f), manager(f, ico), fink(f){}highfink::highfink(const manager &m, const string &rpo) : abstr_emp(m), manager(m), fink(m, rpo){}highfink::highfink(consthighfink&h) : abstr_emp(h), manager(h), fink(h){}voidhighfink::ShowAll()const{abstr_emp::ShowAll();cout<< "InChargeOf: " << manager::InChargeOf() <<endl;cout<< "ReportsTo: " << fink::ReportsTo() <<endl;}voidhighfink::SetAll(){abstr_emp::SetAll();manager::getInCharge();fink::getReportsTo();}//useemp.cpp#include "emp.h"int main(void){employeeem("Trip", "Harris", "Thumper");cout<<em<<endl;em.ShowAll();manager ma("Amorphia", "Spindragon", "Nuancer", 5);cout<< ma <<endl;ma.ShowAll();fink fi("Matt", "Oggs", "Oiler", "Juno Barr");cout<< fi <<endl;fi.ShowAll();highfinkhf(ma, "Curly Kew");hf.ShowAll();cout<< "Press a key for next phase:\n";cin.get();highfink hf2;hf2.SetAll();cout<< "Using an abstr_emp * pointer:\n";abstr_emp *tri[4] = { &em, &fi, &hf, &hf2 };for (inti = 0; i< 4; i++)tri[i]->ShowAll();system("pause");return 0;}。