C++ Primer Plus 第六版(中文版)第五、六章(完美修订版)编程练习答案

//本博主所写的代码仅为阅读者提供参考;

//若有不足之处请提出,博主会尽所能修改;

//附上课后编程练习题目;

//若是对您有用的话请点赞或分享提供给它人;


//--------------------------------------------------------------------------------------------------------------;


//5.9 - 1.cpp

#include <iostream>
using namespace std;

int main()
{
    
    
    int sum = 0;
    int i, num1, num2;

    cout << "Please enter the first integer: ";
    cin >> num1;
    cout << "Please enter the second integer: ";
    cin >> num2;

    for (i = num1; i <= num2; i++)
    {
    
    
        sum += i;
    }
    cout << "Sum of " << num1 << " to " << num2 << " are " << sum << endl;

    return 0;
}

//-------------

//5.9 - 2.cpp

#include <iostream>
#include <array>
using namespace std;

int main()
{
    
    
    const int ArSize = 101;
    array<long double, ArSize> factorials;

    factorials[0] = factorials[1] = 1L;
    for (int i = 2; i < ArSize; i++)
    {
    
    
        factorials[i] = i * factorials[i - 1];
    }
    for (int i = 0; i < ArSize; i++)
    {
    
    
        cout << i << "! = " << factorials[i] << endl;
    }

    return 0;
}

//-------------

//5.9 - 3.cpp

#include <iostream>
#include <array>
using namespace std;

int main()
{
    
    
    long long num;
    long long sum = 0LL;

    while (cout << "Please enter an integer(0 to quit): ", cin >> num && num != 0)
    {
    
    
        //↑逗号运算符只取最后的结果作为判断条件;
        sum += num;
    }
    cout << "Sum of all integers are " << sum << endl;

    return 0;
}

//-------------

//5.9 - 4.cpp

#include <iostream>
using namespace std;

int main()
{
    
    
    int n = 0;
    double daphne_money = 100;
    double cleo_money = 100;

    while (cleo_money <= daphne_money)
    {
    
    
        cout << "Year " << ++n << ':' << endl;
        daphne_money += 10;
        cleo_money += cleo_money * 0.05;
        cout << "Cleo's money = " << cleo_money;
        cout << ", Daphne's money = " << daphne_money << endl;
    }
    cout << "After " << n << " years, ";
    cout << "Cleo's money";
    cout << " > Daphne's money." << endl;

    return 0;
}

//-------------

//5.9 - 5.cpp

#include <iostream>
#include <string>
using namespace std;

int main()
{
    
    
    const int ArSize = 12;
    const string months[ArSize] = 
    {
    
    
        "January", "February","March", 
        "April", "May", "June", "July",
        "August","September", "October",
        "November", "December"
    };
    int sum, sales_volume[ArSize];

    for (int i = 0; i < ArSize; i++)
    {
    
    
        cout << "Please enter number of books sold (";
        cout << months[i] << "): ";
        cin >> sales_volume[i];
    }
    for (int i = 0; i < ArSize; i++)
    {
    
    
        sum += sales_volume[i];
    }
    cout << "A total of " << sum << " <<C++ For Fools>> books were sold in a year." << endl;

    return 0;
}

//-------------

//5.9 - 6.cpp

#include <iostream>
#include <string>
using namespace std;

const int NUM = 3;
const int ArSize = 12;

int show_result(int (*x)[ArSize], int n);

int main()
{
    
    
    const string months[ArSize] = 
    {
    
    
        "January", "February","March", 
        "April", "May", "June", "July",
        "August","September", "October",
        "November", "December"
    };
    int sum, total, sales_volume[NUM][ArSize];

    for (int i = 0; i < NUM; i++)
    {
    
    
        cout << "Year " << i + 1 << ": " << endl;
        for (int j = 0; j < ArSize; j++)
        {
    
    
            cout << "Please enter number of books sold (";
            cout << months[j] << "): ";
            cin >> sales_volume[i][j];
        }
        cout << endl;
    }

    sum = total = show_result(sales_volume, 0);
    cout << "A total of " << sum << " <<C++ For Fools>> books were sold in the first year." << endl;
    total += sum = show_result(sales_volume, 1);
    cout << "A total of " << sum << " <<C++ For Fools>> books were sold in the second year." << endl;
    total += sum = show_result(sales_volume, 2);
    cout << "A total of " << sum << " <<C++ For Fools>> books were sold in the third year." << endl;
    cout << "A total of " << total << " <<C++ For Fools>> books were sold in three years." << endl;

    return 0;
}

int show_result(int (*x)[ArSize], int n)
{
    
    
    int sum = 0;

    for (int i = 0; i < ArSize; i++)
    {
    
    
        sum += x[n][i];
    }
    return sum;
}

//-------------

//5.9 - 7.cpp

