C++primer plus 第七章编程练习

本人用code::block 编写,如需参考,善用Ctrl+shift+C 和 Ctrl + shift + X 快捷键
如有任何错误或疑问,欢迎留言

#include <iostream>
using namespace std;
double p7_1();
int p7_2enter(double score[]);
void p7_2show(double score[], int num);
double p7_2ave(double score[], int num);


struct box
{
    char maker[40];
    float height;
    float width;
    float length;
    float volume;
};
void p7_3show(box a);
void p7_3setv(box *p);
double p7_4(unsigned numbers, unsigned picks, unsigned senumbers);
long p7_5(int n);

int p7_6Fill_array(double execute[], int num);
void p7_6Show_array(double execute[], int num);
void p7_6Reverse_array(double execute[], int num);

double* p7_7fill_array(double ar[], int limit);
void p7_7show_array(const double ar[], double* last);
void p7_7revalue(double r, double ar[], double* last);
const int Seasons = 4;
const char* Snames[Seasons] = {"Spring", "Summer", "Fall", "Winter"};
struct Expenses
{
    double expense;
};
void p7_8fill(double ar[], const int Seasons);
void p7_8fill2(Expenses ar[], const int Seasons);

void p7_8show(double ar[], const int seasons);
void p7_8show2(Expenses ar[], const int seasons);

const int SLEN = 30;
struct student
{
    char fullname[SLEN];
    char hobby[SLEN];
    int opplevel;
};
int p7_9getinfo(student pa[], int n);

void p7_9display1(const student st);
void p7_9display2(const student *st);
void p7_9display3(const student[], int n);


double p7_10caculate(double, double, double (*p)(double, double));
double p7_10add1(double,double);
double p7_10add2(double,double);
double p7_10add3(double,double);


