Solutions for Programming Exercises in C++ Primer Plus, 5th Edition
Chapter 2
// pe2-2.cpp
#include
int main(void)
{
using namespace std;
cout << "Enter a distance in furlongs: ";
double furlongs;
cin >> furlongs;
double feet;
feet = 220 * furlongs;
cout << furlongs << " furlongs = "
<< feet << " feet\n";
return 0;
}
// pe2-3.cpp
#include
using namespace std;
void mice();
void run();
int main()
{
mice();
mice();
run();
run();
return 0;
}
void mice()
{
cout << "Three blind mice\n";
}
void run()
{
cout << "See how they run\n";
}
// pe2-4.cpp
#include
double C_to_F(double);
int main()
{
using namespace std;
cout << "Enter a temperature in Celsius: ";
double C;
cin >> C;
double F;
F = C_to_F(C);
cout << C << " degrees Celsius = "
<< F << " degrees Fahrenheit\n";
return 0;
}
double C_to_F(double temp)
{
return 1.8 * temp + 32.0;
}
Chapter 3
// pe3-1.cpp
#include
const int Inch_Per_Foot = 12;
int main(void)
{
using namespace std;
// Note: some environments don't support the backspace character
cout << "Please enter your height in inches: ___/b/b/b ";
int ht_inch;
cin >> ht_inch;
int ht_feet = ht_inch / Inch_Per_Foot;
int rm_inch = ht_inch % Inch_Per_Foot;
cout << "Your height is " << ht_feet << " feet, ";
cout << rm_inch << " inch(es).\n";
return 0;
}
// pe3-3.cpp
#include
const double MINS_PER_DEG = 60.0;
const double SECS_PER_MIN = 60.0;
int main()
{
using namespace std;
int degrees;
int minutes;
int seconds;
double latitude;
cout << "Enter a latitude in degrees, minutes, and seconds:\n";
cout << "First, enter the degrees: ";
cin >> degrees;
cout << "Next, enter the minutes of arc: ";
cin >> minutes;
cout << "Finally, enter the seconds of arc: ";
cin >> seconds;
latitude = degrees + (minutes + seconds / SECS_PER_MIN)/MINS_PER_DEG;
cout << degrees << " degrees, " << minutes << " minutes, "
<< seconds << " seconds = " << latitude << " degrees\n";
return 0;
}
// pe3-5.cpp
#include
int main(void)
{
using namespace std;
cout << "How many miles have you driven your car? ";
float miles;
cin >> miles;
cout << "How many gallons of gasoline did the car use? ";
float gallons;
cin >> gallons;
cout << "Your car got " << miles / gallons;
cout << " miles per gallon.\n";
return 0;
}
// pe3-6.cpp
#include
const double KM100_TO_MILES = 62.14;
const double LITERS_PER_GALLON = 3.875;
int main ( void )
{
using namespace std;
double euro_rating;
double us_rating;
cout << "Enter fuel consumption in liters per 100 km: ";
cin >> euro_rating;
// divide by LITER_PER_GALLON to get gallons per 100-km
// divide by KM100_TO_MILES to get gallons per mile
// invert result to get miles per gallon
us_rating = (LITERS_PER_GALLON * KM100_TO_MILES) / euro_rating;
cout << euro_rating << " liters per 100 km is ";
cout << us_rating << " miles per gallon.\n";
return 0;
}
Chapter 4
// pe4-2.cpp -- storing strings in string objects
#include
#include
int main()
{
using namespace std;
string name;
string dessert;
cout << "Enter your name:\n";
getline(cin, name); // reads through newline
cout << "Enter your favorite dessert:\n";
getline(cin, dessert);
cout << "I have some delicious " << dessert;
cout << " for you, " << name << ".\n";
return 0;
}
// pe4-3.cpp -- storing strings in char arrays
#include
#include
const int SIZE = 20;
int main()
{
using namespace std;
char firstName[SIZE];
char lastName[SIZE];
char fullName[2*SIZE + 1];
cout << "Enter your first name: ";
cin >> firstName;
cout << "Enter your last name: ";
cin >> lastName;
strncpy(fullName,lastName,SIZE);
strcat(fullName, ", ");
strncat(fullName, firstName, SIZE);
fullName[SIZE - 1] = '\0';
cout << "Here's the information in a single string: "
<< fullName << endl;
return 0;
}
// pe4-5.cpp
// a candybar structure
struct CandyBar {
char brand[40];
double weight;
int calories;
};
#include
int main()
{
using namespace std; //introduces namespace std
CandyBar snack = { "Mocha Munch", 2.3, 350 };
cout << "Brand name: " << snack.brand << endl;
cout << "Weight: " << snack.weight << endl;
cout << "Calories: " << snack.calories << endl;
return 0;
}
// pe4-7.ccp
#include
const int Slen = 70;
struct pizza {
char name[Slen];
float diameter;
float weight;
};
int main(void)
{
using namespace std;
pizza pie;
cout << "What is the name of the pizza company? ";
cin.getline(pie.name, Slen);
cout << "What is the diameter of the pizza in inches? ";
cin >> pie.diameter;
cout << "How much does the pizza weigh in ounces? ";
cin >> pie.weight;
cout << "Company: " << pie.name << "\n";
cout << "Diameter: " << pie.diameter << " inches\n";
cout << "Weight: " << pie.weight << " ounces\n";
return 0;
}
Chapter 5
// pe5-2.cpp
#include
int main(void)
{
using namespace std;
double sum = 0.0;
double in;
cout << "Enter a number (0 to terminate) : ";
cin >> in;
while (in != 0) {
sum += in;
cout << "Running total = " << sum << "\n";
cout << "Enter next number (0 to terminate) : ";
cin >> in;
}
cout << "Bye!\n";
return 0;
}
// pe5-4.cpp
// book sales
#include
const int MONTHS = 12;
const char * months[MONTHS] = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
int main()
{
using namespace std; //introduces namespace std
int sales[MONTHS];
int month;
cout << "Enter the monthly sales for \"C++ for Fools\":\n";
for (month = 0; month < MONTHS; month++)
{
cout << "Sales for " << months[month] << ": ";
cin >> sales[month];
}
double total = 0.0;
for (month = 0; month < MONTHS; month++)
total += sales[month];
cout << "Total sales: " << total << endl;
return 0;
}
// pe5-6.cpp
#include
struct car { char name[20]; int year;};
int main(void)
{
using namespace std;
int n;
cout << "How many cars do you wish to catalog?: ";
cin >> n;
while(cin.get() != '\n') // get rid of rest of line
;
car * pc = new car [n];
int i;
for (i = 0; i < n; i++)
{
cout << "Car #" << (i + 1) << ":\n";
cout << "Please enter the make: ";
cin.getline(pc[i].name,20);
cout << "Please enter the year made: ";
cin >> pc[i].year;
while(cin.get() != '\n') // get rid of rest of line
;
}
cout << "Here is your collection:\n";
for (i = 0; i < n; i++)
cout << pc[i].year << " " << pc[i].name << "\n";
delete [] pc;
return 0;
}
// pe5-7.cpp -- count words using C-style string
#include
#include // prototype for strcmp()
const int STR_LIM = 50;
int main()
{
using namespace std;
char word[STR_LIM];
int count = 0;
cout << "Enter words (to stop, type the word done):\n";
while (cin >> word && strcmp("done", word))
++count;
cout << "You entered a total of " << count << " words.\n";
return 0;
}
// pe5-9.cpp
//nested loops
#include
int main()
{
using namespace std; //introduces namespace std
int rows;
int row;
int col;
int periods;
cout << "Enter number of rows: ";
cin >> rows;
for (row = 1; row <= rows; row++)
{
periods = rows - row;
for (col = 1; col <= periods; col++)
cout << '.';
// col already has correct value for next loop
for ( ; col <= rows; col++)
cout << '*';
cout << endl;
}
return 0;
}
Chapter 6
// pe6-1.cpp
#include
#include
int main( )
{
using namespace std; //introduces namespace std
char ch;
cin.get(ch);
while(ch != '@')
{
if (!isdigit(ch))
{
if (isupper(ch))
ch = tolower(ch);
else if (islower(ch))
ch = toupper(ch);
cout << ch;
}
cin.get(ch);
}
return 0;
}
// pe6-3.cpp
#include
int main(void)
{
using namespace std;
cout << "Please enter one of the following choices:\n";
cout << "c) carnivore p) pianist\n"
<< "t) tree g) game\n";
char ch;
cin >> ch;
while (ch != 'c' && ch != 'p' && ch != 't' && ch != 'g')
{
cout << "Please enter a c, p, t, or g: ";
cin >> ch;
}
switch (ch)
{
case 'c' : cout << "A cat is a carnivore.\n";
break;
case 'p' : cout << "Radu Lupu is a pianist.\n";
break;
case 't' : cout << "A maple is a tree.\n";
break;
case 'g' : cout << "Golf is a game.\n";
break;
default : cout << "The program shouldn't get here!\n";
}
return 0;
}
// pe6-5.cpp
// Neutronia taxation
#include
const double LEV1 = 5000;
const double LEV2 = 15000;
const double LEV3 = 35000;
const double RATE1 = 0.10;
const double RATE2 = 0.15;
const double RATE3 = 0.20;
int main( )
{
using namespace std;
double income;
double tax;
cout << "Enter your annual income in tvarps: ";
cin >> income;
if (income <= LEV1)
tax = 0;
else if (income <= LEV2)
tax = (income - LEV1) * RATE1;
else if (income <= LEV3)
tax = RATE1 * (LEV2 - LEV1) + RATE2 * (income - LEV2);
else
tax = RATE1 * (LEV2 - LEV1) + RATE2 * (LEV3 - LEV2)
+ RATE3 * (income - LEV3);
cout << "You owe Neutronia " << tax << " tvarps in taxes.\n";
return 0;
}
// pe6-7.cpp
#include
#include
int main()
{
using namespace std;
string word;
char ch;
int vowel = 0;
int consonant = 0;
int other = 0;
cout << "Enter words (q to quit):\n";
cin >> word;
while ( word != "q")
{
ch = tolower(word[0]);
if (isalpha(ch))
{
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o'
|| ch == 'u')
vowel++;
else
consonant++;
}
else
other++;
cin >> word;
}
cout << vowel <<" words beginning with vowels\n";
cout << consonant << " words beginning with consonants\n";
cout << other << " others\n";
return 0;
}
// pe6-8.cpp -- counting characters
#include
#include // file I/O suppport
#include // support for exit()
const int SIZE = 60;
int main()
{
using namespace std;
char filename[SIZE];
char ch;
ifstream inFile; // object for handling file input
cout << "Enter name of data file: ";
cin.getline(filename, SIZE);
inFile.open(filename); // associate inFile with a file
if (!inFile.is_open()) // failed to open file
{
cout << "Could not open the file " << filename << endl;
cout << "Program terminating.\n";
exit(EXIT_FAILURE);
}
int count = 0; // number of items read
inFile >> ch; // get first value
while (inFile.good()) // while input good and not at EOF
{
count++; // one more item read
inFile >> ch; // get next value
}
cout << count << " characters in " << filename << endl;
inFile.close(); // finished with the file
return 0;
}
Chapter 7
//pe7-1.cpp -- harmonic mean
#include
double h_mean(double x, double y);
int main(void)
{
using namespace std;
double x,y;
cout << "Enter two numbers (a 0 terminates): ";
while (cin >> x >> y && x * y != 0)
cout << "harmonic mean of " << x << " and "
<< y << " = " << h_mean(x,y) << "\n";
/* or do the reading and testing in two parts:
while (cin >> x && x != 0)
{
cin >> y;
if (y == 0)
break;
...
*/
cout << "Bye\n";
return 0;
}
double h_mean(double x, double y)
{
return 2.0 * x * y / (x + y);
}
// pe7-3.cpp
#include
struct box {
char maker[40];
float height;
float width;
float length;
float volume;
};
void showbox(box b);
void setbox(box * pb);
int main(void)
{
box carton = {"Bingo Boxer", 2, 3, 5}; // no volume provided
setbox(&carton);
showbox(carton);
return 0;
}
void showbox(box b)
{
using namespace std;
cout << "Box maker: " << b.maker
<< "\nheight: " << b.height
<< "\nlwidth: " << b.width
<< "\nlength: " << b.length
<< "\nvolume: " << b.volume << "\n";
}
void setbox(box * pb)
{
pb->volume = pb->height * pb->width * pb->length;
}
// pe7-4.cpp -- probability of winning
#include
long double probability(unsigned numbers, unsigned picks);
int main()
{
using namespace std;
double total, choices;
double mtotal;
double probability1, probability2;
cout << "Enter total number of game card choices and\n"
"number of picks allowed for the field:\n";
while ((cin >> total >> choices) && choices <= total)
{
cout << "Enter total number of game card choices "
"for the mega number:\n";
if (!(cin >> mtotal))
break;
cout << "The chances of getting all " << choices << " picks is one in "
<< (probability1 = probability(total, choices) ) << ".\n";
cout << "The chances of getting the megaspot is one in "
<< (probability2 = probability(mtotal, 1) ) << ".\n";
cout << "You have one chance in ";
cout << probability1 * probability2; // compute the probability
cout << " of winning.\n";
cout << "Next set of numbers (q to quit): ";
}
cout << "bye\n";
return 0;
}
// the following function calculates the probability of picking picks
// numbers correctly from numbers choices
long double probability(unsigned numbers, unsigned picks)
{
long double result = 1.0; // here come some local variables
long double n;
unsigned p;
for (n = numbers, p = picks; p > 0; n--, p--)
result = result * n / p ;
return result;
}
// pe7-6.cpp
#include
int Fill_array(double ar[], int size);
void Show_array(const double ar[], int size);
void Reverse_array(double ar[], int size);
const int LIMIT = 10;
int main( )
{
using namespace std;
double values[LIMIT];
int entries = Fill_array(values, LIMIT);
cout << "Array values:\n";
Show_array(values, entries);
cout << "Array reversed:\n";
Reverse_array(values, entries);
Show_array(values, entries);
cout << "All but end values reversed:\n";
Reverse_array(values + 1, entries - 2);
Show_array(values, entries);
return 0;
}
int Fill_array(double ar[], int size)
{
using namespace std;
int n;
cout << "Enter up to " << size << " values (q to quit):\n";
for (n = 0; n < size; n++)
{
cin >> ar[n];
if (!cin)
break;
}
return n;
}
void Show_array(const double ar[], int size)
{
using namespace std;
int n;
for (n = 0; n < size; n++)
{
cout << ar[n];
if (n % 8 == 7)
cout << endl;
else
cout << ' ';
}
if (n % 8 != 0)
cout << endl;
}
void Reverse_array(double ar[], int size)
{
int i, j;
double temp;
for (i = 0, j = size - 1; i < j; i++, j--)
{
temp = ar[i];
ar[i] = ar[j];
ar[j] = temp;
}
}
//pe7-9.cpp
#include
double calculate(double x, double y, double (*pf)(double, double));
double add(double x, double y);
double sub(double x, double y);
double mean(double x, double y);
int main(void)
{
using namespace std;
double (*pf[3])(double,double) = {add, sub, mean};
char * op[3] = {"sum", "difference", "mean"};
double a, b;
cout << "Enter pairs of numbers (q to quit): ";
int i;
while (cin >> a >> b)
{
// using function names
cout << calculate(a, b, add) << " = sum\n";
cout << calculate(a, b, mean) << " = mean\n";
// using pointers
for (i = 0; i < 3; i++)
cout << calculate(a, b, pf[i]) << " = "
<< op[i] << "\n";
}
cout << "Done!\n";
return 0;
}
double calculate(double x, double y, double (*pf)(double, double))
{
return (*pf)(x, y);
}
double add(double x, double y)
{
return x + y;
}
double sub(double x, double y)
{
return x - y;
}
double mean(double x, double y)
{
return (x + y) / 2.0;
}
Chapter 8
// pe8-1.cpp
#include
void silly(const char * s, int n = 0);
int main(void)
{
using namespace std;
char * p1 = "Why me?\n";
silly(p1);
for (int i = 0; i < 3; i++)
{
cout << i << " = i\n";
silly(p1, i);
}
cout << "Done\n";
return 0;
}
void silly(const char * s, int n)
{
using namespace std;
static int uses = 0;
int lim = ++uses;
if (n == 0)
lim = 1;
for (int i = 0; i < lim; i++)
cout << s;
}
// pe8-4.cpp
#include
#include // for strlen(), strcpy()
using namespace std;
struct stringy {
char * str; // points to a string
int ct; // length of string (not counting '\0')
};
void show(const char *str, int cnt = 1);
void show(const stringy & bny, int cnt = 1);
void set(stringy & bny, const char * str);
int main(void)
{
stringy beany;
char testing[] = "Reality isn't what it used to be.";
set(beany, testing); // first argument is a reference,
// allocates space to hold copy of testing,
// sets str member of beany to point to the
// new block, copies testing to new block,
// and sets ct member of beany
show(beany); // prints member string once
show(beany, 2); // prints member string twice
testing[0] = 'D';
testing[1] = 'u';
show(testing); // prints testing string once
show(testing, 3); // prints testing string thrice
show("Done!");
return 0;
}
void show(const char *str, int cnt)
{
while(cnt-- > 0)
{
cout << str << endl;
}
}
void show(const stringy & bny, int cnt)
{
while(cnt-- > 0)
{
cout << bny.str << endl;
}
}
void set(stringy & bny, const char * str)
{
bny.ct = strlen(str);
bny.str = new char[bny.ct+1];
strcpy(bny.str, str);
}
// pe8-5.cpp
#include
template
T max5(T ar[])
{
int n;
T max = ar[0];
for (n = 1; n < 5; n++)
if (ar[n] > max)
max = ar[n];
return max;
}
const int LIMIT = 5;
int main( )
{
using namespace std;
double ard[LIMIT] = { -3.4, 8.1, -76.4, 34.4, 2.4};
int ari[LIMIT] = {2, 3, 8, 1, 9};
本文档为【C++_Primer_Plus(第五版)编程习题解答】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。