#include <iostream>
#include <string>
using namespace std;

struct car
{
    
    
    string producer;
    int year_of_introducion;
};

int main()
{
    
    
    int num;

    cout << "How many cars do you wish to catalog? ";
    (cin >> num).get();
    car *many_cars = new car[num];

    for (int i = 0; i < num; i++)
    {
    
    
        cout << "Car #" << i + 1 << ':' << endl;
        cout << "Please enter the make: ";
        getline(cin, many_cars[i].producer);
        cout << "Please enter the year made: ";
        (cin >> many_cars[i].year_of_introducion).get();
    }

    cout << "Here is your collection:" << endl;
    for (int i = 0; i < num; i++)
    {
    
    
        cout << many_cars[i].year_of_introducion;
        cout << ' ' << many_cars[i].producer << endl;
    }
    delete[] many_cars;

    return 0;
}

//-------------

//5.9 - 8.cpp

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    
    
    const int ArSize = 256;
    char str[ArSize];
    unsigned int count = 0;

    cout << "Enter words (to stop, type the word done):" << endl;
    while (cin >> str)
    {
    
    
        if (0 == strcmp("done", str))
        {
    
    
            break;
        }
        ++count;
    }
    cout << "You entered a total of " << count << " words." << endl;

    return 0;
}

//-------------

//5.9 - 9.cpp

#include <iostream>
#include <string>
using namespace std;

int main()
{
    
    
    string str;
    unsigned int count = 0;

    cout << "Enter words (to stop, type the word done):" << endl;
    while (cin >> str)
    {
    
    
        if ("done" == str)
        {
    
    
            break;
        }
        ++count;
    }
    cout << "You entered a total of " << count << " words." << endl;

    return 0;
}

//-------------

//5.9 - 10.cpp

#include <iostream>
using namespace std;

int main()
{
    
    
    int i, j, row;

    cout << "Enter number of rows: ";
    cin >> row;

    for (i = 1; i <= row; i++)
    {
    
    
        for (j = i; j <= row - 1; j++)
        {
    
    
            cout.put('.');
        }
        for (j = 1; j <= i; j++)
        {
    
    
            cout.put('*');
        }
        cout.put('\n');
    }

    return 0;
}

//-------------

//6.11 - 1.cpp

#include <iostream>
#include <cctype>
using namespace std;

int main()
{
    
    
    char ch;

    cout << "Type, and I shall repeat(@ to quit)." << endl;
    while (cin.get(ch) && ch != '@')
    {
    
    
        if (islower(ch))
        {
    
    
            ch = toupper(ch);
        }
        else if (isupper(ch))
        {
    
    
            ch = tolower(ch);
        }
        if (!isdigit(ch))
        {
    
    
            cout.put(ch);
        }
    }
    cout << "\nPlease excuse the slight confusion." << endl;

    return 0;
}

//-------------

//6.11 - 2.cpp

#include <iostream>
#include <array>
using namespace std;

int main()
{
    
    
    int i = 0, j = 0;
    unsigned int count = 0;
    const int ArSize = 10;
    array<double, ArSize> donations;
    double total = 0.0, average = 0.0;

    cout << "You may enter up to " << ArSize;
    cout << " donation (q to terminate)." << endl;
    cout << "donation #1: ";
    while (i < ArSize && cin >> donations[i])
    {
    
    
        if (++i < ArSize)
        {
    
    
            cout << "donation #" << i + 1 << ": ";
        }
    }

    for (j = 0; j < i; j++)
    {
    
    
        total += donations[j];
    }
    average = total / i;
    for (j = 0; j < i; j++)
    {
    
    
        if (average < donations[j])
        {
    
    
            ++count;
        }
    }

    if (0 == i)
    {
    
    
        cout << "No donation!" << endl;
    }
    else
    {
    
    
        cout << average << " = average of ";
        cout << i << " donations.\n";
        cout << count << " numbers are greater than the average." << endl;
    }

    return 0;
}

//-------------

//6.11 - 3.cpp

#include <iostream>
using namespace std;

void show_menu();

int main()
{
    
    
    char ch;

    show_menu();
    while (cin >> ch)
    {
    
    
        switch (ch)
        {
    
    
        case 'c':
        {
    
    
            cout << "Pandas are also carnivores." << endl;
            break;
        }
        case 'p':
        {
    
    
            cout << "Mozart is an excellent pianist." << endl;
            break;
        }
        case 't':
        {
    
    
            cout << "A maple is a tree." << endl;
            break;
        }
        case 'g':
        {
    
    
            cout << "Playing game can relax yourself." << endl;
            break;
        }
        default:
        {
    
    
            cout << "Please enter a c, p, t, or g: ";
            break;
        }
        }
        if ('c' == ch || 'p' == ch || 't' == ch || 'g' == ch)
        {
    
    
            break;
        }
    }

    return 0;
}