int main()
{
// 7.1   double ave = p7_1();
//    while(1)
//    {
//        if (ave == -1)
//            break;
//        cout << "the harmonic average of the two number is: " << ave;
//        cout << endl;
//        ave = p7_1();
//    }
//7.2    double scores[10]={0};
//    int num;
//    double ave;
//
//    num = p7_2enter(scores);
//    p7_2show(scores, num);
//    ave = p7_2ave(scores, num);
//    cout << "The average of your scores is: " << ave << endl;
//7.3    box haha = {"adidas", 10.0f, 20.0f, 30.0f};
//    p7_3setv(&haha);
//    p7_3show(haha);
//    unsigned numbers, picks, senumbers;
//    double P;
//    cout << "Please enter the first numbers, picks and second numbers(q to quit):\n";
//    while(cin >> numbers >> picks >> senumbers)
//    {
//        P = p7_4(numbers, picks, senumbers);
//        cout << "The rate you win is: " << P << endl;
//        cout << "next two three numbers (q to quit):\n";
//    }
//7.5    int n;
//    long answer;
//    cout << "Enter a integer, and I will give you the factorial: " << endl;
//    while(cin >> n)
//    {
//        answer = p7_5(n);
//        cout << "The answer is: " << answer << endl;
//        cout << "next: " << endl;
//    }
//    const int num = 10;
//    double test[num];
//    int counter;
//    counter = p7_6Fill_array(test, num);
//    p7_6Show_array(test, counter);
//    p7_6Reverse_array(test, counter);
//    p7_6Show_array(test, counter);
//    const int Max = 5;
//    double properties[Max];
//    double* endp = p7_7fill_array(properties, Max);
//    p7_7show_array(properties, endp);
//    if (endp > properties )
//    {
//        cout << "Enter revaluation factor: ";
//        double factor;
//        while(!(cin >> factor))
//        {
//            cin.clear();
//            while (cin.get() != '\n')
//            {
//                continue;
//            }
//        }
//        p7_7revalue(factor, properties, endp);
//        p7_7show_array(properties, endp);
//    }
//    cout << "Done!\n";
//    cin.get();
//    cin.get();

//7.8    double expenses[Seasons];
//    Expenses expenses2[Seasons];
//    p7_8fill(expenses, Seasons);
//    cout << "next kind of array:\n";
//    p7_8fill2(expenses2, Seasons);
//
//    p7_8show(expenses, Seasons);
//    cout << "next kind of array:\n";
//    p7_8show2(expenses2, Seasons);
//7.9    cout << "Enter class size: ";
//    int class_size;
//    cin >> class_size;
//    while (cin.get() != '\n')
//        continue;
//    student * ptr_stu = new student[class_size];
//    int entered = p7_9getinfo(ptr_stu, class_size);
//    cout << endl;
//    for (int i = 0; i < entered; i++)
//    {
//        p7_9display1(ptr_stu[i]);
//        p7_9display2(&ptr_stu[i]);
//        cout << endl;
//    }
//    p7_9display3(ptr_stu, entered);
//    delete [] ptr_stu;
//    cout << "Done!\n";
    double a, b;
    cout << "Enter two numbers, and I will give you some kind of add include them:\n";
    cout << "q to quit:\n";
    double (*padd[3])(double, double) = {p7_10add1, p7_10add2, p7_10add3};
    int slecter = 0;
    double answer;
    while (cin >> a >> b)
    {
        answer = p7_10caculate(a, b, padd[slecter % 3]);
        ++slecter;
        cout << "This time, add of the two number is: " << answer << endl;
    }

    return 0;
}
double p7_1()
{
    double x,y;
    double ave;
    cout << "please enter 2 numbers:\n";
    cin >> x >> y;
    ave = x*y;
    if (0 == ave)
    {
        cout << "IO termination, return -1:";
        return -1.0;
    }
    ave = 2.0*ave / (x+y);
    return ave;
}
int p7_2enter(double score[])
{
    cout << "Please enter you scores, no more than 10, q to end early: " << endl;
    int i = 0;
    int count = 0;
    while (cin >> score[i])
    {
        ++count;
        if (count >= 10)
            break;
        i++;
    }
    return count;
}
void p7_2show(double score[], int num)
{
    cout << "this is your scores:\n";
    for (int i =0; i<num; i++)
    {
        cout << score[i] << " ";
    }
    cout << endl;
    return;
}

double p7_2ave(double score[], int num)
{
    double sum = 0;

    for (int i = 0; i<num; i++)
    {
        sum += score[i];
    }
    return sum/num;
}
void p7_3show(box a)
{
    cout << "maker: " << a.maker << endl;
    cout << "height: " << a.height << endl;
    cout << "length: " << a.length << endl;
    cout << "width: " << a.width << endl;
    cout << "volume: " << a.volume << endl;
}
void p7_3setv(box *p)
{
    p->volume = p->height*p->length*p->width;
}
double p7_4(unsigned numbers, unsigned picks, unsigned senumbers)
{
    double p = 1.0;
    unsigned i;
    for (i = 1; i<=picks; i++, numbers--)
        p = p * double(numbers) / double(i);
    p = (1.0 / p) * (1.0 / senumbers);
    return p;
}
long p7_5(int n)
{
    static long m = 1;
    if(n == 0)
        return 1;
    else
        m = n*p7_5(n-1);
    return m;
}
int p7_6Fill_array(double execute[], int num)
{
    int count = 0;
    cout << "enter the double number(q to quit): " << count+1 << endl;
    while (cin >> execute[count])
    {
        count ++;
        if (count >= num)
        {
            cout << "too much!!" << endl;
            break;
        }

        cout << "enter the double number(q to quit):" << count+1 << endl;
    }
    return count;

}
void p7_6Show_array(double execute[], int num)
{
    int i = 0;
    cout << "This is your array: " << endl;
    for (; i<num; i++)
    {
        cout << execute[i] << ' ';
    }
    cout << endl;
}
void p7_6Reverse_array(double execute[], int num)
{
    double temp;
    int i = 0;
    num -=1;
    for (; i< num; i++, num--)
    {
        temp = execute[i];
        execute[i] = execute[num];
        execute[num] = temp;
    }
}

