第二章:开始学习 C++
#include
{
usingnamespace std; cout<<"My name is liao chunguang and I live in hunanchenzhou.\n”;
}
#include
{
usingnamespace std; cout<<"enter the distance measured by furlongunits:"; double fur; cin>>fur; cout<<"convert the furlongto yard"< } doublefur2yd(double t) { return220*t; } //ex2.3-每个函数都被调用两次 #include { mice();mice(); see(); see(); return 0; } void mice() { cout<<"threeblind mice"< } void see() { cout<<"seehow they run"< } #include { using namespace std; cout<<"Enter yourage:"; int age; cin>>age; int month; month=age*12;cout< } #include { usingnamespace std; cout<<"please enter a Celsius value:"; double C;cin>>C; double F; F=C2F(C); cout< } doubleC2F(double t) { return1.8*t+32; } #include { usingnamespace std; cout<<"Enter the number of light years:"; doublelight_years; cin>>light_years; double astro_units;astro_units=convert(light_years); cout< } double convert(double t) { return63240*t;//1 光年=63240天文单位 } //ex2.7--显示用户输入的小时数和分钟数 #include { usingnamespace std; show(); return 0; } void show() { usingnamespace std; int h,m; cout<<"enter the number of hours:";cin>>h; cout<<"enter the number of minutes:";cin>>m; cout<<"Time:"< } 第三章:处理数据 #include { usingnamespace std; cout<<"please enter your height ininches:___\b\b\b";// \b 表示为退格字符 int ht_inch;cin>>ht_inch; int ht_feet=ht_inch/inch_per_feet;//取商 intrm_inch=ht_inch%inch_per_feet;//取余 cout<<"your height is"< < } #include { using namespace std;cout<<"Please enter your height:"< cout<<"Second,enter yourheight of inch part(输入你身高的英寸部分):_\b";int ht_inch; cin>>ht_inch; cout<<"Now,pleaseenter your weight in pound:___\b\b\b"; double wt_pound;cin>>wt_pound; int inch; inch=ht_feet*inch_per_feet+ht_inch; doubleht_meter; ht_meter=inch*meter_per_inch; double wt_kilogram;wt_kilogram=wt_pound/pound_per_kilogram; cout< <<"体重:"< BMI=wt_kilogram/(ht_meter*ht_meter); cout<<"yourBody Mass Index(体重指数)is "< } //ex3.3 以度,分,秒输入,以度输出 #include { usingnamespace std; cout<<"Enter a latitude in degrees,minutes,andseconds:\n"; cout<<"First,enter the degrees:"; int degree;cin>>degree; cout<<"Next,enter the minutes of arc:"; intminute; cin>>minute; cout<<"Fianlly,enter the seconds ofarc:"; 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< ="< } #include { usingnamespace std; cout<<"Enter the number of seconds:"; longseconds; 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< } #include { using namespace std; cout<<"Enter theworld population:"; long long world_population;cin>>world_population; cout<<"Enter the population of theUS:"; long long US_population; cin>>US_population; double percentage;percentage=(double)US_population/world_population*100; cout<<"Thepopulation of the US is "< } #include { using namespace std;cout<<"Enter the miles of distance you have driven:"; doublem_distance; cin>>m_distance; cout<<"Enter the gallonsof gasoline you have used:"; double m_gasoline; cin>>m_gasoline; cout<<"Yourcar can run "< cout<<"Enterthe petrol in liters:"; double k_gasoline; cin>>k_gasoline; cout<<"InEuropean style:"<<"your can used"<<100*k_gasoline/k_distance<<" liters of petrol per 100kilometers\n"; return 0; } #include { usingnamespace std; cout<<"Enter the automobile gasoline consumptionfigure in\n" <<"Europeanstyle(liters per 100 kilometers):"; double Euro_style; cin>>Euro_style;cout<<"Converts to U.S. style(miles per gallon):"< } // Notethat 100 kilometers is 62.14 miles, and 1 gallon is 3.875 liters. //Thus, 19mpg is about 12.4 L/100Km, and 27 mpg is about 8.7 L/100Km. Enter the automobilegasoline consumption figure in European style(liters per 100 kilometers):12.4Converts to U.S. style(miles per gallon): 12.4 L/100Km =19.4187 mpg Press any key tocontinue #include { usingnamespace std; cout<<"Enterthe automobile gasoline consumption figure in\n" <<"U.S.style(miles per gallon):"; double US_style; cin>>US_style; cout<<"Convertsto European style(miles per gallon):"< } // Enter theautomobile gasoline consumption figure in U.S. style(miles pergallon):19 Converts to Europeanstyle(miles per gallon): 19mpg = 12.6733L/100Km Press any key to continue 第四章 复合类型 //ex4.1 display the information ofstudent #include { charfirstname[Asize]; char lastname[Asize]; char grade; int age; }; voiddisplay(student);//函数原型放在结构描述后 intmain() { cout<<"whatis your first name?"< studentlcg;//创建结构变量(结构数据对象) cin.getline(lcg.firstname,Asize);cout<<"what is your last name?"< } voiddisplay(student name) { cout<<"Name:"< } #include { usingnamespace std; stringname,dessert; cout<<"Enter your name: \n"; getline(cin,name); cout<<"Enteryour favorite dessert: \n"; getline(cin,dessert); cout<<"I have somedelicious "< } //有时候会遇到需要按下两次回车键才能正确的显示结果,这是 vc++6.0的一个 BUG,更改如下:else if (_Tr::eq((_E)_C,_D)) {_Chg =true; ex4.3 输入其名和姓,并组合显示 #include { usingnamespace std; char fname[Asize]; char lname[Asize]; char fullname[2*Asize+1]; cout<<"Enteryour first name:";//输入名字,存储在 fname[]数组中 cin.getline(fname,Asize); cout<<"Enteryour 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'sthe information in a single string:"< } #define _CRT_SECURE_NO_WARNINGS #include { usingnamespace std;char firstname[Asize];char lastname[50]; cout << "Enteryour first name: "; cin.getline(firstname,Asize); cout<< "Enter your last name: ";cin.getline(lastname,50); strcat(lastname,",");strncat(lastname,firstname,Asize); cout << "Here'sthe information in a single string: " << lastname< } //ex4.4 使用 string对象 存储、显示组合结果 #include { using namespace std; stringfname,lname,attach,fullname; cout<<"Enter your first name:";getline(cin,fname);//note:将一行输入读取到 string类对象中使用的是 getline(cin,str) //它没有使用句点表示法,所以不是类方法 cout<<"Enteryour last name:"; getline(cin,lname); attach=", ";fullname=lname+attach+fname; cout<<"Here'sthe information in a single string:"< } #include { char brand[Asize]; double weight;int calory; }; int main() { usingnamespace std; CandyBarsnack={"Mocha Munch",2.3,350}; cout<<"Here's theinformation of snack:\n";cout<<"brand:"< } //ex4.6 结构数组的声明及初始化 #include { char brand[Asize]; double weight;int calory; }; int main() { usingnamespace std; CandyBarsnack[3]={ {"MochaMunch",2.3,350}, {"XuFuJi",1.1,300}, {"Alps",0.4,100} }; for(inti=0;i<3;i++)//利用 for循环来显示 snack 变量的内容 { cout< < < } return 0; } #include charcompany[Size]; double diameter; double weight; }; int main() { usingnamespace std; pizzapie;//创建一个名为 pie的结构变量 cout<<"What'sthe name of pizza company:"; cin.getline(pie.company,Size);cout<<"What's the diameter of pizza:"; cin>>pie.diameter;cout<<"What's the weightof pizza:"; cin>>pie.weight; cout<<"company:"< } #include { charcompany[Size]; double diameter; double weight; }; int main() { usingnamespace 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 weightof pizza:"; cin>>pie->weight;cout<<"diameter:"< } #include { stringbrand; 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(inti=0;i<3;i++) { cout<< " brand: " << snack[i].brand << endl; cout<< " weight: " << snack[i].weight << endl; cout<< " calorie: " << snack[i].calory < } delete []snack; return 0; } #include { usingnamespace std; const int Size = 3; int success[Size]; cout<<"Enteryour success of the three times 40 meters running:\n"; cin >>success[0]>>success[1]>>success[2];cout<<"success1:"< } #include { usingnamespace std; array } 第五章 循环和关系表达式 #include int main() { using namespace std;cout<<"Please enter two integers: "; int num1,num2;cin>>num1>>num2; int sum=0; for(inttemp=num1;temp<=num2;++temp)//or temp++ sum+=temp; cout<<"The sumfrom "< } #include int main() { using namespace std; array 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<
return 0; } #include int main() { array<longdouble,101> multiply; multiply[0] = multiply[1] = 1LL; for (inti= 2; i <= 100; i++) multiply[i] = multiply[i-1]*i; cout < } #include { 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 "< } return 0; } #include { using namespace std; double sum1,sum2; sum1=sum2=0.0; intyear=0; while(sum2<=sum1) { ++year;sum1+=10; sum2=(100+sum2)*0.05+sum2; } cout<<"经过"< return 0; } #include { doubleDaphne= 100.0; double Cleo= 100.0; int year= 0; while (Cleo<= Daphne) { Daphne += 10; Cleo *=1.05; year++; } cout << year << endl; return0; } #include const char* months[MONTHS]={"January","February","March","April","May","June","July","August","September","October","November","December"}; intmain() { using namespace std; intsales[MONTHS],sum=0; for(int i=0;i { cout<<"请输入在"< } cout<<"这一年中的C++ For Fools的总销售量为:"< } #include const char* months[MONTHS]={"January","February","March","April","May","June","July","August","September","October","November","December"}; const char* years[3]={"第一年","第二年","第三年"}; int main() { using namespace std; intyear_sale[3],sum=0,sales[3][MONTHS]; for(int i=0;i<3;i++) { int temp=0;cout< { cout<<"请输入"< } year_sale[i]=temp; sum+=year_sale[i]; } for(int i=0;i<3;i++)cout< } #include { "January","February","March","April","May","June", "July","August","September","October","November","December"}; intmain() { intsale[Years][Months]= {0}; for (inti= 0; i < Years; i++) { int sum = 0; for(intj= 0; j < Months; j++) { cout << "Enterthe salesment of " << months[j] << ":";cin >> sale[i][j]; sum += sale[i][j]; } cout << "Salesmentfor this year: " << sum << endl < } #include { cout<<"How many cars do you wish to catalog? "; int num; (cin>>num).get(); car* ps=new car[num]; for(int i=0;i { cout<<"Car#"<
(cin>>ps[i].year).get(); } cout<<"Here is your collection:\n";for(int i=0;i } #include { string maker; intyear;}; int main(){ int number; cout<< "How many cars do you wish to catalog? "; cin >> number; car* a = newcar[number];for (inti= 0; i < number; i++) { cout << "Car#" <": " << endl; cout << "Pleaseenter the maker: "; cin.get(); 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 << "" <delete [] a; return0; } #include { char maker[20]; intyear;}; int main() { intnumber;cout << "How many cars do you wish to catalog? "; cin >> number; car* a = newcar[number];for (inti= 0; i < number; i++) { cout << "Car#" <": " << endl; cout << "Pleaseenter the maker: "; cin.get(); cin.getline(a[i].maker,20); cout << "Please enter the year made: "; cin >> a[i].year; } cout << "Hereis your collection: " << endl; for (int i = 0; i cout << a[i].year << "" <delete [] a; return0; } #include int main() { using namespace std; char word[20]; int sum=0; cout<<"Enterwords (to stop,type the word done):\n"; cin>>word;while(strcmp(word,"done")) { sum++; cin>>word; } cout<<"Youentered a total of "< } #include int main() { using namespace std; string word; intsum=0; cout<<"Enter words (to stop, type the word done):\n";cin>>word; while(word!="done") { sum++; cin>>word; } cout<<"Youentered a total of "< } 和 ex.5.8 的区别是:word != "done",因为当 word = done一样时,返回值为1,不一样时才是返回0. #include { using namespace std;cout<<"Enter number of rows:"; int num; cin>>num; for(int i=0;i { for(int j=num-i;j>1;j--) cout<<"."; for(int k=0;k<=i;++k)cout<<"*"; cout< } return 0; } 第六章 分支语句和逻辑运算符 #include int main() { using namespace std; char ch; cin.get(ch); while(ch!='@') { if(isdigit(ch)) cin.get(ch); else { if(islower(ch)) ch=toupper(ch); else ch=tolower(ch); cout< } } return 0; } #include int main() { charch;cout << "Please enter: \n"; while (cin.get(ch)&& ch != '@') { if(islower(ch)) { ch = toupper(ch); cout<< ch; } else if(isupper(ch)) { ch = tolower(ch); cout<< ch; } else cout << ch; } return0; } #include using namespace std; double sum=0,average=0; double num[10]; int i=0,total=0; double temp; while(cin>>temp&&i<10&&!isdigit(temp)) { num[i]=temp; sum+=num[i]; ++i; } if(i!=0) average=sum/i; for(int j=0;javerage) ++total; cout<<"这些数字的平均值为"< return 0; } #include { doubledonation[Num]; int i = 0; intcount=0; double sum= 0.0; cout << "Please enter: \n"; while(i < Num&& cin >> donation[i]) { sum += donation[i++]; } if(i == 0) cout << "Nodata--bye \n"; else { double average =sum/i; for (intj= 0; j < i; j++) { if(donation[j]> average) ++count; } cout << "Theaverage = " << average << endl << "Thenumbers bigger than the average: " << count << endl; } return 0; } #include #include { using namespace std; double sum=0,average=0; array int i=0,total=0; double temp; while(cin>>temp&&i<10&&!isdigit(temp)) { ad[i]=temp; sum+=ad[i]; ++i; } if(i!=0) average=sum/i; for(int j=0;javerage) ++total; cout<<"这些数字的平均值为"< return 0; } #include int main() { using namespace std; cout<<"Please enter one of the followingchoices:\n" <<"c)carnivore p)pianist\n" <<"t)tree g)game\nf\n"; //书上的这个f个人认为是打印错误 cout<<"Please enter a c, p,t, or g: "; char ch; 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 mapleis a carnivore.\n"; break; case 'p': cout<<"A maple isa pianist.\n"; break; case 't': cout<<"A maple isa tree.\n"; break; case 'g': cout<<"Amaple is a game.\n"; } return 0; }//ex2.4
//ex2.5---convert the Celsiusvalve to Fahrenheit value
//ex2.6---convert the light years valve to astronomical units--把光年转换为天文单位
//ex3.1—将身高用英尺(feet)和英寸(inch)表示
//ex3.2--计算相应的 bodymass index(体重指数)
//ex3.4
//ex3.5
//ex3.6 汽车耗油量-美国(mpg)or 欧洲风格(L/100Km)
//ex3.7 automobile gasoline consumption-耗油量--欧洲风格(L/100Km)转换成美国风格(mpg)
// ex3.7 automobile gasoline consumption-耗油量--美国风格(mpg)转换成欧洲风格(L/100Km)
//ex4.2 use the string-classinstead of char-array
_I.rdbuf()->sbumpc();//修改后的 break; }
//ex4.5 declare a struct and initialize it 声明结果并创建一个变量
//ex4.7 pizza 披萨饼
//ex4.8 pizza pie 披萨饼 使用 new创建动态结构
//ex.4.9 使用 new 动态分配数组—方法 1
//ex.4.10 数组—方法 1
//ex.4.10 array—方法 2
//ex.5.1
//ex.5.2
//ex.5.3
//ex.5.4
//ex.5.5
//ex.5.6
//ex.5.7
//ex.5.8
//ex.5.9
//ex.5.10
//ex.6.1
//ex.6.2--数组
//ex.6.2--array
//ex.6.3
#include
{ show(); charchoice;while (cin>> choice)
{ switch(choice)
{
case 'c':cout << break;
case 'p':cout << break;
case 't':cout << break;
case 'g':cout << break;
default : cout<<
}
} return0;}
void show()
{ cout<< "Please enter
"c)carnivore
"t)tree
}
#include
struct bop{
"It's acarnivore.\n";
"It's apianist.\n";
"Amaple is a tree.\n";
"It's agame.\n";"Please enter a c, p, t, or g:"; oneof the following choices: \n"
p)pianist\n"
g)game\n";
char fullname[strsize]; char title[strsize]; charbopname[strsize]; int preference;
}; int main()
{ using namespace std;
cout<<"Benevolent Order of ProgrammersReport\n"
<<"a. 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]={
{"WimpMacho","English Teacher","DEMON",0},
{"RakiRhodes","Junior Programmer","BOOM",1},
{"Celia Laiter","SuperStar","MIPS",2},
{"HoppyHipman","Analyst Trainee","WATEE",1},
{"PatHand","Police","LOOPY",2}
}; cout<<"Enter your choice:";while(cin>>ch&&ch!='q')
{ switch(ch)
{ case 'a':
for(int i=0;i<5;i++)cout< case 'b': for(int i=0;i<5;i++)cout< case 'c': for(int i=0;i<5;i++)cout< case 'd': for(int i=0;i<5;i++) { if(member[i].preference==0)cout< } break; } cout<<"Next choice: "; } cout<<"Bye!\n"; return 0; } #include }; voidshow();int main() { bopA[5]= { { "WimpMacho","Teacher", "HAHA", 0}, { "RakiRhodes","Junior Programmer", "LIAR", 1}, { "Celia", "engineer", "MIPS", 2}, { "HoppyHipman","Analyst Trainee", "WAHU", 1}, { "PatHand","Student", "LOOPY", 2} }; cout << "BenevolentOrder of Programmers Report\n"; show(); cout << "Enteryour choice: ";char choice;cin >> choice; while (choice!= 'q') { switch(choice) { case 'a':cout << A[0].fullname << endl << A[1].fullname << endl <
case 'b' : cout<< A[0].title << endl << A[1].title << endl << A[2].title << endl<< A[3].title << endl case'c' :cout << A[0].bopname << endl << A[1].bopname << endl cout << "a. display by name b. display by title\n" << "c. display by bopname << "q. quit\n"; d. display by preference\n" } #include { using namespace std; double income,revenue; cout<<"请输入你的收入:"; while(cin>>income&&income>=0) { if(income<=5000) revenue=0.0; elseif(income<=15000) revenue=0.1*(income-5000); else if(income<=35000)revenue=0.1*(15000-5000)+0.15*(income-15000); elserevenue=0.1*(15000-5000)+0.15*(35000-15000)+0.2*(income-35000); cout<<"你的所得税为"< cout<<"请输入你的收入:"; } return 0; } #include { double income,tax;cout << "Please enter your income: "; while (cin >>income && income >= 0) { if(income <=5000) tax = 0; else if(income <=15000) tax = 0.1*(income - 5000); else if(income <=35000) tax = 10000*0.1 + 0.15*(income - 15000); else tax =10000*0.1 + 0.15*20000 + 0.2*(income - 35000); cout << "Yourtax is: " < } cout << "Bye!\n"; return0; } #include }; int main() { int num,temp=0; cout<<"请输入捐款的人数:"; cin>>num; cin.get(); patron *ps=new patron[num]; for(int i=0;i { cout<<"请输入第"<
getline(cin,ps[i].name); cout<<"请输入第"<
cin>>ps[i].money; cin.get(); } cout<<"Grand Patrons:\n"; for(inti=0;i {cout< ++temp; } if(temp==0)cout<<"none\n"; cout<<"Patrons:\n"; for(inti=0;i {cout< ++temp; } if(temp==0)cout<<"none\n"; delete [] ps; return 0; } #include #include { stringname;double money; }; intmain() { intnumber;int count= 0; cout << "Please enter the number of donator: "; cin >>number; charity *pt = new charity[number]; for(inti= 0; i < number; i++) { cout << "Pleaseenter your name: "; cin.get(); 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 << "GrandPatron\n";for(inti= 0; i < number; i++) { if(pt[i].money> 10000) cout << pt[i].name << "" < } cout << endl; if(10 - count ==0) cout << "None(money < 10000)"; else { cout << "Patron\n"; for(inti= 0; i < number; i++) { if(pt[i].money< 10000) cout << pt[i].name << "" < } #include int main() { using namespace std; int vowel=0,consonant=0,other=0; charword[15]; cout<<"Enter words (q to quit):\n";while(cin>>word) { if(isalpha(word[0])) { if(word[0]=='q'&&strlen(word)==1)break; else if(word[0]=='a'||word[0]=='i'||word[0]=='u'||word[0]=='e'||word[0]=='o') ++vowel; else ++consonant; } else ++other; } cout< } #include { charword[20];int vow= 0, consonant = 0, other =0; cout << "Enterwords (q to quit):\n"; while(cin >>word) { if (isalpha(word[0])) { if(word[0] == 'a'||word[0] == 'e' ||word[0] == 'i'||word[0] == 'o'||word[0] == 'u' ||word[0] == 'A' ||word[0] == 'E' ||word[0] == 'I' ||word[0] == 'O' || word[0] == 'U') vow++; else if(word[0] == 'q'&&strlen(word) == 1) break; else consonant++; } else other++; } cout << vow<< " words beginning with vowels\n" << consonant<< " words beginning with consonants\n" << other << "others\n";return 0; } #include #include int main() { using namespace std; char ch; int sum=0; ifstream inFile; inFile.open("abc.txt");if(!inFile.is_open()) { cout<<"Could not open thefile \n"; cout<<"Program terminating.\n"; exit(EXIT_FAILURE); } inFile>>ch; while(inFile.good()) { ++sum;inFile>>ch; } if(inFile.eof()) cout<<"End of filereached.\n"; else if(inFile.fail()) cout<<"Input terminated bydata mismatch.\n"; else cout<<"Input terminated for unkonwnreason.\n"; cout<<"总共有"< } #include #include { charfilename[Size];ifstream infile; cout << "Entername of data file: "; cin.getline(filename, Size);infile.open(filename); if (!infile.is_open()) { cout<< "Could not open the file " < } char a; intcount= 0; infile >> a; while (infile.good()){ ++count; infile >>a; } if (infile.eof())cout << "End of file reached.\n"; elseif (infile.fail())cout << "Input terminated by data mismatch.\n"; elsecout<< "Input terminated for unknown reason.\n"; if (count == 0)cout << "No data processed.\n"; elsecout<< "The text contains " << count << "character(s)" < infile.close(); return0; } #include #include struct member { char name[20]; double donation; }; int main() { using namespace std; intnum,count1=0,count2=0; ifstream fin; char file[20]; cout<<"Enter name of data file: ";cin.getline(file,20); fin.open(file); if(!fin.is_open()) { cout<<"Could not open thefile-"< cout<<"Program terminating.\n"; exit(EXIT_FAILURE); } fin>>num; fin.get(); member *pd=newmember[num]; for(int i=0;i { fin.getline(pd[i].name,20);fin>>pd[i].donation; fin.get(); } cout<<"GrandPatrons:\n"; for(int i=0;i { cout< {cout< delete [] pd; return 0; } #include #include #include { stringname;double money; }; int main() { stringfilename;ifstream infile; cout << "Entername of data file: "; getline(cin, filename);infile.open(filename); if (!infile.is_open()) { cout<< "Could not open the file " < } int number,count =0; infile >> number; charity *pt = newcharity[number]; for (inti= 0; i < number; i++) { infile.get();getline(infile, pt[i].name); infile >> pt[i].money; if(pt[i].money> 10000) count++; } if(count == 0)cout << "None(money > 10000)"; else { cout << "GrandPatron:\n";for(inti= 0; i < number; i++) { if(pt[i].money> 10000) cout << pt[i].name << "" < } if(10 - count ==0) cout << "None(money < 10000)"; else { cout << "Patron:\n"; for(inti= 0; i < number; i++) { if(pt[i].money< 10000) cout << pt[i].name << "" < } delete [] pt; return0; } 第7章函数——C++的编程模块 #include { result = t_av(x, y);cout << "调和平均数= " << result << endl; cout<< "Please enter two numbers (0 to stop): "; } return 0; } doublet_av(doublex,double y) { return 2.0 * x * y /(x + y); } #include { double A, B; cout<< "Please enter two numbers: "; while (cin >>A >> B) { if (A == 0 || B== 0) break; else average(A, B); cout << "Pleaseenter two numbers: "; } cout << "Bye!\n"; return0;} void average(doublex,double y) { cout<< "The average is: " << 2.0 * x * y / (x + y) << endl; } //ex7.2 #include { double temp; inti;for (i= 0; i < limit; i++) { cout << "Enterscore #" <": "; 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(constdouble ar[],int n) { for (int i = 0; i cout << "score#" <": " << ar[i] << endl; } double average(constdouble ar[],int n) { double sum = 0.0; for(inti= 0; i < n; i++) sum += ar[i]; return sum / n; } #include { int size =input(score, 10); if (size> 0) { show(score, size);average(score, size); } cout << "Done.\n"; return0;} int input(doublescore[],int limit) { doublea;int i;for (i= 0; i < limit;i++) { cout << "Yourscore: ";cin >> a; if (!cin) { cin.clear(); while(cin.get()!= '\n')continue; cout << "Badinput; input process terminated.\n"; break; } elseif (a< 0) break; score[i] = a; } return i; } voidshow(constdouble ar[],int n) { doubletotal= 0.0; cout << "Score: "; for (inti= 0; i < n;i++) { cout << ar[i] << ""; } cout << endl; } void average(doublear[],int n) { doubleav,total= 0.0; int i;for (i= 0; i < n;i++) { total += ar[i]; } av = total / i; cout << "Theaverage score: " << av << endl; } //ex7.3 #include void set_box(box * pb) { pb->volume =pb->height * pb->length * pb->width; } void show_box(box b) { using namespacestd;cout << "Box maker: " << b.maker << "\nheight:" < << "\nlwidth:" < << "\nlength:" < << "\nvolume:" < #include { charmaker[40];float height;float width; float length; floatvolume; }; voidshow(box); box* calculate(box*);int main() { box a = { "M", 3.4, 4.5,5.6, 0.0}; show(a); box*pt; cout << endl; pt = calculate(&a); show(a); return0;} void show(boxx) { cout<< "The height of the box: " << x.height < << "Thewidth of the box: " << x.width<< endl << "Thelength of the box: " << x.length<< endl << "Thevolume of the box: " << x.volume<< endl; } box* calculate(box* ps) { (*ps).volume = (*ps).height * (*ps).length * (*ps).width; returnps; } //ex7.4 #include 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 << "Entertotal number of game card choices and\n" "number of picks allowed forthe 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 " < << probability2<< ".\n"; cout << "Youhave one chance in "; cout << probability1 *probability2; cout << " of winning.\n"; cout << "Nextset of numbers (q to quit): "; } cout << "bye\n"; return0;} long double probability(unsigned numbers, unsignedpicks) { long double result = 1.0; longdouble n;unsigned p; for (n = numbers,p = picks; p > 0; n--, p--) result = result * n / p; returnresult;} #include { doublea,b, c; cout << "Enter the number of choices on the game card and\n" << "thenumber of picks allowed(in 1 field number):\n"; cin >> a >>b; cout << "Enter the number of choices on the game card \n" << "(in2 field number):\n"; cin >> c; while(cin) { if (b <= a) { longdouble chance;chance = probability1(a, b) * probability2(c); cout << "Youhave one chance in " < << "thenumber of picks allowed(in 1 field number):\n"; cin >> a >>b; if (!cin)break; cout << "Enterthe number of choices on the game card \n" << "(in2 field number):\n"; cin >> c; } else break; } cout << "Bye!\n"; return0; } long double probability1(unsignednumbers,unsigned picks) { longdouble result= 1.0; long double n; unsigned p; for(n= numbers,p = picks;p > 0; n--, p--) result = result * n / p; return result; } long double probability2(unsignednumbers) { longdouble result;result = 1.0 / numbers;return result; } #include { long long int result =recure(number); cout << number << "! =" < long long int recure(intn) { long long int result; if (n > 0)result = n * recure(n-1); else result = 1; returnresult;} #include { cout<< "Enter one integer: (q to quit)"; intnum;while(cin>> num) { unsigned long result =sub(num); cout << "The result of "< << result << endl << "Nextnumber: "; } return 0; } unsignedlong sub(intn) { unsignedlong result= n;if (result> 0) result = result * sub(n - 1); else result = 1; return result; } //ex7.6 #include Reverse_array(values+1,len-2); Show_array(values, len); return 0; } intFill_array(doublear[],int n) { using namespacestd;double temp;int i;for (i=0;i { cout << "Entervalue #" <": "; cin >> temp; if (!cin) break; ar[i] =temp; } cout << endl; return i; } voidShow_array(constdouble ar[],int n) { using namespacestd;for (inti=0;i << ar[i] << endl; cout << endl; } voidReverse_array(doublear[],int n) { double temp; for (int i=0,j=n-1;i { temp = ar[i]; ar[i] =ar[j]; ar[j] = temp; } } #include { double numbers[Asize];cout << "Please enter some numbers(less than ten): \n"; inti= Fill_array(numbers, Asize); cout << "You'veentered " <" numbers:\n"; Show_array(numbers, i); cout < double * pt =Reverse_array(numbers, 0, i); Show_array(pt, i); cout << endl; double * ps =Reverse_array(numbers, 1, i); Show_array(ps, i); cout << endl; return0;} int Fill_array(doublear[],int size) { inti;for (i= 0; i < Asize; i++) { if (cin >> ar[i]) ; else break; } return i; } voidShow_array(doublear[],int size) { for (int i = 0; i < size; i++) cout << ar[i] << ""; } double *Reverse_array(double ar[],int a,int size) { cout << "Hereare(is) the number(s) after reverse:\n"; double temp; for (int i = a; i < size/2; i++) { temp = ar[i]; ar[i] = ar[size-i - 1]; ar[size-i - 1] = temp; } return ar; } //ex7.7 #include { cout << "Enterrevaluation 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"; return0;} double *fill_array(double *begin, double *end) { using namespacestd;double temp;int i= 1; while (begin< end) { cout << "Entervalue #" <": "; 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(constdouble *begin, const double * end) { using namespacestd;int i= 1; while (begin< end) { cout << "Property#" <": $"; cout << *begin << endl;begin++; i++; } } void revalue(doubler,double *begin, double *end) { while (begin { *begin *= r; begin++; } } #include { doubleproperties[Max];double *p = fill_array(properties, Max); show_array(properties, p); if (p !=&properties[0]) { cout << "Enterrevaluation factor: "; double factor; while(!(cin>> factor)) { cin.clear(); while(cin.get()!= '\n')continue; cout << "Badinput; Please enter a number: "; } revalue(factor,properties, p); show_array(properties, p); } cout << "Done.\n"; return0;} double *fill_array(double ar[],int n) { doubletemp;int i;for (i= 0; i < n;i++) { cout << "Entervalue #" <<(i + 1) << ": "; cin >> temp; if (!cin) { cin.clear(); while(cin.get()!= '\n')continue; cout << "Badinput; input process terminated.\n"; break; } elseif (temp< 0) break; ar[i] = temp; } double * pt = &ar[i - 1]; returnpt; } void show_array(constdouble ar[],double *ps) { constdouble *p = &ar[0];for (inti= 0; p != ps +1; p++,i++) { cout << "Property#" <<(i + 1) << ": $"; cout << ar[i] < } } voidrevalue(doubler,double ar[],double *ps) { double*p = &ar[0];for (inti= 0; p != ps +1; p++, i++) ar[i]*= r; } //ex7.8a #include show(expenses, Seasons); return0;} void fill(doublear[],int n) { using namespacestd;for (inti=0;i { cout << "Enter" < } } voidshow(doublear[],int n) { using namespacestd;cout << "\nEXPENSES\n"; double total = 0.0; for(inti=0;i { cout << Snames[i]<< ": $" << ar[i] < } cout << "TotalExpenses: $" < #include { double expenses[4];fill(expenses); show(expenses); return 0; } voidfill(doublear[]) { doublecosts; for (int i = 0; i <4; i++) { cout << "Enter" < } } voidshow(doublear[]) { double total = 0.0;cout << "\nEXPENSES\n"; for (int i = 0; i <4; i++) { cout << Seasons[i]<< ": $" << ar[i] < } cout << "TotalExpenses: $" < } //ex7.8b(传递结构值) #include }; constchar *Snames[] = { "Spring", "Summer", "Fall", "Winter"}; datafill(); 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 { cout << "Enter" < } return expenses; } void show(dataexpenses) { using namespacestd;cout << "\nEXPENSES\n"; double total = 0.0; for(inti=0;i { cout << Snames[i]<< ": $" << expenses.arr[i] < } cout << "TotalExpenses: $" < } //ex7.8b(传递结构指针) #include }; constchar *Snames[] = { "Spring", "Summer", "Fall", "Winter"}; voidfill(data* pd); void show(data* pd); int main(){ using namespace std; data expenses; fill(&expenses);show(&expenses); return 0; } void fill(data * pd) { using namespacestd;for (inti=0;i { cout << "Enter" < } } void show(data * pd) { using namespacestd;cout << "\nEXPENSES\n"; double total = 0.0; for(inti=0;i { cout << Snames[i]<< ": $" << pd->arr[i] < } cout << "TotalExpenses: $" < #include { doubleexpenses[4]; };expenditure fill(expenditure); voidshow(expenditure); intmain() { expenditure a = { {0.0}}; expenditure v = fill(a);show(v); return 0;} expenditure fill(expenditure b) { for (int i = 0; i <4; i++) { cout << "Enter" < }return b;} void show(expenditureb) { double total = 0.0;cout << "\nEXPENSES\n"; for (int i = 0; i <4; i++) { cout << Seasons[i]<< ": $" << b.expenses[i]<< endl; total += b.expenses[i]; } cout << "TotalExpenses: $" < } #define _CRT_SECURE_NO_WARNINGS#include { display1(ptr_stu[i]);display2(&ptr_stu[i]); } display3(ptr_stu,entered); delete []ptr_stu; cout << "Done\n"; return0; } // getinfo() has twoarguments: a pointer to the first element of // an array of studentstructures and an int representing the // number of elements of thearray. The function solicits and // stores data aboutstudents. 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[], intn) { int num_array_elem= n; char tmp[SLEN]; for (int i = 0; i < n;++i) { cout << "Entername: ";cin.getline(tmp, SLEN); bool blank_line = true; for (unsigned j = 0; 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; returnnum_array_elem; } // display1() takes astudent structure as an argument // and displays its contents void display1(studentst) { cout < } // display2() takes the address of student structure as an //argument and displays the structure’¡¥s contents void display2(conststudent* ps) { cout < << endl; } // display3() takes theaddress of the first element of an array // of student structures and the number of array elements as //arguments and displays the contents of the structures void display3(conststudentpa[], int n) { for (inti= 0; i < n; ++i) cout << pa[i].fullname << '\t'< #include }; intgetinfo(studentpa[],int n);void display1(studentst);void display2(conststudent * ps); void display3(conststudent pa[], int n); intmain() { cout<< "Enter class size: "; int class_size;cin >> class_size; while (cin.get() != '\n') continue; student * ptr_stu = newstudent[class_size]; int entered =getinfo(ptr_stu, class_size); for (int i = 0; i { display1(ptr_stu[i]);display2(&ptr_stu[i]); } display3(ptr_stu,entered); delete []ptr_stu; cout << "Done\n"; return0;} int getinfo(student*p,int num) { int i; for(i= 0; i < num;i++) { cout << "Enterthe fullname: ";cin.getline((p +i)->fullname, SLEN); cout << "Enter the hobby:";cin.getline((p +i)->hobby, SLEN); cout << "Enter the ooplevel:";cin >> (p +i)->ooplevel; if (!cin)break; else cin.get(); } return i; } void display1(studentst) { cout<< st.fullname<< " " << st.hobby<< " " << st.ooplevel<< endl; } void display2(conststudent * ps) { cout<< ps->fullname<< " " << ps->hobby<< " " << ps->ooplevel<< endl; } void display3(conststudent pa[], intnum) { for (int i = 0; i < num; i++) { cout << pa[i].fullname<< " " << pa[i].hobby<< " " << pa[i].ooplevel<< endl; } } //ex7.10 #include int main() { usingnamespace 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 (inti=0;i<3; i++) { cout << op[i] << ":" <" and " << b << "= " << calculate(a, b, pf[i]) < } } } doublecalculate(doublex,double y,double (*pf)(double, double)) { return (*pf)(x, y); } double add(doublex,double y) { return x + y; } double sub(doublex,double y) { return x - y; } double mean(doublex,double y) { return (x + y) / 2.0; } 第8章函数探幽 #include { using namespacestd;char *pstr = "Hello\n"; show(pstr); int num; cout<< "Enter a number: "; cin >> num;show(pstr, num); cout << "Done\n"; return0;} void show(constchar *ps, int n) { using namespacestd;int lim= n; if (n== 0) lim = 1; for (inti=0;i } //ex8.2 #include }; voidset(CandyBar& cb, char *ps, double w,int h);void show(constCandyBar& cb); int main(){ using namespace std; CandyBar candy; char*p = "Millennium Munch"; double x = 2.85; inty= 350; set(candy, p, x, y); show(candy); return 0; } void set(CandyBar& cb, char *ps, double w,int h) { cb.name = ps; cb.weight =w; cb.hot = h; } void show(constCandyBar& cb) { cout << "Name:" < << "Hot:" < } #include }; void function(CandyBar&,char *str = "Millennium Munch", double a = 2.85, intb= 350); void show(constCandyBar &); int main() { CandyBar x; cout<< "Please enter the brand: \n"; getline(cin, x.brand);cout << "Please enter the weight: \n"; cin >> x.weight;cout << "Please enter the colories: \n"; cin >>x.calories; show(x); function(x); show(x); return 0; } void show(constCandyBar &a) { cout<< endl << a.brand << endl << a.weight<< endl << a.calories<< endl; } void function(CandyBar&r, char*str,double a,int b) { r.brand = str; r.weight = a; r.calories = b; } //ex8.3 #include #include { str_to_upper(str1); cout<< str1 << endl; cout << "Nextstring (q to quit): "; } cout << "Bye."; return0;} void str_to_upper(string& str) { int limit =str.size(); for (inti=0;i { if (isalpha(str[i]))str[i] = toupper(str[i]); } } #include #include { string str; cout<< "Enter a string (q to quit): "; getline(cin, str); while (str != "q"&&str != "Q") { upper(str); cout<< str << endl; cout << "Nextstring (q to quit): "; getline(cin, str); } cout << "Bye.\n"; return0;} void upper(string&a) { for (int i = 0; i < a.size(); i++) { if (islower(a[i])) a[i] = toupper(a[i]); } } // ex8.4 #define _CRT_SECURE_NO_WARNINGS #include #include }; voidshow(constchar *str,int cnt= 1); void show(conststringy& bny, int cnt= 1); void set(stringy& bny, const char * str); int main(void) { stringybeany; 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 ofbeany to point to the // new block,copies testing to new block, // and sets ct member of beany show(beany); //prints member string once show(beany, 2); // printsmember string twice testing[0]= 'D';testing[1] = 'u'; show(testing); //prints testing string once show(testing, 3); //prints testing string thrice show("Done!"); return0;} void show(constchar *str,int cnt) { while(cnt-- > 0) { cout << str<< endl; } } voidshow(conststringy& bny, int cnt)
//ex.6.5
//ex.6.6
//ex.6.7
//ex.6.8
//ex.6.9
//ex7.1
//ex7.5
//ex7.9
//ex8.1
{ while(cnt-- > 0){ cout << bny.str << endl;
} } voidset(stringy& bny, const
{ bny.ct = strlen(str);bny.str = new char[bny.ct+1];strcpy(bny.str, str); }
#include
{ stringybeany;char *str) n= 1); = 1);
char testing[] = "Realityisn't what it used to be."; set(beany, testing); show(beany);show(beany, 2); testing[0] = 'D';
testing[1] = 'u';show(testing); show(testing, 3); show("Done!"); return0;} void set(stringy&a,char b[])
{
a.str = b; } voidshow(conststringy &x, intn)
{
for (int i = n; i > 0;i--)
cout << x.str < } void show(constchar a[],int n) { for (int i = n; i > 0;i--) cout << a << endl; } //ex8.5 #include template <typenameT> T max5(T ar[]) { T max = ar[0]; for(inti=1;i { if (max #include { int a[Num] = {1,2, 3, 4, 5}; double b[Num]= {1.1, 2.2, 3.3, 4.4, 5.5}; int maxi = max5(a); doublemaxd= max5(b); cout << "max in a[5]: " << maxi<< endl << "max inb[5]: " < template <classAnyType> AnyType max5(AnyType ar[]) { AnyType max = ar[0]; for(inti= 0; i < 5; i++) { if (max < ar[i]) max = ar[i]; } return max; } //ex8.6 #include "a", "bb", "ccc", "ddddd", "eeee" }; cout << "Themax integer of array is: " << maxn(ari, 6) << endl;cout << "The max double of array is: " < } template <typenameT>T maxn(T ar[], int n) { T maxar = ar[0]; for(inti=1;i { if (maxar } return maxar; } template <> constchar*maxn(const char* ar[],int n) { const char * maxs =ar[0]; for (inti=1;i { if (strlen(maxs)< strlen(ar[i])) maxs = ar[i]; } return maxs; } #include { int a[6] = {1, 2,3, 4, 5, 6}; double b[4]= {1.1, 2.2, 3.3, 4.4}; int maxi = maxn(a, 6); doublemaxd= maxn(b, 4); const char * c[5] = { "a", "bb", "ccc", "ddddd", "eeee" }; cout << "maxi:" < << "maxd:" < << "Themax string of array is:
" <
return 0; }
template <typenameT>T maxn(Tar[],int n){
T max = ar[0]; for(inti= 0; i < n;i++)
{ if (max < ar[i]) max = ar[i];
} return max;
} template <> constchar*maxn<const char *>(const char * ar[],intn)
{ const char * maxs = ar[0]; for(inti=1;i<n;i++)
{ if (strlen(maxs)< strlen(ar[i]))maxs = ar[i];} return maxs;}
//ex8.7 #include
{ char name[50]; doubleamount;
}; intmain(){ using namespace std;
int things[6] ={13, 31, struct debts mr_E[3]= { { "Ima Wolfe", 2400.0},
{ "UraFoxe",1300.0},
{ "IbyStout",1800.0} }; double *pd[3]; for (inti=0;i<3; i++)
103, 301, 310, 130};
pd[i] = &mr_E[i].amount;
cout << "Sum:Mr.E's counts of things: "
<
<< SumArrray(pd, 3)<< endl; return 0;} template <typenameT>
T SumArrray(Tarr[],int n)
{ usingnamespace std;T sum= 0;
cout << "templateA\n";for (inti= 0; i < n;i++) sum += arr[i];
returnsum;} template <typenameT>
T SumArrray(T*arr[],int n)
{ usingnamespace std;T sum= 0;
cout << "templateB\n";for (inti= 0; i < n;i++) sum += *arr[i];
return sum;
}
第 9章 内存模型和名称空间
//golf.h
const int Len = 40; structgolf
{ charfullname[Len];int handicap;
}; voidsetgolf(golf&g, const char * name, int hc); intsetgolf(golf&g); void handicap(golf&g, int hc);void showgolf(constgolf &g);
//golf.cpp
#include
{ cout<< "Enter the golfer's name: \n"; cin.get(g.fullname,Len); if (g.fullname[0]== '\0')return 0;
cout << "Enterthe handicap for " << g.fullname<< endl; while (!(cin>> g.handicap))
{ cin.clear(); while(cin.get()!= '\n')continue;
cout << "Pleaseenter an integer.\n";
} cin.get(); return1;} void setgolf(golf&g,const char * name, inthc)
{ strncpy_s(g.fullname, name, Len); g.handicap = hc; } voidhandicap(golf&g,int hc)
{
g.handicap = hc; } voidshowgolf(constgolf &g)
{ cout << "Golfer:" <<g.fullname<< "\n"; cout << "Handicap:" <<g.handicap<< "\n\n";
}
//main.cpp
#include
{ golfgolfer[Men];int i;for (i= 0; i < Men; i++)
{ if(setgolf(golfer[i])== 0) break;
}
for (intj= 0; j < i; j++) showgolf(golfer[j]);
golf ann;setgolf(ann, "Ann Birdfree", 24); showgolf(ann);handicap(ann, 4); showgolf(ann); return 0;
}
#include
{ stringinput;cout << "Enter a line:\n"; getline(cin, input); while(input!= "")
{strcount(input); cout << "Enter next line(empty line to quit):\n";
getline(cin, input);
}
cout << "Bye\n"; return0;} void strcount(conststring str)
{ staticint total= 0; int count;count = str.size();total += count; cout << count << "characters\n";cout << total << " characterstotal\n";
}
//ex9.3
#include
#include
{ char dross[20]; intslag;}; int main()
{ chaff*p = new chaff[2];strcpy_s(p[0].dross, "Piffa like"); p[0].slag = 5; strcpy_s(p[1].dross, "Fuckme so hard");p[1].slag = 6; for (inti= 0; i < 2; i++)
cout <
" " << p[i].slag << endl;
return 0;
}
//ex9.4//sales.h namespace SALES { const int QUARTERS = 4; structSales{ double sales[QUARTERS];double average;double max;double min;
};
// copies the lesser of 4 orn items from the array ar
// to the sales member of sand computes and stores the
// average, maximum, and minimum values of the entered items; //remaining elements of sales, if any, set to 0 void setSales(Sales& s, const double ar[], int n); //gathers sales for 4 quarters interactively, stores them
// in the sales member of sand computes and stores the
// average, maximum, and minimum values void setSales(Sales& s);
// display all information in structure s void showSales(constSales& s);
}
//Sales.cpp
#include
{ using std::cout; usingstd::cin;using std::endl;static double calaverage(double arr[], unsignedarrSize)
{ double sum = 0; for(inti=0;i
} static double calmax(doublearr[],unsigned arrSize)
{ double max = arr[0]; for(inti=1;i { if (max { double min = arr[0]; for(inti=1;i { if (min >arr[i]) min = arr[i]; } return min; } voidsetSales(Sales& s, const double ar[], int n) { unsigned times = n s.average = calaverage(s.sales, times); s.max = calmax(s.sales, times); s.min = calmin(s.sales,times); } void setSales(Sales& s) { cout << "Enter4 sales:\n";for (inti=0;i { cout << "sales" <": "; cin >> s.sales[i]; } s.average = calaverage(s.sales,QUARTERS); s.max = calmax(s.sales, QUARTERS); s.min = calmin(s.sales,QUARTERS); } void showSales(constSales& s) { cout << "sales:";for (inti=0;i } } //main #include { using namespaceSALES;Sales salesBook; double salesList[]= {12.2, 11.16, 10.61, 16.24, 11.53}; setSales(salesBook, salesList, sizeof(salesList)/sizeof(salesList[0]));showSales(salesBook); Sales salesPen; setSales(salesPen); showSales(salesPen); } #include { usingnamespace SALES;Sales A,B; double h[4]= {1.1, 2.2, 3.3, 4.4}; setSales(A); showSales(A); setSales(B); showSales(B); return0; } 第10章对象和类 //bankaccount.h #ifndef BANKACCOUNT_H_ #define BANKACCOUNT_H_#include { private: std::string name;std::string acctnum; double balance; public: BankAccount(const std::string& client, const std::string& num, double bal=0.0);void show()const;void deposit(doublecash);void withdraw(doublecash); }; #endif //bankaccount.cpp #include #include "bankaccount.h" BankAccount::BankAccount(conststd::string& client, const std::string& num, double bal) { name = client; acctnum =num; balance = bal; } void BankAccount::show()const { using std::cout; usingstd::endl;cout << "Client: " << name << endl; cout<< "Account Number: " << acctnum < } void BankAccount::deposit(doublecash) { if (cash >= 0)balance += cash; else std::cout<< "Illegal transaction attempted"; } void BankAccount::withdraw(doublecash) { if (cash< 0) std::cout << "Illegal transactionattempted";else if (cash<= balance) balance -=cash; else std::cout << "Requestdenied due to insufficient funds.\n"; } //main.cpp #include { BankAccount ba("Kermit", "croak322", 123.00); ba.show();ba.deposit(20); ba.show(); ba.withdraw(300); ba.show(); ba.withdraw(23);ba.show(); return 0;} //ex10.2 #ifndef PERSON_H_ #define PERSON_H_ #include static constint LIMIT=25;std::string lname; char fname[LIMIT];public: Person() {lname=""; fname[0]='\0';} //#1 Person(conststd::string&ln, const char * fn="Heyyou"); //#2// the following methods display lname and fname void Show() const; //firstname lastname format void FormalShow() const; //lastname, firstname format }; #endif //person.cpp #include #include "person.h" Person::Person(const std::string&ln, const char * fn) { lname = ln;strcpy(fname, fn); } void Person::Show()const { using std::cout; usingstd::endl;cout << "The people's name is " << fname << ""< } void Person::FormalShow() const { using std::cout; usingstd::endl;cout << "The people's name is " << lname << ","< } //main.cpp #include Person one; Person two("Smythecraft"); Personthree("Dimwiddy", "Sam"); one.Show();one.FormalShow(); cout << endl; two.Show(); two.FormalShow(); cout<< endl; three.Show(); three.FormalShow(); cout << endl; return0;} //ex10.3 //golf.h #ifndef GOLF_H_ #defineGOLF_H_class Golf{ private: static constint Len= 40; char fullname[Len];int handicap;public:Golf(); Golf(constchar *name, int hc);const Golf& setgolf(const Golf& g); void showgolf()const; }; #endif //golf.cpp #include #include #include "golf.h" Golf::Golf() {strcpy(fullname, "No Name"); handicap = 0; } Golf::Golf(const char * name, inthc) { strcpy(fullname, name);handicap = hc; } const Golf& Golf::setgolf(const Golf& g) { strcpy(fullname,g.fullname); handicap = g.handicap; return *this; } voidGolf::showgolf()const { std::cout << "Golfer:" < } //main #include { Golf golger1("AnnBirdfree",5); golger1.showgolf(); Golf golger2; golger2.setgolf(golger1);golger2.showgolf(); return 0;} //ex10.4 //sale.h #ifndef SALE_H_ #defineSALE_H_namespace SALES { const int QUARTERS = 4; classSales{ private: double sales[QUARTERS];double average;double max;double min;public: // default constructor Sales(); // copies the lesser of 4 orn items from the array ar // to the sales member of sand computes and stores the // average, maximum, andminimum values of the entered items; // remaining elements ofsales, if any, set to 0 Sales(const double ar[], intn); // gathers sales for 4quarters interactively, stores them // in the sales member of sand computes and stores the // average, maximum, and minimum values void setSales(); // display all information in structure s void showSales() const; }; } #endif //sale.cpp #include { using std::cout; usingstd::cin;using std::endl;static double calaverage(double arr[], unsignedarrSize) { double sum = 0; for(inti=0;i } static double calmax(doublearr[],unsigned arrSize) { double max = arr[0]; for(inti=1;i { if (max { double min = arr[0]; for(inti=1;i { if (min >arr[i]) min = arr[i]; } return min; } Sales::Sales() { min = 0; max = 0; average= 0; for (inti= 0; i < QUARTERS; i++) sales[i] =0; } Sales::Sales(const double ar[], intn) { unsigned times = n } void Sales::setSales() { cout << "Enter4 sales:\n";for (inti=0;i { cout << "sales" <": "; cin >> sales[i]; } * this = Sales(sales, QUARTERS); } void Sales::showSales() const { cout << "sales:";for (inti=0;i } } //main.cpp #include { using namespaceSALES; double salesList[] ={12.2, 11.16, 10.61, 16.24, 11.53}; Sales salesBook(salesList, sizeof(salesList)/sizeof(salesList[0]));salesBook.showSales(); Sales salesPen; salesPen.setSales();salesPen.showSales(); return 0; } //ex10.5 //stack.h #ifndef STACK_H_ #defineSTACK_H_struct customer{ char fullname[35];double payment;}; typedef customerItem; class Stack{ private: enum {MAX = 10};Item items[MAX]; int top;public:Stack(); bool isempty() const; boolisfull()const; // push() returns false if stack already is full, true otherwise boolpush(constItem& item); // add item to stack // pop() returns false if stack already is empty, true otherwise boolpop(Item& item); // pop top into item }; #endif //stack.cpp #include #include "stack.h" Stack::Stack() { top = 0; } bool Stack::isempty()const { return top == 0; } bool Stack::isfull()const { return top == MAX; } bool Stack::push(constItem& item) { if (top < MAX) { items[top++] = item; returntrue;} else return false; } bool Stack::pop(Item& item) { if (top > 0) { item = items[--top]; returntrue;} else return false; } //main.cpp #include #include using namespacestd;Stack st; customer temp; double payment = 0; charch;cout << "Please enter A to add a customer,\n" << "Pto process a customer, and Q to quit.\n"; while (cin >>ch && (ch = toupper(ch)) != 'Q') { while (cin.get() != '\n') continue; if (ch != 'A'&&ch != 'P') { cout << "Pleaserespond A, P or Q: "; continue; } switch(ch){ case 'A':if (st.isfull())cout << "stack already full\n"; else {get_customer(temp); st.push(temp); } break; case 'P':if (st.isempty())cout << "stack is empty\n"; else {st.pop(temp); payment += temp.payment; cout << temp.fullname << "processed. ";cout << "Payments now total $" << payment << "\n"; } break; } cout << "Pleaseenter A to add a customer,\n" << "P toprocess a customer, and Q to quit.\n"; } cout << "Done!\n"; return0;} void get_customer(customer& cu) { using namespacestd;cout << "Enter customer name: "; cin.getline(cu.fullname,35); cout << "Enter customer payment: "; cin >> cu.payment;while (cin.get()!= '\n')continue;} //ex10.6 //move.h #ifndef MOVE_H_ #defineMOVE_H_class Move{ private:double x;double y;public: Move(doublea= 0, double b= 0); void showMove()const; Move add(const Move & m) const; //this function adds x of m to x of invoking object to get new x//add y of m to y of invoking object to get new y, creates a new //move objectinitialized to new x,y values and returns it void reset(doublea= 0,double b= 0); }; #endif //move.cpp #include #include "move.h" Move::Move(double a, doubleb) { x = a; y = b; } void Move::showMove()const { std::cout << "x= " < } Move Move::add(const Move & m) const { Move temp; temp.x = x +m.x; temp.y = y + m.y; return temp; } voidMove::reset(doublea,double b) { x = a; y = b; } //main #include Move move2(2,1); Movemove3; cout << "The number in move1is:\n";move1.showMove(); cout << "The number in move2is:\n";move2.showMove(); move3 = move2.add(move1); cout << "Thenumber in move3 is :\n"; move3.showMove(); cout << "move1+move2,now move2's number is :\n"; move2.showMove(); cout << "Aftermove1 + move2,now move1's number is :\n"; move1.showMove();move1.reset(); cout << "After resetmove1,now move1's number is:\n"; move1.showMove(); return0;} //ex10.7 //plorg.cpp #ifndef PLORG_H_ #definePLORG_H_class Plorg{ private:char name[20];int CI;public: Plorg(); Plorg(char*na, int n= 50); void resetCI(intn);void showplorg()const; }; #endif //plorg.cpp #include #include #include "plorg.h" Plorg::Plorg() { strcpy(name, "Plorga"); CI = 0; } Plorg::Plorg(char * na, intn) { strcpy(name, na); CI = n; } void Plorg::resetCI(intn) { CI = n; } void Plorg::showplorg()const {std::cout << "The plorg's name is " << name << "\n" <<"The CIis "< } //main.cpp #include using namespacestd;Plorg plorg1; plorg1.showplorg(); Plorg plorg2("heyyroup", 31);plorg2.showplorg(); plorg1.resetCI(41); plorg1.showplorg(); return0;} //ex10.8 //list.h #ifndef LIST_H_ #defineLIST_H_const int TSIZE = 50; struct film { chartitle[TSIZE];int rating;}; typedef struct film Item; const int LISTMAX = 10; classList{ private:Item items[LISTMAX]; int count; public: List(); boolisempty();bool isfull();int itemcount();bool additem(Itemitem); void visit(void(*pf)(Item&)); }; #endif //list.cpp #include "list.h" List::List() { count = 0; } bool List::isempty(){ return count== 0; } bool List::isfull(){ return count== LISTMAX; } int List::itemcount() { return count; } boolList::additem(Itemitem) { if (count ==LISTMAX) return false; else items[count++]= item; return true; } void List::visit(void(*pf)(Item&)) { for (inti=0;i (*pf)(items[i]); } //main.cpp #include #include using namespace std; List movies; Item temp; if (movies.isfull()) { cout << "Nomore room in list! Bye!\n"; exit(1); } cout << "Enterfirst movie title:\n"; while (cin.getline(temp.title,TSIZE) && temp.title[0] != '\0') { cout << "Enteryour rating <1-10>: "; cin >> temp.rating; while(cin.get()!= '\n')continue;if (movies.additem(temp)== false) { cout<< "List already is full!\n"; break; } if (movies.isfull()) {cout << "You have filled the list.\n"; break; } cout<< "Enter next movie title (empty line to stop):\n"; } if (movies.isempty())cout << "No data entered."; else { cout<< "Here is the movie list:\n"; movies.visit(showfilm); } cout << "Bye!\n"; return0;} void showfilm(Item& item) { std::cout << "Movie:" < << item.rating << std::endl; } //11 1、 #ifndefVECTOR_H_ #defineVECTOR_H_ #include #include #include #include namespaceVECTOR { classVector { public: enum Mode {RECT, POL }; private:double x; double y; double mag; doubleang; Mode mode; voidset_mag();voidset_ang(); voidset_x(); voidset_y(); public: Vector(); Vector(doublen1, double n2, Mode form = RECT); void reset(double n1, double n2, Mode form =RECT); ~Vector();doublexval()const{ return x; } doubleyval()const{ return y; }doublemagval()const { return mag; } doubleangval()const { return ang; }voidpolar_mode(); voidrect_mode(); Vectoroperator+(const Vector &b)const; Vectoroperator-(const Vector &b)const; Vectoroperator-()const; Vector operator*(double n)const; friendVector operator*(double n, const Vector &a); friendostream&operator<<(ostream&os, const Vector &v); };} #endif #include"vector.h" namespaceVECTOR { constdouble Rad_to_deg = 45.0 / atan(1.0); voidVector::set_mag() { mag =sqrt(x * x + y * y); } voidVector::set_ang() { if (x ==0.0 && y == 0.0) ang = 0.0;else ang =atan2(y, x); } voidVector::set_x() { x =mag * cos(ang); } voidVector::set_y() { y =mag * sin(ang); } Vector::Vector() { x = y = mag= ang = 0.0; mode = RECT; } Vector::Vector(doublen1, 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<< "vectorset to 0\n"; x = y = mag = ang = 0.0; mode = RECT; } } voidVector::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<< "vectorset to 0\n"; x = y = mag = ang = 0.0; mode = RECT; } } Vector::~Vector() { } voidVector::polar_mode() { mode = POL; } voidVector::rect_mode() { mode =RECT; } VectorVector::operator+(const Vector &b)const { returnVector(x + b.x, y + b.y); } VectorVector::operator-(const Vector &b)const { returnVector(x - b.x, y - b.y); } VectorVector::operator-()const { returnVector(-x, -y); } VectorVector::operator*(double n)const { returnVector(n*x, n*y); } Vectoroperator*(double n, const Vector &a) { return a*n; } ostream&operator<<(ostream&os,const Vector &v) { if(v.mode == Vector::RECT) os<< "(x,y) = (" < else if(v.mode == Vector::POL) { os<<"(m,a) = (" < < } else os<<"Vector object mode is invalid"; returnos; } } //randwalk.cpp#include "vector.h" int main() { usingVECTOR::Vector; srand(time(0)); double direction; Vector step; Vectorresult(0.0, 0.0); unsigned long steps = 0; double target; doubledstep;ofstreamfout; fout.open("savesteps.txt"); cout<< "Entertarget distance (q to quit): "; while (cin>> target) { cout<<"Enter step length: "; if (!(cin>>dstep)) break; fout<<"Target Distance: " << target << " Step Size: "< { fout< } cout<<"After " << steps << " steps, the subject " "hasthe following location:\n"; cout<< result < fout<<"After " << steps << " steps, the subject " "hasthe following location:\n"; fout<< result < result.polar_mode();cout<< " or\n" << result < } cout<<"Bye!\n"; cin.clear();while (cin.get() != '\n') continue; cin.get();return 0; } 2、 #ifndefVECTOR_H_ #defineVECTOR_H_ #include #include #include namespaceVECTOR { classVector { public: enum Mode { RECT, POL }; private:double x; double y; Mode mode; doubleset_mag()const;doubleset_ang()const; voidset_x(double mag, double ang); voidset_y(double mag,double ang); public: Vector(); Vector(doublen1, double n2, Mode form = RECT); void reset(double n1, double n2, Mode form =RECT); ~Vector();doublexval()const{ return x; } doubleyval()const{ return y; }doublemagval()const { return set_mag(); } doubleangval()const { returnset_ang(); } voidpolar_mode(); voidrect_mode(); Vectoroperator+(const Vector &b)const; Vectoroperator-(const Vector &b)const; Vectoroperator-()const; Vector operator*(double n)const; friendVector operator*(double n, const Vector &a); friendostream&operator<<(ostream&os, const Vector &v); };} #endif #include"vector.h" namespaceVECTOR { constdouble Rad_to_deg = 45.0 / atan(1.0); doubleVector::set_mag()const { returnsqrt(x* x + y * y); } doubleVector::set_ang()const { if(x == 0.0 && y == 0.0) return 0.0; elsereturn atan2(y, x); } voidVector::set_x(double mag, double ang) { x =mag * cos(ang); } voidVector::set_y(double mag, double ang) { y =mag * sin(ang); } Vector::Vector() { x = y =0.0; mode = RECT; } Vector::Vector(doublen1, double n2, Mode form) { mode =form; if (form == RECT) { x = n1; y =n2; } else if(form == POL) { set_x(n1,n2 / Rad_to_deg); set_y(n1, n2 / Rad_to_deg); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<< "vectorset to 0\n"; x = y = 0.0; mode = RECT; } } voidVector::reset(double n1, double n2, Mode form) { mode =form; if (form == RECT) { x = n1; y =n2; } else if(form == POL) { set_x(n1,n2 / Rad_to_deg); set_y(n1, n2 / Rad_to_deg); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<< "vectorset to 0\n"; x = y = 0.0; mode = RECT; } } Vector::~Vector() { } voidVector::polar_mode() { mode = POL; } voidVector::rect_mode() { mode =RECT; } VectorVector::operator+(const Vector &b)const { returnVector(x + b.x, y + b.y); } VectorVector::operator-(const Vector &b)const { returnVector(x - b.x, y - b.y); } VectorVector::operator-()const { returnVector(-x, -y); } VectorVector::operator*(double n)const { returnVector(n*x, n*y); } Vectoroperator*(double n, const Vector &a) { return a*n; } ostream&operator<<(ostream&os,const Vector &v) { if(v.mode == Vector::RECT) os<< "(x,y) = (" < else if(v.mode == Vector::POL) { os<<"(m,a) = (" < < } elseos<< "Vector object mode is invalid"; returnos; } } //randwalk.cpp#include "vector.h" int main() { usingVECTOR::Vector; srand(time(0)); double direction; Vector step; Vectorresult(0.0, 0.0); unsigned long steps = 0; double target; doubledstep;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<<"After " << steps << " steps, the subject " "hasthe following location:\n"; cout<< result < } cout<<"Bye!\n"; cin.clear();while (cin.get() != '\n') continue; cin.get();return 0; } 3、 #ifndefVECTOR_H_ #defineVECTOR_H_ #include #include #include namespaceVECTOR { classVector { public: enum Mode {RECT, POL }; private:double x; double y; double mag; doubleang; Mode mode; voidset_mag();voidset_ang(); voidset_x(); voidset_y(); public: Vector(); Vector(doublen1, double n2, Mode form = RECT); void reset(double n1, double n2, Mode form =RECT); ~Vector();doublexval()const{ return x; } doubleyval()const{ return y; }doublemagval()const { return mag; } doubleangval()const { return ang; }voidpolar_mode(); voidrect_mode(); Vectoroperator+(const Vector &b)const; Vectoroperator-(const Vector &b)const; Vectoroperator-()const; Vector operator*(double n)const; friendVector operator*(double n, const Vector &a); friendostream&operator<<(ostream&os, const Vector &v); };} #endif #include"vector.h" namespaceVECTOR { constdouble Rad_to_deg = 45.0 / atan(1.0); voidVector::set_mag() { mag =sqrt(x * x + y * y); } voidVector::set_ang() { if (x ==0.0 && y == 0.0) ang = 0.0;else ang =atan2(y, x); } voidVector::set_x() { x =mag * cos(ang); } voidVector::set_y() { y =mag * sin(ang); } Vector::Vector() { x = y = mag= ang = 0.0; mode = RECT; } Vector::Vector(doublen1, 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<< "vectorset to 0\n"; x = y = mag = ang = 0.0; mode = RECT; } } voidVector::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<< "vectorset to 0\n"; x = y = mag = ang = 0.0; mode = RECT; } } Vector::~Vector() { } voidVector::polar_mode() { mode = POL; } voidVector::rect_mode() { mode =RECT; } VectorVector::operator+(const Vector &b)const { returnVector(x + b.x, y + b.y); } VectorVector::operator-(const Vector &b)const { returnVector(x - b.x, y - b.y); } VectorVector::operator-()const { returnVector(-x, -y); } VectorVector::operator*(double n)const { returnVector(n*x, n*y); } Vectoroperator*(double n, const Vector &a) { return a*n; } ostream&operator<<(ostream&os,const Vector &v) { if(v.mode == Vector::RECT) os<< "(x,y) = (" < else if(v.mode == Vector::POL) { os<<"(m,a) = (" < < } else os<<"Vector object mode is invalid"; returnos; } } //randwalk.cpp#include "vector.h" int main() { usingVECTOR::Vector; srand(time(0)); double direction; Vector step; Vectorresult(0.0, 0.0); unsigned long steps = 0; double target; doubledstep;doublenumbers,N; double Min, Max, Sum, Average; cout<< "Enter targetdistance: "; cin>> target; cout<< "Enter step length:"; cin>>dstep; cout<< "Enter test numbers: ";cin>> numbers; N =numbers; Min = Max =Sum = Average = 0.0; while (numbers) { while(result.magval() < target) { direction =rand() % 360; step.reset(dstep, direction, Vector::POL); result = result +step; steps++; } cout<<"After " << steps << " steps once a walk\n"; if(Min == 0 || Max == 0) Min = Max =steps; if (Min > steps) Min =steps; if (Max < steps) Max =steps; Sum += steps; numbers--; steps = 0; result.reset(0.0, 0.0); } Average =Sum / N; cout<< "Max steps is " << Max < cin.clear();while (cin.get() != '\n') continue; cin.get();return 0; } 4、 #ifndefMYTIME_H_ #defineMYTIME_H_ #include #include class Time { private:int hours; int minutes; public: Time(); Time(int h,int m = 0); voidAddMin(int m); voidAddHr(int h); void Reset(int h = 0, int m =0); Timeoperator*(double n)const; friend Time operator-(const Time &t1, const Time&t2); friend Time operator+(const Time &t1, const Time &t2); friendTime operator*(double m, const Time &t) { return t *m; } friendostream&operator<<(ostream&os, const Time &t); }; #endif #include"mytime.h" Time::Time() { hours =minutes = 0; } Time::Time(inth, int m) { hours = h;minutes = m; } voidTime::AddMin(int m) { minutes +=m; hours += minutes / 60; minutes %= 60; } voidTime::AddHr(int h) { hours += h; } voidTime::Reset(int h, int m) { hours = h;minutes = m; } Timeoperator+(const Time &t1, const Time &t2) { Time sum; sum.minutes= t1.minutes + t2.minutes; sum.hours = t1.hours + t2.hours + sum.minutes / 60;sum.minutes %= 60; return sum; } Timeoperator-(const Time &t1, const Time &t2) { Time diff;int tot1, tot2; tot1 = t1.minutes + 60 * t1.hours; tot2 = t2.minutes + 60 *t2.hours; diff.minutes = (tot1 - tot2) % 60; diff.hours = (tot1 - tot2) / 60;return diff; } TimeTime::operator*(double mult)const { Timeresult; longtotalminutes = hours * mult * 60 + minutes * mult; result.hours =totalminutes / 60; result.minutes = totalminutes % 60; return result; } ostream&operator<<(ostream&os,const Time &t) { os< } //usetime.cpp#include "mytime.h" int main() { Timeaida(3, 35); Timetosca(2, 48); Time temp; cout<<"Aida and Tosca:\n"; cout< cout<<"Aida * 1.17: " << temp < cin.get();return 0; } 5、 #ifndefSTONEWT_H_ #defineSTONEWT_H_ #include #include classStonewt { public: enum Mode {STN, INPD, FPD }; private: staticintconstLbs_per_stn = 14; int stone;doublepds_left; double pounds; intpounds_int; Mode mode;voidset_stn(); voidset_pds(); voidset_pds_int(); public: Stonewt(doublelbs, Mode form); Stonewt(intstn,double lbs, Mode form); Stonewt();~Stonewt(); voidstn_mode(); voidpds_mode(); voidint_pds_mode();operatorint()const; operator double()const; Stonewtoperator+(constStonewt&st)const; Stonewtoperator-(constStonewt&st)const; Stonewt operator*(double n)const; friendStonewtoperator*(double n, constStonewt&st);friendostream&operator<<(ostream&os, constStonewt&st); }; #endif //stonewt.cpp#include "stonewt.h" voidStonewt::set_stn() { stone =int(pounds) / Lbs_per_stn; pds_left = int(pounds) % Lbs_per_stn + pounds -int(pounds); } voidStonewt::set_pds() { pounds =stone*Lbs_per_stn + pds_left; } voidStonewt::set_pds_int() { pounds_int= int(pounds); } Stonewt::Stonewt(doublelbs, Mode form) { mode =form; if (form == STN) { stone =int(lbs) / Lbs_per_stn; pds_left = int(lbs) % Lbs_per_stn + lbs - int(lbs);set_pds(); set_pds_int(); } else if(form == INPD) { pounds_int= int(lbs); pounds = lbs; set_stn(); } else if(form == FPD) { pounds =lbs; set_pds_int(); set_stn(); } else { cout<<"Incorrect 3rd argument to Stonewt() -- "; cout<< "Stonewtset to 0\n"; stone = pounds = pds_left = 0; mode = STN; } } Stonewt::Stonewt(intstn,double lbs, Mode form) { mode =form; if (form ==STN) { stone =stn; pds_left = lbs; set_pds(); set_pds_int(); } else if(form == INPD) { pounds_int= int(stn*Lbs_per_stn + lbs); pounds = stn*Lbs_per_stn + lbs; set_stn(); } else if(form == FPD) { pounds =stn*Lbs_per_stn + lbs; set_pds_int(); set_stn(); } else { cout<<"Incorrect 3rd argument to Stonewt() -- "; cout<< "Stonewtset to 0\n"; stone = pounds = pds_left = 0; mode = STN; } } Stonewt::Stonewt() { stone =pounds = pds_left = 0; mode = STN; } Stonewt::~Stonewt() { } voidStonewt::stn_mode() { mode = STN; } voidStonewt::pds_mode() { mode = FPD; } voidStonewt::int_pds_mode() { mode =INPD; } Stonewt::operatorint()const { returnint(pounds+ 0.5); } Stonewt::operatordouble()const { returnpounds; } StonewtStonewt::operator+(constStonewt&st)const { returnStonewt(pounds+ st.pounds, st.mode); } StonewtStonewt::operator-(constStonewt&st)const { returnStonewt(pounds- st.pounds, st.mode); } StonewtStonewt::operator*(doublen)const { returnStonewt(pounds*n,mode); } Stonewtoperator*(double n, constStonewt&st) { returnStonewt(n*st.pounds,st.mode); } ostream&operator<<(ostream&os,constStonewt&st) { if(st.mode == Stonewt::STN) os< elseif (st.mode == Stonewt::INPD) os< elseif (st.mode == Stonewt::FPD) os< elseos<< "Error in type\n"; returnos; } //stone.cpp#include "stonewt.h" int main() { Stonewtincognito(275,Stonewt::FPD); Stonewtwolfe(285.7,Stonewt::STN); Stonewttaft(21,8,Stonewt::INPD); Stonewt temp; cout<< "The celebrity weighed"; cout<< incognito < cout<<"Incognito + Wolfe = " << temp < Stonewt::Stonewt(doublelbs) { stone =int(lbs) / Lbs_per_stn; pds_left = int(lbs) % Lbs_per_stn + lbs - int(lbs);pounds = lbs; } Stonewt::Stonewt(intstn,double lbs) { stone =stn; pds_left = lbs; pounds = stn * Lbs_per_stn + lbs; } Stonewt::Stonewt() { stone =pounds = pds_left = 0; } Stonewt::~Stonewt() { } boolStonewt::operator<(constStonewt&st)const { if (pounds returntrue; elsereturn false; } boolStonewt::operator<=(constStonewt&st)const { if (pounds<= st.pounds) returntrue; elsereturn false; } boolStonewt::operator>(constStonewt&st)const { if(pounds >st.pounds) return true; elsereturn false; } boolStonewt::operator>=(constStonewt&st)const { if(pounds >= st.pounds) return true; elsereturn false; } boolStonewt::operator==(constStonewt&st)const { if(pounds == st.pounds) return true; elsereturn false; } boolStonewt::operator!=(constStonewt&st)const { if(pounds != st.pounds) return true; elsereturn false; } ostream&operator<<(ostream&os,constStonewt&st) { os< } //stone.cpp#include "stonewt.h" int main() { Stonewtsw[6] = { 10.0, 11.0, 12.5 }; Stonewttemp(11.0); for (inti = 3; i< 6; i++) { double input; cout<<"Enter #" <> input; sw[i] =input; } for(inti = 0; i< 6; i++) cout<< "#" <
int count =0; Stonewt Min = sw[0]; Stonewt Max = sw[0]; for (inti = 0; i< 6; i++) { if (Min>sw[i]) Min =sw[i]; if (Max Max = sw[i]; if (temp >= sw[i])count++; } cout<<"The Min pounds: " << Min; cout<< "The Max pounds:" << Max; cout<< "The numbers not under 11 pounds: "<< count; cin.get();cin.get(); return 0; } 7、 #ifndefCOMPLEX_H_ #defineCOMPLEX_H_ #include #include #include classComplex { private: doublereal; double imaginary; public: Complex(); Complex(doublen1); Complex(doublen1, double n2); ~Complex(); Complexoperator+(const Complex &c)const; Complexoperator-(const Complex &c)const; Complexoperator*(const Complex &c)const; Complexoperator*(double n)const; Complex operator~()const; friendComplex operator*(double n, const Complex &c);friendostream&operator<<(ostream&os, const Complex &c);friendistream&operator>>(istream&is, Complex &c); }; #endif #include"complexh.h" Complex::Complex() { real = 0.0;imaginary = 0.0; } Complex::Complex(doublen1) { real = n1;imaginary = 0.0; } Complex::Complex(doublen1, double n2) { real = n1;imaginary = n2; } Complex::~Complex() { } ComplexComplex::operator+(const Complex &c)const { returnComplex(real + c.real, imaginary + c.imaginary); } ComplexComplex::operator-(const Complex &c)const { returnComplex(real - c.real, imaginary - c.imaginary); } ComplexComplex::operator*(const Complex &c)const { doublereal_s;doubleimaginary_s; real_s = real*c.real - imaginary*c.imaginary; imaginary_s =real*c.imaginary + imaginary*c.real; return Complex(real_s, imaginary_s); } ComplexComplex::operator*(double n)const { returnComplex(n*real, n*imaginary); } ComplexComplex::operator~()const { returnComplex(real, -imaginary); } Complexoperator*(double n, const Complex &c) { returnComplex(n*c.real, n*c.imaginary); } ostream&operator<<(ostream&os,const Complex &c) { os<<"(" < } istream&operator>>(istream&is,Complex &c) { cout<<"Real: "; if (is >>c.real) { cout<<"Imaginary: "; is>>c.imaginary; } return is; } //useComplex.cpp#include "complexh.h" int main() { Complexa(3.0, 4.0); Complex c; charch; cout<< "Enter a complex number (q toquit): "; while (cin>>ch) { if(ch == 'q' || ch == 'Q') break; else { 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 " << 2 * c << '\n'; } cout<<"Enter a complex number (q to quit): "; } cout<<"Done!\n"; cin.get(); cin.get(); return 0; } 第十二章编程练习答案 12.1 根据以下类声明,完成类,并编小程序使用它 //12.1根据以下类声明,完成类,并编小程序使用它 #include class Cow{ char name[20]; char * hobby; double weight; public: Cow(); Cow(const char* nm, const char * ho, double wt); Cow(const Cow & C); ~Cow(); void ShowCow()const; }; Cow::Cow(){} Cow::Cow(constchar * nm, const char * ho, double wt) { strcpy(name,nm); hobby=new char[strlen(ho)+1]; strcpy(hobby,ho); weight=wt; } Cow::Cow(constCow & C) { strcpy(name,C.name); hobby=new char[strlen(C.hobby)+1]; strcpy(hobby,C.hobby);weight=C.weight; } Cow::~Cow(){delete [] hobby;} void Cow::ShowCow() const { cout < } int main() { Cow cow; Cowccc("adads","dsdfsad",34);cow=ccc; cow.ShowCow(); ccc.ShowCow(); } 12.2 根据以下的主函数,编写类,使得: a.重载+,使得两个字符串可以合并为一个 b.使用 Stringlow()成员函数,使得字母可以转换为小写 c.使用 Stringup()成员函数,使得字母可转换为大写 d.提供一个成员函数,使它返回一个 char 字符出现的个数 //12.2根据以下的主函数,编写类,使得: //a.重载+,使得两个字符串可以合并为一个 //b.使用Stringlow()成员函数,使得字母可以转换为小写 //c.使用Stringup()成员函数,使得字母可转换为大写 //d.提供一个成员函数,使它返回一个char字符出现的个数 #include #include class String { char* mp_text; unsignedm_text_length; void assignMember (const char* text) { m_text_length = strlen(text); mp_text = new char [m_text_length + 1]; strcpy(mp_text, text); }public: staticconst unsigned k_buffer_max_size = 256; const char* toCstr () const { return (mp_text); } String (constchar* text = "") { assignMember(text); } String (constString& str) { assignMember(str.toCstr()); } ~String () { delete [] mp_text; } unsigned getLength ()const { return (m_text_length); } void stringup() { for (unsigned i = 0; i < m_text_length; ++i) mp_text[i]= (char)toupper(mp_text[i]); } voidstringlow () { for (unsigned i = 0; i < m_text_length; ++i) mp_text[i]= (char)tolower((int)mp_text[i]); }unsigned has (char ch) const { unsigned cnt = 0; for (unsigned i = 0; i< m_text_length; ++i) if (ch == mp_text[i]) ++cnt; return (cnt); } String&operator= (const String& str) { if (&str == this) return (*this);delete [] mp_text; assignMember(str.toCstr()); return (*this); } String &operator+= (const String& str) { return (*this += str); }char& operator[] (unsigned idx) { return (mp_text[idx]); } const char & operator[] (unsigned idx) const { return (mp_text[idx]); } friendostream & operator<< (ostream& os, const String& str) { os<< str.toCstr(); return (os); } friend istream & operator>>(istream& is, String& str) { char txt[k_buffer_max_size];if (is >> txt) str = txt; is.ignore(k_buffer_max_size, '\n'); return (is); } friend booloperator< (const String& lvalue, const String& rvalue) { return (strcmp(lvalue.toCstr(), rvalue.toCstr()) < 0); }friend bool operator> (const String& lvalue, const String& rvalue) { return (rvalue < lvalue); }friend bool operator== (const String& lvalue, const String& rvalue) { return (!(lvalue < rvalue) && !(lvalue > rvalue)); }friend bool operator<= (const String& lvalue, const String& rvalue) { return (!(lvalue > rvalue)); }friend bool operator>= (const String& lvalue, const String& rvalue) { return (!(lvalue < rvalue)); }friend String operator+ (const String& lvalue, const String& rvalue) { char* p_txt = new char[lvalue.getLength() + rvalue.getLength() + 1]; strcpy(p_txt, lvalue.toCstr()); strcat(p_txt,rvalue.toCstr()); String tmp(p_txt); delete [] p_txt; return (tmp); } }; int main() { String s1(" and I am a C++ student."); Strings2 = "Please enter your name:"; String s3; cout << s2; // overloaded < s2.stringup(); // converts string touppercase cout << "The string\n" < <<" 'A' characters init.\n"; s1 = "red"; // tstring(const char *), // then tstring &operator=(const string&) Stringrgb[3] = {String(s1), String("green"), String("blue")}; cout <<"enter the name of a primarycolor for mixing light: "; String ans; bool success = false;while (cin >>ans) { ans.stringlow(); // converts string tolowercase for (int i = 0; i < 3; i++) { if (ans == rgb[i]) // overloaded == operator { cout << "That's right!\n";success = true; break; } } if(success) break; else cout << "Try again!\n"; } cout << "Bye" << endl; } 12.3 重新编写程序清单 10.7,10.8,使用动态内存并重载<<代替 show() //12.3重新编写程序清单10.7,10.8,使用动态内存并重载<<代替show() #include Stock(){ company=new char[8]; strcpy(company,"no name");shares=0;share_val=0.0;total_val=0.0; } Stock(constchar *co,long n=0,doublepr=0) { int len=strlen(co); company=newchar[len+1];strcpy(company,co); if(n<0) { cout<<"Number of shares can't be negative;" < } ~Stock() {delete []company; } void buy(long num,double price) { if(num<0) { cout<<"Number of shares purchase can't benegative." <<" Transaction is aborted."< } else { shares+=num; share_val=price; set_tot(); } }void sell(long num,double price) { if(num<0) { cout<<"Number of shares sold can't be negative." <<"Transaction is aborted."< } elseif(num>shares) { cout<<"You can't sell more than you have!" <<"Transaction is aborted."< } else { shares-=num; share_val=price; set_tot(); } } voidupdate(double price) {share_val=price; set_tot(); } const Stock &topval(const Stock &s)const {if(s.total_val>total_val) return s; else return *this; } friend ostream&operator<<(ostream &os,const Stock &s) { ios_base::fmtflags orig=os.setf(ios_base::fixed,ios_base::floatfield);streamsize prec=os.precision(3);os<<"Company:"< <<" Shares:"< } }; constint STKS = 4; intmain() { // create an array ofinitialized objects Stock stocks[STKS] = { Stock("NanoSmart", 12, 20.0), Stock("Boffo Objects", 200, 2.0), Stock("Monolithic Obelisks", 130, 3.25), Stock("Fleep Enterprises", 60, 6.5) }; cout << "Stock holdings:\n"; intst; for (st = 0; st< STKS; st++) cout < // set pointer to firstelement const Stock * top = &stocks[0]; for (st = 1; st < STKS; st++) top =&top->topval(stocks[st]); // now top points to themost valuable holding cout << "\nMost valuableholding:\n"; cout << *top; return 0; } 12.4 按以下类声明,完成类,并编写一个演示程序 //12.4按以下类声明,完成类,并编写一个演示程序 #include classStack{ enum{MAX=10};Item * items; int size; int top; public: Stack(intn=MAX) { items=new Item [MAX]; top=0; size=0; } Stack(constStack &st) { items=new Item[st.size]; top=0; size=0; for(int i=0;i { items[i]=st.items[i]; size++; top++; } } ~Stack(){ delete [] items; } bool isEmpty() {return top==0; }bool isFull() {return top==MAX; } bool push(const Item &it) { if(isFull()) cout<<"error! Stack is full!"< { items[top++]=it;size++; return true; } return false; } bool pop(Item &item) { if(isEmpty()) cout<<"error! Stack is empty!"< { item=items[top--]; size--; return true; }return false; } Stack &operator = (Stack &st) { delete [] items; items=new Item[st.size]; top=0; size=0; for(int i=0;i {items[i]=st.items[i]; size++; top++; } return (*this); } friend ostream &operator<<(ostream &os,const Stack & st) { os<<"This Stack is:"< { cout< } }; int main () { Stacks; Item it[20]={ 0}; for(int i=0;i<11;i++) { it[i]=i+1; s.push(it[i]);} cout< Stacks1(s); cout<<"s1="< } 12.5-12.6 银行 ATM 顾客系统 // queue.h -- interfacefor a queue #ifndef QUEUE_H_ #define QUEUE_H_ // This queue will contain Customer items class Customer { private: long arrive; // arrival time for customer int processtime; // processing time for customer public: Customer(): arrive(0), processtime(0){}void set(long when); long when() const { return arrive; } int ptime() const {return processtime; } }; typedefCustomer Item; classQueue { private: // class scopedefinitions // Node is a nestedstructure definition local to this class structNode { Item item; struct Node * next;}; enum {Q_SIZE = 10}; // private class members Node * front; // pointer to front ofQueue Node * rear; // pointer to rear of Queue int items; // current number of items in Queue const int qsize; // maximum number of items in Queue // preemptive definitionsto prevent public copying Queue(const Queue & q) : qsize(0) { } Queue& operator=(const Queue & q) { return *this;} public: Queue(intqs = Q_SIZE); // create queue with a qs limit ~Queue();bool isempty() const; bool isfull() const; int queuecount() const; boolenqueue(const Item &item); // add item to end booldequeue(Item &item); // remove item from front }; #endif // queue.cpp -- Queue andCustomer methods #include "queue.h" #include // Queue methods Queue::Queue(intqs) : qsize(qs) { front = rear = NULL;// or nullptr items= 0; } Queue::~Queue() { Node *temp; while (front != NULL) // while queue is not yet empty { temp =front; // save address of front item front= front->next;// reset pointer to next item deletetemp; // delete former front } } boolQueue::isempty() const {return items == 0; } boolQueue::isfull() const { return items == qsize; } intQueue::queuecount() const { return items; } // Add item to queue bool Queue::enqueue(const Item & item) { if (isfull()) returnfalse; Node * add =new Node; // create node // on failure, new throwsstd::bad_alloc exception add->item = item; // set node pointers add->next= NULL; // or nullptr; items++; if (front == NULL) // if queue is empty, front = add; // place item at front else rear->next= add; // else place at rear rear = add; // have rear point to newnode return true; } // Place front item intoitem variable and remove from queue boolQueue::dequeue(Item & item) { if (front == NULL) return false; item = front->item; // set item to first itemin queue items--; Node *temp = front;// save location of first item front= front->next;// reset front to next item delete temp; // delete former firstitem if(items == 0) rear= NULL; return true; } // customer method // when is the time atwhich the customer arrives // the arrival time isset to when and the processing // time set to a random value in the range 1 - 3 void Customer::set(long when) { processtime = std::rand() % 3 + 1; arrive = when; } // bank.cpp -- using theQueue interface // compile with queue.cpp #include #include #include #include "queue.h" const int MIN_PER_HR = 60; bool newcustomer(double x); // is there a new customer? int main() { using std::cin; using std::cout; using std::endl; using std::ios_base; // setting things up std::srand(std::time(0));// random initializing of rand() cout << "Case Study: Bank of Heather Automatic Teller\n"; cout <<"Enter maximum size of queue:"; int qs; cin >> qs; Queue line(qs); // line queue holds up toqs people cout<< "Enter the number of simulation hours: "; int hours; // hours of simulation cin>> hours; // simulation will run 1cycle per minute long cyclelimit = MIN_PER_HR * hours; // # of cycles cout << "Enter the average number of customers per hour: "; double perhour; // average # of arrival per hour cin>> perhour; double min_per_cust;// average time betweenarrivals min_per_cust = MIN_PER_HR / perhour; Item temp; // new customer data long turnaways = 0; // turned away by full queue long customers = 0; // joined the queue long served = 0; // served during the simulation long sum_line = 0; // cumulative line length int wait_time = 0; // time until autoteller is free long line_wait = 0; // cumulative time in line // running the simulation for (int cycle= 0;cycle < cyclelimit; cycle++) { if (newcustomer(min_per_cust)) // have newcomer { if (line.isfull()) turnaways++; else { customers++; temp.set(cycle); // cycle = time of arrival line.enqueue(temp); // add newcomer to line } } if(wait_time <= 0 &&!line.isempty()) {line.dequeue (temp); // attend next customer wait_time = temp.ptime(); // for wait_time minutes line_wait+= cycle - temp.when(); served++; } if (wait_time > 0) wait_time--; sum_line += line.queuecount(); } // reporting results if (customers > 0) { cout <<"customers accepted: " << customers << endl; cout << " customers served: " < cout << "average queue size: "; cout.precision(2); cout.setf(ios_base::fixed, ios_base::floatfield); cout << (double) sum_line / cyclelimit<< endl; cout <<" average wait time: " <<(double) line_wait / served << "minutes\n"; } elsecout <<"No customers!\n"; cout <<"Done!\n"; // cin.get(); // cin.get(); return0; } // x = average time, in minutes, between customers // returnvalue is true if customer shows up this minute boolnewcustomer(double x) { return (std::rand()* x / RAND_MAX < 1); } 13.1根据Cd基类,完成派生出一个Classic类,并测试 //13.1根据Cd基类,完成派生出一个Classic类,并测试 #include // base class class Cd { char performers[50];char label[20]; int selections; // number ofselections double playtime; // playing time in minutes public: explicit Cd(const char *s1 = "", const char * s2 = "", int n = 0, double x = 0.0);virtual ~Cd() {} virtual void Report() const; //reports all CD data }; static void cpStr (char* p_des_txt,const char* p_src_txt, unsigned des_arr_size) { unsigned str_len = strlen(p_src_txt) < des_arr_size-1 ? strlen(p_src_txt) :des_arr_size-1; strncpy(p_des_txt, p_src_txt, str_len); p_des_txt[str_len] ='\0'; } Cd::Cd (const char * s1, const char *s2, int n, double x) : selections(n), playtime(x) { cpStr(performers, s1,50); cpStr(label, s2, 20); } void Cd::Report() const { cout << performers <<", "<< label << ", " << selections<< ", " << playtime < } class Classic : public Cd { static const unsigned mk_size = 64; char m_songs[mk_size]; public: Classic(constchar* songs_list = "", constchar* s1 = "", const char* s2 = "", int n = 0, double x = 0.0); virtual void Report() const;// reports all CD data }; Classic::Classic (const char*songs_list, const char * s1, constchar * s2, int n, double x) : Cd(s1, s2, n, x) { cpStr(m_songs,songs_list, mk_size); } void Classic::Report () const { Cd::Report(); cout << ", " < } void Bravo(const Cd & disk) { disk.Report(); cout<< endl; } int main() { Cd c1("Beatles","Capitol", 14, 35.5); Classic c2 = Classic("PianoSonata in B flat, Fantasia in C", "AlfredBrendel", "Philips", 2, 57.17); Cd *pcd = &c1; cout << "Using objectdirectly:\n"; c1.Report(); // use Cd method c2.Report(); // use Classicmethod cout << "Using type cd * pointer to objects:\n";pcd->Report(); // use Cd method for cd object pcd = &c2; pcd->Report(); // use Classicmethod for classic object cout << "Calling a function with a Cdreference argument:\n"; Bravo(c1); Bravo(c2); cout << "Testingassignment: "; Classic copy; copy = c2; copy.Report(); } 13.2对13.1,使用动态内存记录字符串 //13.2 对 13.1,使用动态内存记录字符串 #include // base class class Cd { char* performers; char* label; intselections; // number of selections double playtime; // playing time in minutespublic: explicit Cd(constchar * s1 = "", const char * s2 = "", int n = 0, double x =0.0); Cd(const Cd & d); virtual ~Cd(); virtual void Report() const; // reports all CD data Cd & operator=(const Cd & d); }; staticchar* cpNewStr (const char* p_src_txt) { unsigned str_len = strlen(p_src_txt); char*p_des_txt = new char [str_len + 1]; strcpy(p_des_txt, p_src_txt); return(p_des_txt); } Cd::Cd(const char * s1, const char * s2, int n, double x) : selections(n), playtime(x) { performers = cpNewStr(s1); label =cpNewStr(s2); } Cd::~Cd() { delete [] performers; delete [] label; } Cd::Cd(constCd & d) : selections(d.selections), playtime(d.playtime) { performers = cpNewStr(d.performers); label =cpNewStr(d.label); } Cd& Cd::operator=(const Cd & d) { if (&d == this) { return(*this); } delete [] performers; performers =cpNewStr(d.performers); delete [] label; label = cpNewStr(d.label); selections= d.selections; playtime = d.playtime; return (*this); } voidCd::Report() const { cout << performers << ", " << label<< ", " << selections << ", " << playtime<< flush; } // derive class Classic : public Cd { char* songs; public: explicit Classic(const char* songs_list = "", const char * s1 = "", constchar * s2 = "", int n = 0, double x = 0.0); Classic (constClassic& classic); virtual ~Classic (); Classic& operator= (const Classic&classic); virtual void Report() const; // reports all CD data }; Classic::Classic (const char* songs_list, constchar * s1, const char * s2, int n, double x) : Cd(s1, s2, n, x) { songs = cpNewStr(songs_list); } Classic::Classic(const Classic& classic) : Cd(classic) { songs = cpNewStr(classic.songs); } Classic::~Classic() { delete [] songs; } Classic& Classic::operator= (const Classic& classic) { if (&classic == this) return (*this);Cd::operator=(classic); delete [] songs; songs = cpNewStr(classic.songs);return (*this); } voidClassic::Report () const { Cd::Report(); cout << ", " << songs << endl; } voidBravo(const Cd & disk) { disk.Report(); cout << endl; } intmain() { Cd c1("Beatles", "Capitol", 14, 35.5); Classic c2 = Classic("Piano Sonata in Bflat, Fantasia in C", "Alfred Brendel", "Philips", 2,57.17); Cd *pcd = &c1; cout << "Using objectdirectly:\n"; c1.Report(); // use Cd method c2.Report(); // use Classicmethod cout << "Using type cd * pointer to objects:\n";pcd->Report(); // use Cd method for cd object pcd = &c2; pcd->Report(); // use Classic method forclassic object cout << "Calling a function with a Cd referenceargument:\n"; Bravo(c1);Bravo(c2); cout << "Testing assignment: ";Classic copy; copy = c2; copy.Report(); } 13.3让三个类从一个基类DMA继承而来,然后用程序清单13.10对比测试,基类使用虚类。 //13.3 让三个类从一个基类 DMA继承而来,然后用程序清单 13.10 对比测试,基类使用虚类。 #include classDMA{ string label; int rating; public: DMA(const string l="null",int r=0) { label=l; rating=r; } virtual void test(){}; virtualvoid tese2() {cout<<"test2"; } DMA(const DMA &rs) { label=rs.label; rating=rs.rating; } virtual ~DMA() {} stringlab() {return label;} int ra() {return rating;} friend ostream&operator<<(ostream &os,const DMA&rs) { os<<"label:"< int=""temp;="" cin="">>temp; cin.get();if(temp==1) pd[i]=new baseDMA(label,rat); elseif(temp==2) { cout<<"Enterthe color:"; string color; getline(cin,color); pd[i]=newlacksDMA(color,label,rat); } elseif(temp==3) { cout<<"Enterthe style:"; string style; getline(cin,style); pd[i]=newhasDMA(style,label,rat); } else { cout<<"invalidinput! try again!"< for(int=""i="0;i<3;i++)" pd[i]-="">show(); } 13.4根据Port类派生出一个VintagePort类,完成并测试 //13.4根据 Port 类派生出一个VintagePort 类,完成并测试 #include classPort { char * brand; char style[20]; // i.e., tawny, ruby, vintageint bottles; public: explicit Port(const char * br ="none", const char * st = "none", int b = 0); Port(constPort & p); // copy constructor virtual ~Port() { delete [] brand; } Port& operator=(const Port & p); virtual void Show() const; Port & operator+=(int b); // adds b to bottles Port & operator-=(int b); // subtracts bfrom bottles, if available int BottleCount() const { return bottles; } friend ostream & operator<<(ostream & os, constPort & p); }; staticchar* cpNewStr (const char* p_src_txt) { unsigned str_len = strlen(p_src_txt); char*p_des_txt = new char [str_len + 1]; strcpy(p_des_txt, p_src_txt); return (p_des_txt); } staticvoid cpStr (char* p_des_txt, const char* p_src_txt, unsigned des_arr_size) { unsigned str_len =strlen(p_src_txt) < des_arr_size-1 ? strlen(p_src_txt) : des_arr_size-1;strncpy(p_des_txt, p_src_txt, str_len); p_des_txt[str_len] = '\0'; } Port::Port(const char * br, const char * st, int b) : brand(cpNewStr(br)), bottles(b) { cpStr(style, st, 20); } Port::Port(constPort & p) : brand(cpNewStr(p.brand)), bottles(p.bottles) { cpStr(style, p.style, 20); } voidPort::Show() const { cout << "Brand: " < <<"Style: " << style << endl <<"Bottles: " << bottles << flush; } Port& Port::operator=(const Port & p) { if (&p == this) return (*this); delete [] brand; brand = cpNewStr(p.brand);cpStr(style, p.style, 20); bottles = p.bottles; return (*this); } Port& Port::operator+=(int b) { bottles += b; return (*this); } Port& Port::operator-=(int b) { bottles -= b; return (*this); } ostream& operator<< (ostream & os, const Port & p) { cout << p.brand << ", "<< p.style << ", " << p.bottles << flush;return (os); } classVintagePort : public Port // style necessarily = "vintage" { char * nickname; // i.e., "The Noble" or "OldVelvet", etc. int year; // vintage year public: explicit VintagePort(const char * br ="", int b = 0, const char * nn = "", int y = 0);VintagePort(const VintagePort & vp); virtual ~VintagePort() { delete []nickname; } VintagePort & operator=(const VintagePort & vp); virtualvoid Show() const; friend ostream & operator<<(ostream & os, constVintagePort & vp); }; VintagePort::VintagePort(const char * br, int b, const char * nn, int y) : Port(br, "vintage", b), nickname(cpNewStr(nn)),year(y) {} VintagePort::VintagePort(const VintagePort & vp) : Port(vp), nickname(cpNewStr(vp.nickname)), year(vp.year) {} voidVintagePort::Show () const { Port::Show(); cout << endl; cout << "Nickname: " < } VintagePort& VintagePort::operator= (const VintagePort & vp) { if (&vp == this) return (*this); Port::operator=(vp); delete []nickname; nickname = cpNewStr(vp.nickname); year = vp.year; return (*this); } ostream& operator<< (ostream & os, const VintagePort & vp) { os << Port(vp); cout << ", " < } intmain() { Port port1("gallo","tawny", 20); cout << port1 << endl << endl; VintagePort vp("gallo", 24,"nice", 16); VintagePort vp2(vp); cout << vp2 << endl<< endl; VintagePort vp3; vp3 = vp; cout << vp3 << endl<< endl; Port* p_port; p_port =&port1; p_port->Show(); cout << endl; p_port = &vp;p_port->Show(); cout << endl; } //14 1、 #ifndefWINEC_H_ #defineWINEC_H_ #include #include #include usingnamespace std; template { private: T1 year; T2 bottles;public: Pair(constT1 &yr, const T2 &bt) :year(yr), bottles(bt){} Pair(){} voidSet(const T1 &yr, const T2 &bt); int Sum()const; void Show(int y)const; }; template { year = yr;bottles = bt; } template { returnbottles.sum(); } template { for(inti = 0; i< y; i++) cout<< "\t" << year[i] <<"\t" << bottles[i] < } typedefvalarray class Wine { private: PairArrayyb;stringfullname; intyrs; public: Wine(){} Wine(constchar *l, int y, constintyr[], constint bot[]); Wine(const char *l, int y);voidGetBottles(); string&Label(); void Show()const; int sum()const; }; #endif #include"winec.h" Wine::Wine(constchar *l, int y, constintyr[], constint bot[]) { fullname =l; yrs = y; yb.Set(ArrayInt(yr, yrs), ArrayInt(bot, yrs)); } Wine::Wine(constchar *l, int y) { fullname =l; yrs = y; } voidWine::GetBottles() { ArrayIntyr(yrs),bt(yrs); for (inti = 0; i { cout<<"Enter the year: "; cin>>yr[i]; cout<< "Enter thebottles: "; cin>>bt[i]; } while(cin.get() != '\n') continue; yb.Set(yr,bt); } string&Wine::Label() { returnfullname; } voidWine::Show()const { cout<<"Wine: " < } intWine::sum()const { returnyb.Sum(); } //main.cpp#include "winec.h" intmain(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 " < << ": "< } 2、 #ifndefWINEC_H_ #defineWINEC_H_ #include #include template { private: T1 year; T2 bottles;public: Pair(constT1 &yr, const T2 &bt) :year(yr), bottles(bt){} Pair(){} voidSet(const T1 &yr, const T2 &bt); int Sum()const; void Show(int y)const; }; template { year = yr;bottles = bt; } template { returnbottles.sum(); } template { for(inti = 0; i< y; i++) cout<< "\t" << year[i] <<"\t" << bottles[i] < } typedefvalarray public: Wine(){} Wine(constchar *l, int y, constintyr[], constint bot[]); Wine(const char *l, int y);voidGetBottles(); string&Label(); void Show()const; int sum()const; }; #endif #include"winec.h" Wine::Wine(constchar *l, int y, constintyr[], constint bot[]) :string(l), yrs(y),PairArray(ArrayInt(yr, y), ArrayInt(bot, y)) { } Wine::Wine(constchar *l, int y) : string(l), yrs(y) { } voidWine::GetBottles() { ArrayIntyr(yrs),bt(yrs); for (inti = 0; i { cout<<"Enter the year: "; cin>>yr[i]; cout<< "Enter thebottles: "; cin>>bt[i]; } while(cin.get() != '\n') continue; PairArray::Set(yr,bt); } string&Wine::Label() { return(string &)(*this); } voidWine::Show()const { cout<<"Wine: " << (string &)(*this) < } intWine::sum()const { returnPairArray::Sum(); } //main.cpp#include "winec.h" intmain(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 " < << ": "< } 3、 #ifndefQUEUETP_H_ #defineQUEUETP_H_ #include #include template { 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 QueueTp { front =rear = NULL; items = 0; } template { Node *temp;while (front != NULL) { temp = front; front =front->next; delete temp; } } template { returnitems == 0; } template { returnitems == qsize; } template { returnitems; } template {if (isfull()) returnfalse; Node *add =new Node; add->item = item; add->next = NULL; items++; if (front == NULL) front = add; else rear->next= add; rear = add;return true; } template { if(front == NULL) return false; item =front->item; items--; Node *temp= front; front =front->next; delete temp; if (items == 0) rear = NULL; returntrue; } classWorker { private:stringfullname; long id; public: Worker():fullname("no one"), id(0L){} Worker(conststring &s, long n) :fullname(s), id(n){} ~Worker();void Set(); void Show()const; }; #endif #include"queuetp.h" Worker::~Worker(){} voidWorker::Show()const { cout<<"Name: " < } voidWorker::Set() { cout<<"Enter worker's name: "; getline(cin, fullname); cout<<"Enter worker's ID: "; cin>> id; while (cin.get() != '\n')continue; } #include "queuetp.h" constint Size = 5; int main() { QueueTp 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"; else lolas.dequeue(temp); break; } } cout<<"\nHere the total count: "; cout< } 4、 #ifndefPERSON_H_ #definePERSON_H_ #include #include #include { private: stringfirstname;stringlastname; protected: virtualvoid Data()const; virtual void Get(); public: Person():firstname("noone"),lastname("no one"){} Person(conststring &f,const string &l):firstname(f),lastname(l){} Person(constPerson &p):Person(p){} virtual ~Person() = 0; virtual void Set() = 0;virtual void Show()const = 0; }; classGunslinger:virtualpublic 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:virtualpublic Person { protected:void Data()const; public: PokerPlayer():Person(){} PokerPlayer(conststring &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(constGunslinger &g) :Person(g),Gunslinger(g),PokerPlayer(g){}BadDude(intnk, constPokerPlayer&po) :Person(po),Gunslinger(nk, po), PokerPlayer(po){} doubleGdraw()const; intCdraw()const; voidSet(); void Show()const; }; #endif #include"person.h" Person::~Person(){} voidPerson::Data()const { cout<<"First name is : " < } voidPerson::Get() { cout<< "Enter firstname: \n"; getline(cin, firstname); cout<< "Enter last name:\n"; getline(cin, lastname); } voidPerson::Show()const { Data(); } voidPerson::Set() { Get(); } voidGunslinger::Data()const { cout<<"Nick is :" < } voidGunslinger::Get() { cout<<"Enter Nick: \n"; cin>>numsk; } voidGunslinger::Set() { cout<<"Enter Guns name: \n"; Person::Get(); Get(); } voidGunslinger::Show()const { cout<<"Gunslinger: \n"; Person::Data(); Data(); } doubleGunslinger::Draw()const { returnrand() % 3 + 1; } intPokerPlayer::Draw()const { returnrand() % 52 + 1; } voidPokerPlayer::Data()const { cout<<"The cards :" << Draw() < } voidPokerPlayer::Show()const { cout<<"PokerPlayer :\n"; Person::Data(); Data(); } doubleBadDude::Gdraw()const { returnGunslinger::Draw(); } intBadDude::Cdraw()const { returnPokerPlayer::Draw(); } voidBadDude::Data()const { Gunslinger::Data();PokerPlayer::Data(); cout<< "The next cards: " < } 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" constintSize=5; int main () { Person*per[Size]; intct; for (ct =0; ct< Size; ct++) { charchoice; 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 { cout< } for(i = 0; i cout<<"Bye\n"; system("pause"); return 0; } 5、 #ifndefEMP_H_ #defineEMP_H_ #include classabstr_emp { private: stringfname;stringlname; string job; public: abstr_emp();abstr_emp(const string &fn, const string &ln, const string &j); virtualvoid ShowAll()const; virtual void SetAll();friendostream&operator<<(ostream&os, constabstr_emp&e);virtual ~abstr_emp() = 0; }; classemployee :public abstr_emp { public: employee();employee(const string &fn, const string &ln, const string &j); virtualvoid ShowAll()const; virtual void SetAll(); }; classmanager :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: conststring ReportsTo()const{ return reportsto; } string&ReportsTo(){ returnreportsto; } public: fink(); fink(conststring &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 voidSetAll(); }; #endif //emp.cpp#include "emp.h" abstr_emp::abstr_emp():fname("no one"), lname("no one"), job("no job") { } abstr_emp::abstr_emp(conststring &fn, const string &ln, const string &j) : fname(fn),lname(ln), job(j) { } voidabstr_emp::ShowAll()const { cout<< "Firstname:" < } voidabstr_emp::SetAll() { cout<<"Enter firstname: "; getline(cin, fname); cout<< "Enterlastname: "; getline(cin, lname); cout<< "Enter position:"; getline(cin, job); } ostream&operator<<(ostream&os,constabstr_emp&e) { os< } abstr_emp::~abstr_emp() { } employee::employee():abstr_emp() { } employee::employee(conststring &fn, const string &ln, const string &j) : abstr_emp(fn, ln,j) { } voidemployee::ShowAll()const { abstr_emp::ShowAll(); } voidemployee::SetAll() { abstr_emp::SetAll(); } manager::manager():abstr_emp() { } manager::manager(conststring &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(constmanager &m) : abstr_emp(m) { } voidmanager::ShowAll()const { abstr_emp::ShowAll();cout<< "Inchargeof: " < } voidmanager::SetAll() { abstr_emp::SetAll();cout<< "Enter inchargeof: "; (cin>>inchargeof).get(); } fink::fink():abstr_emp() { } fink::fink(conststring &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(constfink &e) : abstr_emp(e) { } voidfink::ShowAll()const { abstr_emp::ShowAll();cout<< "Reportsto: " < } voidfink::SetAll() { abstr_emp::SetAll();cout<< "Enter reportsto: "; cin>>reportsto; } highfink::highfink():abstr_emp(), manager(), fink() { } highfink::highfink(conststring &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(constfink &f, intico) : abstr_emp(f), manager(f, ico), fink(f) { } highfink::highfink(constmanager &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()< }voidhighfink::SetAll() { abstr_emp::SetAll();manager::getInCharge(); fink::getReportsTo(); } //useemp.cpp#include "emp.h" intmain(void) { employeeem("Trip","Harris", "Thumper"); cout<
finkfi("Matt", "Oggs", "Oiler", "JunoBarr"); cout<< fi < 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; } //15 1、 #ifndefTV_H_ #defineTV_H_ #include classTv { friendclass Remote; public: enum { Off,On }; enum { MinVal, MaxVal = 20 }; enum { Antenna, Cable }; enum { TV, DVD };enum { USUAL, EXCHANGE }; Tv(ints = Off, int mc = 125) :state(s), volume(5), maxchannel(mc), channel(2),mode(Cable), input(TV){} ~Tv(){} voidonoff(){state = (state == On) ? Off : On; } boolison()const{ return state == On; }boolvolup(); boolvoldown(); voidchanup(); voidchandown(); voidset_mode(){mode = (mode == Antenna) ? Cable : Antenna; } voidset_input(){ input = (input== TV) ? DVD : TV; } void settings()const; voidset_rmode(Remote &r);private: int state; int volume; intmaxchannel; int channel; int mode; intinput; }; classRemote { private: friendclass Tv; enum {USUAL, EXCHANGE }; int mode; intfmode; public: Remote(intm = Tv::TV, int f = USUAL) :mode(m), fmode(f){} boolvolup(Tv&t){ returnt.volup(); } boolvoldown(Tv&t){ return t.voldown(); } voidonoff(Tv&t){t.onoff(); } voidchanup(Tv&t){ t.chanup(); } voidchandown(Tv&t){t.chandown(); } voidset_chan(Tv&t, int c){ t.channel = c; }voidset_mode(Tv&t){ t.set_mode(); } voidset_input(Tv&t){ t.set_input();} voidmode_show()const{ cout<< "Remote pretent mode is "< }; inline voidTv::set_rmode(Remote &r) {if (ison()) { r.fmode =Remote::EXCHANGE; r.mode_show(); } } #endif #ifndefTVFM_H_ #define TVFM_H_ #include classTv; classRemote { public: enum State{Off, On }; enum { MinVal, MaxVal = 20 }; enum { Antenna, Cable }; enum { TV,DVD }; private: int mode;public: Remote(intm = TV) :mode(m){} boolvolup(Tv&t); boolvoldown(Tv&t);voidonoff(Tv&t); voidchanup(Tv&t); voidchandown(Tv&t);voidset_chan(Tv&t, int c); voidset_mode(Tv&t); voidset_input(Tv&t); }; classTv { public: friend voidRemote::set_chan(Tv&t, int c); enum State{ Off, On }; enum { MinVal, MaxVal= 20 }; enum { Antenna, Cable }; enum { TV, DVD }; Tv(ints = Off, int mc = 125) :state(s), volume(5), maxchannel(mc), channel(2),mode(Cable), input(TV){} ~Tv(){} voidonoff(){state = (state == On) ? Off : On; } boolison()const{ return state == On; }boolvolup(); boolvoldown(); voidchanup(); voidchandown(); voidset_mode(){mode = (mode == Antenna) ? Cable : Antenna; } voidset_input(){ input = (input== TV) ? DVD : TV; } void settings()const; private:int state; int volume; intmaxchannel; int channel; int mode; int input; }; inlineboolRemote::volup(Tv&t){ return t.volup(); } inlineboolRemote::voldown(Tv&t){ return t.voldown(); } inline voidRemote::onoff(Tv&t){ t.onoff(); } inline void Remote::chanup(Tv&t){t.chanup(); } inline void Remote::chandown(Tv&t){ t.chandown(); } inlinevoid Remote::set_chan(Tv&t, int c){ t.channel = c; } inline voidRemote::set_mode(Tv&t){ t.set_mode(); } inline voidRemote::set_input(Tv&t){ t.set_input(); } #endif #include"tv.h" //#include "tvfm.h" boolTv::volup() { if (volume { volume++;return true; } elsereturn false; } boolTv::voldown() { if(volume>MinVal) { volume--;return true; } elsereturn false; } voidTv::chanup() { if(channel else channel =1; } voidTv::chandown() { if(channel>1) channel--; elsechannel = maxchannel; } voidTv::settings()const { cout<<"TV is " << (state == Off ? "Off" : "On")< { cout<< "Volume setting =" << volume < } } //use_tv.cpp#include "tv.h" int main() { Tvs42; Remote grey; grey.mode_show(); cout<< "Initial settings for42\" TV:\n"; s42.settings(); s42.onoff(); s42.chanup(); cout<<"\nAdjusted settings for 42\" TV:\n"; s42.settings(); s42.set_rmode(grey);grey.set_chan(s42, 10); grey.volup(s42); grey.volup(s42); cout<<"\n42\" settings after using remote:\n"; s42.settings(); Tvs58(Tv::On);s58.set_mode(); grey.set_chan(s58, 28); cout<< "\n58\"settings:\n"; s58.settings(); s58.set_rmode(grey);system("pause"); return 0; } 2、 #ifndefEXC_MEAN_H_ #defineEXC_MEAN_H_ #include #include #include classbad_hmean:public logic_error { private:string name; public: explicitbad_hmean(const string&n = "hmean", const string &s = "Error inhmean()\n"); stringmesg(); virtual ~bad_hmean()throw(){} }; bad_hmean::bad_hmean(conststring &n, const string &s) :name(n), logic_error(s) { } inlinestring bad_hmean::mesg() { return"hmean() arguments a=-b should be div a+b=0!\n"; } classbad_gmean:public logic_error { private:string name; public: explicitbad_gmean(conststring &n = "gmean", const string &s = "Error ingmean()\n"); stringmesg(); virtual ~bad_gmean()throw(){} }; bad_gmean::bad_gmean(conststring &n, const string &s) :name(n), logic_error(s) { } inlinestring bad_gmean::mesg() { return"gmean() arguments should be >= 0\n"; } #endif #include"exc_mean.h" doublehmean(doublea, double b); doublegmean(double a, double b); int main() { 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 < <<"is " < } catch(bad_hmean&bg) { cout< } catch(bad_gmean&hg) { cout< cout<<"Error message: \n" < } } cout<<"Bye!\n"; system("pause"); return 0; } doublehmean(doublea, double b) { if(a == -b) throwbad_hmean(); return2.0*a*b / (a + b); } doublegmean(doublea, double b) { if(a < 0 || b < 0) throwbad_gmean(); returnsqrt(a*b); } 3、 #ifndefEXC_MEAN_H_ #defineEXC_MEAN_H_ #include #include #include classbad_hmean:public logic_error { private: stringname; public: double v1;double v2; explicitbad_hmean(doublea = 0, double b = 0, const string &s = "Error in hmean()\n"); voidmesg();virtual ~bad_hmean()throw(){} }; bad_hmean::bad_hmean(doublea, double b, const string &s) :v1(a),v2(b), logic_error(s) { name ="hmean"; } inline voidbad_hmean::mesg() { cout< <<") arguments a=-b should be div a+b=0!\n"; } classbad_gmean:public bad_hmean { private:string name; public: explicitbad_gmean(doublea = 0, double b = 0, const string &s = "Error in gmean()\n"); voidmesg();virtual ~bad_gmean()throw(){} }; bad_gmean::bad_gmean(doublea, double b, const string &s) :bad_hmean(a,b, s) { name ="gmean"; } inline voidbad_gmean::mesg() { cout< be >=0\n"; } #endif #include"exc_mean.h" doublehmean(doublea, double b); doublegmean(double a, double b); int main() { 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 < <<"is " < } catch(bad_gmean&hg) { cout< } catch(bad_hmean&bg) { cout< } } cout<<"Bye!\n"; system("pause"); return 0; } doublehmean(doublea, double b) { if(a == -b) throwbad_hmean(); return2.0*a*b / (a + b); } doublegmean(doublea, double b) { if (a <0 || b < 0) throwbad_gmean(); returnsqrt(a*b); } 4、 #ifndefSALES_H_ #defineSALES_H_ #include #include #include #include class Sales { public: enum {MONTHS = 12 }; classbad_index:publiclogic_error { private:int bi; public: explicitbad_index(intix, const string &s = "Index error in Sales object\n");intbi_val()const { return bi; } virtual ~bad_index()throw(){} }; explicitSales(intyy = 0); Sales(intyy, const double *gr, int n); virtual ~Sales(){} intYear()const { return year; } virtual double operator[](inti)const; virtualdouble &operator[](inti); private: doublegross[MONTHS]; int year; }; classLabeledSales:public Sales { public:classnbad_index :public Sales::bad_index { private:std::stringlbl; public: nbad_index(conststring &lb, int ix, const string &s = "Index error in LabeledSalesobject\n"); conststring &label_val()const { return lbl; } virtual ~nbad_index()throw(){} }; explicitLabeledSales(conststring &lb = "none", intyy = 0); LabeledSales(const string&lb, intyy, const double *gr, int n); virtual ~LabeledSales(){} conststring &Label()const { return label; } virtual doubleoperator[](inti)const; virtual double &operator[](inti); private: stringlabel; }; #endif #include"sales.h" Sales::bad_index::bad_index(intix, const string &s) :logic_error(s), bi(ix) { } Sales::Sales(intyy) { year = yy; for (inti = 0; i } Sales::Sales(intyy,const double *gr, int n) { year = yy;intlim = (n < MONTHS) ? n : MONTHS; inti; for(i = 0; i for(; i< MONTHS; ++i) gross[i] = 0; } doubleSales::operator[](inti)const { if (i< 0|| i>= MONTHS) throwbad_index(i); returngross[i]; } double&Sales::operator[](inti) { if (i< 0|| i>= MONTHS) throwbad_index(i); returngross[i]; } LabeledSales::nbad_index::nbad_index(conststring &lb, int ix, const string &s) :Sales::bad_index(ix, s) { lbl = lb; } LabeledSales::LabeledSales(conststring &lb, intyy) : Sales(yy) { label = lb; } LabeledSales::LabeledSales(conststring &lb, intyy, const double *gr, int n) : Sales(yy, gr, n) { label = lb; } doubleLabeledSales::operator[](inti)const { if (i< 0|| i>= MONTHS) thrownbad_index(Label(),i); returnSales::operator[](i); } double&LabeledSales::operator[](inti) { if (i< 0|| i>= MONTHS) thrownbad_index(Label(),i); returnSales::operator[](i); } //use_sales.cpp#include "sales.h" int main() { doublevals1[12] = { 1220, 1100,1122, 2212, 1232, 2334, 2884, 2393,3302, 2922, 3002, 3544 }; doublevals2[12] = { 12, 11, 22,21, 32, 24, 28, 29, 33,29, 32, 35 }; Salessales1(2011, vals1, 12); LabeledSalessales2("Blogstar",2012, vals2, 12); Sales::bad_index *s;LabeledSales::nbad_index *l; cout<< "First try block:\n"; try {inti; cout<<"Year = " << sales1.Year() < { cout< } cout<<"Year = " << sales2.Year() < { cout< } cout<<"End of try block 1.\n"; } catch(logic_error&bad) { cout< if (l =dynamic_cast { cout<<"Comany: " << l->label_val() < } elseif (s = dynamic_cast } cout<<"\nNext try block:\n"; try { sales2[2] =37.5; sales1[20] = 23345; cout<< "End of try block 2.\n"; } catch(logic_error&bad) { cout< { cout<<"Comany: " << l->label_val() < } elseif (s = dynamic_cast } cout<<"done\n"; system("pause"); return 0; } //pe16-1.cpp -- one of many possible solutions #include intmain() {std::string input; std::cout << "Enter a string (empty string toquit):\n"; std::getline(std::cin,input);while (std::cin && input.size() > 0) { if (isPal(input)) std::cout <<"That was a palindrome!\n"; elsestd::cout << "That was not a palindrome!\n"; std::cout<< "Enter a string (empty string to quit):\n"; std::getline(std::cin,input); } std::cout<< "Bye!\n"; return0; } boolisPal(const std::string & s) {std::string rev(s.rbegin(), s.rend()); // construct reversed string //some older compilers don’t implement the above constructor //another approach is this // std::string rev(s); // revsame size as s //copy(s.rbegin(), s.rend(), rev.begin()); return(rev == s); } //pe16-4.cpp -- one possibility #include #include intreduce(long ar[], int n); void show(const long ar[], int n); int main() { long myarray[MAX] = {12, 12 ,5, 6,11, 5, 6, 77, 11,12}; show(myarray, MAX); int newsize = reduce(myarray,MAX); show(myarray,newsize); return (0); } intreduce(long ar[], int n) { // orone could copy to a list and use list methods // orcopy to a set; in either case, copy results //back to array std::sort(ar, ar + n); long * past_end; past_end= std::unique(ar, ar + n); return past_end - ar; } voidshow(const long ar[], int n) { for (int i = 0; i < n; i++) std::cout << ar[i] << ' '; std::cout<< std::endl; } //pe16-8.cpp #include #include #include #include #include { using namespace std; string temp; set cout<< "Enter Mat's guest list (empty line to quit):\n"; while(getline(cin,temp) && temp.size() > 0) mats.insert(temp); ostream_iterator cout << "Mat's guest list:\n"; copy(mats.begin(),mats.end(), out); set cout<< "Enter Pat's guest list (empty line to quit):\n"; while(getline(cin,temp) && temp.size() > 0) pats.insert(temp); cout << "\nPat's guest list:\n"; copy(pats.begin(),pats.end(), out); set set_union(mats.begin(),mats.end(), pats.begin(), pats.end(),insert_iterator cout << "\nMerged guest list:\n"; copy(both.begin(),both.end(), out); return0; } //pe17-1.cpp #include intmain(void) {using namespace std; char ch; int count = 0; while (cin.get(ch) && ch != '$') count++; if (ch== '$') cin.putback(ch); else cout << "End of input was reached\n"; cout<< count << " characters read\n"; cin.get(ch); cout<< "Then next input character is " << ch << endl;return 0; } //pe17-3.cpp #include #include intmain(int argc, char * argv[]) {using namespace std; if(argc < 3) { cerr << "Usage: " << argv[0] <<" source-file target-file\n"; exit(EXIT_FAILURE); } ifstreamfin(argv[1]); if (!fin) { cerr << "Can't open "<< argv[1] << " for input\n"; exit(EXIT_FAILURE); } ofstreamfout(argv[2]); if (!fout) { cerr << "Can't open "<< argv[2] << " for output\n"; exit(EXIT_FAILURE); } char ch; while (fin.get(ch)) fout << ch; cout<< "Contents of " << argv[1] << " copied to" < } //pe17-5.cpp #include #include #include #include #include #include intmain() {using namespace std; ifstream mat("mat.dat"); if (!mat.is_open()) { cerr << "Can't open mat.dat.\n"; exit(1);} ifstreampat("pat.dat"); if (!pat.is_open()) { cerr << "Can't open pat.dat.\n"; exit(1); } ofstreammatnpat("matnpat.dat"); if (!matnpat.is_open()) { cerr << "Can't open pat.dat.\n"; exit(1); } stringtemp; set ostream_iterator cout << "Mat's guest list:\n"; copy(mats.begin(),mats.end(), out); set cout << "\nPat's guest list:\n"; copy(pats.begin(),pats.end(), out); ostream_iterator set_union(mats.begin(),mats.end(), pats.begin(), pats.end(),insert_iterator cout << "\nMerged guest list:\n"; copy(both.begin(),both.end(), out); copy(both.begin(), both.end(), fout); return0; } if(!pat.is_open()) { cerr << "Can't open pat.dat.\n"; exit(1); } ofstreammatnpat("matnpat.dat"); if (!matnpat.is_open()) { cerr << "Can't open pat.dat.\n"; exit(1);} string temp; set ostream_iterator cout << "Mat's guest list:\n"; copy(mats.begin(),mats.end(), out); set cout << "\nPat's guest list:\n"; copy(pats.begin(),pats.end(), out); ostream_iterator set_union(mats.begin(),mats.end(), pats.begin(), pats.end(),insert_iterator cout<< "\nMerged guest list:\n"; copy(both.begin(), both.end(),out); copy(both.begin(), both.end(), fout); return 0; } //pe17-7.cpp #include #include #include #include #include voidShowStr(const std::string & s); voidGetStrs(std::istream & is, std::vector classStore { public: std::ostream& os; Store(std::ostream & o) : os(o) {} void operator()(const std::string &s); }; intmain() { using namespace std; vector //acquire strings cout << "Enter strings (empty line toquit):\n"; while (getline(cin,temp) && temp[0] != '\0')vostr.push_back(temp); cout << "Here is your input.\n";for_each(vostr.begin(), vostr.end(), ShowStr); //store in a file ofstream fout("strings.dat", ios_base::out | ios_base::binary); for_each(vostr.begin(), vostr.end(), Store(fout));fout.close(); // recoverfile contents vector ifstreamfin("strings.dat",ios_base::in|ios_base::binary);if (!fin.is_open()) { cerr << "Could not open file for input.\n"; exit(EXIT_FAILURE); } GetStrs(fin,vistr); cout<< "\nHere are the strings read from the file:\n";for_each(vistr.begin(), vistr.end(), ShowStr); return0; } voidShowStr(const std::string & s) {std::cout << s << std::endl; } voidStore::operator()(const std::string &s) {std::size_t len = s.size(); os.write((char*)&len, sizeof(std::size_t)); os.write(s.data(), len); } voidGetStrs(std::istream & is, std::vector { std::string temp; size_t len; while(is.read((char *) &len, sizeof(size_t)) && len > 0) { char ch; temp = ""; for(int j = 0; j < len; j++) { if(is.read(&ch, 1)) { temp+= ch; } elsebreak; } if(is) vs.push_back(temp); } }//ex10.1
//vector.h
//vector.cpp
//vector.h
//vector.cpp
//vector.h
//vector.cpp
//mytime.h
//mytime.cpp
//stonewt.h
//complexh.h
//complex.cpp
第十三章编程练习答案
//winec.h
//winec.cpp
//winec.h
//winec.cpp
//queuetp.h
//workermi.cpp
//main.cpp
//person.h
//person.cpp
//emp.h
//tv.h
//tvfm.h
//tv.cpp
//exc_mean.h
//error.cpp
//exc_mean.h
//error.cpp
//sales.h
//sales.cpp
Chapter 16
PE 16-1
PE 16-4
PE 16-8
Chapter 17
PE 17-1
PE 17-3
PE 17-5
PE 17-7