c++primerplus(第六版)课后编程练习答案
C++Primer Plus(第6版)中文版编程练习答案--第五章

9.
#include<iostream> #include<cstring> #include<string> using namespace std; int main() { string word; int i=0; cout<<"enter words(to stop, type the word done):"<<endl; cin>>word; while(word!="done") { i++; cin>>word; } cout<<"you entered a total of "<<i<<" words."<<endl; return 0; }
8.
#include<iostream> #include<cstring> using namespace std; int main() { char word[20]; int i=0;
5
cout<<"enter words(to stop, type the word done):"<<endl; cin>>word; while(strcmp(word,"done")!=0) { i++; cin>>word; } cout<<"you entered a total of "<<i<<" words."<<endl; return 0; }
C++ primer plus(第6版)中文版编程练习答案第15章

1、//tv.h#ifndef TV_H_#define TV_H_#include <iostream>using namespace std;classTv{friend class Remote;public:enum { Off, On };enum { MinVal, MaxVal = 20 };enum { Antenna, Cable };enum { TV, DVD };enum { USUAL, EXCHANGE };Tv(int s = 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;int input;};class Remote{private:friend class Tv;enum { USUAL, EXCHANGE };int mode;intfmode;public:Remote(int m = Tv::TV, int f = USUAL) :mode(m), fmode(f){}boolvolup(Tv&t){ return t.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 " <<fmode<<endl; } };inline void Tv::set_rmode(Remote &r){if (ison()){r.fmode = Remote::EXCHANGE;r.mode_show();}}#endif//tvfm.h#ifndef TVFM_H_#define TVFM_H_#include <iostream>using namespace std;classTv;class Remote{public:enum State{ Off, On };enum { MinVal, MaxVal = 20 };enum { Antenna, Cable };enum { TV, DVD };private:int mode;public:Remote(int m = 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 void Remote::set_chan(Tv&t, int c);enum State{ Off, On };enum { MinVal, MaxVal = 20 };enum { Antenna, Cable };enum { TV, DVD };Tv(int s = 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;};inlinebool Remote::volup(Tv&t){ return t.volup(); }inlinebool Remote::voldown(Tv&t){ return t.voldown(); } inline void Remote::onoff(Tv&t){ t.onoff(); }inline void Remote::chanup(Tv&t){ t.chanup(); }inline void Remote::chandown(Tv&t){ t.chandown(); } inline void Remote::set_chan(Tv&t, int c){ t.channel = c; } inline void Remote::set_mode(Tv&t){ t.set_mode(); } inline void Remote::set_input(Tv&t){ t.set_input(); }#endif//tv.cpp#include "tv.h"//#include "tvfm.h"boolTv::volup(){if (volume <MaxVal){volume++;return true;}elsereturn false;}boolTv::voldown(){if (volume>MinVal){volume--;return true;}elsereturn false;}voidTv::chanup(){if (channel <maxchannel)channel++;elsechannel = 1;}voidTv::chandown(){if (channel>1)channel--;elsechannel = maxchannel;}voidTv::settings()const{cout<< "TV is " << (state == Off ? "Off" : "On") <<endl;if (state == On){cout<< "Volume setting = " << volume <<endl;cout<< "Channel setting = " << channel <<endl;cout<< "Mode = " << (mode == Antenna ? "antenna" : "cable") <<endl;cout<< "Input = " << (input == TV ? "TV" : "DVD") <<endl;}}//use_tv.cpp#include "tv.h"int main(){Tv s42;Remote grey;grey.mode_show();cout<< "Initial settings for 42\" 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、//exc_mean.h#ifndef EXC_MEAN_H_#define EXC_MEAN_H_#include <iostream>#include <cmath>#include <stdexcept>#include <string>using namespace std;classbad_hmean :public logic_error{private:string name;public:explicitbad_hmean(const string &n = "hmean", const string &s = "Error in hmean()\n");stringmesg();virtual ~bad_hmean()throw(){}};bad_hmean::bad_hmean(const string &n, const string &s) :name(n), logic_error(s){}inline string 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(const string &n = "gmean", const string &s = "Error in gmean()\n");stringmesg();virtual ~bad_gmean()throw(){}};bad_gmean::bad_gmean(const string &n, const string &s) :name(n), logic_error(s){inline string bad_gmean::mesg(){return "gmean() arguments should be >= 0\n";}#endif//error.cpp#include "exc_mean.h"doublehmean(double a, 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 <<endl;cout<< "Geomettric mean of " << x << " and " << y<<" is " <<gmean(x, y) <<endl;cout<< "Enter next set of numbers <q to quit>: ";}catch (bad_hmean&bg){cout<<bg.what();cout<< "Error message: \n" <<bg.mesg() <<endl;cout<< "Try again.\n";continue;}catch (bad_gmean&hg){cout<<hg.what();cout<< "Error message: \n" <<hg.mesg() <<endl;cout<< "Sorry, you don't get to play and more.\n";break;}}cout<< "Bye!\n";system("pause");return 0;}doublehmean(double a, double b){if (a == -b)throwbad_hmean();return 2.0*a*b / (a + b);}doublegmean(double a, double b){if (a < 0 || b < 0)throwbad_gmean();returnsqrt(a*b);}3、//exc_mean.h#ifndef EXC_MEAN_H_#define EXC_MEAN_H_#include <iostream>#include <cmath>#include <stdexcept>#include <string>using namespace std;classbad_hmean :public logic_error{private:string name;public:double v1;double v2;explicitbad_hmean(double a = 0, double b = 0,const string &s = "Error in hmean()\n");voidmesg();virtual ~bad_hmean()throw(){}};bad_hmean::bad_hmean(double a, double b, const string &s) :v1(a), v2(b), logic_error(s){name = "hmean";}inline void bad_hmean::mesg(){cout<< name << "(" << v1 << ", " << v2<< ") arguments a=-b should be div a+b=0!\n";}classbad_gmean :public bad_hmean{private:string name;public:explicitbad_gmean(double a = 0, double b = 0,const string &s = "Error in gmean()\n");voidmesg();virtual ~bad_gmean()throw(){}};bad_gmean::bad_gmean(double a, double b, const string &s):bad_hmean(a, b, s){name = "gmean";}inline void bad_gmean::mesg(){cout<< name << "(" <<bad_hmean::v1 << ", " <<bad_hmean::v2 << ") arguments should be >= 0\n";}#endif//error.cpp#include "exc_mean.h"doublehmean(double a, 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 <<endl;cout<< "Geomettric mean of " << x << " and " << y<<" is " <<gmean(x, y) <<endl;cout<< "Enter next set of numbers <q to quit>: ";}catch (bad_gmean&hg){cout<<hg.what();cout<< "Error message: \n";hg.mesg();cout<<endl;cout<< "Sorry, you don't get to play and more.\n";break;}catch (bad_hmean&bg){cout<<bg.what();cout<< "Error message: \n";bg.mesg();cout<<endl;cout<< "Try again.\n";continue;}}cout<< "Bye!\n";system("pause");return 0;}doublehmean(double a, double b){if (a == -b)throwbad_hmean();return 2.0*a*b / (a + b);}doublegmean(double a, double b){if (a < 0 || b < 0)throwbad_gmean();returnsqrt(a*b);}4、//sales.h#ifndef SALES_H_#define SALES_H_#include <stdexcept>#include <string>#include <cstring>#include <iostream>#include <cstdlib>using namespace std;class Sales{public:enum { MONTHS = 12 };classbad_index:publiclogic_error{private:int bi;public:explicitbad_index(int ix, const string &s = "Index error in Sales object\n");intbi_val()const { return bi; }virtual ~bad_index()throw(){}};explicit Sales(intyy = 0);Sales(intyy, const double *gr, int n);virtual ~Sales(){}int Year()const { return year; }virtual double operator[](inti)const;virtual double &operator[](inti);private:double gross[MONTHS];int year;};classLabeledSales :public Sales{public:classnbad_index :public Sales::bad_index{private:std::stringlbl;public:nbad_index(const string &lb, int ix,const string &s = "Index error in LabeledSales object\n");const string &label_val()const { return lbl; }virtual ~nbad_index()throw(){}};explicitLabeledSales(const string &lb = "none", intyy = 0);LabeledSales(const string &lb, intyy, const double *gr, int n);virtual ~LabeledSales(){}const string &Label()const { return label; }virtual double operator[](inti)const;virtual double &operator[](inti);private:string label;};#endif//sales.cpp#include "sales.h"Sales::bad_index::bad_index(int ix,const string &s) :logic_error(s), bi(ix){}Sales::Sales(intyy){year = yy;for (inti = 0; i< MONTHS; ++i)gross[i] = 0;}Sales::Sales(intyy, const double *gr, int n){year = yy;intlim = (n < MONTHS) ? n : MONTHS;inti;for (i = 0; i<lim; ++i)gross[i] = gr[i];for (; i< MONTHS; ++i)gross[i] = 0;}double Sales::operator[](inti)const{if (i< 0 || i>= MONTHS)throwbad_index(i);return gross[i];}double&Sales::operator[](inti){if (i< 0 || i>= MONTHS)throwbad_index(i);return gross[i];}LabeledSales::nbad_index::nbad_index(const string &lb, int ix,const string &s) :Sales::bad_index(ix, s){lbl = lb;}LabeledSales::LabeledSales(const string &lb, intyy) : Sales(yy){label = lb;}LabeledSales::LabeledSales(const string &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);return Sales::operator[](i);}double&LabeledSales::operator[](inti){if (i< 0 || i>= MONTHS)thrownbad_index(Label(), i);return Sales::operator[](i);}//use_sales.cpp#include "sales.h"int main(){double vals1[12] ={1220, 1100, 1122, 2212, 1232, 2334,2884, 2393, 3302, 2922, 3002, 3544};double vals2[12] ={12, 11, 22, 21, 32, 24,28, 29, 33, 29, 32, 35};Sales sales1(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() <<endl;for (i = 0; i< 12; ++i){cout<< sales1[i] << ' ';if (i % 6 == 5)cout<<endl;}cout<< "Year = " << sales2.Year() <<endl;cout<< "Label = " << bel() <<endl;for (i = 0; i<= 12; ++i){cout<< sales2[i] << ' ';if (i % 6 == 5)cout<<endl;}cout<< "End of try block 1.\n";}catch (logic_error&bad){cout<<bad.what();if (l = dynamic_cast<LabeledSales::nbad_index *>(&bad)) {cout<< "Comany: " << l->label_val() <<endl;cout<< "bad index: " << l->bi_val() <<endl;}else if (s = dynamic_cast<Sales::bad_index *>(&bad))cout<< "bad index: " << s->bi_val() <<endl;}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<<bad.what();if (l = dynamic_cast<LabeledSales::nbad_index *>(&bad)){cout<< "Comany: " << l->label_val() <<endl;cout<< "bad index: " << l->bi_val() <<endl;}else if (s = dynamic_cast<Sales::bad_index *>(&bad))cout<< "bad index: " << s->bi_val() <<endl;}cout<< "done\n";system("pause");return 0;}。
C++primer plus第六版第六章编程题答案

第6章;1、#include<iostream>#include<cctype>using namespace std;int main(){char ch;while((ch=cin.get())!='@'){if( isdigit(ch) );else if(tolower(ch)==ch)cout<<(char)toupper(ch);elsecout<<(char)tolower(ch);}return 0;}2、#include<iostream>//#include<math.h>//#include<string>#include<cctype>using namespace std;int main(){double dona[10];int dt=0;cin>>dona[dt];if(!cin){cout<<"Incorrect number!";return 0;}while((dt<9)&&cin){++dt;cin>>dona[dt];}double average,sum;sum=0.0;average=0.0;int t_aver=0;if(dt==9){for(int i=0;i<=dt;++i){sum+=dona[i];}average=sum/dt;for(int i=0;i<=dt;++i){if(dona[i]>average)t_aver++;}cout<<"you input "<<dt+1<<" numbers\n";}else{for(int i=0;i<dt;++i){sum+=dona[i];}average=sum/dt;for(int i=0;i<dt;++i){if(dona[i]>average)t_aver++;}cout<<"you input "<<dt<<" numbers\n";}cin.clear();cout<<"average= "<<average;cout<<". It has "<<t_aver<<" numbers bigger than average.\n";return 0;}3、#include<iostream>#include<cctype>using namespace std;enum menu{c,p,t,g};int main(){char in;cout<<"Please enter oen of the following choices:\n""c:weret p:hyuijj\n"<<"t:gghh f:hhnjsjs\n";do{cout<<"Enter c,p,t or g: ";cin>>in;}while(in!='c' && in!='p' && in!='t' && in!='g');switch(in){case 'c': cout<<"hahahaha\n";break;case 'p': cout<<(char)toupper(in)<<endl;break;case 't': cout<<"hehehehehheh\n";break;case 'g': cout<<(int)in<<endl;break;default: cout<<"something wrong!";}return 0;}4、#include<iostream>#include<string>#include<cctype>using namespace std;struct bop{char fullname[20];char titlename[20];char bopname[20];int perference;};int main(){const int count=2;int i=0;bop t_b[count]={{"wimp mac","wp","Celia La",1},{"panpan","th","Pat hand",0}};cout<<"a. name; b:title; \n""c: bopname; d:perference;\n""q:quit\n";char in;cout<<"Enter your choice: ";cin>>in;while(in!='q'){switch( in){case 'a':{for(i=0;i<count;i++)cout<< t_b[i].fullname<<endl;break;}case 'b':{for(i=0;i<count;i++)cout<< t_b[i].titlename<<endl;break;}case 'c':{for(i=0;i<count;i++)cout<< t_b[i].bopname<<endl;break;}case 'd':{for(i=0;i<count;i++){switch (t_b[i].perference){case 0: cout<< t_b[i].fullname<<endl;break;case 1: cout<< t_b[i].titlename<<endl;break;case 2: cout<< t_b[i].bopname<<endl;break;default:cout<<"input wrong!";}}break;}default: cout<<"incorrect enter";}cout<<"\nEnter your choice: ";cin>>in;}cout<<"Bye.";return 0;}8、#include<iostream>//#include<math.h>#include<string>#include<cctype>#include<fstream>using namespace std;int main(){/*//产ú生Θ?文?件tofstream foid;char context[20]={'0'};int i=0;foid.open("tect field");context[i]=cin.get();while((char)context[i]!='@'&&i<19){foid<<context[i];++i;context[i]=cin.get();}*///读á取?文?件tifstream fd;char fd_cot[20]={'0'};fd.open("tect field");if(!fd.is_open()){cout<<"Could not open the file\n";exit;}int num_let=0;int i=0;fd.get(fd_cot[i]);while(fd.good()){if(!isspace(fd_cot[i]))++num_let;++i;fd.get(fd_cot[i]);}cout<<"This file has "<<num_let<<" letters\n";fd.close();}。
cprimerplus第六版第五章习题答案