double* p7_7fill_array(double ar[], int limit)
{
    double temp;
    int i;
    for(i = 0; i < limit; i++)
    {
        cout << "Enter value #" << (i + 1) << ": ";
        cin >> temp;
        if (!cin)
        {
            while(cin.get() != '\n')
                continue;
            cout << "bad input; input process terminated.\n";
            break;
        }
        else if(temp < 0)
            break;
        ar[i] = temp;
    }
    cout << endl;
    return (ar + i-1);
}
void p7_7show_array(const double ar[], double* endp)
{
    int i;
    for (i =0; (ar+i) <= endp; i++)
    {
        cout << "Property #" << (i+1) << ": $";
        cout << *(ar+i) << endl;
    }
}
void p7_7revalue(double r, double ar[], double* endp)
{
    for (int i =0; (ar+i)<= endp; i++)
        ar[i] = r;
}
void p7_8fill(double ar[], const int Seasons)
{
    for ( int i = 0; i<Seasons; i++)
    {
        cout << "Enter " << Snames[i] << " expenses: ";
        cin >> ar[i];
    }
}

void p7_8show(double ar[], const int seasons)
{
    double total = 0;
    cout << "\n EXPENSES\n";
    for (int i = 0; i<Seasons; i++)
    {
        cout << Snames[i] << ": " << ar[i] << endl;
        total += ar[i];
    }
    cout << "Total: " << total << endl;
}
void p7_8fill2(Expenses ar[], const int Seasons)
{
        for ( int i = 0; i<Seasons; i++)
    {
        cout << "Enter " << Snames[i] << " expenses: ";
        cin >> ar[i].expense;
    }
}


void p7_8show2(Expenses ar[], const int seasons)
{
    double total = 0.0;
    cout << "\n EXPENSES\n";
    for (int i = 0; i<Seasons; i++)
    {
        cout << Snames[i] << ": " << ar[i].expense<< endl;
        total += ar[i].expense;
    }
    cout << "Total: " << total << endl;
}
int p7_9getinfo(student pa[], int n)
{
    int i;
    cout << "Enter a set of students' information, no more than " << n << "\nand a blank line name to quit: \n";
    for(i = 0; i< n; i++)
    {
        cout << "Student " << i+1 << " name: ";
        cin.get(pa[i].fullname, 30).get();
        if(!cin)
        {
            cin.clear();
            cout << "blank line, input terminated!!\n";
            break;
        }
        cout << "His hobby: ";
        cin.getline(pa[i].hobby, 30);
        cout << "His opplevel: ";
        cin >> pa[i].opplevel;
        cin.get();
    }
    return i;
}

void p7_9display1(student st)
{
    cout << "Name: " << st.fullname << endl;
    cout << "Hobby: " << st.hobby << endl;
    cout << "OPPlevel: " << st.opplevel << endl;
}
void p7_9display2(const student *st)
{
    cout << "Name: " << st->fullname << endl;
    cout << "Hobby: " << st->hobby << endl;
    cout << "OPPlevel: " << st->opplevel << endl;
}
void p7_9display3(const student st[], int n)
{
    cout << "STUDENT INFORMATION" << endl;
    for (int i = 0; i<n; i++)
    {
        cout << "Name: " << st[i].fullname << endl;
        cout << "Hobby: " << st[i].hobby << endl;
        cout << "OPPlevel: " << st[i].opplevel << endl << endl;
    }
}

double p7_10caculate(double a, double b, double (*p)(double, double))
{
    return p(a, b);
}
double p7_10add1(double a,double b)
{
    return a *10 + b*10;
}
double p7_10add2(double a,double b)
{
    return a * b;
}
double p7_10add3(double a,double b)
{
    return a * 2 * b;
}

猜你喜欢

转载自blog.csdn.net/weixin_43233774/article/details/83931070