void show_menu()
{
    
    
    cout << "Please enter one of the following choices:" << endl;
    cout << "c) carnivore           p) pianist" << endl;
    cout << "t) tree                g) game" << endl;
    return;
}

//-------------

//6.11 - 4.cpp

#include <iostream>
using namespace std;

const int NUM = 5;
const int strsize = 20;

struct bop
{
    
    
    char fullname[strsize];
    char title[strsize];
    char bopname[strsize];
    int preference;
};

void show_menu();

int main()
{
    
    
    char ch;
    bop people[NUM] = 
    {
    
    
        {
    
    "Wimp Macho", "Teacher", "WMA", 0},
        {
    
    "Raki Rhodes", "Junior Programmer", "RHES", 1},
        {
    
    "Celia Laiter", "Professor", "MIPS", 2},
        {
    
    "Hoppy Hipman", "Analyst Trainee", "HPAN", 1},
        {
    
    "Pat Hand", "Animal Keeper", "LOOPY", 2}
    };

    show_menu();
    cout << "Enter your choice: ";
    while (cin >> ch && ch != 'q')
    {
    
    
        switch (ch)
        {
    
    
        case 'a':
        {
    
    
            for (int i = 0; i < NUM; i++)
            {
    
    
                cout << people[i].fullname << endl;
            }
            break;
        }
        case 'b':
        {
    
    
            for (int i = 0; i < NUM; i++)
            {
    
    
                cout << people[i].title << endl;
            }
            break;
        }
        case 'c':
        {
    
    
            for (int i = 0; i < NUM; i++)
            {
    
    
                cout << people[i].bopname << endl;
            }
            break;
        }
        case 'd':
        {
    
    
            for (int i = 0; i < NUM; i++)
            {
    
    
                switch (people[i].preference)
                {
    
    
                case 0:
                {
    
    
                    cout << people[i].fullname << endl;
                    break;
                }
                case 1:
                {
    
    
                    cout << people[i].title << endl;
                    break;
                }
                case 2:
                {
    
    
                    cout << people[i].bopname << endl;
                    break;
                }
                }
            }
            break;
        }
        default:
        {
    
    
            cout << "Illegal input!" << endl;
            break;
        }
        }
        cout << "Next choice: ";
    }
    cout << "Bye!" << endl;

    return 0;
}

void show_menu()
{
    
    
    cout << "Benevolent Order of Programmers Report" << endl;
    cout << "a. display by name     b. display by title" << endl;
    cout << "c. display by bopname  d. display by preference" << endl;
    cout << "q. quit" << endl;
    return;
}

//-------------

//6.11 - 5.cpp

#include <iostream>
using namespace std;

int main()
{
    
    
    const double TVARPS_5000 = 0.0;
    const double TVARPS_5000_15000 = 0.1;
    const double TVARPS_15001_35000 = 0.15;
    const double TVARPS_35000 = 0.2;
    double wage, tax;

    cout << "Please enter your wage (q or <0 to quit): ";
    while (cin >> wage && wage > 0)
    {
    
    
        cout << "Your wage: " << wage << " tvarps.\n";
        if (wage < 5000)
        {
    
    
            tax = 0.0;
        }
        else if (wage < 15000)
        {
    
    
            tax = (wage - 5000) * TVARPS_5000_15000;
        }
        else if (wage < 35000)
        {
    
    
            tax = (wage - 15000) * TVARPS_15001_35000 + 10000 * TVARPS_5000_15000;
        }
        else
        {
    
    
            tax = (wage - 35000) * TVARPS_35000 + 20000 * TVARPS_15001_35000 + 10000 * TVARPS_5000_15000;
        }
        cout << "Your tax: " << tax << " tvarps.\n";
        cout << "Next wage (q or <0 to quit): ";
    }
    cout << "Bye." << endl;

    return 0;
}

//-------------

//6.11 - 6.cpp

#include <iostream>
#include <string>
using namespace std;

const int HIGH_MONEY = 10000;

struct corporation
{
    
    
    string name;
    double money;
};