//1/*#include<iostream>using namespace std;int main(){cout << "请输入一个较小的整数:";int min;cin >> min;cout << "请输入一个较大的整数:";int max;cin >> max;int he=0;for (int i = min; i <= max; i++)he = i + he;cout << "这两个数之间所有数相加后的和为:" << he<<endl;system("pause");return 0;}*///2/*#include<iostream>#include<array>using namespace std;const int Arsize = 101;int main(){array<double, Arsize> aa ;aa[1] = aa[0] = 1;for (int i = 2; i < Arsize; i++)aa[i] = i*aa[i - 1];for (int i = 0; i < Arsize; i++)cout << i << "!=" << aa[i] << endl;system("pause");return 0;}*///3/*#include<iostream>using namespace std;int main(){cout << "请输入一个数字" << endl;int m=0, n;do{cin >> n;m = m + n;cout << "累计输入数字的和为:" << m << endl;}while (n != 0);system("pause");return 0;}*///4/*#include<iostream>using namespace std;int main(){double daphne = 110, cleo = 105;int i;for (i = 1; daphne > cleo; i++){daphne += 10;cleo *= 1.05;}cout << i << endl << daphne << endl << cleo;system("pause");return 0;}*///5/*#include<iostream>#include<string>using namespace std;int main(){const int Month=12;const int Number=12;const string month[Month] ={"January" ,"February","March","April","May","June","July","August","September","October","November","December",};int number[Number];int he=0;for (int i = 0; i < Month; i++){cout << month[i];cin >> number[i];he += number[i];}for (int i = 0; i < Month; i++){cout << month[i] << "\t";cout << number[i] << "\t";}cout << "和为:" << he;system("pause");return 0;}*///6/*#include<iostream>#include<string>using namespace std;int main()const int Month = 12;const int Year = 3;int number[Year][Month];string y[Year] = { "first","second","third" }; int he[Year] = {0,0,0};int h=0;cout << "请输入每个月的销量" << endl;for (int year = 0; year < Year; year++){cout << y[year] << "\t";for (int month = 0; month < Month; month++) {cin >> number[year][month];he[year] += number[year][month];cout << "\t";}h =h+ he[year];cout << he[year];cout << endl;}cout << h;system("pause");return 0;//7/*#include<iostream>#include<string>using namespace std;struct car{string name;int year;};int main(){int n;cout << "How many cars do you wish to catalog?";cin >> n;cin.get();car *p = new car[n];for (int i = 0; i < n; i++){cout << "Car #" << i + 1 << ":" << endl;cout << "Please enter the make:";getline(cin,p[i].name);cout << "Please enter the your made:";cin >> p[i].year;cin.get();}cout << "Here is your collection:" << endl;for (int i = 0; i < n; i++)cout << p[i].year << p[i].name << endl;system("pause");}*///8/*#include<iostream>#include<cstring>using namespace std;int main(){char word[20];int i=0;cin >> word;while (strcmp(word, "done") != 0){i++;cin >> word;}cout << i;system("pause");}*///9/*#include<iostream>#include<string>using namespace std;int main(){string word;int i = 0;cin >> word;while (word!="done"){i++;cin >> word;}cout << i;system("pause");}*///10#include<iostream>using namespace std;int main(){int row;char point = '.', star = '*';cout << "Enter number of rows: ";cin >> row;for (int m = 1; m <= row; m++){int n;for (n = 1; row - n >= m; n++){cout << point;}for (n; n <=row; n++){cout << star;}cout << endl;}system("pause");}.。
C++ Primer Plus 第六版 第七章编程题答案

//7.13.10#include<iostream>double add(double x,double y);double subtraction(double x,double y);double calculate(double x,double y ,double (*ps)(double a ,double b));int main(){using namespace std;cout << "Please enter two number: \n";double x,y;cin >> x >>y ;if(cin){double result_add,result_subtraction;result_add = calculate(x,y,add);result_subtraction = calculate(x,y,subtraction);cout << "The sum of "<< x << " and "<< y << "is " << result_add<<endl;cout << "The subtraction of "<< x << " and "<< "is "<< result_subtraction << endl;cout << "Enter a number: ";cin >> x;cout << "Enter another number: ";cin >> y;}return 0;}double add(double x,double y){return x+y;}double subtraction(double x,double y){return x-y;}double calculate(double x,double y,double (*ps)(double,double)){double a;a = (*ps)(x,y);return a;}/*//7.13.9#include<iostream>using namespace std ;const int SLEN = 30 ;struct student {char fullname[SLEN];char hobby[SLEN];int ooplevel;};// getinfo() has two arguments: a pointer to the first element of // an array of student structures and an int representing the// number of elements of the array. The function solicits and// stores data about students. It terminates input upon filling // the array or upon encoutering a blank line for the student// name. The function returns the actual number of array elements // filled.int getinfo(student pa[], int n);// dispay1() takes a student structure as an argument// and displays its contentsvoid display1(student st);// display2() takes the address of student structure as an// argument and displays the structure's contentsvoid display2(const student * ps);// display3() takes the address of the first element of an array // of student structures and the number of array elements as// arguments and displays the contents of the structuresvoid display3(const student pa[], int n);int main(){cout << "Enter class size: ";int class_size;cin >> class_size ;while (cin.get() != '\n')continue ;student * ptr_stu = new student[class_size];int entered = getinfo(ptr_stu,class_size);for (int i = 0 ; i< entered; i++){display1(ptr_stu[i]);display2(&ptr_stu[i]);}display3(ptr_stu,entered);delete [] ptr_stu ;return 0 ;}int getinfo(student pa[],int n){int i = 0 ;while ( i < n){cout << "Enter your name: ";cin.get( pa[i].fullname,SLEN) ;char stop;stop =cin.get();if (stop!= '\0')break;cout << "Enter your hobby: ";cin.getline(pa[i].hobby ,SLEN);cout << "Enter the ooplevel: ";cin >> pa[i].ooplevel ;cin.get();i++;}return i ;}void display1(student st){using namespace std ;cout << st.fullname << endl<< st.hobby <<endl<< st.ooplevel << endl ;}void display2(const student * ps){using namespace std ;cout << ps->fullname << endl<< ps->hobby << endl<< ps->ooplevel << endl ;}void display3(const student pa[],int n){using namespace std ;int i = 0 ;while (i < n){cout << pa[i].fullname << endl<< pa[i].hobby << endl<< pa[i].ooplevel << endl ;i++;}}*//*//7.13.8(b)#include<iostream>struct expense{double ex[4];};const int Seasons = 4;const char arr[4][10] ={"Spring","Summer","Fall","Winter"};void fill(expense * ps);void show(const expense * ps);int main(){using namespace std ;expense esp;fill(&esp);show(&esp);return 0 ;}void fill(expense * ps){using namespace std ;for (int i = 0 ;i < Seasons; i++){cout << "Enter " << arr[i] <<" expenses: ";cin >> ps->ex[i];}}void show(const expense * ps){using namespace std ;double total = 0.0;cout << "\nEXPENSES\n";for (int i = 0 ;i< Seasons;i++){cout << arr[i] << ": $" << ps->ex[i] << endl ;total += ps->ex[i];}cout << "Total Expenses: $" << total << endl ;}*//*//7.13.8 ?#include<iostream>const int Seasons = 4 ;const char arr[4][10] ={"Spring","Summer","Fall","Winter"};void fill(double arr[]);void show(const double arr[]);int main(){using namespace std ;double expenses[4];fill(expenses);show(expenses);return 0 ;}void fill(double ar[]){using namespace std ;for (int i = 0 ;i < Seasons; i++){cout << "Enter " << arr[i] <<" expenses: ";cin >> ar[i];}}void show(const double ar[]){using namespace std ;double total = 0.0;cout << "\nEXPENSES\n";for (int i = 0 ;i< Seasons;i++){cout << arr[i] << ": $" << ar[i] << endl ;total += ar[i];}cout << "Total Expenses: $" << total << endl ; }*//*//7.13.7#include<iostream>const int Max = 5;double * fill_array(double arr[], int limit);void show_array(double arr[],double * ps);void revalue(double r , double arr[], double * ps);int main(){using namespace std ;double properties[Max];double * ps ;ps = fill_array(properties, Max);show_array(properties,ps);if (ps != properties){cout << "Enter revaluation factor: ";double factor ;while (!(cin>> factor)){cin.clear();while (cin.get() != '\n')continue;cout << "Bad input; please enter a number: ";}revalue(factor,properties,ps);show_array(properties,ps);}cout << "Done.\n";cin.get();cin.get();return 0;}double * fill_array(double arr[], int limit){using namespace std ;double temp ;int i ;for (i = 0 ;i< limit; i++){cout << "Enter value #" << (i+1) << ": ";cin >> temp ;if (!cin){cin.clear();while (cin.get() != '\n')continue ;cout << "Bad input; input process terminated.\n";break;}else if (temp < 0)break;arr[i] = temp ;}return &arr[i-1];}void show_array(double arr[],double * ps){using namespace std ;for (int i = 0; ps != &arr[i];i++){cout << "Property #"<< (i+1) << ": &";cout << arr[i] << endl ;}}void revalue(double r ,double arr[], double * ps) {for (int i = 0 ;ps != &arr[i]; i++)arr[i] *= r ;}*//*//7.13.6#include<iostream>const int Max = 100 ;int Fill_array(double arr[],int length);void Show_array(const double arr[],int length); void Reverse_array(double arr[],int length);int main(){using namespace std ;double arr[Max];int Size;Size = Fill_array(arr,Max);Show_array(arr,Size);cout << endl ;Reverse_array(arr,Size);Show_array(arr,Size);return 0 ;}int Fill_array(double arr[],int Max){using namespace std ;int i = 0 ;cout << "Please enter number!!!\n";for (i;i < Max;i++){cout << "Enter number to the arr[" << i << "]: ";cin >> arr[i];if (!cin){cin.clear();while (cin.get() != '\n')continue;cout << "Not a number!!! the process terminated";break;}}return i ;}void Show_array(const double arr[],int length){using namespace std ;cout << endl;int i = 0 ;while (i < length){cout << arr[i] << " ";i++;}}void Reverse_array(double arr[],int length){int j ;j = length/2 ;int k = 1;while (k <=j){double arr1 ;arr1 = arr[k];arr[k]= arr[length-1-k];arr[length-1-k]=arr1;k++;}}*//*//7.13.5#include<iostream>long double function(unsigned number);int main(){using namespace std ;long double sj;unsigned number ;cout << "Enter a number: ";cin >> number;sj = function(number);cout << number << "! = " << sj << endl ;return 0 ;}long double function(unsigned number){long double sj ;if (number == 0)sj = 1;elsesj = number * function(number -1 );return sj ;}*//*//7.13.4#include<iostream>long double probability(unsigned numbers, unsigned picks);int main(){using namespace std ;double ch[4];cout << "ch[4]数簓组哩?中D,?ch[0]:total1,ch[1]:choices1;ch[2]:total2,ch[3]:choices2\n";for (int i = 0; i<4;i++){cout << "the " << i+1 << " numbers: ";cin >> ch[i];if (!cin){cin.clear();while(cin.get() != '\n')continue;cout << "bad input";break;}else if (ch[i] < 0)break;}long double p1;p1 = probability(ch[0],ch[1]);long double p2;p2 = probability(ch[2],ch[3]);long double p3 ;p3 = p1 * p2 ;cout << "you have one chance in " << p3 << " of win.\n";return 0;}long double probability(unsigned numbers, unsigned picks){long double result = 1.0 ;long double n ;unsigned p ;for (n = numbers, p = picks; p>0;n--,p--)result = result * n/p;return result;}*//*//7.13.3#include<iostream>struct box{char maker[40];float height;float width ;float length ;float volume ;};void display(box b1);void function(box * ps);int main(){box b1 ={"Jack H",3.2,2.3,6.5};function(&b1);display(b1);return 0;}void display(box b1){using namespace std;cout <<"Maker: " << b1.maker <<endl;cout << "Height: " << b1.height << endl;cout <<"Width: " << b1.width << endl ;cout << "Length: " << b1.length << endl ;cout << "Volume: " << b1.volume << endl ;}void function(box * ps){ps->volume = ps->height * ps->length * ps ->width ; }*//*//7.13.2#include<iostream>const int Max = 10;int input(double golf[] , int max);void show( const double golf[], int length);double mean(const double golf[],int length);int main(){double golf[Max];int size;size =input(golf ,Max);//std::cout<<size<<std::endl;show(golf,size);double mean_golf ;mean_golf = mean(golf,size);std::cout << std::endl ;std::cout << mean_golf <<std::endl;return 0;}int input(double golf[], int max){using namespace std;int i = 0;double gol_f;for (i;i<max;i++){cout << "Enter your points: ";cin >> gol_f ;if (!cin){cin.clear();while (cin.get() != '\n')continue;cout << "Bad input; input process terminated.\n";break;}else if (gol_f < 0)break;golf[i] = gol_f;}return i;}void show(const double golf[],int length){using namespace std;for (int i = 0 ;i <length ;i++){cout << golf[i] << " ";}}double mean(const double golf[],int length) {int i = 0;double sum =0.0 ;while (i<length){sum = sum + golf[i] ;i++;}//std::cout << sum << std::endl;double mean_g ;mean_g = sum / length;//std::cout << mean_g<<std::endl;return mean_g ;}*//*//7.13.1#include<iostream>double mean(double a,double b);int main(){using namespace std;double a;double b;cin >> a >> b;while(a!=0&&b!=0){double c;c=mean(a,b);cout << "the mean of "<<a <<" and "<< b << " is: "<< c <<endl;cin >> a;cin >> b;}return 0 ;}double mean(double a,double b){double mean_c;mean_c= 2.0*a*b/(a+b);return mean_c;}*/。
c++primerplus(第六版)课后编程练习问题详解

