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;}。
第二章:开始学习C++//ex2.1--display your name and a ddress#include<iostream>int main(void){using namespace std;cout<<"My name is liao chunguang and I live in hunan chenzhou.\n〞;}the furlong units to yard uints-把浪单位换位码单位#include<iostream>double fur2yd(double);int main(){using namespace std;cout<<"enter the distance measured by furlong u nits:";double fur;cin>>fur;cout<<"convert the furlong to y ard"<<endl;double yd;yd=fur2yd(fur);cout<<fur<<" furlong is "<<yd<<" yard"<<endl;return 0;}double fur2yd(double t){return 220*t;}每个函数都被调用两次#include<iostream>void mice();void see();using namespace std;int main(){mice();mice();see();see();return 0;}void mice(){cout<<"three blind mice"<<endl;}void see(){cout<<"see how they run"<<endl;}#include<iostream>int main(){using namespace std;cout<<"Enter your age:";int age;cin>>age;int month;month=age*12;cout<<age<<" years is "<<month<<" months"<<endl;return 0;}the Celsius valve to Fahrenheit value#include<iostream>double C2F(double);int main(){using namespace std;cout<<"please enter a Celsius value:";double C;cin>>C;double F;F=C2F(C);cout<<C<<" degrees Celsius is "<<F<<" degrees Fahrenheit."<<endl; return 0;}double C2F(double t){return 1.8*t+32;}the light years valve to astronomical units--把光年转换为天文单位#include<iostream>double convert(double);//函数原型int main(){using namespace std;cout<<"Enter the number of light y ears:";double light_years;cin>>light_years;double astro_units;astro_units=convert(light_years);cout<<light_years<<" light_years = "<<astro_units<<" astronomical units."<<endl; return 0;}double convert(double t){return 63240*t;//1 光年=63240 天文单位}显示用户输入的小时数和分钟数#include<iostream>void show();main(){using namespace std;show();return 0;}void show(){using namespace std;int h,m;cout<<"enter the number of hours:";cin>>h;cout<<"enter the number of minutes:";cin>>m;cout<<"Time:"<<h<<":"<<m<<endl;}第三章:处理数据//ex3.1—将身高用英尺(feet)和英寸(inch)表示#include<iostream>const int inch_per_feet=12;// const 常量--1feet=12inches--1 英尺=12 英寸int main(){using namespace std;cout<<"please enter your height in inches:\b\b\b";// \b 表示为退格字符int ht_inch;cin>>ht_inch;int ht_feet=ht_inch/inch_per_feet;//取商int rm_inch=ht_inch%inch_per_feet;//取余cout<<"your height is "<<ht_feet<<" feet,and "<<rm_inch<<" inches\n";return 0;}计算相应的body mass index〔体重指数〕#include<iostream>const int inch_per_feet=12;const double meter_per_inch=0.0254;const double pound_per_kilogram=2.2;int main(){using namespace std;cout<<"Please enter your height:"<<endl;cout<<"First,enter your height of feet part〔输入你身高的英尺局部〕:_\b";int ht_feet;cin>>ht_feet;cout<<"Second,enter your height of inch p art〔输入你身高的英寸局部〕:_\b";int ht_inch;cin>>ht_inch;cout<<"Now,please enter your weight in pound:\b\b\b";double wt_pound;cin>>wt_pound;int inch;inch=ht_feet*inch_per_feet+ht_inch;double ht_meter;ht_meter=inch*meter_per_inch;double wt_kilogram;wt_kilogram=wt_pound/pound_per_kilogram;cout<<endl;cout<<"Your pensonal body information as follows:"<<endl; 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 Index(体重指数) is "<<BMI<<endl;return 0;}以度,分,秒输入,以度输出#include<iostream>const int minutes_per_degree=60;const int seconds_per_minute=60;int main(){using namespace std;cout<<"Enter a latitude in degrees,minutes,and s econds:\n";cout<<"First,enter the d egrees:";int degree;cin>>degree;cout<<"Next,enter the minutes of arc:";int minute;cin>>minute;cout<<"Fianlly,enter the seconds of arc:";int second;cin>>second;double show_in_degree;show_in_degree=(double)degree+(double)minute/minutes_per_degree+(double)second/mi nutes_per_degree/seconds_per_minute;cout<<degree<<" degrees,"<<minute<<" minutes,"<<second<<"seconds ="<<show_in_degree<<" degrees\n";return 0;}#include<iostream>const int hours_per_day=24;const int minutes_per_hour=60;const int seconds_per_minute=60;int main(){using namespace std;cout<<"Enter the number of seconds:";long seconds;cin>>seconds;int Day,Hour,Minute,Second;Day=seconds/seconds_per_minute/minutes_per_hour/hours_per_day;Hour=seconds/seconds_per_minute/minutes_per_hour%hours_per_day;Minute=seconds/seconds_per_minute%minutes_per_hour;Second=seconds%seconds_per_minute;cout<<seconds<<"seconds = "<<Day<<" days,"<<Hour<<" hours,"<<Minute<<" minutes,"<<Second<<" seconds\n";return 0;}#include<iostream>int main(){using namespace std;cout<<"Enter the world population:";long long world_population;cin>>world_population;cout<<"Enter the population of the US:";long long US_population; cin>>US_population;double percentage;percentage=(double)US_population/world_population*100;cout<<"The population of the US is "<<percentage<<"% of the world population.\n"; return 0;}//ex3.6 汽车耗油量-美国(mpg)or 欧洲风格(L/100Km)#include<iostream>int main(){using namespace std;cout<<"Enter the miles of distance you have driven:";double m_distance;cin>>m_distance;cout<<"Enter the gallons of gasoline you have used:";double m_gasoline;cin>>m_gasoline;cout<<"Your car can run "<<m_distance/m_gasoline<<" miles per gallon\n";cout<<"Computing by European style:\n";cout<<"Enter the distance in k ilometers:";double k_distance;cin>>k_distance;cout<<"Enter the petrol in l iters:";double k_gasoline;cin>>k_gasoline;cout<<"In European style:"<<"your can used "<<100*k_gasoline/k_distance<<" liters of petrol per 100 kilometers\n";return 0;}//ex3.7 automobile gasoline consumption-耗油量--欧洲风格(L/100Km)转换成美国风格(mpg) #include<iostream>int main(){using namespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"European style(liters per 100 k ilometers):";double Euro_style;cin>>Euro_style;cout<<"Converts to U.S. style(miles per gallon):"<<endl;cout<<Euro_style<<" L/100Km = "<<62.14*3.875/Euro_style<<" mpg\n";return 0;}// Note that 100 kilometers is 62.14 miles, and 1 gallon is 3.875 liters.//Thus, 19 mpg is about L/100Km, and 27 mpg is about L/100Km. Enter theautomobile gasoline consumption figure inEuropean style(liters per 100 Converts to U.S.style(miles per gallon):mpgPress any key to continue// ex3.7 automobile gasoline consumption-耗油量--美国风格(mpg)转换成欧洲风格(L/100Km) #include<iostream>int main(){using namespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"U.S. style(miles per gallon):";double US_style;cin>>US_style;cout<<"Converts to European style(miles per gallon):"<<endl;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 gallon):19Converts to European style(miles per gallon):19 mpg =Press any key to continue第四章复合类型//ex4.1 display the information of student#include<iostream>const int Asize=20;using namespace std;struct student//定义结构描述{char firstname[Asize];char lastname[Asize];char grade;int age;};void display(student);//函数原型放在结构描述后int main(){cout<<"what is your first name?"<<endl;student lcg;//创立结构变量〔结构数据对象〕cin.getline(lcg.firstname,Asize);cout<<"what is your last name?"<<endl;cin.getline(stname,Asize);cout<<"what letter grade do you d eserve?"<<endl;cin>>lcg.grade;cout<<"what is your age?"<<endl;cin>>lcg.age;display(lcg);return 0;}void display(student name){cout<<"Name: "<<name.firstname<<","<<stname<<endl;cout<<"Grade:"<<char(name.grade+1)<<endl;cout<<"Age:"<<name.age<<endl;}use the string-class instead of char-array#include<iostream>#include<string>int main(){using namespace std;string name,dessert;cout<<"Enter your name: \n";getline(cin,name);cout<<"Enter your favorite dessert: \n";getline(cin,dessert);cout<<"I have some delicious "<<dessert;cout<<" for you, "<<name<<".\n";return 0;}//有时候会遇到需要按下两次回车键才能正确的显示结果,这是的一个BUG,更改如下:else if (_Tr::eq((_E)_C, _D)){_Chg = true;_I.rdbuf()->sbumpc();//修改后的break; }输入其名和姓,并组合显示#include<iostream>#include<cstring>const int Asize=20;int main(){using namespace std;char fname[Asize];char lname[Asize];char fullname[2*Asize+1];cout<<"Enter your first name:";//输入名字,存储在fname[]数组中cin.getline(fname,Asize);cout<<"Enter your last name:";//输入姓,存储在lname[]数组中cin.getline(lname,Asize);strncpy(fullname,lname,Asize);//把姓lname 复制到fullname 空数组中strcat(fullname,", ");//把“,〞附加到上述fullname 尾部strncat(fullname,fname,Asize);//把fname 名字附加到上述fullname 尾部fullname[2*Asize]='\0';//为防止字符型数组溢出,在数组结尾添加结束符cout<<"Here's the information in a single string:"<<fullname<<endl;//显示组合结果return 0;}#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstring>const int Asize = 20;int main(){using namespace std;char firstname[Asize];char lastname[50];cout << "Enter your first name: ";cin.getline(firstname,Asize);cout << "Enter your last name: ";cin.getline(lastname,50);strcat(lastname,", ");strncat(lastname,firstname,Asize);cout << "Here's the information in a single string: "<< lastname <<endl;return 0;}//ex4.4 使用string 对象存储、显示组合结果#include<iostream>#include<string>int main(){using namespace std;string fname,lname,attach,fullname;cout<<"Enter your first name:";getline(cin,fname);//note:将一行输入读取到string 类对象中使用的是getline(cin,str)//它没有使用句点表示法,所以不是类方法cout<<"Enter your last name:";getline(cin,lname);attach=", ";fullname=lname+attach+fname;cout<<"Here's the information in a single string:"<<fullname<<endl;return 0;}//ex4.5 declare a struct and initialize it 声明结果并创立一个变量#include<iostream>const int Asize=20;struct CandyBar{char brand[Asize];double weight;int calory;int main(){using namespace std;CandyBar snack={"Mocha Munch",2.3,350};cout<<"Here's the information of snack:\n";cout<<"brand:"<<snack.brand<<endl;cout<<"weight:"<<snack.weight<<endl;cout<<"calory:"<<snack.calory<<endl;return 0;}结构数组的声明及初始化#include<iostream>const int Asize=20;struct CandyBar{char brand[Asize];double weight;int calory;};int main(){using namespace std;CandyBar snack[3]={{"Mocha Munch",2.3,350},{"XuFuJi",1.1,300},{"Alps",0.4,100}};for(int i=0;i<3;i++)//利用for 循环来显示snack 变量的内容{cout<<snack[i].brand<<endl<<snack[i].weight<<endl<<snack[i].calory<<endl<<endl;}return 0;}//ex4.7 pizza 披萨饼#include<iostream>#include<string>const int Size=20;struct pizza//声明结构char company[Size];double diameter;double weight;};int main(){using namespace std;pizza pie;//创立一个名为pie 的结构变量cout<<"What's the name of pizza company:";cin.getline(pie pany,Size);cout<<"What's the diameter of pizza:";cin>>pie.diameter;cout<<"What's the weight of pizza:";cin>>pie.weight; cout<<"company:"<<piepany<<endl;cout<<"diameter:"<<pie.diameter<<"inches"<<endl;cout<<"weight:"<<pie.weight<<"ounches"<<endl;return 0;}pizza pie 披萨饼使用new 创立动态结构#include<iostream>#include<string>const int Size=20;struct pizza//声明结构{char company[Size];double diameter;double weight;};int main(){using namespace std;pizza *pie=new pizza;//使用new 创立动态结构cout<<"What's the diameter of pizza:";cin>>pie->diameter; cin.get();//读取下一个字符cout<<"What's the name of pizza company:";cin.get(pie->company,Size);cout<<"What's the weight of pizza:";cin>>pie->weight;cout<<"diameter:"<<pie->diameter<<" inches"<<endl;cout<<"company:"<<pie->company<<endl;cout<<"weight:"<<pie->weight<<" ounches"<<endl;delete pie;//delete 释放内存return 0;}//ex.4.9 使用new 动态分配数组—方法1#include<iostream>#include<string>using namespace std;struct CandyBar{string brand;double weight;int calory;};int main(){CandyBar *snack= new CandyBar[3]; snack[0].brand="A";//单个初始化由new 动态分配的内存snack[0].weight=1.1;snack[0].calory=200;snack[1].brand="B";snack[1].weight=2.2;snack[1].calory=400;snack[2].brand="C";snack[2].weight=4.4;snack[2].calory=500;for(int i=0;i<3;i++){cout << " brand: " << snack[i].brand << endl;cout << " weight: " << snack[i].weight << e ndl;cout << " calorie: " << snack[i].calory << endl<<endl;}delete [] snack;return 0;}//ex.4.10 数组—方法1#include <iostream>int main(){using namespace std;const int Size = 3;int success[Size];cout<<"Enter your success of the three times 40 meters running:\n";cin >> success[0]>>success[1]>>success[2];cout<<"success1:"<<success[0]<<endl;cout<<"success2:"<<success[1]<<endl;cout<<"success3:"<<success[2]<<endl;double average=(success[0]+success[1]+success[2])/3;cout<<"average:"<<average<<endl;return 0;}//ex.4.10 array—方法2#include <iostream>#include <array>int main(){using namespace std;array<double,4>ad={0};cout<<"Enter your success of the three times 40 meters running:\n";cin >> ad[0]>>ad[1]>>ad[2];cout<<"success1:"<<ad[0]<<endl;cout<<"success2:"<<ad[1]<<endl;cout<<"success3:"<<ad[2]<<endl;ad[3]=(ad[0]+ad[1]+ad[2])/3;cout<<"average:"<<ad[3]<<endl;return 0;}第五章循环和关系表达式#include <iostream>int main(){using namespace std;cout<<"Please enter two integers: ";int num1,num2;cin>>num1>>num2;int sum=0;for(int temp=num1;temp<=num2;++temp)//or temp++sum+=temp;cout<<"The sum from "<<num1<<" to "<<num2<<" is "<<sum<<endl;return 0;}#include <iostream>#include<array>int main(){using namespace std;array<long 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++)cout<<i<<"! = "<<ad[i]<<endl;return 0;}#include <iostream>#include <array>using namespace std;int main(){array<long double, 101> multiply;multiply[0] = multiply[1] = 1LL;for (int i = 2; i <= 100; i++)multiply[i] = multiply[i-1]*i;cout << multiply[100];return 0;}#include <iostream>int main(){using namespace std;cout<<"Please enter an integer: ";int sum=0,num;while((cin>>num)&&num!=0){sum+=num;cout<<"So far, the sum is "<<sum<<endl;cout<<"Please enter an integer: ";}return 0;}#include <iostream>int main(){using namespace std;double sum1,sum2;sum1=sum2=0.0;int year=0;while(sum2<=sum1){++year;sum1+=10;sum2=(100+sum2)*0.05+sum2;}cout<<"经过"<<year<<"年后,Cleo 的投资价值才能超过Daphne 的投资价值。
//cdplayer.h#ifndef CDPLAYER_H_#define CDPLAYER_H_#include <iostream>#include <string>using namespace std;class Cd{private:char performers[50];char label[20];int selections;double playtime;public:Cd(char *s1, char *s2, int n, double x);Cd(const Cd &d);Cd(){}virtual ~Cd();virtual void Report()const;Cd &operator=(const Cd &d);};class Classic :public Cd{private:char main_music[50];public:Classic(){}Classic(char *m, char *s1, char *s2, int n, double x);Classic(char *m, const Cd &c);~Classic();Classic &operator=(const Classic &c);virtual void Report()const;};#endif//cdplayer.cpp#include "cdplayer.h"Cd::Cd(char *s1, char *s2, int n, double x)strcpy_s(performers, strlen(s1) + 1, s1);strcpy_s(label, strlen(s2) + 1, s2);selections = n;playtime = x;}Cd::Cd(const Cd &d){strcpy_s(performers, 50, d.performers);strcpy_s(label, 20, bel);selections = d.selections;playtime = d.playtime;}Cd::~Cd(){}void Cd::Report()const{cout << "Performers: " << performers << endl;cout << "Label: " << label << endl;cout << "Selections: " << selections << endl;cout << "Playtime: " << playtime << endl;}Cd &Cd::operator=(const Cd &d){if (this == &d)return *this;strcpy_s(performers, 50, d.performers);strcpy_s(label, 20, bel);selections = d.selections;playtime = d.playtime;return *this;}Classic::Classic(char *m, char *s1, char *s2, int n, double x) :Cd(s1, s2, n, x) {strcpy_s(main_music, strlen(m) + 1, m);}Classic::Classic(char *m, const Cd &c) : Cd(c){strcpy_s(main_music, strlen(m) + 1, m);}Classic::~Classic(){}Classic &Classic::operator=(const Classic &c){if (this == &c)return *this;Cd::operator=(c);strcpy_s(main_music, 50, c.main_music);return *this;}void Classic::Report()const{Cd::Report();cout << "Main Music: " << main_music << endl;}//main.cpp#include "cdplayer.h"void Bravo(const Cd &disk);int main(){Cd c1("Beatles", "Capito", 14, 35.5);Classic c2 = Classic("Piano Sonata in B flat, Fantasia in C", "Alfred Brendel", "Philips", 2, 57.17);Cd *pcd = &c1;cout << "Using object directly:\n";c1.Report();c2.Report();cout << "Using type cd * pointer to objects:\n";pcd->Report();pcd = &c2;pcd->Report();cout << "Calling a function with a Cd reference argument:\n";Bravo(c1);Bravo(c2);cout << "Testing assignment: ";Classic copy;copy = c2;copy.Report();system("pause");return 0;}void Bravo(const Cd &disk){disk.Report();}2、//cdplayer.h#ifndef CDPLAYER_H_#define CDPLAYER_H_#include <iostream>#include <string>using namespace std;class Cd{private:char *performers;char *label;int selections;double playtime;public:Cd(char *s1, char *s2, int n, double x);Cd(const Cd &d);Cd(){}virtual ~Cd();virtual void Report()const;Cd &operator=(const Cd &d);};class Classic :public Cd{private:char *main_music;public:Classic(){}Classic(char *m, char *s1, char *s2, int n, double x);Classic(char *m, const Cd &c);~Classic();Classic &operator=(const Classic &c);virtual void Report()const;};#endif//cdplayer.cpp#include "cdplayer.h"Cd::Cd(char *s1, char *s2, int n, double x){performers = new char[strlen(s1) + 1];label = new char[strlen(s2) + 1];strcpy_s(performers, strlen(s1) + 1, s1);strcpy_s(label, strlen(s2) + 1, s2);selections = n;playtime = x;}Cd::Cd(const Cd &d){performers = new char[strlen(d.performers) + 1];label = new char[strlen(bel) + 1];strcpy_s(performers, strlen(d.performers) + 1, d.performers);strcpy_s(label, strlen(bel) + 1, bel);selections = d.selections;playtime = d.playtime;}Cd::~Cd(){delete[]performers;delete[]label;}void Cd::Report()const{cout << "Performers: " << performers << endl;cout << "Label: " << label << endl;cout << "Selections: " << selections << endl;cout << "Playtime: " << playtime << endl;}Cd &Cd::operator=(const Cd &d){if (this == &d)return *this;delete[]performers;delete[]label;performers = new char[strlen(d.performers) + 1];label = new char[strlen(bel) + 1];strcpy_s(performers, strlen(d.performers) + 1, d.performers);strcpy_s(label, strlen(bel) + 1, bel);selections = d.selections;playtime = d.playtime;return *this;}Classic::Classic(char *m, char *s1, char *s2, int n, double x) :Cd(s1, s2, n, x) {main_music = new char[strlen(m) + 1];strcpy_s(main_music, strlen(m) + 1, m);}Classic::Classic(char *m, const Cd &c) : Cd(c){main_music = new char[strlen(m) + 1];strcpy_s(main_music, strlen(m) + 1, m);}Classic::~Classic(){delete[]main_music;}Classic &Classic::operator=(const Classic &c){if (this == &c)return *this;Cd::operator=(c);delete[]main_music;main_music = new char[strlen(c.main_music) + 1];strcpy_s(main_music, strlen(c.main_music) + 1, c.main_music);return *this;}void Classic::Report()const{Cd::Report();cout << "Main Music: " << main_music << endl;}//main.cpp#include "cdplayer.h"void Bravo(const Cd &disk);int main(){Cd c1("Beatles", "Capito", 14, 35.5);Classic c2 = Classic("Piano Sonata in B flat, Fantasia in C", "Alfred Brendel", "Philips", 2, 57.17);Cd *pcd = &c1;cout << "Using object directly:\n";c1.Report();c2.Report();cout << "Using type cd * pointer to objects:\n";pcd->Report();pcd = &c2;pcd->Report();cout << "Calling a function with a Cd reference argument:\n";Bravo(c1);Bravo(c2);cout << "Testing assignment: ";Classic copy;copy = c2;copy.Report();system("pause");return 0;}void Bravo(const Cd &disk){disk.Report();}3、//dma.h#ifndef DMA_H_#define DMA_H_#include <iostream>#include <string>using namespace std;class ABC{private:char *fullname;int level;public:ABC(const char *f = "null", int l = 0);ABC(const ABC &ab);ABC &operator=(const ABC &ab);virtual ~ABC();virtual void View() = 0;};class baseDMA :public ABC{private:char *label;int rating;public:baseDMA(const char *l = "null", int r = 0, const char *f = "null", int lv = 0);baseDMA(const baseDMA &rs);~baseDMA();baseDMA &operator=(const baseDMA &rs);virtual void View();};class lacksDMA :public ABC{private:enum{ COL_LEN = 40 };char color[COL_LEN];public:lacksDMA(const char *c = "blank", const char *f = "null", int lv = 0);lacksDMA(const char *c, const baseDMA &rs);virtual void View();};class hasDMA :public ABC{private:char *style;public:hasDMA(const char *s = "none", const char *f = "null", int lv = 0);hasDMA(const char *s, const ABC &rs);hasDMA(const hasDMA &hs);~hasDMA();hasDMA &operator=(const hasDMA &hs);virtual void View();};#endif//dma.cpp#include "dma.h"ABC::ABC(const char *f, int lv){fullname = new char[strlen(f) + 1];strcpy_s(fullname, strlen(f) + 1, f);level = lv;}ABC::ABC(const ABC &ab){fullname = new char[strlen(ab.fullname) + 1];strcpy_s(fullname, strlen(ab.fullname) + 1, ab.fullname);level = ab.level;}ABC::~ABC(){delete[]fullname;}ABC &ABC::operator=(const ABC &ab){if (this == &ab)return *this;delete[]fullname;fullname = new char[strlen(ab.fullname) + 1];strcpy_s(fullname, strlen(ab.fullname) + 1, ab.fullname);level = ab.level;return *this;void ABC::View(){cout << "Fullname: " << fullname << endl;cout << "Level: " << level << endl;}baseDMA::baseDMA(const char *l, int r, const char *f, int lv) :ABC(f, lv) {label = new char[strlen(l) + 1];strcpy_s(label, strlen(l) + 1, l);rating = r;}baseDMA::baseDMA(const baseDMA &rs) :ABC(rs){label = new char[strlen(bel) + 1];strcpy_s(label, strlen(bel) + 1, bel);rating = rs.rating;}baseDMA::~baseDMA(){delete[]label;}baseDMA &baseDMA::operator=(const baseDMA &rs){if (this == &rs)return *this;ABC::operator=(rs);delete[]label;label = new char[strlen(bel) + 1];strcpy_s(label, strlen(bel) + 1, bel);rating = rs.rating;return *this;}void baseDMA::View(){ABC::View();cout << "Label: " << label << endl;cout << "Rating: " << rating << endl;}lacksDMA::lacksDMA(const char *c, const char *f, int lv) :ABC(f, lv){strncpy_s(color, c, 39);color[39] = '\0';}lacksDMA::lacksDMA(const char *c, const baseDMA &rs) : ABC(rs) {strncpy_s(color, c, COL_LEN - 1);color[COL_LEN - 1] = '\0';}void lacksDMA::View(){ABC::View();cout << "Color: " << color << endl;}hasDMA::hasDMA(const char *s, const char *f, int lv) :ABC(f, lv) {style = new char[strlen(s) + 1];strcpy_s(style, strlen(s) + 1, s);}hasDMA::hasDMA(const char *s, const ABC &ab) :ABC(ab){style = new char[strlen(s) + 1];strcpy_s(style, strlen(s) + 1, s);}hasDMA::hasDMA(const hasDMA &hs) : ABC(hs){style = new char[strlen(hs.style) + 1];strcpy_s(style, strlen(hs.style) + 1, hs.style);}hasDMA::~hasDMA(){delete[]style;}hasDMA &hasDMA::operator=(const hasDMA &hs){if (this == &hs)return *this;ABC::operator=(hs);delete[]style;style = new char[strlen(hs.style) + 1];strcpy_s(style, strlen(hs.style) + 1, hs.style);return *this;}void hasDMA::View(){ABC::View();cout << "Style: " << style << endl;}//usedma.cpp#include "dma.h"int main(){baseDMA shirt("Portabelly", 8, "Jack", 1);lacksDMA balloon("red", "Blimpo", 4);hasDMA map("Mercator", "buffalo Keys", 5);cout << "Displaying baseDMA object:\n";shirt.View();cout << "Displaying lacksDMA object:\n";balloon.View();cout << "Displaying hasDMA object:\n";map.View();lacksDMA balloon2(balloon);cout << "Result of lacksDMA copy:\n";balloon2.View();hasDMA map2;map2 = map;cout << "Result of hasDMA assignment:\n";map2.View();system("pause");return 0;}4、//port.h#ifndef PORT_H_#define PORT_H_#include <iostream>#include <cstring>using namespace std;class Port{private:char *brand;char style[20];int bottles;public:Port(const char *br = "none", const char *st = "none", int b = 0);Port(const Port &p);virtual ~Port(){ delete[]brand; }Port &operator=(const Port &p);Port &operator+=(int b);Port &operator-=(int b);int BottleCount()const{ return bottles; }virtual void Show()const;friend ostream &operator<<(ostream &os, const Port &p);};class VintagePort :public Port{private:char *nickname;int year;public:VintagePort();VintagePort(const char *br, const char *st, int b, const char *nn, int y);VintagePort(const VintagePort &vp);~VintagePort(){ delete[]nickname; }VintagePort &operator=(const VintagePort &vp);void Show()const;friend ostream &operator<<(ostream &os, const VintagePort &vp);};#endif//port.cpp#include "port.h"Port::Port(const char *br, const char *st, int b){brand = new char[strlen(br) + 1];strcpy_s(brand, strlen(br) + 1, br);strcpy_s(style, strlen(st) + 1, st);bottles = b;}Port::Port(const Port &p){brand = new char[strlen(p.brand) + 1];strcpy_s(brand, strlen(p.brand) + 1, p.brand);strcpy_s(style, strlen(p.style) + 1, p.style);bottles = p.bottles;}Port &Port::operator=(const Port &p){if (this == &p)return *this;delete[]brand;brand = new char[strlen(p.brand) + 1];strcpy_s(brand, strlen(p.brand) + 1, p.brand);strcpy_s(style, strlen(p.style) + 1, p.style);bottles = p.bottles;return *this;}Port &Port::operator+=(int b){bottles += b;return *this;}Port &Port::operator-=(int b){bottles -= b;return *this;}void Port::Show()const{cout << "Brand: " << brand << endl;cout << "Kind: " << style << endl;cout << "Bottles: " << bottles << endl;}ostream &operator<<(ostream &os, const Port &p){os << p.brand << ", " << p.style << ", " << p.bottles;return os;}VintagePort::VintagePort(){nickname = new char[1];nickname[0] = '\0';year = 0;}VintagePort::VintagePort(const char *br, const char *st, int b, const char *nn, int y) :Port(br, st, b){nickname = new char[strlen(nn) + 1];strcpy_s(nickname, strlen(nn) + 1, nn);year = y;}VintagePort::VintagePort(const VintagePort &vp) :Port(vp){nickname = new char[strlen(vp.nickname) + 1];strcpy_s(nickname, strlen(vp.nickname) + 1, vp.nickname);year = vp.year;}VintagePort &VintagePort::operator=(const VintagePort &vp){if (this == &vp)return *this;delete[]nickname;Port::operator=(vp);nickname = new char[strlen(vp.nickname) + 1];strcpy_s(nickname, strlen(vp.nickname) + 1, vp.nickname);year = vp.year;return *this;}void VintagePort::Show()const{Port::Show();cout << "Nickname: " << nickname << endl;cout << "Year: " << year << endl;}ostream &operator<<(ostream &os, const VintagePort &vp){os << (const Port &)vp;os << ", " << vp.nickname << ", " << vp.year;return os;}//main.cpp#include "port.h"int main(){Port wine1("Gallo", "tawny", 20);VintagePort wine2("Romane Conti", "vintage", 10, "The Noble", 1876);VintagePort wine3("Merlot", "ruby", 30, "Old Velvet", 1888);cout << "Displaying Port object:\n";wine1.Show();cout << wine1 << endl;cout << "Displaying VintagePort object:\n";wine2.Show();cout << wine2 << endl;cout << "Displaying VintagePort object:\n";wine3.Show();cout << wine3 << endl;cout << "Gallo add ten bottles:\n";wine1 += 10;cout << wine1 << endl;cout << "Romane Conti add ten bottles:\n";wine2 += 10;cout << wine2 << endl;cout << "Merlot minus ten bottles:\n";wine3 -= 10;cout << wine3 << endl;Port wine4(wine2);cout << "Result of Port copy:\n";cout << wine4 << endl;VintagePort wine5;wine5 = wine3;cout << "Result of VintagePort assignment:\n";cout << wine5 << endl;system("pause");return 0;}(注:可编辑下载,若有不当之处,请指正,谢谢!)。
Chapter 2 Programming ExercisesPE 2—‐1/* Programming Exercise 2-1 */#include 〈stdio.h> int main(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〉 int main(void){ int ageyears; /* age in years */ intagedays; /* 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); void deny(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〉 int main(void){ int toes; toes =10;printf(”toes = %d\n”, toes);printf(”Twice toes = %d\n", 2 * toes); printf("toes squared = %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> voidone_three(void); void two(void);int main(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-。
11.1vector.h#include<iostream> namespace VECTOR{class Vector{public:enum Mode{RECT,POL};private:double x;double y;double mag;double ang;Mode mode;void set_mag();void set_ang();void set_x();void set_y();public:Vector();Vector(double n1,double n2,Mode form =RECT);void reset(double n1,double n2,Mode form=RECT);~Vector();double xval() const{return x;};double yval() const{return y;};double magval() const{return mag;};double angval() const{return ang;};void polar_mode();void rect_mode();Vector operator+(const Vector & b)const;Vector operator-(const Vector & b)const;Vector operator-()const;Vector operator*(double n)const;friend Vector operator*(double n,const Vector & a);friend std::ostream &operator<<(std::ostream & os, const Vector & v);};}vector.cpp#include"vector.h"#include<cmath>using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;namespace VECTOR{const double Rad_to_deg=45.0/atan(1.0);void Vector::set_mag(){mag=sqrt(x*x+y*y);}void Vector::set_ang(){if(x==0.0 && y==0.0)ang=0.0;elseang=atan2(y,x);}void Vector::set_x(){x=mag*cos(ang);}void Vector::set_y(){y=mag*sin(ang);}Vector:: Vector(){x=y=mag=ang=0.0;mode=RECT;}Vector::Vector(double n1,double n2,Mode form) {mode=form;if(form==RECT){x=n1;y=n2;set_mag();set_ang();}else if (form==POL){mag=n1;ang=n2/Rad_to_deg;set_x();set_y();}else{cout<<"Incorrect 3rd argument to Vector() -- ";cout<<"Vector set to 0\n";x=y=mag=ang=0.0;mode=RECT;}}void Vector::reset(double n1,double n2,Mode form) {mode=form;if (form==RECT){x=n1;y=n2;set_mag();set_ang();}else if(form==POL){mag=n1;ang=n2/Rad_to_deg;set_x();set_y();}else{cout<<"Incorrect 3rd argument to Vector() -- ";cout<<"Vector set to 0\n";x=y=mag=ang=0.0;mode=RECT;}}Vector::~Vector(){}void Vector::polar_mode(){mode=POL;}void Vector::rect_mode(){mode=RECT;}Vector Vector::operator+(const Vector & b)const {return Vector(x+b.x,y+b.y);}Vector Vector::operator-(const Vector & b)const {return Vector(x-b.x,y-b.y);}Vector Vector::operator-()const{return Vector(-x,-y);}Vector Vector::operator*(double n)const{return Vector(n*x,n*y);}Vector operator*(double n,const Vector & a){return a*n;}std::ostream & operator<<(std::ostream & os,const Vector & v){if(v.mode==Vector::RECT)os<<"(x,y) = ("<<v.x<<","<<v.y<<")";else if(v.mode==Vector::POL){os<<"(m,a)=("<<v.mag<<","<<v.ang*Rad_to_deg<<")";}elseos<<"Vector object mode is invalid";return os;}}main.cpp#include<iostream>#include<fstream>#include<cstdlib>#include<ctime>#include"vector.h"int main(){using namespace std;using VECTOR::Vector;srand(time(0));double direction;Vector step;Vector result(0.0,0.0);unsigned long steps=0;double target;double dstep;ofstream fout;fout.open("thewalk.txt");target=100;dstep=20;fout<<"Target Distance: "<<target<<" Step Size: "<<dstep;fout<<"\n"<<steps<<": "<<result;while(result.magval()<target){direction=rand()%360;step.reset(dstep,direction,Vector::POL);result=result+step;steps++;fout<<"\n"<<steps<<": "<<result;}fout<<"\nAfter "<<steps<<" steps,the subject has the following location: \n"<<result;result.polar_mode();fout<<"\nor\n"<<result<<endl;fout<<"Average outward distance per step ="<<result.magval()/steps;return 0;}11.2vector.h#include<iostream>namespace VECTOR{class Vector{public:enum Mode{RECT,POL};private:double x;double y;Mode mode;//void set_mag();//void set_ang();void set_x(double n1,double n2);void set_y(double n1,double n2);public:Vector();Vector(double n1,double n2,Mode form =RECT);void reset(double n1,double n2,Mode form=RECT);~Vector();double xval() const{return x;};double yval() const{return y;};double magval() const;double angval() const;void polar_mode();void rect_mode();Vector operator+(const Vector & b)const;Vector operator-(const Vector & b)const;Vector operator-()const;Vector operator*(double n)const;friend Vector operator*(double n,const Vector & a);friend std::ostream &operator<<(std::ostream & os, const Vector & v);};}Vector.cpp#include"vector.h"#include<cmath>using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;namespace VECTOR{const double Rad_to_deg=45.0/atan(1.0);//void Vector::set_mag()//{// mag=sqrt(x*x+y*y);//}//void Vector::set_ang()//{// if(x==0.0 && y==0.0)// ang=0.0;// else// ang=atan2(y,x);// }void Vector::set_x(double n1,double n2){x=n1*cos(n2);}void Vector::set_y(double n1,double n2){y=n1*sin(n2);}Vector:: Vector(){x=y=0.0;mode=RECT;}Vector::Vector(double n1,double n2,Mode form) {mode=form;if(form==RECT){x=n1;y=n2;}else if (form==POL){set_x(n1,n2);set_y(n1,n2);}else{cout<<"Incorrect 3rd argument to Vector() -- ";cout<<"Vector set to 0\n";x=y=0.0;mode=RECT;}}void Vector::reset(double n1,double n2,Mode form){mode=form;if (form==RECT){x=n1;y=n2;}else if(form==POL){set_x(n1,n2);set_y(n1,n2);}else{cout<<"Incorrect 3rd argument to Vector() -- ";cout<<"Vector set to 0\n";x=y=0.0;mode=RECT;}}Vector::~Vector(){}void Vector::polar_mode(){mode=POL;}void Vector::rect_mode(){mode=RECT;}Vector Vector::operator+(const Vector & b)const{return Vector(x+b.x,y+b.y);}Vector Vector::operator-(const Vector & b)const{return Vector(x-b.x,y-b.y);}Vector Vector::operator-()const{return Vector(-x,-y);}Vector Vector::operator*(double n)const{return Vector(n*x,n*y);}Vector operator*(double n,const Vector & a){return a*n;}std::ostream & operator<<(std::ostream & os,const Vector & v){if(v.mode==Vector::RECT)os<<"(x,y) = ("<<v.x<<","<<v.y<<")";else if(v.mode==Vector::POL){os<<"(m,a)=("<<v.magval()<<","<<v.angval()*Rad_to_deg<<")";}elseos<<"Vector object mode is invalid";return os;}double Vector:: magval() const{return sqrt(x*x+y*y);}double Vector:: angval() const{if(x==0.0&&y==0.0)return 0.0;elsereturn atan2(y,x);}}main.cpp#include<iostream>#include<cstdlib>#include<ctime>#include"vector.h"int main(){using namespace std;using VECTOR::Vector;srand(time(0));double direction;Vector step;Vector result(0.0,0.0);unsigned long steps=0;double target;double dstep;cout<<"enter target distance (q to quit): ";while(cin>>target){cout<<"enter step length: ";if(!(cin>>dstep))break;while(result.magval()<target){direction=rand()%360;step.reset(dstep,direction,Vector::POL);result=result+step;steps++;}cout<<"\nAfter "<<steps<<" steps,the subject has the following location: \n"<<result;result.polar_mode();cout<<"\nor\n"<<result<<endl;cout<<"Average outward distance per step = "<<result.magval()/steps<<endl;steps=0;result.reset(0.0,0.0);cout<<"enter target distance(q to quit): ";}cout<<"bye!\n";cin.clear();while(cin.get()!='\n')continue;cin.get();return 0;}11.3vector.h#include<iostream>namespace VECTOR{class Vector{public:enum Mode{RECT,POL};private:double x;double y;Mode mode;//void set_mag();//void set_ang();void set_x(double n1,double n2);void set_y(double n1,double n2);public:Vector();Vector(double n1,double n2,Mode form =RECT);void reset(double n1,double n2,Mode form=RECT);~Vector();double xval() const{return x;};double yval() const{return y;};double magval() const;double angval() const;void polar_mode();void rect_mode();Vector operator+(const Vector & b)const;Vector operator-(const Vector & b)const;Vector operator-()const;Vector operator*(double n)const;friend Vector operator*(double n,const Vector & a);friend std::ostream &operator<<(std::ostream & os, const Vector & v);};}vector.cpp#include"vector.h"#include<cmath>using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;namespace VECTOR{const double Rad_to_deg=45.0/atan(1.0);//void Vector::set_mag()//{// mag=sqrt(x*x+y*y);//}//void Vector::set_ang()//{// if(x==0.0 && y==0.0)// ang=0.0;// else// ang=atan2(y,x);// }void Vector::set_x(double n1,double n2){x=n1*cos(n2);}void Vector::set_y(double n1,double n2){y=n1*sin(n2);}Vector:: Vector(){x=y=0.0;mode=RECT;}Vector::Vector(double n1,double n2,Mode form){mode=form;if(form==RECT){x=n1;y=n2;}else if (form==POL){set_x(n1,n2);set_y(n1,n2);}else{cout<<"Incorrect 3rd argument to Vector() -- ";cout<<"Vector set to 0\n";x=y=0.0;mode=RECT;}}void Vector::reset(double n1,double n2,Mode form){mode=form;if (form==RECT){x=n1;y=n2;}else if(form==POL){set_x(n1,n2);set_y(n1,n2);}else{cout<<"Incorrect 3rd argument to Vector() -- ";cout<<"Vector set to 0\n";x=y=0.0;mode=RECT;}}Vector::~Vector(){}void Vector::polar_mode(){mode=POL;}void Vector::rect_mode(){mode=RECT;}Vector Vector::operator+(const Vector & b)const{return Vector(x+b.x,y+b.y);}Vector Vector::operator-(const Vector & b)const{return Vector(x-b.x,y-b.y);}Vector Vector::operator-()const{return Vector(-x,-y);}Vector Vector::operator*(double n)const{return Vector(n*x,n*y);}Vector operator*(double n,const Vector & a){return a*n;}std::ostream & operator<<(std::ostream & os,const Vector & v) {if(v.mode==Vector::RECT)os<<"(x,y) = ("<<v.x<<","<<v.y<<")";else if(v.mode==Vector::POL){os<<"(m,a)=("<<v.magval()<<","<<v.angval()*Rad_to_deg<<")";}elseos<<"Vector object mode is invalid";return os;}double Vector:: magval() const{return sqrt(x*x+y*y);}double Vector:: angval() const{if(x==0.0&&y==0.0)return 0.0;elsereturn atan2(y,x);}}main.cpp#include<iostream>#include<cstdlib>#include<ctime>#include"vector.h"int main(){using namespace std;using VECTOR::Vector;srand(time(0));double direction;Vector step;Vector result(0.0,0.0);unsigned long steps=0;double target;double dstep;int times;unsigned long stepsmin=99999;unsigned long stepsmax=0;int total=0;cout<<"enter an integer for recycling: ";cin>>times;cout<<"enter target distance (q to quit): ";cin>>target;cout<<"enter step length: ";cin>>dstep;int jiang=0;for(int i=0;i<times;i++){//while()//{//cout<<"enter step length: ";//if(!(cin>>dstep))// break;while(result.magval()<target){direction=rand()%360;step.reset(dstep,direction,Vector::POL);result=result+step;steps++;}if (stepsmax<steps)stepsmax=steps;if(stepsmin>steps)stepsmin=steps;total+=steps;result.reset(0.0,0.0);steps=0;}cout<<"\nconclusion:"<<endl;cout<<times<<" times"<<endl<<"max steps: "<<stepsmax;cout<<"\nmin steps: "<<stepsmin<<endl;cout<<"average steps: "<<total/times;//cout<<"\nAfter "<<steps<<" steps,the subject has the following location: \n"<<result;//result.polar_mode();//cout<<"\nor\n"<<result<<endl;//cout<<"Average outward distance per step = "<<result.magval()/steps<<endl;//steps=0;//result.reset(0.0,0.0);//cout<<"enter target distance(q to quit): ";cout<<"\nbye!";cin.clear();/*while(cin.get()!='\n')continue;*/cin.get();cin.get();return 0;}11.4time.h#include<iostream>class time{private:int hours;int minutes;public:time();time(int h,int m=0);void addmin(int n);void addhr(int h);void reset(int h=0,int m=0);friend time operator+(const time & s,const time & t);friend time operator-(const time & s,const time & t);friend time operator*(double n,const time & t);friend std::ostream & operator<<(std::ostream &os,const time & t);};time.cpp#include"time.h"time::time(){hours=minutes=0;}time::time(int h,int m) {hours=h;minutes=m;}void time::addmin(int m) {minutes+=m;hours+=minutes/60;minutes%=60;}void time::addhr(int h) {hours+=h;}void time::reset(int h,int m){hours=h;minutes=m;}time operator+(const time & s,const time & t) {time o;int tot1,tot2;tot1=s.minutes+s.hours*60;tot2=t.minutes+60*t.hours;o.hours=(tot1+tot2)/60;o.minutes=(tot1+tot2)%60;return o;}time operator-(const time & s,const time & t) {time o;int tot1,tot2;tot1=s.minutes+s.hours*60;tot2=t.minutes+60*t.hours;o.hours=(tot1-tot2)/60;o.minutes=(tot1-tot2)%60;return o;}time operator*(double n,const time & t) {time o;long tot1;tot1=t.minutes*n+t.hours*n*60;o.hours=tot1/60;o.minutes=tot1%60;return o;}std::ostream & operator<<(std::ostream & os,const time & t){os<<t.hours<<" hours, "<<t.minutes<<" minutes";return os;}main.cpp#include<iostream>#include"time.h"int main(){using std::cout;using std::cin;using std::endl;time aida(3,35);time tosca(2,48);time temp;cout<<"aida and tosca:\n";cout<<aida<<"; "<<tosca<<endl;temp=aida+tosca;cout<<"aida+tosca: "<<temp<<endl;temp=1.17*aida;cout<<"aida * 1.17: "<<temp<<endl;cout<<"10.0 * tosca: "<<10.0 * tosca<<endl;cin.get();return 0;}11.5stonewt.h#include<iostream>class stonewt{public:enum Mode{STONE,IP,FP};static const int Per=14;private:int stone;double pds_left;double pounds;Mode mode;public:stonewt(double lbs,Mode form=FP);stonewt(int stn, double lbs, Mode form=STONE);stonewt();~stonewt();void STONE_mode(){mode=STONE;};void IP_mode(){mode=IP;};void FP_mode(){mode=FP;};friend stonewt operator+(const stonewt & s,const stonewt & t);friend stonewt operator-(const stonewt & s,const stonewt & t);friend stonewt operator*(double n,const stonewt & t);friend std::ostream & operator<<(std::ostream & os,const stonewt & v);};stone.cpp#include<iostream>#include"stonewt.h";using namespace std;stonewt::stonewt(double lbs,Mode form){stone=int(lbs)/Per;pds_left=int(lbs)%Per+lbs-int(lbs);pounds=lbs;mode=form;}stonewt:: stonewt(int stn, double lbs,Mode form) {stone=stn;pds_left=lbs;pounds=stn*Per+lbs;mode=form;}stonewt:: stonewt(){stone=pounds=pds_left=0;Mode mode=FP;}stonewt:: ~stonewt(){}stonewt operator+(const stonewt & s,const stonewt & t){stonewt o;int tot1;double tot2;tot1=s.stone+t.stone;tot2=s.pds_left+t.pds_left;o.stone=tot1+int(tot2)/stonewt::Per;o.pds_left=int(tot2)%stonewt::Per+tot2-int(tot2);o.pounds=s.pounds+t.pounds;return o;}stonewt operator-(const stonewt & s,const stonewt & t){double tot1;tot1=s.pounds-t.pounds;stonewt o(tot1);return o;}stonewt operator*(double n,const stonewt & t) {double tot1;tot1=t.pounds*n;stonewt o(tot1);return o;}std::ostream & operator<<(std::ostream & os, const stonewt & v){using namespace std;if(v.mode==stonewt::FP){os<<"show weight in float pounds: "<<endl;os<<v.pounds<<" pounds\n";}else if(v.mode==stonewt::IP){os<<"show weight in integer pounds: "<<endl;os<<int(v.pounds)<<" pounds\n";}else{os<<"show weight in stones: "<<endl;os<<v.stone<<" stone, "<<v.pds_left<<"pounds\n";}return os;}main.cpp#include<iostream>#include"stonewt.h"int main(){using namespace std;stonewt one(285.7);stonewt two(21,8);stonewt three;stonewt four;cout<<"one weighed: "<<endl;cout<<one<<endl;one.STONE_mode();cout<<one<<endl;one.IP_mode();cout<<one<<endl;cout<<"two weighed: "<<endl;cout<<two<<endl;three=one+two;cout<<"one+two weighted: "<<endl; cout<<three<<endl;four=two-one;cout<<"two-one weighted: "<<endl; cout<<four<<endl;cout<<"2*(two-one) weighted: "<<endl; cout<<2*four;cout<<"\ndone!";cin.get();return 0;}11.6stonewt.h#include<iostream>class stonewt{public:enum Mode{STONE,IP,FP};static const int Per=14;private:int stone;double pds_left;double pounds;Mode mode;public:stonewt(double lbs,Mode form=FP);stonewt(int stn, double lbs, Mode form=STONE);stonewt();~stonewt();void STONE_mode(){mode=STONE;};void IP_mode(){mode=IP;};void FP_mode(){mode=FP;};friend stonewt operator+(const stonewt & s,const stonewt & t);friend stonewt operator-(const stonewt & s,const stonewt & t);friend stonewt operator*(double n,const stonewt & t);friend bool operator<(const stonewt & s,const stonewt & t){return s.pounds<t.pounds;}friend bool operator>(const stonewt & s,const stonewt & t){return s.pounds>t.pounds;}friend bool operator==(const stonewt & s,const stonewt & t){return s.pounds==t.pounds;}friend std::ostream & operator<<(std::ostream & os,const stonewt & v);};stonewt.cpp#include<iostream>#include"stonewt.h";using namespace std;stonewt::stonewt(double lbs,Mode form){stone=int(lbs)/Per;pds_left=int(lbs)%Per+lbs-int(lbs);pounds=lbs;mode=form;}stonewt:: stonewt(int stn, double lbs,Mode form) {stone=stn;pds_left=lbs;pounds=stn*Per+lbs;mode=form;}stonewt:: stonewt(){stone=pounds=pds_left=0;Mode mode=FP;}stonewt:: ~stonewt(){}stonewt operator+(const stonewt & s,const stonewt & t) {stonewt o;int tot1;double tot2;tot1=s.stone+t.stone;tot2=s.pds_left+t.pds_left;o.stone=tot1+int(tot2)/stonewt::Per;o.pds_left=int(tot2)%stonewt::Per+tot2-int(tot2);o.pounds=s.pounds+t.pounds;return o;}stonewt operator-(const stonewt & s,const stonewt & t) {double tot1;tot1=s.pounds-t.pounds;stonewt o(tot1);return o;}stonewt operator*(double n,const stonewt & t){double tot1;tot1=t.pounds*n;stonewt o(tot1);return o;}std::ostream & operator<<(std::ostream & os, const stonewt & v){using namespace std;if(v.mode==stonewt::FP){os<<"show weight in float pounds: "<<endl;os<<v.pounds<<" pounds\n";}else if(v.mode==stonewt::IP){os<<"show weight in integer pounds: "<<endl;os<<int(v.pounds)<<" pounds\n";}else{os<<"show weight in stones: "<<endl;os<<v.stone<<" stone, "<<v.pds_left<<" pounds\n";}return os;}main.cpp#include<iostream>#include"stonewt.h"int main(){using namespace std;stonewt arr[6]={stonewt(11,0.0),stonewt(21,8.0),(129)};for(int i=0;i<3;i++)cout<<arr[i];for(int i=3;i<6;i++){cout<<"input other 3 value: ";double a;cin>>a;arr[i]=a;}stonewt max=-999;stonewt min=999;stonewt middle=(11,0.0);int num=0;for(int i=0;i<6;i++){if(max<arr[i])max=arr[i];if(min>arr[i])min=arr[i];if(arr[i]==middle)num++;}cout<<"max: "<<max<<endl;cout<<"min: "<<min<<endl;cout<<"the number of stonewt which exceed 11 stone: "<<num;cout<<"\ndone!";cin.get();cin.get();return 0;}11.7complex0.h#include<iostream>class complex0{private:double a;double b;public:complex0();complex0(double n1,double n2);~complex0();complex0 operator+(const complex0 & s)const;complex0 operator-(const complex0 & s)const;complex0 operator*(const complex0 & s)const;complex0 operator*(double n)const;complex0 operator~()const;friend std::ostream & operator<<(std::ostream & os,const complex0 & s);friend std::istream & operator>>(std::istream & os, complex0 & s);};complex0.cpp#include<iostream>#include"complex0.h"complex0::complex0(){a=b=0;}complex0:: complex0(double n1,double n2){a=n1;b=n2;}complex0::~complex0(){}complex0 complex0:: operator+(const complex0 & s)const {complex0 tot;tot.a=a+s.a;tot.b=b+s.b;return tot;}complex0 complex0:: operator-(const complex0 & s)const {complex0 tot;tot.a=a-s.a;tot.b=b-s.b;return tot;}complex0 complex0:: operator*(const complex0 & s)const {complex0 tot;tot.a=a*s.a-b*s.b;tot.b=a*s.b+b*s.a;return tot;}complex0 complex0:: operator*(double n) const{complex0 tot;tot.a=a*n;tot.b=b*n;return tot;}complex0 complex0:: operator~()const{complex0 tot;tot.a=a;tot.b=-b;return tot;}std::ostream & operator<<(std::ostream & os,const complex0 & s){os<<"("<<s.a<<","<<s.b<<"i)";return os;}std::istream & operator>>(std::istream & os,complex0 & s) {using namespace std;double x;double y;cout<<"real: ";os>>x;cout<<"imaginary: ";os>>y;s.a=x;s.b=y;return os;}main.cpp#include<iostream>#include"complex0.h"using namespace std;int main(){complex0 a(3.0,4.0);complex0 c;cout<<"enter a complex number (q to quit):\n";while(cin>>c){cout<<"c is "<<c<<'\n';cout<<"complex conjugate is "<<~c<<'\n';cout<<"a is "<<a<<"\n";cout<<"a+c is "<<a+c<<'\n';cout<<"a-c is "<<a-c<<'\n';cout<<"a*c is "<<a*c<<'\n';cout<<"2*c is "<<c*2<<'\n';cout<<"enter a complex number (q to quit):\n";}cout<<"Done!\n";cin.get();cin.get();}12.1cow.hclass cow{char name[20];char* hobby;double weight;public:cow();cow(const char * nm,const char *ho ,double wt);cow(const cow & c);~cow();cow & operator=(const cow & c);void showcow() const;};cow.cpp#include<iostream>#include"cow.h"#include<cstring>cow:: cow(const char * nm,const char *ho ,double wt) {std::strcpy(name,nm);int len=std::strlen(ho);hobby=new char[len+1];std::strcpy(hobby,ho);weight=wt;}cow:: cow(){std::strcpy(name,"none");hobby= new char[1];hobby[0]='\0';weight=0;}cow:: cow(const cow & c){std::strcpy(name,);int len=strlen(c.hobby);hobby=new char[len+1];std::strcpy(hobby,c.hobby);weight=c.weight;}cow:: ~cow(){delete[] hobby;}cow & cow:: operator=(const cow & c) {if(this==&c)return *this;delete [] hobby;strcpy(name,);int len=strlen(c.hobby);hobby=new char[len+1];strcpy(hobby,c.hobby);weight=c.weight;return *this;}void cow:: showcow() const{using namespace std;cout<<"\nshow: "<<endl;cout<<"name: "<<name<<endl;cout<<"hobby: "<<hobby<<endl;cout<<"weight: "<<weight;}main.cpp。
C Primer Plus第六版中文版习题答案Github: /zhayujie/C-Primer-Plus第一章1.#include <stdio.h>int main(void) {double inch, cm;printf("Please input the inches: ");scanf("%lf", &inch);cm = inch * 2.54;printf("%g cm\n", cm);return 0;}第二章3.#include<stdio.h>int main(void){int days,years=21;days=years*365;printf("我的年龄是%d岁,%d天\n",years,days);return 0;}4.#include<stdio.h>void jolly(void);void deny(void);int main(void){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");}5.#include<stdio.h>void br(void);void ic(void);int main(void){br();printf(",");ic();printf("\n");ic();printf("\n");br();printf("\n");return 0;}void br(void){printf("Brazil,Russia");}void ic(void){printf("India,China");}6.#include<stdio.h>int main(void){int toes=10;int toes_2,toes2;toes_2=2*toes;toes2=toes*toes;printf("toes是%d,toes的两倍是%d,toes的平方是%d\n",toes,toes_2,toes2); return 0;}8.#include<stdio.h>void one_three(void);void two(void);int main(void){printf("starting now\n");one_three();}void one_three(void){printf("one\n");two();printf("three\n");printf("done!\n");}void two(void){printf("two\n");}第三章2.#include<stdio.h>int main(void){char ch;printf("please input a number:");scanf("%d",&ch);printf("%c\n",ch);return 0;}4.#include<stdio.h>int main(void){float a;printf("Enter a floating-point value: ");scanf("%f",&a);printf("fixed-point notation: %f\n",a);printf("exponential notation: %e\n",a);return 0;}5.#include<stdio.h>int main(void){int age;double seconds;printf("please input your age: ");scanf("%d",&age);seconds=age*3.156e7;printf("the corresponding seconds are: %e\n",seconds);return 0;}7.#include<stdio.h>int main(void){float inches,cms;printf("input your height(inch): ");scanf("%f",&inches);cms=inches*2.54;printf("your height(cm): %f\n",cms);return 0;}8.#include<stdio.h>int main(void){float pint,ounce,soupspoon,teaspoon,cup;printf("input the number of cups: ");scanf("%f",&cup);pint=cup/2;ounce=cup*8;soupspoon=ounce*2;teaspoon=soupspoon*3;printf("they are equivalent of:\n%f pint\n%f ounce\n%f soupspoons\n%f teaspoons\n",pint,ounce,soupspoon,teaspoon);return 0;}第四章1.#include<stdio.h>int main(void){char firstname[40],lastname[40];printf("Input your firstname: ");scanf("%s",firstname);printf("Input your lastname: ");scanf("%s",lastname);printf("Your name is %s,%s\n",firstname,lastname);return 0;}2.#include<stdio.h>#include<string.h>int main(void){char name[40];int width;printf("Input your name: ");scanf("%s",name);width=strlen(name)+3;printf("%*s\n",width,name); //输入的名和姓中间不能分隔return 0;}4.#include<stdio.h>int main(void){float height;char name[40];printf("Input your height(cm) and name: ");scanf("%f%s",&height,name);height=height/100;printf("%s, you are %.3fm tall\n",name,height);return 0;}5.#include<stdio.h>int main(void){float speed,size,time;printf("Input the download speed(Mb/s) and the file size(MB):\n"); scanf("%f%f",&speed,&size);time=size/speed*8.0;printf("At %.2f megabits per second, a file of %.2f megabytes\n",speed,size);printf("downloads in %.2f seconds.\n",time);return 0;}6.#include<stdio.h>#include<string.h>int main(void){char firstname[40],lastname[40];printf("Input your firstname: ");scanf("%s",firstname);printf("Input your lastname: ");scanf("%s",lastname);printf("%s %s\n",firstname,lastname);printf("%*d %*d\n",strlen(firstname),strlen(firstname),strlen(lastname),strlen(lastname)); printf("%s %s\n",firstname,lastname);printf("%*d %*d\n",-strlen(firstname),strlen(firstname),-strlen(lastname),strlen(lastname) );return 0;}7.#include<stdio.h>#include<float.h>int main(void){double a=1.0/3.0;float b=1.0/3.0;printf("%.6f %.6f\n",a,b); //左侧double型右侧float型printf("%.12f, %.12f\n",a,b);printf("%.16f, %.16f\n",a,b);printf("DBL_DIG: %d\n",DBL_DIG);printf("FLT_DIG: %d\n",FLT_DIG);return 0;}8.#include<stdio.h>#define GALLON 3.758 //1 gallon=3.785 liters#define MILE 1.609 //1 mile=1.609 kilometersint main(void){float gallon,mile;printf("Input miles and gallons: ");scanf("%f%f",&mile,&gallon);printf("Miles per gallon: %.1f\n",mile/gallon);printf("Litre per 100 kilometers: %.1f\n",gallon*GALLON/(mile*MILE)*100);return 0;}第五章1.#include<stdio.h>#define H_P_M 60 //1h=60minint main(void){int hour,min,left;printf("Enter the number of minutes: ");scanf("%d",&min);while(min>0){hour=min/H_P_M;left=min%H_P_M;printf("%d minutes is %d hours and %d minutes.\n",min,hour,left); printf("Enter your next value: ");scanf("%d",&min);}printf("Good bye!\n");return 0;}2.#include<stdio.h>int main(void){int num,count;printf("Input a integer: ");scanf("%d",&num);count=0;while(count++<11){printf("%d ",num);num++;}printf("\n");return 0;}3.#include<stdio.h>#define DAYS_PER_WEEK 7 //一周7天int main(void){int day,week,left;printf("Input the number of days: ");scanf("%d",&day);while(day>0){week=day/DAYS_PER_WEEK;left=day%DAYS_PER_WEEK;printf("%d days are %d weeks, %d days.\n",day,week,left); printf("Next input: ");scanf("%d",&day);}return 0;}4.#include<stdio.h>#define CM_PER_FEET 30.48 //1feet=30.48cm#define CM_PER_INCH 2.54 //1inch=2.54cmint main(void){int feet;float cm,inch;printf("Enter a height in centimeters: ");scanf("%f",&cm);while(cm>0){feet=(int)(cm/CM_PER_FEET);inch=(cm-feet*CM_PER_FEET)/CM_PER_INCH;printf("%.1f cm = %d feet, %.1f inches\n",cm,feet,inch); printf("Enter a height in centimeters (<=0 to quit): "); scanf("%f",&cm);}printf("bye\n");return 0;}5.#include<stdio.h>int main(void){int count,sum,days;printf("Input the number of days: ");scanf("%d",&days);count=sum=0;while(count++<days)sum=sum+count;printf("The money you earned: %d\n",sum);return 0;}6.#include<stdio.h>int main(void){int count,sum,days;printf("Input the number of days: ");scanf("%d",&days);count=sum=0;while(count++<days)sum=sum+count*count;printf("The money you earned: %d\n",sum);return 0;}7.#include<stdio.h>void cube(double n);int main(void){double num;printf("Input a number: ");scanf("%lf",&num);cube(num);}void cube(double n){printf("The cube of %f is %f\n",n,n*n*n);}8.#include<stdio.h>int main(void){int num1,num2;printf("This program computes moduli.\n");printf("Enter an integer to serve as the second operand: ");scanf("%d",&num1);printf("Now enter the first operand: ");scanf("%d",&num2);while(num2>0){printf("%d %% %d is %d\n",num2,num1,num2%num1);printf("Enter next number for first operand (<= 0 to quit): "); scanf("%d",&num2);}printf("Done\n");}9.#include<stdio.h>void Temperatures(double fah);int main(void){double fah,cel,kel;//华氏温度,摄氏温度,开氏温度printf("Input the Fahrenheit temperature: ");while(scanf("%lf",&fah)==1){Temperatures(fah);printf("Next input: ");}printf("Done.\n");}void Temperatures(double fah){const double a=5.0,b=9.0,c=32.0,d=276.13; printf("%.2f ℉ is %.2f ℃, %.2f K.\n",fah,a/b*(fah-c),a/b*(fah-c)+d);}第六章1.#include<stdio.h>#define SIZE 26int main(void){char ch[SIZE];int index;for(index=0;index<SIZE;index++){ch[index]='a'+index;printf("%c ",ch[index]);}printf("\n");return 0;}2.#include<stdio.h>int main(void){int i,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)printf("$");printf("\n");}return 0;}3.#include<stdio.h>int main(void){int i,j;for(i=1;i<=6;i++){for(j=0;j<i;j++)printf("%c",'F'-j); printf("\n");}return 0;}4.#include<stdio.h>#define ROWS 6int main(void){char ch;int i,j;for(ch='A',i=0;i<ROWS;i++) {for(j=0;j<=i;j++)printf("%c",ch++); printf("\n");}return 0;}5.#include<stdio.h>#define ROWS 5int main(void){char ch='A';int i,j;for(i=1;i<=ROWS;i++){for(j=1;j<=ROWS-i;j++)printf(" ");for(j=0;j<i;j++)printf("%c",ch+j);for(j=i-2;j>=0;j--)printf("%c",ch+j);printf("\n");}return 0;}6.#include<stdio.h>int main(void){int max,min,num;printf("Input the min and max: ");scanf("%d%d",&min,&max);printf("%10s%10s%10s\n","number","square","cube");for(num=min;num<=max;num++)printf("%10d%10d%10d\n",num,num*num,num*num*num); return 0;}7.//与题目不同打印的是句子#include<stdio.h>#include<string.h>#define SIZE 40int main(void){int i,index=-1;char ch[SIZE];printf("Input a word: ");do{ index++;scanf("%c",&ch[index]);}while(ch[index]!='\n');for(i=index+1;i<=40;i++)ch[i]='\0';for(index=strlen(ch);index>=0;index--)printf("%c",ch[index]);printf("\n");return 0;}8.#include<stdio.h>int main(void){double n1,n2;printf("Input two numbers: ");while(2==scanf("%lf%lf",&n1,&n2)){printf("%f\n",(n1-n2)/n1*n2);printf("Input your next pair of numbers: ");}printf("Bye!\n");return 0;}9.#include<stdio.h>double calculate(double n1, double n2);int main(void){double num1, num2;printf("Input two numbers: ");while (2 == scanf("%lf%lf", &num1, &num2)) //输入两个浮点数 {printf("%f\n", calculate(num1, num2)); //函数调用printf("Input your next pair of numbers: ");}printf("Bye!\n");return 0;}double calculate(double n1, double n2){return ((n1 - n2) / (n1 * n2)); //返回运算结果}10.#include <stdio.h>int main(void){int lower, upper;int num, sum;printf("Enter lower and upper integer limits: ");scanf("%d%d", &lower, &upper);while (lower < upper){for (sum=0, num=lower; num <= upper; num++)sum = sum + num * num; //计算平方和printf("The sums of the squares from %d to %d is %d\n", lower * lower, upper * upper, sum); //输出结果printf("Enter next set of limits: ");scanf("%d%d", &lower, &upper); //下一次输入}printf("Done\n");return 0;}11.#include <stdio.h>#define SIZE 8int main(void){int num[SIZE];int index;printf("Enter 8 integers: ");for (index=0; index<SIZE; index++) //输入8个整数scanf("%d", &num[index]);for (index=SIZE-1; index >= 0; index--) //倒序输出printf("%d ", num[index]);printf("\n");return 0;}12.#include <stdio.h>int main(void){double sum1=0, sum2=0;int count, items, sign;printf("Enter the items: ");scanf("%d", &items); //输入序列的项数for (count=1, sign=1; count <= items; count++, sign *= -1){sum1 += 1.0 / count;sum2 += 1.0 * sign / count;} //分别计算两序列的和 printf("1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 + ... = %f\n", sum1); printf("1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 + ... = %f\n", sum2);return 0;}13.#include <stdio.h>#define SIZE 8int main(void){int index, count, num[SIZE];for (index = 0, count = 1; index < SIZE; index++){count *= 2;num[index] = count;} //for循环将数组元素设为2的前8次幂 index=0; //初始化index的值doprintf("%d ", num[index++]);while (index < SIZE); //do while循环显示数组元素的值printf("\n");return 0;}14.#include <stdio.h>#define SIZE 8int main(){double num1[SIZE], num2[SIZE];int index1, index2, index;printf("Enter 8 numbers to the first array:\n");for (index1 = 0; index1 < SIZE; index1++)scanf("%lf", &num1[index1]); //向第一个数组输入8个数 num2[0] = num1[0];for (index1 = 1, index2 = 1; index1 < SIZE; index1++, index2++) num2[index2] = num2[index2-1] + num1[index1];//为第二个数组赋值(是第一个数组对应的元素之和)printf("The first array: ");for (index=0; index < SIZE; index++) {printf("%6.2f", num1[index]);} //输出第一个数组的内容 printf("\nThe second array: ");for (index=0; index < SIZE; index++) {printf("%6.2f", num2[index]); //输出第二个数组的内容 }printf("\n");return 0;}15.#include <stdio.h>#include <string.h>#define SIZE 255int main(void){int index;char ch[SIZE];printf("Enter a line: ");for(index = 0, scanf("%c", &ch[0]); ch[index] != '\n';){index++;scanf("%c", &ch[index]);} //输入内容到字符数组中,回车时结束for(index += 1; index < SIZE; index++)ch[index] = '\0'; //将数组剩余空间补充为'\0'for(index = strlen(ch); index >=0; index--)printf("%c", ch[index]); //倒序输出内容printf("\n");return 0;}16.#include <stdio.h>#define RATE_DAPHNE 0.1#define RATE_DEIRDRE 0.05 //两人的利率#define MONEY 100int main(void){int year;double daphne = MONEY, deirdre = MONEY; //两人的初始投资额相同for (year = 1; daphne >= deirdre; year++){daphne += MONEY * RATE_DAPHNE;deirdre += deirdre * RATE_DEIRDRE;}//计算Deirdre投资额超过Daphne需要的年数和当时的金额printf("After %d year, Deirdre's investment will be more than Daphne's,\n""Daphne's investment will be $%lf,\nand Deirdre's investment will be $%lf.\n",year, daphne, deirdre); //输出结果return 0;}17.#include <stdio.h>#define INITIAL_MONEY 100 //账户初始金额为100万元#define ANNUAL_RATE 0.08 //年利率为8%int main(void){int year;double money;for(year = 1, money=INITIAL_MONEY; money>0; year++)money += money * ANNUAL_RATE - 10; //计算每年年终的账户余额printf("After %d years, Chuckie will draw all money from his account.\n", year);return 0;}18.#include <stdio.h>#define INITIAL_NUMBER 5 //初始朋友数为5人#define DUNBAR_NUMBER 150 //邓巴数int main(void){int week;int number = INITIAL_NUMBER;for (week = 1; number <= DUNBAR_NUMBER; week++){number = (number - week) * 2; //计算每周的朋友数量printf("After %d week, the number of Rabnud's friends is %d\n", week, number);}return 0;}第七章1.#include <stdio.h>int main(void){char ch;int n_space = 0; //空格数int n_newline = 0; //换行数int n_others = 0; //其他字符数printf("Enter some text; Enter # to quit.\n"); while ((ch = getchar()) != '#'){if (ch == ' ')n_space++;else if (ch == '\n')n_newline++;elsen_others++;}printf("Spaces: %d, newlines: %d, others: %d\n", n_space, n_newline, n_others);return 0;}2.#include <stdio.h>#define CHARS_PER_LINE 8 //每行字符数int main(void){char ch;int n_chars = 1; //字符数printf("Enter some characters(# to quit):\n"); while ((ch = getchar()) != '#'){printf("%3c(%3d) ", ch, ch);if (n_chars++ % CHARS_PER_LINE == 0)printf("\n");}printf("\n");return 0;}3.#include <stdio.h>int main(void){int num;int n_even = 0, n_odd = 0; //偶数和奇数个数int sum_even = 0, sum_odd = 0; //偶数和奇数和printf("Enter some integers(0 to quit):\n");scanf("%d", &num);while (num != 0){if (num % 2 == 0){n_even++;sum_even += num;} //计算偶数个数和偶数和else{n_odd++;sum_odd +=num;} //计算奇数个数和奇数和scanf("%d",&num);}printf("The number of even numbers is %d, ""and the everage of even numbers is %.2f\n",n_even, (n_even == 0) ? 0 : (float)sum_even / n_even); printf("The number of odd numbers is %d, ""and the everrage of odd numers is %.2f\n",n_odd, (n_odd == 0) ? 0 : (float)sum_odd / n_odd);return 0;}4.#include <stdio.h>int main(void){char ch;int n_repl = 0; //替换次数printf("Enter some texts(# to quit):\n");while ((ch = getchar()) != '#') {if (ch == '.'){ch = '!';n_repl++;} //替换句号else if (ch == '!'){printf("!");n_repl++;} //替换感叹号printf("%c", ch);}printf("\n%d substitutions were made.\n", n_repl);return 0;}5.#include <stdio.h>int main(void){char ch;int n_repl = 0; //替换次数printf("Enter some texts(# to quit):\n");while ((ch = getchar()) != '#') {switch (ch){case '.': ch = '!';n_repl++;break;case '!': printf("!");n_repl++;break;default: break;} //利用switch语句进行替换 printf("%c",ch);}printf("\n%d substitutions were made.\n", n_repl);return 0;}6.#include <stdio.h>int main(void){char ch;char last_ch = 0; //前一个字符int count=0;printf("Enter some texts(# to quit):\n");while ((ch = getchar()) != '#'){if ((ch == 'i') && (last_ch == 'e'))count++;last_ch = ch; //出现ei时,计数+1}printf("\"ei\" appeared %d times.\n", count);return 0;}7.#include <stdio.h>#define BASE 1000 //基本工资 100美元/h#define TIME 40 //超过40h为加班#define MUL 1.5 //加班时间算作平时的1.5倍#define RATE1 0.15 //前300美元的税率#define RATE2 0.2 //300-450美元的税率#define RATE3 0.25 //大于450美元的税率#define BREAK1 300 //税率的第一个分界点#define BREAK2 450 //税率的第二个分界点int main(void){double hour, tax, gross;printf("Input your work hours in a week: ");scanf("%lf", &hour);if (hour <= TIME)gross = hour * BASE;elsegross = TIME * BASE + (hour - TIME) * MUL * BASE; //计算总收入if (gross <= BREAK1)tax = gross * RATE1;else if (gross <= BREAK2)tax = BREAK1 * RATE1 + (gross - BREAK1) * RATE2;elsetax = BREAK1 * RATE1 + (BREAK2 - BREAK1) * RATE2+ (gross - BREAK2) * RATE3;//计算税金printf("Your gross income is $%.2lf\nYour tax is $%.2lf\n""Your net income is $%.2lf\n",gross, tax, (gross - tax));return 0;8.#include <stdio.h>#define BASE1 8.75#define BASE2 9.33#define BASE3 10.00#define BASE4 11.20//四种等级的基本工资#define TIME 40 //超过40h为加班#define MUL 1.5 //加班时间算作平时的1.5倍#define RATE1 0.15 //前300美元的税率#define RATE2 0.2 //300-450美元的税率#define RATE3 0.25 //大于450美元的税率#define BREAK1 300 //税率的第一个分界点#define BREAK2 450 //税率的第二个分界点int main(void){double base, hour, tax, gross;int count, num;const int LENGTH = 65; //*的长度printpart: for (count = 0; count < LENGTH; count++)printf("*");printf("\nEnter the number corresponding to the desired pay rate or action:\n");printf("%-36s%s","1) $8.75/hr", "2) $9.33/hr\n");printf("%-36s%s","3) $10.00/hr", "4) $11.20/hr\n");printf("%s\n", "5) quit");for (count = 0; count < LENGTH; count++)printf("*");printf("\n");//打印表格while (scanf("%d", &num) == 1) {switch (num){case 1: base = BASE1;break;case 2: base = BASE2;break;case 3: base = BASE3;break;case 4: base = BASE4;break;case 5: printf("quit.\n");return 0;default: printf("Please input the right option.\n");goto printpart;} //选择基本工资等级printf("Input your work hours in a week: ");scanf("%lf", &hour);if (hour <= TIME)gross = hour * base;elsegross = TIME * base + (hour - TIME) * MUL * base;//计算总收入if (gross <= BREAK1)tax = gross * RATE1;else if (gross <= BREAK2)tax = BREAK1 * RATE1 + (gross - BREAK1) * RATE2;elsetax = BREAK1 * RATE1 + (BREAK2 - BREAK1) * RATE2+ (gross - BREAK2) * RATE3;//计算税金printf("Your gross income is $%.2lf\nYour tax is $%.2lf\n" "Your net income is $%.2lf\n",gross, tax, (gross - tax));printf("\nYour next choice:\n");}return 0;}9.#include <stdio.h>int main(void){int div, prime;int num, count;int flag;printf("Input a positive integer: ");scanf("%d", &num);printf("The prime numbers in range:\n");for (prime = 2; prime <= num; prime++) //外层循环显示所有素数 {flag = 1;for (div = 2; (div * div) <= prime; div++){if (prime % div == 0)flag = 0;} //内层循环检验是否为素数 if (flag) //利用标记flag判断printf("%d ",prime);}printf("\n");return 0;}10.#include <stdio.h>#define RATE1 0.15#define RATE2 0.28#define SINGLE 17850 //单身人群的税率分界点#define HOST 23900 //户主人群的税率分界点#define MAR_SHA 29750 //已婚共有人群的分界点#define MAR_DEV 14875 //已婚离异人群的分界点int main(void){int num;double income, tax_break, tax;printpart: printf("Please enter Corresponding""figures to select the type\n");printf("1 single, 2 host, 3 married and shared, ""4 married but devoced and 5 to quit.\n");scanf("%d", &num);switch (num){case 1: tax_break = SINGLE;break;case 2: tax_break = HOST;break;case 3: tax_break = MAR_SHA;break;case 4: tax_break = MAR_DEV;break;case 5: printf("quit.\n");return 0;default: printf("Please input right number.");goto printpart; //回到输入阶段}printf("Enter your income: "); //指定种类和收入while (scanf("%lf", &income) == 1){if (income <= tax_break)tax = income * RATE1;elsetax = tax_break * RATE1 + (income - tax_break) * RATE2; //计算税金printf("The tax is $%.2lf.\n", tax);printf("Your next input: \n");goto printpart; //回到输入阶段}return 0;}11.#include <stdio.h>#include <ctype.h>#define ARTICHOKE 2.05 //洋蓟2.05美元/磅#define BEET 1.15 //甜菜1.15美元/磅#define CARROT 1.09 //胡萝卜1.09美元/磅#define DISCOUNT_LIMIT 100//包装费和运费打折要求订单100美元#define DISCOUNT_RATE 0.05 //折扣为%5#define BREAK1 5#define BREAK2 20 //装运费的分界点#define FEE1 6.5#define FEE2 14#define FEE3_RATE 0.5//不同重量区间的装运费,其中超过20磅的每续重一磅//增加0.5元int main(void){double weight;double weight_artichoke = 0;double weight_beet = 0;double weight_carrot = 0; //购买三种蔬菜的重量double total_weight; //总重量double veg_cost; //三种蔬菜总共花费double order_cost; //订单总额double total_cost; //费用总额double pack_tran_fee; //装运费double discount;int count = 0;char ch;printf("Please select the vegetables you want to buy:\n");printf("a: artichoke $%.2f/lb\n", ARTICHOKE);printf("b: beet $%.2f/lb\n", BEET);printf("c: carrot $%.2f/lb\n", CARROT);printf("q: quit.\n");//打印选择信息while ((ch = tolower(getchar())) != 'q'){// if (ch == '\n')// continue; //滤掉回车switch (ch){case 'a': printf("Input the weight of artichoke in pound: "); scanf("%lf", &weight);weight_artichoke += weight;count++;printf("Continue entering a, b, c or q: ");break;case 'b': printf("Input the weight of beet in pound: ");scanf("%lf", &weight);weight_beet += weight;count++;printf("Continue entering a, b, c or q: ");break;case 'c': printf("Input the weight of carrot in pound: ");scanf("%lf", &weight);weight_carrot += weight;count++;printf("Continue entering a, b, c or q: ");break;default: printf("Please enter the right character.");}while (getchar () != '\n')continue; //滤掉输入重量后面的所有字符}if (!count){printf("Bye.\n");return 0;} //开始输出q,直接退出total_weight = weight_artichoke + weight_beet + weight_carrot;veg_cost = weight_artichoke * ARTICHOKE + weight_beet * BEET+ weight_carrot * CARROT;discount = 0;if (veg_cost >= DISCOUNT_LIMIT){discount = veg_cost * DISCOUNT_RATE;order_cost = veg_cost - discount;}elseorder_cost = veg_cost; //折扣计算if (total_weight <= BREAK1)pack_tran_fee = FEE1;else if (total_weight <= BREAK2)pack_tran_fee = FEE2;elsepack_tran_fee = FEE2 + (total_weight - BREAK2) * FEE3_RATE;//装运费计算total_cost = order_cost + pack_tran_fee;printf("\nHere is what you choose:\n");if (weight_artichoke) {printf("artichoke Price: $%.2f/lb weight: %.2f pounds cost: $%.2f\n",ARTICHOKE, weight_artichoke, weight_artichoke * ARTICHOKE); }if (weight_beet) {printf("beet Price: $%.2f/lb weight: %.2f pounds cost: $%.2f\n",。
第二章:开始学习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 pergallon): 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=newcar[num];for(int i=0;i<num;++i){cout<<"Car #"<<i+1<<":\n";cout<<"Please enter the make: ";getline(cin,ps[i].name); c out<<"Pleaseenter 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;}#include <iostream>#include <string> usingnamespace std; structcar{string maker; intyear;};int main(){int number;cout << "How many cars do you wish to catalog "; cin >>number;car* a = new car[number];for (int i = 0; i < number; i++){cout << "Car #" << i+1 << ": " << endl; cout <<"Please enter the maker: "; ();getline(cin,a[i].maker);cout << "Please enter the year made: "; cin >>a[i].year;}cout << "Here is your collection: " << endl; for (inti = 0; i < number; i++)cout << a[i].year << " " << a[i].maker <<endl; delete [] a;return 0;}#include <iostream> usingnamespace std; struct car{char maker[20];int year;};int main(){int number;cout << "How many cars do you wish to catalog "; cin >>number;car* a = new car[number];for (int i = 0; i < number; i++){cout << "Car #" << i+1 << ": " << endl; cout <<"Please enter the maker: "; ();(a[i].maker, 20);cout << "Please enter the year made: "; cin >>a[i].year;}cout << "Here is your collection: " << endl; for (int i = 0; i < number; i++)cout << a[i].year << " " << a[i].maker <<endl; delete [] a;return 0;}n"; return 0;}n";return 0;}和的区别是:word != "done",因为当 word = done 一样时,返回值为1,不一样时才是返回0.;for(int k=0;k<=i;++k)cout<<"*";cout<<endl;}return 0;}第六章分支语句和逻辑运算符n"; break;case 'p':cout<<"A maple is a pianist.\n";break;case 't':cout<<"A maple is a tree.\n";break;case 'g':cout<<"A maple is a game.\n";}return 0;}#include <iostream> usingnamespace std; void show();int main(){show();char choice;while (cin >> choice){switch(choice){case 'c' : cout << "It's a carnivore.\n"; break;case 'p' : cout << "It's a pianist.\n"; break;case 't' : cout << "A maple is a tree.\n"; break;case 'g' : cout << "It's a game.\n"; break;default : cout << "Please enter a c, p, t, or g:";}}return 0;}void show(){cout << "Please enter one of the following choices: \n" "c) carnivore p) pianist\n""t) tree g) game\n";}display by name b. display by title\n"<<"c. display by bopname d. diplay by preference\n"<<"q. quit\n";char ch;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}};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; e lseif(member[i].preference==2)cout<<member[i].bopname<<endl;}break;}cout<<"Next choice: ";}cout<<"Bye!\n";return 0;}#include <iostream> usingnamespace std; const intstrsize = 30; struct bop{char fullname[strsize];char title[strsize]; charbopname[strsize]; intpreference;};void show(); intmain(){bop A[5] ={{"Wimp Macho", "Teacher", "HAHA", 0},{"Raki Rhodes", "Junior Programmer", "LIAR", 1},{"Celia", "engineer", "MIPS", 2},{"Hoppy Hipman", "Analyst Trainee", "WAHU", 1},{"Pat Hand", "Student", "LOOPY", 2}};cout << "Benevolent Order of Programmers Report\n"; show();cout << "Enter your choice: "; charchoice;cin >> choice;while (choice != 'q'){switch(choice){case 'a' : cout << A[0].fullname << endl << A[1].fullname << endl<< A[2].fullname << endl << A[3].fullname << endl<< A[4].fullname << endl; break;case 'b' : cout << A[0].title << endl << A[1].title << endl<< A[2].title << endl << A[3].title << endl<< A[4].title << endl;break;case 'c' : cout << A[0].bopname << endl << A[1].bopname << endl<< A[2].bopname << endl << A[3].bopname << endl<< A[4].bopname << endl; break;case 'd' : cout << A[0].fullname << endl << A[1].title << endl<< A[2].bopname << endl << A[3].title << endl<< A[4].bopname << endl;break;default : cout << "That's not the proper choice.\n";}cout << "Next choice: ";cin >> choice;}cout << "Bye!\n";return 0;}void show(){cout << "a. display by name b. display by title\n"<< "c. display by bopname d. display by preference\n"<< "q. quit\n";}ame); c out<<"请输入第"<<i+1<<"位捐款人捐款的数目:"; cin>>ps[i].money;();}cout<<"Grand Patrons:\n";for(int i=0;i<num;++i)if(ps[i].money>10000){cout<<ps[i].name<<"\n"<<ps[i].money<<endl;++temp;}if(temp==0)cout<<"none\n";cout<<"Patrons:\n";for(int i=0;i<num;++i)if(ps[i].money<=10000){cout<<ps[i].name<<"\n"<<ps[i].money<<endl;++temp;}if(temp==0)cout<<"none\n";delete [] ps;return 0;}#include <iostream>#include <string> usingnamespace std; structcharity{string name;double money;};int main(){int number; intcount = 0;cout << "Please enter the number of donator: "; cin >>number;charity *pt = new charity[number]; for(int i = 0; i < number; i++){cout << "Please enter your name: "; ();getline(cin, pt[i].name);cout << "Please enter the money you are going to donate: "; cin >>pt[i].money;if(pt[i].money > 10000)count++;}if(count == 0)cout << "None(money > 10000)"; else{cout << "Grand Patron\n"; for(int i =0; i < number; i++){if(pt[i].money > 10000)cout << pt[i].name << " " << pt[i].money << endl;}}cout << endl;if(10 - count == 0)cout << "None(money < 10000)"; else {cout << "Patron\n";for(int i = 0; i < number; i++){if(pt[i].money < 10000)cout << pt[i].name << " " << pt[i].money << endl;}}return 0;}n"; exit(EXIT_FAILURE);}inFile>>ch; while()){++sum;inFile>>ch;}if())cout<<"End of file reached.\n";else if())cout<<"Input terminated by data mismatch.\n";elsecout<<"Input terminated for unkonwn reason.\n";cout<<"总共有"<<sum<<"个字符在这个文件中。
//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;}。