int main()
{
    
    
    int i, num;
    unsigned int patrons = 0;
    unsigned int grand_patrons = 0;

    cout << "Please enter the number of donators: ";
    (cin >> num).get(); //吸收换行符;
    corporation *people = new corporation[num];

    for (i = 0; i < num; i++)
    {
    
    
        cout << "Please enter name #" << i + 1 << ": ";
        getline(cin, people[i].name);
        cout << "Please enter the amount of donation #" << i + 1 << ": ";
        while (!(cin >> people[i].money)) //处理错误输入;
        {
    
    
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Please enter a number: ";
        }
        cin.get(); //吸收正确输入时的换行符;
    }
    for (i = 0; i < num; i++)
    {
    
    
        HIGH_MONEY < people[i].money ? ++grand_patrons : ++patrons; //条件运算符代替条件语句;
    }

    cout << "\nGrand Patrons:" << endl;
    if (grand_patrons != 0)
    {
    
    
        for (i = 0; i < num; i++)
        {
    
    
            if (people[i].money > HIGH_MONEY)
            {
    
    
                cout << "Name: " << people[i].name;
                cout << "\nMoney: " << people[i].money << endl;
            }
        }
    }
    else
    {
    
    
        cout << "none" << endl;
    }

    cout << "\nPatrons:" << endl;
    if (patrons != 0)
    {
    
    
        for (i = 0; i < num; i++)
        {
    
    
            if (people[i].money < HIGH_MONEY)
            {
    
    
                cout << "Name: " << people[i].name;
                cout << "\nMoney: " << people[i].money << endl;
            }
        }
    }
    else
    {
    
    
        cout << "none" << endl;
    }
    delete[] people;

    return 0;
}

//-------------

//6.11 - 7.cpp

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main()
{
    
    
    string words;
    unsigned int vowels = 0;
    unsigned int consonants = 0;
    unsigned int others = 0;

    cout << "Enter words (q to quit):" << endl;
    while (cin >> words, words.size() != 1 && words != "q") //逗号运算符的妙用;
    {
    
    
        if (isalpha(words[0]))
        {
    
    
            switch (tolower(words[0])) //使用小写判断首字符是否是元音;
            {
    
    
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
            {
    
    
                ++vowels;
                break;
            }
            default:
            {
    
    
                ++consonants;
                break;
            }
            }
        }
        else
        {
    
    
            ++others;
        }
    }
    cout << vowels << " words beginning with vowels" << endl;
    cout << consonants << " words beginning with consonants" << endl;
    cout << others << " others" << endl;

    return 0;
}

//-------------

//6.11 - 8.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

int main()
{
    
    
    char ch;
    ifstream infile;
    string filename;
    unsigned int count = 0;

    cout << "Please enter name of data file: ";
    getline(cin, filename);
    infile.open(filename);

    if (!infile.is_open())
    {
    
    
        cout << "Could not open the file " << filename << endl;
        cout << "Program terminating." << endl;
        exit(EXIT_FAILURE);
    }
    while (infile.get(ch), infile.good())
    {
    
    
        ++count;
        cout.put(ch);
    }
    if (0 == count)
    {
    
    
        cout << "No data processed." << endl;
    }
    else
    {
    
    
        cout << count << " characters in the file " << filename << endl;
    }
    infile.close();

    return 0;
}

//-------------

//6.11 - 9.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

const int HIGH_MONEY = 10000;

struct corporation
{
    
    
    string name;
    double money;
};

int main()
{
    
    
    int i, num;
    string filename;
    ifstream infile;
    unsigned int patrons = 0;
    unsigned int grand_patrons = 0;

    cout << "Please enter name of data file: ";
    getline(cin, filename);
    infile.open(filename);
    if (!infile.is_open())
    {
    
    
        cout << "Could not open the file " << filename << endl;
        cout << "Program terminating." << endl;
        exit(EXIT_FAILURE);
    }

    (infile >> num).get();
    corporation *people = new corporation[num];
    for (i = 0; i < num && infile.good(); i++)
    {
    
    
        getline(infile, people[i].name);
        while (!(infile >> people[i].money)) //处理错误输入;
        {
    
    
            infile.clear();
            while (infile.get() != '\n')
                continue;
        }
        while (infile.get() != '\n')
            continue;
    }
    infile.close();

    for (i = 0; i < num; i++)
    {
    
    
        HIGH_MONEY < people[i].money ? ++grand_patrons : ++patrons; //条件运算符代替条件语句;
    }

    cout << "\nGrand Patrons:" << endl;
    if (grand_patrons != 0)
    {
    
    
        for (i = 0; i < num; i++)
        {
    
    
            if (people[i].money > HIGH_MONEY)
            {
    
    
                cout << "Name: " << people[i].name;
                cout << "\nMoney: " << people[i].money << endl;
            }
        }
    }
    else
    {
    
    
        cout << "none" << endl;
    }

    cout << "\nPatrons:" << endl;
    if (patrons != 0)
    {
    
    
        for (i = 0; i < num; i++)
        {
    
    
            if (people[i].money < HIGH_MONEY)
            {
    
    
                cout << "Name: " << people[i].name;
                cout << "\nMoney: " << people[i].money << endl;
            }
        }
    }
    else
    {
    
    
        cout << "none" << endl;
    }
    delete[] people;

    return 0;
}

//-------------

//------------------------------------------2020年9月20日 ----------------------------------------------;

猜你喜欢

转载自blog.csdn.net/m0_46181359/article/details/108692217