第二章:开始学习C++//ex2.1--display your name and address#include<iostream>int main(void){using namespace std;cout<<"My name is liao chunguang and I live in hunan chenzhou.\n”;}//ex2.2--convert the furlong units to yard uints-把浪单位换位码单位#include<iostream>double fur2yd(double);int main(){using namespace std;cout<<"enter the distance measured by furlong units:";double fur;cin>>fur;cout<<"convert the furlong to yard"<<endl;double yd;yd=fur2yd(fur);cout<<fur<<" furlong is "<<yd<<" yard"<<endl;return 0;}double fur2yd(double t){return 220*t;}//ex2.3-每个函数都被调用两次#include<iostream>void mice();void see();using namespace std;int main(){mice();mice();see();see();return 0;}void mice(){cout<<"three blind mice"<<endl;}void see(){cout<<"see how they run"<<endl;}//ex2.4#include<iostream>int main(){using namespace std;cout<<"Enter your age:";int age;cin>>age;int month;month=age*12;cout<<age<<" years is "<<month<<" months"<<endl;return 0;}//ex2.5---convert the Celsius valve to Fahrenheit value#include<iostream>double C2F(double);int main(){using namespace std;cout<<"please enter a Celsius value:";double C;cin>>C;double F;F=C2F(C);cout<<C<<" degrees Celsius is "<<F<<" degrees Fahrenheit."<<endl; return 0;}double C2F(double t){return 1.8*t+32;}//ex2.6---convert the light years valve to astronomical units--把光年转换为天文单位#include<iostream>double convert(double);//函数原型int main(){using namespace std;cout<<"Enter the number of light years:";double light_years;cin>>light_years;double astro_units;astro_units=convert(light_years);cout<<light_years<<" light_years = "<<astro_units<<" astronomical units."<<endl; return 0;}double convert(double t){return 63240*t;//1 光年=63240 天文单位}//ex2.7--显示用户输入的小时数和分钟数#include<iostream>void show();main(){using namespace std;show();return 0;}void show(){using namespace std;int h,m;cout<<"enter the number of hours:";cin>>h;cout<<"enter the number of minutes:";cin>>m;cout<<"Time:"<<h<<":"<<m<<endl;}第三章:处理数据//ex3.1—将身高用英尺(feet)和英寸(inch)表示#include<iostream>const int inch_per_feet=12;// const常量--1feet=12inches--1英尺=12英寸int main(){using namespace std;cout<<"please enter your height in inches:___\b\b\b";// \b表示为退格字符int ht_inch;cin>>ht_inch;int ht_feet=ht_inch/inch_per_feet;//取商int rm_inch=ht_inch%inch_per_feet;//取余cout<<"your height is "<<ht_feet<<" feet,and "<<rm_inch<<" inches\n";return 0;}//ex3.2--计算相应的body mass index(体重指数)#include<iostream>const int inch_per_feet=12;const double meter_per_inch=0.0254;const double pound_per_kilogram=2.2;int main(){using namespace std;cout<<"Please enter your height:"<<endl;cout<<"First,enter your height of feet part(输入你身高的英尺部分):_\b";int ht_feet;cin>>ht_feet;cout<<"Second,enter your height of inch part(输入你身高的英寸部分):_\b";int ht_inch;cin>>ht_inch;cout<<"Now,please enter your weight in pound:___\b\b\b";double wt_pound;cin>>wt_pound;int inch;inch=ht_feet*inch_per_feet+ht_inch;double ht_meter;ht_meter=inch*meter_per_inch;double wt_kilogram;wt_kilogram=wt_pound/pound_per_kilogram;cout<<endl;cout<<"Your pensonal body information as follows:"<<endl;cout<<"身高:"<<inch<<"(英尺inch)\n"<<"身高:"<<ht_meter<<"(米meter)\n"<<"体重:"<<wt_kilogram<<"(千克kilogram)\n";double BMI;BMI=wt_kilogram/(ht_meter*ht_meter);cout<<"your Body Mass Index(体重指数) is "<<BMI<<endl;return 0;}//ex3.3 以度,分,秒输入,以度输出#include<iostream>const int minutes_per_degree=60;const int seconds_per_minute=60;int main(){using namespace std;cout<<"Enter a latitude in degrees,minutes,and seconds:\n";cout<<"First,enter the degrees:";int degree;cin>>degree;cout<<"Next,enter the minutes of arc:";int minute;cin>>minute;cout<<"Fianlly,enter the seconds of arc:";int second;cin>>second;double show_in_degree;show_in_degree=(double)degree+(double)minute/minutes_per_degree+(double)second/mi nutes_per_degree/seconds_per_minute;cout<<degree<<" degrees,"<<minute<<" minutes,"<<second<<"seconds ="<<show_in_degree<<" degrees\n";return 0;}//ex3.4#include<iostream>const int hours_per_day=24;const int minutes_per_hour=60;const int seconds_per_minute=60;int main(){using namespace std;cout<<"Enter the number of seconds:";long seconds;cin>>seconds;int Day,Hour,Minute,Second;Day=seconds/seconds_per_minute/minutes_per_hour/hours_per_day;Hour=seconds/seconds_per_minute/minutes_per_hour%hours_per_day;Minute=seconds/seconds_per_minute%minutes_per_hour;Second=seconds%seconds_per_minute;cout<<seconds<<"seconds = "<<Day<<" days,"<<Hour<<" hours,"<<Minute<<" minutes,"<<Second<<" seconds\n";return 0;}//ex3.5#include<iostream>int main(){using namespace std;cout<<"Enter the world population:";long long world_population;cin>>world_population;cout<<"Enter the population of the US:";long long US_population;cin>>US_population;double percentage;percentage=(double)US_population/world_population*100;cout<<"The population of the US is "<<percentage<<"% of the world population.\n";return 0;}//ex3.6 汽车耗油量-美国(mpg)or欧洲风格(L/100Km)#include<iostream>int main(){using namespace std;cout<<"Enter the miles of distance you have driven:";double m_distance;cin>>m_distance;cout<<"Enter the gallons of gasoline you have used:";double m_gasoline;cin>>m_gasoline;cout<<"Your car can run "<<m_distance/m_gasoline<<" miles per gallon\n";cout<<"Computing by European style:\n";cout<<"Enter the distance in kilometers:";double k_distance;cin>>k_distance;cout<<"Enter the petrol in liters:";double k_gasoline;cin>>k_gasoline;cout<<"In European style:"<<"your can used "<<100*k_gasoline/k_distance<<" liters of petrol per 100 kilometers\n";return 0;}//ex3.7 automobile gasoline consumption-耗油量--欧洲风格(L/100Km)转换成美国风格(mpg) #include<iostream>int main(){using namespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"European style(liters per 100 kilometers):";double Euro_style;cin>>Euro_style;cout<<"Converts to U.S. style(miles per gallon):"<<endl;cout<<Euro_style<<" L/100Km = "<<62.14*3.875/Euro_style<<" mpg\n";return 0;}// Note that 100 kilometers is 62.14 miles, and 1 gallon is 3.875 liters.//Thus, 19 mpg is about 12.4 L/100Km, and 27 mpg is about 8.7 L/100Km.Enter the automobile gasoline consumption figure inEuropean style(liters per 100 kilometers):12.4Converts to U.S. style(miles per gallon):12.4 L/100Km = 19.4187 mpgPress any key to continue// ex3.7 automobile gasoline consumption-耗油量--美国风格(mpg)转换成欧洲风格(L/100Km) #include<iostream>int main(){using namespace std;cout<<"Enter the automobile gasoline consumption figure in\n"<<"U.S. style(miles per gallon):";double US_style;cin>>US_style;cout<<"Converts to European style(miles per gallon):"<<endl;cout<<US_style<<" mpg = "<< 62.14*3.875/US_style<<"L/100Km\n";return 0;}// Enter the automobile gasoline consumption figure inU.S. style(miles per gallon):19Converts to European style(miles per gallon):19 mpg = 12.6733L/100KmPress any key to continue第四章复合类型//ex4.1 display the information of student#include<iostream>const int Asize=20;using namespace std;struct student//定义结构描述{char firstname[Asize];char lastname[Asize];char grade;int age;};void display(student);//函数原型放在结构描述后int main(){cout<<"what is your first name?"<<endl;student lcg;//创建结构变量(结构数据对象)cin.getline(lcg.firstname,Asize);cout<<"what is your last name?"<<endl;cin.getline(stname,Asize);cout<<"what letter grade do you deserve?"<<endl;cin>>lcg.grade;cout<<"what is your age?"<<endl;cin>>lcg.age;display(lcg);return 0;}void display(student name){cout<<"Name: "<<name.firstname<<","<<stname<<endl;cout<<"Grade:"<<char(name.grade+1)<<endl;cout<<"Age:"<<name.age<<endl;}//ex4.2 use the string-class instead of char-array#include<iostream>#include<string>int main(){using namespace std;string name,dessert;cout<<"Enter your name: \n";getline(cin,name);cout<<"Enter your favorite dessert: \n";getline(cin,dessert);cout<<"I have some delicious "<<dessert;cout<<" for you, "<<name<<".\n";return 0;}//有时候会遇到需要按下两次回车键才能正确的显示结果,这是vc++6.0的一个BUG,更改如下:else if (_Tr::eq((_E)_C, _D)){_Chg = true;_I.rdbuf()->sbumpc();//修改后的break; }ex4.3 输入其名和姓,并组合显示#include<iostream>#include<cstring>const int Asize=20;int main(){using namespace std;char fname[Asize];char lname[Asize];char fullname[2*Asize+1];cout<<"Enter your first name:";//输入名字,存储在fname[]数组中cin.getline(fname,Asize);cout<<"Enter your last name:";//输入姓,存储在lname[]数组中cin.getline(lname,Asize);strncpy(fullname,lname,Asize);//把姓lname复制到fullname空数组中strcat(fullname,", ");//把“,”附加到上述fullname尾部strncat(fullname,fname,Asize);//把fname名字附加到上述fullname尾部fullname[2*Asize]='\0';//为防止字符型数组溢出,在数组结尾添加结束符cout<<"Here's the information in a single string:"<<fullname<<endl;//显示组合结果return 0;}//ex4.4 使用string对象存储、显示组合结果#include<iostream>#include<string>int main(){using namespace std;string fname,lname,attach,fullname;cout<<"Enter your first name:";getline(cin,fname);//note:将一行输入读取到string类对象中使用的是getline(cin,str)//它没有使用句点表示法,所以不是类方法cout<<"Enter your last name:";getline(cin,lname);attach=", ";fullname=lname+attach+fname;cout<<"Here's the information in a single string:"<<fullname<<endl;return 0;}//ex4.5 declare a struct and initialize it 声明结果并创建一个变量#include<iostream>const int Asize=20;struct CandyBar{char brand[Asize];double weight;int calory;};int main(){using namespace std;CandyBar snack={"Mocha Munch",2.3,350};cout<<"Here's the information of snack:\n";cout<<"brand:"<<snack.brand<<endl;cout<<"weight:"<<snack.weight<<endl;cout<<"calory:"<<snack.calory<<endl;return 0;}//ex4.6 结构数组的声明及初始化#include<iostream>const int Asize=20;struct CandyBar{char brand[Asize];double weight;int calory;};int main(){using namespace std;CandyBar snack[3]={{"Mocha Munch",2.3,350},{"XuFuJi",1.1,300},{"Alps",0.4,100}};for(int i=0;i<3;i++)//利用for循环来显示snack变量的内容{cout<<snack[i].brand<<endl<<snack[i].weight<<endl<<snack[i].calory<<endl<<endl;}return 0;}//ex4.7 pizza披萨饼#include<iostream>#include<string>const int Size=20;struct pizza//声明结构{char company[Size];double diameter;double weight;};int main(){using namespace std;pizza pie;//创建一个名为pie的结构变量cout<<"What's the name of pizza company:";cin.getline(pany,Size);cout<<"What's the diameter of pizza:";cin>>pie.diameter;cout<<"What's the weight of pizza:";cin>>pie.weight;cout<<"company:"<<pany<<endl;cout<<"diameter:"<<pie.diameter<<"inches"<<endl;cout<<"weight:"<<pie.weight<<"ounches"<<endl;return 0;}//ex4.8 pizza pie 披萨饼使用new创建动态结构#include<iostream>#include<string>const int Size=20;struct pizza//声明结构{char company[Size];double diameter;double weight;};int main(){using namespace std;pizza *pie=new pizza;//使用new创建动态结构cout<<"What's the diameter of pizza:";cin>>pie->diameter;cin.get();//读取下一个字符cout<<"What's the name of pizza company:";cin.get(pie->company,Size);cout<<"What's the weight of pizza:";cin>>pie->weight;cout<<"diameter:"<<pie->diameter<<" inches"<<endl;cout<<"company:"<<pie->company<<endl;cout<<"weight:"<<pie->weight<<" ounches"<<endl;delete pie;//delete释放内存return 0;}//ex.4.9 使用new动态分配数组—方法1#include<iostream>#include<string>using namespace std;struct CandyBar{string brand;double weight;int calory;};int main(){CandyBar *snack= new CandyBar[3];snack[0].brand="A";//单个初始化由new动态分配的内存snack[0].weight=1.1;snack[0].calory=200;snack[1].brand="B";snack[1].weight=2.2;snack[1].calory=400;snack[2].brand="C";snack[2].weight=4.4;snack[2].calory=500;for(int i=0;i<3;i++){cout << " brand: " << snack[i].brand << endl;cout << " weight: " << snack[i].weight << endl;cout << " calorie: " << snack[i].calory << endl<<endl;}delete [] snack;return 0;}//ex.4.10 数组—方法1#include <iostream>int main(){using namespace std;const int Size = 3;int success[Size];cout<<"Enter your success of the three times 40 meters running:\n";cin >> success[0]>>success[1]>>success[2];cout<<"success1:"<<success[0]<<endl;cout<<"success2:"<<success[1]<<endl;cout<<"success3:"<<success[2]<<endl;double average=(success[0]+success[1]+success[2])/3;cout<<"average:"<<average<<endl;return 0;}//ex.4.10 array—方法2#include <iostream>#include <array>int main(){using namespace std;array<double,4>ad={0};cout<<"Enter your success of the three times 40 meters running:\n";cin >> ad[0]>>ad[1]>>ad[2];cout<<"success1:"<<ad[0]<<endl;cout<<"success2:"<<ad[1]<<endl;cout<<"success3:"<<ad[2]<<endl;ad[3]=(ad[0]+ad[1]+ad[2])/3;cout<<"average:"<<ad[3]<<endl;return 0;}第五章循环和关系表达式//ex.5.1#include <iostream>int main(){using namespace std;cout<<"Please enter two integers: ";int num1,num2;cin>>num1>>num2;int sum=0;for(int temp=num1;temp<=num2;++temp)//or temp++sum+=temp;cout<<"The sum from "<<num1<<" to "<<num2<<" is "<<sum<<endl; return 0;}//ex.5.2#include <iostream>#include<array>int main(){using namespace std;array<long double,101>ad={0};ad[1]=ad[0]=1L;for(int i=2;i<101;i++)ad[i]=i*ad[i-1];for(int i=0;i<101;i++)cout<<i<<"! = "<<ad[i]<<endl;return 0;}//ex.5.3#include <iostream>int main(){using namespace std;cout<<"Please enter an integer: ";int sum=0,num;while((cin>>num)&&num!=0){sum+=num;cout<<"So far, the sum is "<<sum<<endl;cout<<"Please enter an integer: ";}return 0;}//ex.5.4#include <iostream>int main(){using namespace std;double sum1,sum2;sum1=sum2=0.0;int year=0;while(sum2<=sum1){++year;sum1+=10;sum2=(100+sum2)*0.05+sum2;}cout<<"经过"<<year<<"年后,Cleo的投资价值才能超过Daphne的投资价值。
C++-primer-plus(第6版)中文版编程练习答案第13章
//cdplayer.h#ifndef CDPLAYER_H_#define CDPLAYER_H_#include <iostream>#include <string>using namespace std;class Cd{private:char performers[50];char label[20];int selections;double playtime;public:Cd(char *s1, char *s2, int n, double x);Cd(const Cd &d);Cd(){}virtual ~Cd();virtual void Report()const;Cd &operator=(const Cd &d);};class Classic :public Cd{private:char main_music[50];public:Classic(){}Classic(char *m, char *s1, char *s2, int n, double x);Classic(char *m, const Cd &c);~Classic();Classic &operator=(const Classic &c);virtual void Report()const;};#endif//cdplayer.cpp#include "cdplayer.h"Cd::Cd(char *s1, char *s2, int n, double x)strcpy_s(performers, strlen(s1) + 1, s1);strcpy_s(label, strlen(s2) + 1, s2);selections = n;playtime = x;}Cd::Cd(const Cd &d){strcpy_s(performers, 50, d.performers);strcpy_s(label, 20, bel);selections = d.selections;playtime = d.playtime;}Cd::~Cd(){}void Cd::Report()const{cout << "Performers: " << performers << endl;cout << "Label: " << label << endl;cout << "Selections: " << selections << endl;cout << "Playtime: " << playtime << endl;}Cd &Cd::operator=(const Cd &d){if (this == &d)return *this;strcpy_s(performers, 50, d.performers);strcpy_s(label, 20, bel);selections = d.selections;playtime = d.playtime;return *this;}Classic::Classic(char *m, char *s1, char *s2, int n, double x) :Cd(s1, s2, n, x) {strcpy_s(main_music, strlen(m) + 1, m);}Classic::Classic(char *m, const Cd &c) : Cd(c){strcpy_s(main_music, strlen(m) + 1, m);}Classic::~Classic(){}Classic &Classic::operator=(const Classic &c){if (this == &c)return *this;Cd::operator=(c);strcpy_s(main_music, 50, c.main_music);return *this;}void Classic::Report()const{Cd::Report();cout << "Main Music: " << main_music << endl;}//main.cpp#include "cdplayer.h"void Bravo(const Cd &disk);int main(){Cd c1("Beatles", "Capito", 14, 35.5);Classic c2 = Classic("Piano Sonata in B flat, Fantasia in C", "Alfred Brendel", "Philips", 2, 57.17);Cd *pcd = &c1;cout << "Using object directly:\n";c1.Report();c2.Report();cout << "Using type cd * pointer to objects:\n";pcd->Report();pcd = &c2;pcd->Report();cout << "Calling a function with a Cd reference argument:\n";Bravo(c1);Bravo(c2);cout << "Testing assignment: ";Classic copy;copy = c2;copy.Report();system("pause");return 0;}void Bravo(const Cd &disk){disk.Report();}2、//cdplayer.h#ifndef CDPLAYER_H_#define CDPLAYER_H_#include <iostream>#include <string>using namespace std;class Cd{private:char *performers;char *label;int selections;double playtime;public:Cd(char *s1, char *s2, int n, double x);Cd(const Cd &d);Cd(){}virtual ~Cd();virtual void Report()const;Cd &operator=(const Cd &d);};class Classic :public Cd{private:char *main_music;public:Classic(){}Classic(char *m, char *s1, char *s2, int n, double x);Classic(char *m, const Cd &c);~Classic();Classic &operator=(const Classic &c);virtual void Report()const;};#endif//cdplayer.cpp#include "cdplayer.h"Cd::Cd(char *s1, char *s2, int n, double x){performers = new char[strlen(s1) + 1];label = new char[strlen(s2) + 1];strcpy_s(performers, strlen(s1) + 1, s1);strcpy_s(label, strlen(s2) + 1, s2);selections = n;playtime = x;}Cd::Cd(const Cd &d){performers = new char[strlen(d.performers) + 1];label = new char[strlen(bel) + 1];strcpy_s(performers, strlen(d.performers) + 1, d.performers);strcpy_s(label, strlen(bel) + 1, bel);selections = d.selections;playtime = d.playtime;}Cd::~Cd(){delete[]performers;delete[]label;}void Cd::Report()const{cout << "Performers: " << performers << endl;cout << "Label: " << label << endl;cout << "Selections: " << selections << endl;cout << "Playtime: " << playtime << endl;}Cd &Cd::operator=(const Cd &d){if (this == &d)return *this;delete[]performers;delete[]label;performers = new char[strlen(d.performers) + 1];label = new char[strlen(bel) + 1];strcpy_s(performers, strlen(d.performers) + 1, d.performers);strcpy_s(label, strlen(bel) + 1, bel);selections = d.selections;playtime = d.playtime;return *this;}Classic::Classic(char *m, char *s1, char *s2, int n, double x) :Cd(s1, s2, n, x) {main_music = new char[strlen(m) + 1];strcpy_s(main_music, strlen(m) + 1, m);}Classic::Classic(char *m, const Cd &c) : Cd(c){main_music = new char[strlen(m) + 1];strcpy_s(main_music, strlen(m) + 1, m);}Classic::~Classic(){delete[]main_music;}Classic &Classic::operator=(const Classic &c){if (this == &c)return *this;Cd::operator=(c);delete[]main_music;main_music = new char[strlen(c.main_music) + 1];strcpy_s(main_music, strlen(c.main_music) + 1, c.main_music);return *this;}void Classic::Report()const{Cd::Report();cout << "Main Music: " << main_music << endl;}//main.cpp#include "cdplayer.h"void Bravo(const Cd &disk);int main(){Cd c1("Beatles", "Capito", 14, 35.5);Classic c2 = Classic("Piano Sonata in B flat, Fantasia in C", "Alfred Brendel", "Philips", 2, 57.17);Cd *pcd = &c1;cout << "Using object directly:\n";c1.Report();c2.Report();cout << "Using type cd * pointer to objects:\n";pcd->Report();pcd = &c2;pcd->Report();cout << "Calling a function with a Cd reference argument:\n";Bravo(c1);Bravo(c2);cout << "Testing assignment: ";Classic copy;copy = c2;copy.Report();system("pause");return 0;}void Bravo(const Cd &disk){disk.Report();}3、//dma.h#ifndef DMA_H_#define DMA_H_#include <iostream>#include <string>using namespace std;class ABC{private:char *fullname;int level;public:ABC(const char *f = "null", int l = 0);ABC(const ABC &ab);ABC &operator=(const ABC &ab);virtual ~ABC();virtual void View() = 0;};class baseDMA :public ABC{private:char *label;int rating;public:baseDMA(const char *l = "null", int r = 0, const char *f = "null", int lv = 0);baseDMA(const baseDMA &rs);~baseDMA();baseDMA &operator=(const baseDMA &rs);virtual void View();};class lacksDMA :public ABC{private:enum{ COL_LEN = 40 };char color[COL_LEN];public:lacksDMA(const char *c = "blank", const char *f = "null", int lv = 0);lacksDMA(const char *c, const baseDMA &rs);virtual void View();};class hasDMA :public ABC{private:char *style;public:hasDMA(const char *s = "none", const char *f = "null", int lv = 0);hasDMA(const char *s, const ABC &rs);hasDMA(const hasDMA &hs);~hasDMA();hasDMA &operator=(const hasDMA &hs);virtual void View();};#endif//dma.cpp#include "dma.h"ABC::ABC(const char *f, int lv){fullname = new char[strlen(f) + 1];strcpy_s(fullname, strlen(f) + 1, f);level = lv;}ABC::ABC(const ABC &ab){fullname = new char[strlen(ab.fullname) + 1];strcpy_s(fullname, strlen(ab.fullname) + 1, ab.fullname);level = ab.level;}ABC::~ABC(){delete[]fullname;}ABC &ABC::operator=(const ABC &ab){if (this == &ab)return *this;delete[]fullname;fullname = new char[strlen(ab.fullname) + 1];strcpy_s(fullname, strlen(ab.fullname) + 1, ab.fullname);level = ab.level;return *this;void ABC::View(){cout << "Fullname: " << fullname << endl;cout << "Level: " << level << endl;}baseDMA::baseDMA(const char *l, int r, const char *f, int lv) :ABC(f, lv) {label = new char[strlen(l) + 1];strcpy_s(label, strlen(l) + 1, l);rating = r;}baseDMA::baseDMA(const baseDMA &rs) :ABC(rs){label = new char[strlen(bel) + 1];strcpy_s(label, strlen(bel) + 1, bel);rating = rs.rating;}baseDMA::~baseDMA(){delete[]label;}baseDMA &baseDMA::operator=(const baseDMA &rs){if (this == &rs)return *this;ABC::operator=(rs);delete[]label;label = new char[strlen(bel) + 1];strcpy_s(label, strlen(bel) + 1, bel);rating = rs.rating;return *this;}void baseDMA::View(){ABC::View();cout << "Label: " << label << endl;cout << "Rating: " << rating << endl;}lacksDMA::lacksDMA(const char *c, const char *f, int lv) :ABC(f, lv){strncpy_s(color, c, 39);color[39] = '\0';}lacksDMA::lacksDMA(const char *c, const baseDMA &rs) : ABC(rs) {strncpy_s(color, c, COL_LEN - 1);color[COL_LEN - 1] = '\0';}void lacksDMA::View(){ABC::View();cout << "Color: " << color << endl;}hasDMA::hasDMA(const char *s, const char *f, int lv) :ABC(f, lv) {style = new char[strlen(s) + 1];strcpy_s(style, strlen(s) + 1, s);}hasDMA::hasDMA(const char *s, const ABC &ab) :ABC(ab){style = new char[strlen(s) + 1];strcpy_s(style, strlen(s) + 1, s);}hasDMA::hasDMA(const hasDMA &hs) : ABC(hs){style = new char[strlen(hs.style) + 1];strcpy_s(style, strlen(hs.style) + 1, hs.style);}hasDMA::~hasDMA(){delete[]style;}hasDMA &hasDMA::operator=(const hasDMA &hs){if (this == &hs)return *this;ABC::operator=(hs);delete[]style;style = new char[strlen(hs.style) + 1];strcpy_s(style, strlen(hs.style) + 1, hs.style);return *this;}void hasDMA::View(){ABC::View();cout << "Style: " << style << endl;}//usedma.cpp#include "dma.h"int main(){baseDMA shirt("Portabelly", 8, "Jack", 1);lacksDMA balloon("red", "Blimpo", 4);hasDMA map("Mercator", "buffalo Keys", 5);cout << "Displaying baseDMA object:\n";shirt.View();cout << "Displaying lacksDMA object:\n";balloon.View();cout << "Displaying hasDMA object:\n";map.View();lacksDMA balloon2(balloon);cout << "Result of lacksDMA copy:\n";balloon2.View();hasDMA map2;map2 = map;cout << "Result of hasDMA assignment:\n";map2.View();system("pause");return 0;}4、//port.h#ifndef PORT_H_#define PORT_H_#include <iostream>#include <cstring>using namespace std;class Port{private:char *brand;char style[20];int bottles;public:Port(const char *br = "none", const char *st = "none", int b = 0);Port(const Port &p);virtual ~Port(){ delete[]brand; }Port &operator=(const Port &p);Port &operator+=(int b);Port &operator-=(int b);int BottleCount()const{ return bottles; }virtual void Show()const;friend ostream &operator<<(ostream &os, const Port &p);};class VintagePort :public Port{private:char *nickname;int year;public:VintagePort();VintagePort(const char *br, const char *st, int b, const char *nn, int y);VintagePort(const VintagePort &vp);~VintagePort(){ delete[]nickname; }VintagePort &operator=(const VintagePort &vp);void Show()const;friend ostream &operator<<(ostream &os, const VintagePort &vp);};#endif//port.cpp#include "port.h"Port::Port(const char *br, const char *st, int b){brand = new char[strlen(br) + 1];strcpy_s(brand, strlen(br) + 1, br);strcpy_s(style, strlen(st) + 1, st);bottles = b;}Port::Port(const Port &p){brand = new char[strlen(p.brand) + 1];strcpy_s(brand, strlen(p.brand) + 1, p.brand);strcpy_s(style, strlen(p.style) + 1, p.style);bottles = p.bottles;}Port &Port::operator=(const Port &p){if (this == &p)return *this;delete[]brand;brand = new char[strlen(p.brand) + 1];strcpy_s(brand, strlen(p.brand) + 1, p.brand);strcpy_s(style, strlen(p.style) + 1, p.style);bottles = p.bottles;return *this;}Port &Port::operator+=(int b){bottles += b;return *this;}Port &Port::operator-=(int b){bottles -= b;return *this;}void Port::Show()const{cout << "Brand: " << brand << endl;cout << "Kind: " << style << endl;cout << "Bottles: " << bottles << endl;}ostream &operator<<(ostream &os, const Port &p){os << p.brand << ", " << p.style << ", " << p.bottles;return os;}VintagePort::VintagePort(){nickname = new char[1];nickname[0] = '\0';year = 0;}VintagePort::VintagePort(const char *br, const char *st, int b, const char *nn, int y) :Port(br, st, b){nickname = new char[strlen(nn) + 1];strcpy_s(nickname, strlen(nn) + 1, nn);year = y;}VintagePort::VintagePort(const VintagePort &vp) :Port(vp){nickname = new char[strlen(vp.nickname) + 1];strcpy_s(nickname, strlen(vp.nickname) + 1, vp.nickname);year = vp.year;}VintagePort &VintagePort::operator=(const VintagePort &vp){if (this == &vp)return *this;delete[]nickname;Port::operator=(vp);nickname = new char[strlen(vp.nickname) + 1];strcpy_s(nickname, strlen(vp.nickname) + 1, vp.nickname);year = vp.year;return *this;}void VintagePort::Show()const{Port::Show();cout << "Nickname: " << nickname << endl;cout << "Year: " << year << endl;}ostream &operator<<(ostream &os, const VintagePort &vp){os << (const Port &)vp;os << ", " << vp.nickname << ", " << vp.year;return os;}//main.cpp#include "port.h"int main(){Port wine1("Gallo", "tawny", 20);VintagePort wine2("Romane Conti", "vintage", 10, "The Noble", 1876);VintagePort wine3("Merlot", "ruby", 30, "Old Velvet", 1888);cout << "Displaying Port object:\n";wine1.Show();cout << wine1 << endl;cout << "Displaying VintagePort object:\n";wine2.Show();cout << wine2 << endl;cout << "Displaying VintagePort object:\n";wine3.Show();cout << wine3 << endl;cout << "Gallo add ten bottles:\n";wine1 += 10;cout << wine1 << endl;cout << "Romane Conti add ten bottles:\n";wine2 += 10;cout << wine2 << endl;cout << "Merlot minus ten bottles:\n";wine3 -= 10;cout << wine3 << endl;Port wine4(wine2);cout << "Result of Port copy:\n";cout << wine4 << endl;VintagePort wine5;wine5 = wine3;cout << "Result of VintagePort assignment:\n";cout << wine5 << endl;system("pause");return 0;}(注:可编辑下载,若有不当之处,请指正,谢谢!)。
C-Primer-Plus第六版中文版习题答案
C Primer Plus第六版中文版习题答案Github: /zhayujie/C-Primer-Plus第一章1.#include <stdio.h>int main(void) {double inch, cm;printf("Please input the inches: ");scanf("%lf", &inch);cm = inch * 2.54;printf("%g cm\n", cm);return 0;}第二章3.#include<stdio.h>int main(void){int days,years=21;days=years*365;printf("我的年龄是%d岁,%d天\n",years,days);return 0;}4.#include<stdio.h>void jolly(void);void deny(void);int main(void){jolly();jolly();deny();return 0;}void jolly(void){printf("For he's a jolly good fellow!\n"); }void deny(void){printf("Which nobody can deny!\n");}5.#include<stdio.h>void br(void);void ic(void);int main(void){br();printf(",");ic();printf("\n");ic();printf("\n");br();printf("\n");return 0;}void br(void){printf("Brazil,Russia");}void ic(void){printf("India,China");}6.#include<stdio.h>int main(void){int toes=10;int toes_2,toes2;toes_2=2*toes;toes2=toes*toes;printf("toes是%d,toes的两倍是%d,toes的平方是%d\n",toes,toes_2,toes2); return 0;}8.#include<stdio.h>void one_three(void);void two(void);int main(void){printf("starting now\n");one_three();}void one_three(void){printf("one\n");two();printf("three\n");printf("done!\n");}void two(void){printf("two\n");}第三章2.#include<stdio.h>int main(void){char ch;printf("please input a number:");scanf("%d",&ch);printf("%c\n",ch);return 0;}4.#include<stdio.h>int main(void){float a;printf("Enter a floating-point value: ");scanf("%f",&a);printf("fixed-point notation: %f\n",a);printf("exponential notation: %e\n",a);return 0;}5.#include<stdio.h>int main(void){int age;double seconds;printf("please input your age: ");scanf("%d",&age);seconds=age*3.156e7;printf("the corresponding seconds are: %e\n",seconds);return 0;}7.#include<stdio.h>int main(void){float inches,cms;printf("input your height(inch): ");scanf("%f",&inches);cms=inches*2.54;printf("your height(cm): %f\n",cms);return 0;}8.#include<stdio.h>int main(void){float pint,ounce,soupspoon,teaspoon,cup;printf("input the number of cups: ");scanf("%f",&cup);pint=cup/2;ounce=cup*8;soupspoon=ounce*2;teaspoon=soupspoon*3;printf("they are equivalent of:\n%f pint\n%f ounce\n%f soupspoons\n%f teaspoons\n",pint,ounce,soupspoon,teaspoon);return 0;}第四章1.#include<stdio.h>int main(void){char firstname[40],lastname[40];printf("Input your firstname: ");scanf("%s",firstname);printf("Input your lastname: ");scanf("%s",lastname);printf("Your name is %s,%s\n",firstname,lastname);return 0;}2.#include<stdio.h>#include<string.h>int main(void){char name[40];int width;printf("Input your name: ");scanf("%s",name);width=strlen(name)+3;printf("%*s\n",width,name); //输入的名和姓中间不能分隔return 0;}4.#include<stdio.h>int main(void){float height;char name[40];printf("Input your height(cm) and name: ");scanf("%f%s",&height,name);height=height/100;printf("%s, you are %.3fm tall\n",name,height);return 0;}5.#include<stdio.h>int main(void){float speed,size,time;printf("Input the download speed(Mb/s) and the file size(MB):\n"); scanf("%f%f",&speed,&size);time=size/speed*8.0;printf("At %.2f megabits per second, a file of %.2f megabytes\n",speed,size);printf("downloads in %.2f seconds.\n",time);return 0;}6.#include<stdio.h>#include<string.h>int main(void){char firstname[40],lastname[40];printf("Input your firstname: ");scanf("%s",firstname);printf("Input your lastname: ");scanf("%s",lastname);printf("%s %s\n",firstname,lastname);printf("%*d %*d\n",strlen(firstname),strlen(firstname),strlen(lastname),strlen(lastname)); printf("%s %s\n",firstname,lastname);printf("%*d %*d\n",-strlen(firstname),strlen(firstname),-strlen(lastname),strlen(lastname) );return 0;}7.#include<stdio.h>#include<float.h>int main(void){double a=1.0/3.0;float b=1.0/3.0;printf("%.6f %.6f\n",a,b); //左侧double型右侧float型printf("%.12f, %.12f\n",a,b);printf("%.16f, %.16f\n",a,b);printf("DBL_DIG: %d\n",DBL_DIG);printf("FLT_DIG: %d\n",FLT_DIG);return 0;}8.#include<stdio.h>#define GALLON 3.758 //1 gallon=3.785 liters#define MILE 1.609 //1 mile=1.609 kilometersint main(void){float gallon,mile;printf("Input miles and gallons: ");scanf("%f%f",&mile,&gallon);printf("Miles per gallon: %.1f\n",mile/gallon);printf("Litre per 100 kilometers: %.1f\n",gallon*GALLON/(mile*MILE)*100);return 0;}第五章1.#include<stdio.h>#define H_P_M 60 //1h=60minint main(void){int hour,min,left;printf("Enter the number of minutes: ");scanf("%d",&min);while(min>0){hour=min/H_P_M;left=min%H_P_M;printf("%d minutes is %d hours and %d minutes.\n",min,hour,left); printf("Enter your next value: ");scanf("%d",&min);}printf("Good bye!\n");return 0;}2.#include<stdio.h>int main(void){int num,count;printf("Input a integer: ");scanf("%d",&num);count=0;while(count++<11){printf("%d ",num);num++;}printf("\n");return 0;}3.#include<stdio.h>#define DAYS_PER_WEEK 7 //一周7天int main(void){int day,week,left;printf("Input the number of days: ");scanf("%d",&day);while(day>0){week=day/DAYS_PER_WEEK;left=day%DAYS_PER_WEEK;printf("%d days are %d weeks, %d days.\n",day,week,left); printf("Next input: ");scanf("%d",&day);}return 0;}4.#include<stdio.h>#define CM_PER_FEET 30.48 //1feet=30.48cm#define CM_PER_INCH 2.54 //1inch=2.54cmint main(void){int feet;float cm,inch;printf("Enter a height in centimeters: ");scanf("%f",&cm);while(cm>0){feet=(int)(cm/CM_PER_FEET);inch=(cm-feet*CM_PER_FEET)/CM_PER_INCH;printf("%.1f cm = %d feet, %.1f inches\n",cm,feet,inch); printf("Enter a height in centimeters (<=0 to quit): "); scanf("%f",&cm);}printf("bye\n");return 0;}5.#include<stdio.h>int main(void){int count,sum,days;printf("Input the number of days: ");scanf("%d",&days);count=sum=0;while(count++<days)sum=sum+count;printf("The money you earned: %d\n",sum);return 0;}6.#include<stdio.h>int main(void){int count,sum,days;printf("Input the number of days: ");scanf("%d",&days);count=sum=0;while(count++<days)sum=sum+count*count;printf("The money you earned: %d\n",sum);return 0;}7.#include<stdio.h>void cube(double n);int main(void){double num;printf("Input a number: ");scanf("%lf",&num);cube(num);}void cube(double n){printf("The cube of %f is %f\n",n,n*n*n);}8.#include<stdio.h>int main(void){int num1,num2;printf("This program computes moduli.\n");printf("Enter an integer to serve as the second operand: ");scanf("%d",&num1);printf("Now enter the first operand: ");scanf("%d",&num2);while(num2>0){printf("%d %% %d is %d\n",num2,num1,num2%num1);printf("Enter next number for first operand (<= 0 to quit): "); scanf("%d",&num2);}printf("Done\n");}9.#include<stdio.h>void Temperatures(double fah);int main(void){double fah,cel,kel;//华氏温度,摄氏温度,开氏温度printf("Input the Fahrenheit temperature: ");while(scanf("%lf",&fah)==1){Temperatures(fah);printf("Next input: ");}printf("Done.\n");}void Temperatures(double fah){const double a=5.0,b=9.0,c=32.0,d=276.13; printf("%.2f ℉ is %.2f ℃, %.2f K.\n",fah,a/b*(fah-c),a/b*(fah-c)+d);}第六章1.#include<stdio.h>#define SIZE 26int main(void){char ch[SIZE];int index;for(index=0;index<SIZE;index++){ch[index]='a'+index;printf("%c ",ch[index]);}printf("\n");return 0;}2.#include<stdio.h>int main(void){int i,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)printf("$");printf("\n");}return 0;}3.#include<stdio.h>int main(void){int i,j;for(i=1;i<=6;i++){for(j=0;j<i;j++)printf("%c",'F'-j); printf("\n");}return 0;}4.#include<stdio.h>#define ROWS 6int main(void){char ch;int i,j;for(ch='A',i=0;i<ROWS;i++) {for(j=0;j<=i;j++)printf("%c",ch++); printf("\n");}return 0;}5.#include<stdio.h>#define ROWS 5int main(void){char ch='A';int i,j;for(i=1;i<=ROWS;i++){for(j=1;j<=ROWS-i;j++)printf(" ");for(j=0;j<i;j++)printf("%c",ch+j);for(j=i-2;j>=0;j--)printf("%c",ch+j);printf("\n");}return 0;}6.#include<stdio.h>int main(void){int max,min,num;printf("Input the min and max: ");scanf("%d%d",&min,&max);printf("%10s%10s%10s\n","number","square","cube");for(num=min;num<=max;num++)printf("%10d%10d%10d\n",num,num*num,num*num*num); return 0;}7.//与题目不同打印的是句子#include<stdio.h>#include<string.h>#define SIZE 40int main(void){int i,index=-1;char ch[SIZE];printf("Input a word: ");do{ index++;scanf("%c",&ch[index]);}while(ch[index]!='\n');for(i=index+1;i<=40;i++)ch[i]='\0';for(index=strlen(ch);index>=0;index--)printf("%c",ch[index]);printf("\n");return 0;}8.#include<stdio.h>int main(void){double n1,n2;printf("Input two numbers: ");while(2==scanf("%lf%lf",&n1,&n2)){printf("%f\n",(n1-n2)/n1*n2);printf("Input your next pair of numbers: ");}printf("Bye!\n");return 0;}9.#include<stdio.h>double calculate(double n1, double n2);int main(void){double num1, num2;printf("Input two numbers: ");while (2 == scanf("%lf%lf", &num1, &num2)) //输入两个浮点数 {printf("%f\n", calculate(num1, num2)); //函数调用printf("Input your next pair of numbers: ");}printf("Bye!\n");return 0;}double calculate(double n1, double n2){return ((n1 - n2) / (n1 * n2)); //返回运算结果}10.#include <stdio.h>int main(void){int lower, upper;int num, sum;printf("Enter lower and upper integer limits: ");scanf("%d%d", &lower, &upper);while (lower < upper){for (sum=0, num=lower; num <= upper; num++)sum = sum + num * num; //计算平方和printf("The sums of the squares from %d to %d is %d\n", lower * lower, upper * upper, sum); //输出结果printf("Enter next set of limits: ");scanf("%d%d", &lower, &upper); //下一次输入}printf("Done\n");return 0;}11.#include <stdio.h>#define SIZE 8int main(void){int num[SIZE];int index;printf("Enter 8 integers: ");for (index=0; index<SIZE; index++) //输入8个整数scanf("%d", &num[index]);for (index=SIZE-1; index >= 0; index--) //倒序输出printf("%d ", num[index]);printf("\n");return 0;}12.#include <stdio.h>int main(void){double sum1=0, sum2=0;int count, items, sign;printf("Enter the items: ");scanf("%d", &items); //输入序列的项数for (count=1, sign=1; count <= items; count++, sign *= -1){sum1 += 1.0 / count;sum2 += 1.0 * sign / count;} //分别计算两序列的和 printf("1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 + ... = %f\n", sum1); printf("1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 + ... = %f\n", sum2);return 0;}13.#include <stdio.h>#define SIZE 8int main(void){int index, count, num[SIZE];for (index = 0, count = 1; index < SIZE; index++){count *= 2;num[index] = count;} //for循环将数组元素设为2的前8次幂 index=0; //初始化index的值doprintf("%d ", num[index++]);while (index < SIZE); //do while循环显示数组元素的值printf("\n");return 0;}14.#include <stdio.h>#define SIZE 8int main(){double num1[SIZE], num2[SIZE];int index1, index2, index;printf("Enter 8 numbers to the first array:\n");for (index1 = 0; index1 < SIZE; index1++)scanf("%lf", &num1[index1]); //向第一个数组输入8个数 num2[0] = num1[0];for (index1 = 1, index2 = 1; index1 < SIZE; index1++, index2++) num2[index2] = num2[index2-1] + num1[index1];//为第二个数组赋值(是第一个数组对应的元素之和)printf("The first array: ");for (index=0; index < SIZE; index++) {printf("%6.2f", num1[index]);} //输出第一个数组的内容 printf("\nThe second array: ");for (index=0; index < SIZE; index++) {printf("%6.2f", num2[index]); //输出第二个数组的内容 }printf("\n");return 0;}15.#include <stdio.h>#include <string.h>#define SIZE 255int main(void){int index;char ch[SIZE];printf("Enter a line: ");for(index = 0, scanf("%c", &ch[0]); ch[index] != '\n';){index++;scanf("%c", &ch[index]);} //输入内容到字符数组中,回车时结束for(index += 1; index < SIZE; index++)ch[index] = '\0'; //将数组剩余空间补充为'\0'for(index = strlen(ch); index >=0; index--)printf("%c", ch[index]); //倒序输出内容printf("\n");return 0;}16.#include <stdio.h>#define RATE_DAPHNE 0.1#define RATE_DEIRDRE 0.05 //两人的利率#define MONEY 100int main(void){int year;double daphne = MONEY, deirdre = MONEY; //两人的初始投资额相同for (year = 1; daphne >= deirdre; year++){daphne += MONEY * RATE_DAPHNE;deirdre += deirdre * RATE_DEIRDRE;}//计算Deirdre投资额超过Daphne需要的年数和当时的金额printf("After %d year, Deirdre's investment will be more than Daphne's,\n""Daphne's investment will be $%lf,\nand Deirdre's investment will be $%lf.\n",year, daphne, deirdre); //输出结果return 0;}17.#include <stdio.h>#define INITIAL_MONEY 100 //账户初始金额为100万元#define ANNUAL_RATE 0.08 //年利率为8%int main(void){int year;double money;for(year = 1, money=INITIAL_MONEY; money>0; year++)money += money * ANNUAL_RATE - 10; //计算每年年终的账户余额printf("After %d years, Chuckie will draw all money from his account.\n", year);return 0;}18.#include <stdio.h>#define INITIAL_NUMBER 5 //初始朋友数为5人#define DUNBAR_NUMBER 150 //邓巴数int main(void){int week;int number = INITIAL_NUMBER;for (week = 1; number <= DUNBAR_NUMBER; week++){number = (number - week) * 2; //计算每周的朋友数量printf("After %d week, the number of Rabnud's friends is %d\n", week, number);}return 0;}第七章1.#include <stdio.h>int main(void){char ch;int n_space = 0; //空格数int n_newline = 0; //换行数int n_others = 0; //其他字符数printf("Enter some text; Enter # to quit.\n"); while ((ch = getchar()) != '#'){if (ch == ' ')n_space++;else if (ch == '\n')n_newline++;elsen_others++;}printf("Spaces: %d, newlines: %d, others: %d\n", n_space, n_newline, n_others);return 0;}2.#include <stdio.h>#define CHARS_PER_LINE 8 //每行字符数int main(void){char ch;int n_chars = 1; //字符数printf("Enter some characters(# to quit):\n"); while ((ch = getchar()) != '#'){printf("%3c(%3d) ", ch, ch);if (n_chars++ % CHARS_PER_LINE == 0)printf("\n");}printf("\n");return 0;}3.#include <stdio.h>int main(void){int num;int n_even = 0, n_odd = 0; //偶数和奇数个数int sum_even = 0, sum_odd = 0; //偶数和奇数和printf("Enter some integers(0 to quit):\n");scanf("%d", &num);while (num != 0){if (num % 2 == 0){n_even++;sum_even += num;} //计算偶数个数和偶数和else{n_odd++;sum_odd +=num;} //计算奇数个数和奇数和scanf("%d",&num);}printf("The number of even numbers is %d, ""and the everage of even numbers is %.2f\n",n_even, (n_even == 0) ? 0 : (float)sum_even / n_even); printf("The number of odd numbers is %d, ""and the everrage of odd numers is %.2f\n",n_odd, (n_odd == 0) ? 0 : (float)sum_odd / n_odd);return 0;}4.#include <stdio.h>int main(void){char ch;int n_repl = 0; //替换次数printf("Enter some texts(# to quit):\n");while ((ch = getchar()) != '#') {if (ch == '.'){ch = '!';n_repl++;} //替换句号else if (ch == '!'){printf("!");n_repl++;} //替换感叹号printf("%c", ch);}printf("\n%d substitutions were made.\n", n_repl);return 0;}5.#include <stdio.h>int main(void){char ch;int n_repl = 0; //替换次数printf("Enter some texts(# to quit):\n");while ((ch = getchar()) != '#') {switch (ch){case '.': ch = '!';n_repl++;break;case '!': printf("!");n_repl++;break;default: break;} //利用switch语句进行替换 printf("%c",ch);}printf("\n%d substitutions were made.\n", n_repl);return 0;}6.#include <stdio.h>int main(void){char ch;char last_ch = 0; //前一个字符int count=0;printf("Enter some texts(# to quit):\n");while ((ch = getchar()) != '#'){if ((ch == 'i') && (last_ch == 'e'))count++;last_ch = ch; //出现ei时,计数+1}printf("\"ei\" appeared %d times.\n", count);return 0;}7.#include <stdio.h>#define BASE 1000 //基本工资 100美元/h#define TIME 40 //超过40h为加班#define MUL 1.5 //加班时间算作平时的1.5倍#define RATE1 0.15 //前300美元的税率#define RATE2 0.2 //300-450美元的税率#define RATE3 0.25 //大于450美元的税率#define BREAK1 300 //税率的第一个分界点#define BREAK2 450 //税率的第二个分界点int main(void){double hour, tax, gross;printf("Input your work hours in a week: ");scanf("%lf", &hour);if (hour <= TIME)gross = hour * BASE;elsegross = TIME * BASE + (hour - TIME) * MUL * BASE; //计算总收入if (gross <= BREAK1)tax = gross * RATE1;else if (gross <= BREAK2)tax = BREAK1 * RATE1 + (gross - BREAK1) * RATE2;elsetax = BREAK1 * RATE1 + (BREAK2 - BREAK1) * RATE2+ (gross - BREAK2) * RATE3;//计算税金printf("Your gross income is $%.2lf\nYour tax is $%.2lf\n""Your net income is $%.2lf\n",gross, tax, (gross - tax));return 0;8.#include <stdio.h>#define BASE1 8.75#define BASE2 9.33#define BASE3 10.00#define BASE4 11.20//四种等级的基本工资#define TIME 40 //超过40h为加班#define MUL 1.5 //加班时间算作平时的1.5倍#define RATE1 0.15 //前300美元的税率#define RATE2 0.2 //300-450美元的税率#define RATE3 0.25 //大于450美元的税率#define BREAK1 300 //税率的第一个分界点#define BREAK2 450 //税率的第二个分界点int main(void){double base, hour, tax, gross;int count, num;const int LENGTH = 65; //*的长度printpart: for (count = 0; count < LENGTH; count++)printf("*");printf("\nEnter the number corresponding to the desired pay rate or action:\n");printf("%-36s%s","1) $8.75/hr", "2) $9.33/hr\n");printf("%-36s%s","3) $10.00/hr", "4) $11.20/hr\n");printf("%s\n", "5) quit");for (count = 0; count < LENGTH; count++)printf("*");printf("\n");//打印表格while (scanf("%d", &num) == 1) {switch (num){case 1: base = BASE1;break;case 2: base = BASE2;break;case 3: base = BASE3;break;case 4: base = BASE4;break;case 5: printf("quit.\n");return 0;default: printf("Please input the right option.\n");goto printpart;} //选择基本工资等级printf("Input your work hours in a week: ");scanf("%lf", &hour);if (hour <= TIME)gross = hour * base;elsegross = TIME * base + (hour - TIME) * MUL * base;//计算总收入if (gross <= BREAK1)tax = gross * RATE1;else if (gross <= BREAK2)tax = BREAK1 * RATE1 + (gross - BREAK1) * RATE2;elsetax = BREAK1 * RATE1 + (BREAK2 - BREAK1) * RATE2+ (gross - BREAK2) * RATE3;//计算税金printf("Your gross income is $%.2lf\nYour tax is $%.2lf\n" "Your net income is $%.2lf\n",gross, tax, (gross - tax));printf("\nYour next choice:\n");}return 0;}9.#include <stdio.h>int main(void){int div, prime;int num, count;int flag;printf("Input a positive integer: ");scanf("%d", &num);printf("The prime numbers in range:\n");for (prime = 2; prime <= num; prime++) //外层循环显示所有素数 {flag = 1;for (div = 2; (div * div) <= prime; div++){if (prime % div == 0)flag = 0;} //内层循环检验是否为素数 if (flag) //利用标记flag判断printf("%d ",prime);}printf("\n");return 0;}10.#include <stdio.h>#define RATE1 0.15#define RATE2 0.28#define SINGLE 17850 //单身人群的税率分界点#define HOST 23900 //户主人群的税率分界点#define MAR_SHA 29750 //已婚共有人群的分界点#define MAR_DEV 14875 //已婚离异人群的分界点int main(void){int num;double income, tax_break, tax;printpart: printf("Please enter Corresponding""figures to select the type\n");printf("1 single, 2 host, 3 married and shared, ""4 married but devoced and 5 to quit.\n");scanf("%d", &num);switch (num){case 1: tax_break = SINGLE;break;case 2: tax_break = HOST;break;case 3: tax_break = MAR_SHA;break;case 4: tax_break = MAR_DEV;break;case 5: printf("quit.\n");return 0;default: printf("Please input right number.");goto printpart; //回到输入阶段}printf("Enter your income: "); //指定种类和收入while (scanf("%lf", &income) == 1){if (income <= tax_break)tax = income * RATE1;elsetax = tax_break * RATE1 + (income - tax_break) * RATE2; //计算税金printf("The tax is $%.2lf.\n", tax);printf("Your next input: \n");goto printpart; //回到输入阶段}return 0;}11.#include <stdio.h>#include <ctype.h>#define ARTICHOKE 2.05 //洋蓟2.05美元/磅#define BEET 1.15 //甜菜1.15美元/磅#define CARROT 1.09 //胡萝卜1.09美元/磅#define DISCOUNT_LIMIT 100//包装费和运费打折要求订单100美元#define DISCOUNT_RATE 0.05 //折扣为%5#define BREAK1 5#define BREAK2 20 //装运费的分界点#define FEE1 6.5#define FEE2 14#define FEE3_RATE 0.5//不同重量区间的装运费,其中超过20磅的每续重一磅//增加0.5元int main(void){double weight;double weight_artichoke = 0;double weight_beet = 0;double weight_carrot = 0; //购买三种蔬菜的重量double total_weight; //总重量double veg_cost; //三种蔬菜总共花费double order_cost; //订单总额double total_cost; //费用总额double pack_tran_fee; //装运费double discount;int count = 0;char ch;printf("Please select the vegetables you want to buy:\n");printf("a: artichoke $%.2f/lb\n", ARTICHOKE);printf("b: beet $%.2f/lb\n", BEET);printf("c: carrot $%.2f/lb\n", CARROT);printf("q: quit.\n");//打印选择信息while ((ch = tolower(getchar())) != 'q'){// if (ch == '\n')// continue; //滤掉回车switch (ch){case 'a': printf("Input the weight of artichoke in pound: "); scanf("%lf", &weight);weight_artichoke += weight;count++;printf("Continue entering a, b, c or q: ");break;case 'b': printf("Input the weight of beet in pound: ");scanf("%lf", &weight);weight_beet += weight;count++;printf("Continue entering a, b, c or q: ");break;case 'c': printf("Input the weight of carrot in pound: ");scanf("%lf", &weight);weight_carrot += weight;count++;printf("Continue entering a, b, c or q: ");break;default: printf("Please enter the right character.");}while (getchar () != '\n')continue; //滤掉输入重量后面的所有字符}if (!count){printf("Bye.\n");return 0;} //开始输出q,直接退出total_weight = weight_artichoke + weight_beet + weight_carrot;veg_cost = weight_artichoke * ARTICHOKE + weight_beet * BEET+ weight_carrot * CARROT;discount = 0;if (veg_cost >= DISCOUNT_LIMIT){discount = veg_cost * DISCOUNT_RATE;order_cost = veg_cost - discount;}elseorder_cost = veg_cost; //折扣计算if (total_weight <= BREAK1)pack_tran_fee = FEE1;else if (total_weight <= BREAK2)pack_tran_fee = FEE2;elsepack_tran_fee = FEE2 + (total_weight - BREAK2) * FEE3_RATE;//装运费计算total_cost = order_cost + pack_tran_fee;printf("\nHere is what you choose:\n");if (weight_artichoke) {printf("artichoke Price: $%.2f/lb weight: %.2f pounds cost: $%.2f\n",ARTICHOKE, weight_artichoke, weight_artichoke * ARTICHOKE); }if (weight_beet) {printf("beet Price: $%.2f/lb weight: %.2f pounds cost: $%.2f\n",。
C++primer plus 7章—十章课后答案
C++ Primer Plus(第六版)中文版编程练习第七章到第十八章答案7.7#include<iostream>double * fill_array( double * begin, double * end);voidshow_array( double * begin, double * end);void revalue(double factor , double * begin, double * end);using namespace std;int main(){double properties[5];double * endd=fill_array(properties,properties+5);show_array(properties,endd);double factor;cout<<"enter revaluation factor: "<<endl;cin>>factor;revalue(factor,properties,endd);show_array(properties,endd);cout<<"done";return 0;}double * fill_array( double * begin, double * end){int i;for( i=0;i<end-begin;i++){cout<<"enter value #"<<i+1<<" :"<<endl;if(!(cin>>*(begin+i)))break;}double * endd=begin+i;returnendd;}voidshow_array( double * begin, double * end){double * ps;int i;for( i=0,ps=begin;i<end-begin;i++,ps++)cout<<"value #"<<i+1<<": "<<*ps<<endl;}void revalue(double fac , double * begin, double * end) {double * ps;for(ps=begin;ps!=end;ps++){(*ps)*=fac;}}7.8a.#include<iostream>#include<string>constint Seasons=4;using namespace std;const char* snames[4]={"Spring","Summer","Fall","Winter"}; void fill(double * ps);void show(double * ps);int main(){double expense[4];fill( expense);show( expense);return 0;}void fill(double * ps){for(int i=0;i<Seasons;i++){cout<<snames[i]<<" expense: ";cin>>ps[i];}}void show(double * ps){double total=0;cout<<"expense"<<endl;for(int i=0;i<Seasons;i++){cout<<snames[i]<<" expense: "<<ps[i]<<endl;total+=ps[i];}cout<<"total expense :"<<total;}b#include<iostream>#include<string>struct inflatable{double expense[4];};inflatable expense1;constint Seasons=4;usingnamespace std;constchar* snames[4]={"Spring","Summer","Fall","Winter"};void fill(inflatable *expense1);void show(inflatable expense1);int main(){fill( &expense1);show( expense1);return 0;}void fill(inflatable *expense1){for(int i=0;i<Seasons;i++){cout<<snames[i]<<" expense: ";cin>>(*expense1).expense[i];}}void show(inflatable expense1){double total=0;cout<<"expense"<<endl;for(int i=0;i<Seasons;i++){cout<<snames[i]<<" expense: "<<expense1.expense[i]<<endl;total+=expense1.expense[i];}cout<<"total expense :"<<total;}7.9#include<iostream>usingnamespace std;constint SLEN=30;struct student{char fullname[SLEN];char hobby[SLEN];int ooplevel;};int getinfo(student pa[],int n);void display1(student st);void display2(const student * ps);void display3(const student pa[],int n);int main(){cout<<"enter class size: ";int class_size;cin>>class_size;while(cin.get()!='\n')continue;student * ptr_stu=new student[class_size];int entered=getinfo(ptr_stu,class_size);for(int i=0;i<entered;i++){display1(ptr_stu[i]);display2(&ptr_stu[i]);}display3(ptr_stu,entered);delete ptr_stu;cout<<"Done\n";return 0;}int getinfo(student pa[],int n){int count=0;for(int i=0;i<n;i++){cout<<"\nstudent "<<i+1<<endl;cout<<"fullname: ";cin>>pa[i].fullname;cout<<"hobby: ";cin>>pa[i].hobby;cout<<"ooplevel: ";cin>>pa[i].ooplevel;count++;}cout<<"\nenter end!";return count;}void display1(student st){cout<<"\nfullname: "<<st.fullname<<endl;cout<<"hobby: "<<st.hobby<<endl;cout<<"ooplevel: "<<st.ooplevel<<endl;}void display2(const student * ps){cout<<"fullname: "<<(*ps).fullname<<endl;cout<<"hobby: "<<(*ps).hobby<<endl;cout<<"ooplevel: "<<(*ps).ooplevel<<endl;}void display3(const student pa[],int n){for(int i=0;i<n;i++){cout<<"student "<<i+1<<endl;cout<<"fullname: "<<(pa[i]).fullname<<endl;cout<<"hobby: "<<(pa[i]).hobby<<endl;cout<<"ooplevel: "<<(pa[i]).ooplevel<<endl;}}7.10#include<iostream>double add(double x,double y);double calculate(double x,double y,double (*pf)(double,double)); double multiply(double x,double y);double minus(double x,double y);usingnamespace std;int main(){double x,y;cout<<"enter two numbers: "<<endl;while(cin>>x>>y){double ( *pf[3])(double x,double y)={add,multiply,minus};for(int i=0;i<3;i++){cout<<"result: "<<i+1<<": "<<calculate(x,y,pf[i]);cout<<endl;}}cout<<"done!";return 0;}double calculate(double x,double y,double (*pf)(double,double)) {double n=(*pf)(x,y);return n;}double add(double x,double y){return x+y;}double multiply(double x,double y){return x*y;}double minus(double x,double y){return x-y;}8.1#include<iostream>#include<string>usingnamespace std;int count=0;void show(constchar * str,int n =0);int main(){show("hello");show("can i make friends with you");show("sorry",2);show("excuse");cout<<"done!";return 0;}void show(constchar * str,int n ){if(n==0)cout<<str<<endl;else{for(int i=0;i<count;i++)cout<<str<<endl;}count++;}8.2#include<iostream>usingnamespace std;struct candy{char *name;double weight;int heat;};void set_arr(candy & candy1,char * ps="Millennium Munch",double w=2.85,int heat=350); void show(const candy & candy1);int main(){candy tu={"tutu",2.96,36};show(tu);set_arr(tu);set_arr(tu,"cuicui",2.96,400);show(tu);return 0;}void set_arr(candy & candy1,char * ps,double w,int heat){=ps;candy1.weight=w;candy1.heat=heat;show(candy1);}void show(const candy & candy1)\{cout<<"name: "<<<<endl;cout<<"weight: "<<candy1.weight<<endl;cout<<"heat: "<<candy1.heat<<endl;}8.3#include<iostream>#include<string>#include<cctype>usingnamespace std;void change(string &str);int main(){string str;cout<<"enter a string (q to quit): "; getline(cin,str);while(str!="q"){change( str);cout<<"\nnext string (q to quit): ";getline(cin,str);}cout<<"bye!";return 0;}void change(string &str){int size=str.size();for(int i=0;i<size;i++){str[i]=toupper(str[i]);}cout<<str;}8.4#include<iostream>#include<cstring>#include<string>usingnamespace std;struct stringy{char * str;int ct;};void show(const stringy &stru,int n=1);void show(constchar str[]="Done!",int m=1);void set(stringy & a, constchar arr[] );int main(){stringy beany;char testing[]="Reality isn'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();return 0;}void show(const stringy &stru,int n){for(int i=0;i<n;i++)cout<<"\nstring member: "<<stru.str;}void show(constchar str[],int m){for(int i=0;i<m;i++)cout<<"\ntesting string: "<<str;}void set(stringy & a, constchar arr[] ){int size=strlen(arr);a.str=newchar[size+1];strcpy(a.str,arr);a.ct=size;cout<<"\nsize of string: "<<a.ct;}8.5#include<iostream>template<class T> T max5(T arr[5]);int main(){usingnamespace std;double arr[5]={1.23,3.65,2.54,9.65,7.56};int arr1[5]={2,6,46,89,64};cout<<"result:"<<endl;max5(arr);cout<<"\nanother result:"<<endl;max5(arr1);cout<<"\ndone!";return 0;}template<class T> T max5(T arr[5]){usingnamespace std;T max=arr[0];for(int i=0;i<5;i++){if(arr[i]>max)max=arr[i];}cout<<"max:"<<max;return max;}8.6#include<iostream>#include<cstring>usingnamespace std;template<class T> T maxn(T arr[],int n);template<>char* maxn(char* ps[],int n);int main(){int arr[6]={6,9,56,48,2,13};double arr1[4]={8.63,5.69,6.12,4.65};char * ps[3]={"xiaokai","xuman","xiaochen"};cout<<"result:"<<endl;maxn(arr,6);cout<<"\nanother result:"<<endl;maxn(arr1,4);maxn(ps,3);cout<<"\ndone!";return 0;}template<class T> T maxn(T arr[],int n){usingnamespace std;T max=arr[0];for(int i=0;i<n;i++){if(arr[i]>max)max=arr[i];}cout<<"max:"<<max;return max;}template<>char* maxn(char* ps[],int n){char * str=ps[0];for(int i=0;i<n;i++){if(strlen(str) <strlen(ps[i]))str=ps[i];}cout<<"\naddress: "<<str;return str;}8.7#include<iostream>struct debts{char name[50];double amount;};usingnamespace std;template<class T> T sumarray(T arr[],int n); template<class T> T sumarray(T * ps[],int n);int main(){int things[6]={13,31,103,301,310,130};struct debts mr_E[3]={{"ima wolfe",2400.0},{"ura foxe",1300.0},{"iby stout",1800.0}};double *pd[3];for(int i=0;i<3;i++){pd[i]=&mr_E[i].amount;}cout<<"sum of thing: "<<sumarray(things,6)<<endl;cout<<"sum of debt: "<<sumarray(pd,3)<<endl;cout<<"\ndone!";return 0;}template<class T> T sumarray(T arr[],int n){T total=0;for(int i=0;i<n;i++)total+=arr[i];return total;}template<class T> T sumarray(T * ps[],int n){T total=0;for(int i=0;i<n;i++){total+=*ps[i];}return total;}9.1golf.hconstint Len=40;struct golf{char fullname[Len];int handicap;};void setgolf(golf & g, constchar* name, int hc);int setgolf (golf & g);void handicap(golf &g,int hc);void showgolf(const golf & g);golf.cpp#include<iostream>#include"golf.h"#include<cstring>usingnamespace std;int setgolf (golf & g){cout<<"fullname: ";cin.getline(g.fullname,Len);if(g.fullname[0]=='\0')return 0;cout<<"handicap: ";cin>>g.handicap;cin.get();cout<<"done!";return 1;}void setgolf(golf & g, constchar* name, int hc){strcpy(g.fullname,name);g.handicap=hc;}void handicap(golf &g,int hc){cout<<"reset new value: "<<endl;g.handicap=hc;}void showgolf(const golf & g){cout<<"\nfullname: "<<g.fullname<<endl;cout<<"handicap: "<<g.handicap<<endl;}main.cpp#include<iostream>#include"golf.h"usingnamespace std;int main(){cout<<"enter golf struct :"<<endl;golfann[3];for(int i=0;i<3;i++){golfandy;cout<<"\n# "<<i+1<<": "<<endl;int num=setgolf(andy);if(num){setgolf(ann[i],andy.fullname,andy.handicap);showgolf(ann[i]);}elsebreak;}cout<<"all done!"<<endl;cout<<"reset a new value: ";int hc;cin>>hc;cin.get();cin.clear();handicap(ann[0],hc);showgolf(ann[0]);cin.get();return 0;}9.2#include<iostream>#include<string>usingnamespace std;void strcount(const string str);int main(){string input;cout<<"enter a line: \n";while(getline(cin,input)){if(input==””)break;strcount(input);cout<<"enter next line (empty line to quit):\n";}cout<<"bye\n";return 0;}void strcount(const string str){staticint total =0;int count=0;cout<<"\""<<str<<"\" contains ";count=str.size();total+=count;cout<<count<<" characters\n";cout<<total<<" characters total\n";}#include<iostream>#include<cstring>#include<new>struct chaff{char dross[20];int slag;};void showstruct( chaff & s);void setstruct(chaff & s);usingnamespace std;char buffer1[500];int main(){chaff * p;p=new (buffer1) chaff [2];for(int i=0;i<2;i++){cout<<"\n#"<<i+1<<":";setstruct(p[i]);showstruct(p[i]);}cout<<"\ndone!";delete [] p;return 0;}void showstruct( chaff & s){cout<<"\nshow!";cout<<"\ndross: ";cout<<s.dross;cout<<"\nslag: ";cout<<s.slag;}void setstruct(chaff & s){cout<<"\nvalue of dross has been automatically set.";strcpy(s.dross,"hello");cout<<"\nslag: ";cin>>s.slag;}account.h#include<string>#include<iostream>class bankaccount{private:std::string name;char acctnum[20];double savings;public:bankaccount(const std::string & co, constchar * num,double n);~bankaccount();void show()const;void depoit(double num);void takeout(double n);};account.cpp#include"account.h"#include<cstring>bankaccount::bankaccount(const std::string & co, constchar * num,double n) {name=co;strcpy(acctnum,num);savings=n;}bankaccount::~bankaccount(){}void bankaccount::show()const{using std::cout;cout<<"\nname: "<<name;cout<<"\naccountnumber: "<<acctnum;cout<<"\nsavings: "<<savings;}void bankaccount:: depoit(double n){savings+=n;}void bankaccount:: takeout(double n){savings-=n;}main.cpp#include<iostream>#include"account.h"int main(){using std::cout;using std::cin;bankaccount user=bankaccount("xiaozhao","xiaoxing",0.0);user.show();user.depoit(100);user.show();user.takeout(30);user.show();cout<<"\ndone!";cin.get();cin.get();return 0;}10.2name.h#include<iostream>#include<string>class person{private:staticconstint LIMIT=25;std::stringlname;char fname[LIMIT];public:person(){lname="";fname[0]='\0';};person(const std::string &ln,constchar * fn="Heyyou");void show() const;void formalshow() const;};name1.cpp#include<iostream>#include"name.h"#include<cstring>person::person(const std::string &ln,constchar * fn){lname=ln;strcpy(fname,fn);}void person:: show() const{using std::cout;cout<<"\nfirstname: "<<fname;cout<<"\nlastname: "<<lname; }void person:: formalshow() const{using std::cout;cout<<"\nlastname: "<<lname; cout<<"\nfirstname: "<<fname;}main.cpp#include<iostream>#include"name.h"using std::cout;using std::endl;using std::cin;int main(){person one;person two("Smythecraft");person three("Dimwiddy","Sam");one.show();cout<<endl;one.formalshow();cout<<"\ndone!";two.show();cout<<endl;two.formalshow();cout<<"\ndone!";three.show();cout<<endl;three.formalshow();cout<<"\ndone!";cin.get();return 0;}10.4sale.hnamespace sales{class sale{staticconstint QUARTER=4;private:double sale1[QUARTER];double average;double max;double min;public:sale();sale(double ar[]);void showsale();};};sale.cpp#include<iostream>#include"sale.h"#include<cstring>namespace sales{sale:: sale(){using std::cout;using std::cin;cout<<"\ninput four sales: ";double ar[4];double total=0;double max1=-999;double min1=999;for(int i=0;i<4;i++){cout<<"\n# "<<i+1<<": ";cin>>ar[i];total+=ar[i];if(max1<ar[i])max1=ar[i];if(min1>ar[i])min1=ar[i];}for(int i=0;i<4;i++)sale1[i]=ar[i];average=total/4;max=max1;min=min1;}sale:: sale( double ar[]){using std::cout;using std::cin;double total=0;double max1=-999;double min1=999;for(int i=0;i<4;i++){total+=ar[i];if(max1<ar[i])max1=ar[i];if(min1>ar[i])min1=ar[i];}average=total/4;max=max1;min=min1;}void sale:: showsale(){using std::cout;using std::endl;cout<<"\naverage: "<<average;cout<<"\nmax: "<<max;cout<<"\nmin: "<<min<<endl;}};main.cpp#include<iostream>#include"sale.h"usingnamespace sales;int main(){usingnamespace std;cout<<"\nstart";sale one=sale();one.showsale();cin.get();cin.get();cout<<"\nnext";double att[4]={20.1,30.1,50.1,60.1};sale two=sale(att);two.showsale();cout<<"\nall done!";cin.get();cin.get();return 0;}10.5stack.hstruct customer{char fullname[35];double payment;};typedef customer Item;class stack{private:enum{MAX=10};Item items[MAX];int top;public:stack();bool isempty() const;bool isfull() const;bool push(const Item & item);bool pop(Item & item);};stack.cpp#include<iostream>#include"stack.h"stack::stack(){top=0;}bool stack:: isempty() const{return top==0;}bool stack::isfull() const{return top==MAX;}bool stack:: push(const Item & item) {if (top<MAX){items[top++]=item;returntrue;}elsereturnfalse;}bool stack:: pop(Item & item){if (top>0){item=items[--top];returntrue;}elsereturnfalse;}main.cpp#include<iostream>#include"stack.h"staticdouble total=0;int main(){usingnamespace std;Item one[5]={{"xiao wang",20},{"xiao hong",30},{"xiao li",50},{"xiao liu",80},{"xiao zhao",100}};stackst;if(st.isempty())cout<<"stack already empty\n";for(int i=0;i<5;i++){st.push(one[i]);cout<<"\n#"<<i+1<<endl;cout<<"fullname: "<<one[i].fullname<<" "<<"payment: "<<one[i].payment;};cout<<"\nonece again!";for(int i=0;i<5;i++){st.push(one[i]);cout<<"\n#"<<i+1<<endl;cout<<"fullname: "<<one[i].fullname<<" "<<"payment: "<<one[i].payment;};Item three[10];if(st.isfull())cout<<"\nstack already full";for(int i=0;i<10;i++){st.pop(three[i]);total+=three[i].payment;}cout<<"\ntotal: "<<total;if(st.isempty())cout<<"\nstack already empty!";elsecout<<"\nstack is not empty!";cin.get();return 0;}10.6move.hclass move{private:double x;double y;public:move(double a=0,double b=0);void showmove() const;move add(const move & m) ;void reset (double a,double b);};move.cpp#include"move.h"#include<iostream>move:: move(double a,double b){x=a;y=b;}void move:: showmove() const{using std::cout;cout<<"\nshow ";cout<<"\nx value: "<<x;cout<<"\ny value: "<<y;}move move:: add(const move & m){x+=m.x;y+=m.y;return *this;}void move:: reset (double a,double b) {x=a;y=b;}main.cpp#include<iostream>#include"move.h"int main(){using std::cin;move one=move();one.showmove();one.reset(20,30);one.showmove();move two=one.add(one);two.showmove();cin.get();cin.get();return 0;}10.7plorg.hclass plorg{private:char name[20];int CI;public:plorg(constchar names[20]="Plorga",int n=50);void setvalue(int m);void show() const;};plorg.cpp#include<iostream>#include"plorg.h"#include<cstring>plorg:: plorg(constchar names[20],int n){strcpy(name,names);CI=n;}void plorg:: setvalue(int m){CI=m;}void plorg:: show() const{using std::cout;cout<<"\nshow";cout<<"\nname: "<<name;cout<<"\nCI: "<<CI;}main.cpp#include<iostream>#include"plorg.h"int main(){usingnamespace std;plorg one=plorg("wang", 5);plorg two=plorg();one.show();one.setvalue(10);one.show();two.show();cin.get();cin.get();return 0;}。
C++Primer Plus(第6版)中文版编程练习答案--第四章
1.
#include<iostream> #include<string> #include<cstring> using namespace std; void main() { string first_name; string last_name; cout<<"what's your first name?"; getline(cin,first_name); cout<<"what's your last name?"; getline(cin,last_name); char grade; cout<<"what letter grade do you deserve?"; cin>>grade; int age; cout<<"what is your age?"; cin>>age; cout<<"name:"<<last_name<<", "<<first_name<<endl; cout<<"grade:"<<char(grade+1)<<endl; cout<<"age:"<<age<<endl; }
2
cout<<"enter your last name:"<<endl; getline(cin,last_name); cout<<"here is the information in a single string:"<<last_name+", "+first_name<<endl; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章:开始学习C++ //ex2.1--display your name and address #include int main(void) { using namespace std; cout<<"My name is liao chunguang and I live in hunan chenzhou.\n”; }
//ex2.2--convert the furlong units to yard uints-把浪单位换位码单位 #include double fur2yd(double); int main() { using namespace std; cout<<"enter the distance measured by furlong units:"; double fur; cin>>fur; cout<<"convert the furlong to yard" } double fur2yd(double t) { return 220*t; } //ex2.3-每个函数都被调用两次 #include void mice(); void see(); using namespace std; int main() { mice(); mice(); see(); see(); return 0; } void mice() { cout<<"three blind mice"<} void see() { cout<<"see how they run"< } //ex2.4 #include int main() { using namespace std; cout<<"Enter your age:"; int age; cin>>age; int month; month=age*12; cout< return 0; } //ex2.5---convert the Celsius valve to Fahrenheit value #include double C2F(double); int main() { using namespace std; cout<<"please enter a Celsius value:"; double C; cin>>C; double F; F=C2F(C); cout //ex2.7--显示用户输入的小时数和分钟数 #include void show(); main() { using namespace std; show(); return 0; } void show() { using namespace std; int h,m; cout<<"enter the number of hours:"; cin>>h; cout<<"enter the number of minutes:"; cin>>m; cout<<"Time:"< } 第三章:处理数据 //ex3.1—将身高用英尺(feet)和英寸(inch)表示 #include const int inch_per_feet=12;// const常量--1feet=12inches--1英尺=12英寸 int main() { using namespace std; cout<<"please enter your height in inches:___\b\b\b";// \b表示为退格字符 int ht_inch; cin>>ht_inch; int ht_feet=ht_inch/inch_per_feet;//取商 int rm_inch=ht_inch%inch_per_feet;//取余 cout<<"your height is "< //ex3.3 以度,分,秒输入,以度输出 #include const int minutes_per_degree=60; const int seconds_per_minute=60; int main() { using namespace std; cout<<"Enter a latitude in degrees,minutes,and seconds:\n"; cout<<"First,enter the degrees:"; int degree; cin>>degree; cout<<"Next,enter the minutes of arc:"; int minute; cin>>minute; cout<<"Fianlly,enter the seconds of arc:"; int second; cin>>second; double show_in_degree; show_in_degree=(double)degree+(double)minute/minutes_per_degree+(double)second/minutes_per_degree/seconds_per_minute; cout<=" //ex3.4 #include const int hours_per_day=24; const int minutes_per_hour=60; const int seconds_per_minute=60; int main() { using namespace std; cout<<"Enter the number of seconds:"; long seconds; cin>>seconds; int Day,Hour,Minute,Second; Day=seconds/seconds_per_minute/minutes_per_hour/hours_per_day; Hour=seconds/seconds_per_minute/minutes_per_hour%hours_per_day; Minute=seconds/seconds_per_minute%minutes_per_hour;