练习题

Posted banmei-brandy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习题相关的知识,希望对你有一定的参考价值。

1.用户不断输入两个数,计算调和平均数,直到其中一个数为0。

#include<iostream>
using namespace std;

double harm_mean(double x, double y)

    double result;
    result = 2 * x*y / (x + y);
    return result;


int main()

    double num1, num2;
    int flag = 1;
    
    while (flag)
    
        cout << "Enter two numbers:\n";
        cin >> num1;
        cin >> num2;
        if ((num1 == 0) || (num2 == 0))
            flag = 0;
        else
            cout << "Harmonic mean:" << harm_mean(num1, num2) << endl;

    
    
    cout << "done.\n";
    system("pause");

 

2.要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。使用3个数组处理函数分别进行输入、显示和计算平均成绩。

#include<iostream>
using namespace std;

void score_in(int si[]);
void score_out(int so[]);
void score_mean(int sm[]);

static int counts = 0;

int main()

    int score[10];

    cout << "(enter any letter to stop input)\nEnter the score:\n";
    score_in(score);
    score_out(score);
    score_mean(score);

    cout << "done.\n";
    system("pause");


void score_in(int si[])

    for (int i = 0; i < 10; i++)
    
        if (cin >> si[i])
        
            counts++;
        
        else
        
            cout << "Input stopped." << endl;
            break;
        
    


void score_out(int so[])

    cout << "Score:";
    for (int i = 0; i < counts; i++)
    
        cout << so[i] << "  ";
    
    cout << "\n";


void score_mean(int sm[])

    double sum = 0;
    for (int i = 0; i < counts; i++)
    
        sum += sm[i];
    
    cout << "Average:" << sum / counts << endl;

 

3.定义一个box结构,存储生产者,长高宽和体积的信息。编写两个函数,第一个按值传递box结构,显示所有成员的值。第二个传递box结构的地址,并将volume成员设置为其它三维长度的体积。将两个函数组成一个简单的程序。

#include<iostream>
using namespace std;

struct box

    char maker[40];
    float height;
    float width;
    float length;
    float volume;
;

void set_box(box *sptr, float x, float y, float z);
void v_box(box *vptr);

int main()

    box box1;
    float l, w, h;

    cout << "Enter the box‘s l,w and h:\n";
    cin >> l >> w >> h;

    set_box(&box1, l, w, h);
    v_box(&box1);

    cout << "done.\n";
    system("pause");


void set_box(box *sptr, float x, float y, float z)

    sptr->height = z;
    sptr->length = x;
    sptr->width = y;
    cout << "Length:" << sptr->length << endl;
    cout << "Width:" << sptr->width << endl;
    cout << "Height:" << sptr->height << endl;


void v_box(box *vptr)

    vptr->volume = vptr->height*vptr->length*vptr->width;
    cout << "The volume of this box is:" << vptr->volume << endl;

 

4.修改书中7.4的程序,域号码1~47,中奖条件增加一项从27个数中抽中号码。

#include<iostream>
using namespace std;

long double probability(unsigned numbers, unsigned picks)

    long double result = 1.0;
    unsigned n;
    unsigned p;

    for (n = numbers, p = picks; p > 0; n--, p--)
    
        result = result * n / p;
    

    return result;


unsigned particular(unsigned pn)

    return pn;


int main()

    double total, choices;
    cout << "Enter the total number of choices on the game card and\n";
    cout << "the number of picks allowed:\n";

    while ((cin >> total >> choices) && (choices <= total ))
    
        cout << "You have one chance in ";
        cout << probability(total, choices)*particular(27);
        cout << " of winning.\n";
        cout << "Next two numbers(q to quit):";
    
    
    cout << "\ndone.";
    system("pause");

*这题没太看懂什么意思,结果再乘个27不就行了?跟着敲了一边代码。

 

5.定义一个递归函数算阶乘。

#include<iostream>
using namespace std;

long long fac(int n)

    if (n > 0)
        return n * fac(n - 1);
    else if (n == 0)
        return 1;


int main()

    int n;

    cout << "Enter a number:\n";
    cin >> n;
    cout << "Its factorial:" << fac(n) << endl;
    
    cout << "done.\n";
    system("pause");

 

6.编写三个处理double数组的函数,分别用于提示输入、显示数组内容和翻转数组中值的顺序。程序先填充数组,显示数组,再翻转数组,再显示数组。

#include<iostream>
using namespace std;

static int counts = 0;        //输入数字计数

void fill_array(double fa[], int asize);
void show_array(double sa[], int ssize);
void reverse_array(double ra[], int rsize);

int main()

    double input[10];

    fill_array(input, 10);
    show_array(input, 10);
    reverse_array(input, 10);
    show_array(input, 10);

    cout << "done.\n";
    system("pause");


void fill_array(double fa[], int asize)

    cout << "Enter some numbers:\n";
    for (int i = 0; i < asize; i++)
    
        if (cin >> fa[i])
        
            counts++;
            if (counts == asize)
            
                cout << "Input stopped.\n";
                break;
            
            else ;
        
        else
        
            cout << "Input stopped.\n";
            break;
        
    
    cout << counts << " numbers entered.\n";


void show_array(double sa[], int ssize)

    cout << "Input numbers:";
    for (int i = 0; i < counts; i++)
    
        cout << sa[i] << " ";
    
    cout << "\n";


void reverse_array(double ra[], int rsize)

    double t;
    //如果要翻转除第一位和最后一位的数字,把i改成1
    for (int i = 0; i <= counts / 2; i++)
    
        t = ra[i];
        ra[i] = ra[counts - i - 1];
        ra[counts - i - 1] = t;
    

 

7.修改书中7.7的程序,使用两个指针参数来表示区间。fill_array()函数返回一个指向最后被填充的位置的指针,其它函数可以将它作为第二个参数标识结尾。

#include<iostream>
using namespace std;

const int Max = 5;

double* fill_array(double ar[], int limit);
void show_array(double *ptl, double *ptr);
double add_array(double *ptl, double *ptr);

int main()

    
    double pro[Max];

    cout << "5 numbers to show\n";
    show_array(pro, fill_array(pro, Max));

    cout << "Next 5 numbers to sum\n";
    cout << "Sum:" << add_array(pro, fill_array(pro, Max));
    
    cout << "\ndone.";
    system("pause");


double* fill_array(double ar[], int limit)

    double *ptr;
    int i = 0;
    for (i = 0; i < limit; i++)
    
        cout << "Enter value #" << i + 1 << ":";
        cin >> ar[i];
    
    ptr = &ar[i];
    return ptr;


void show_array(double *ptl, double *ptr)

    for (int i = 0; ptl[i] != *ptr; i++)
    
        cout << "Property #" << i + 1 << ":" << ptl[i] << endl;
    


double add_array(double *ptl, double *ptr)

    double sum = 0;
    for (int i = 0; ptl[i] != *ptr; i++)
    
        sum += ptl[i];
    
    return sum;

 

8.修改程序7.15,编写不使用array类两个版本。

#include<iostream>
//#include<array>
//#include<string>

using namespace std;
/*原程序
const int seasons = 4;
const array<string, seasons>Snames =
 "Spring","Summer","Fall","Winter" ;

void fill(array<double, seasons>*pa);
void show(array<double, seasons>da);

int main()

    array<double, seasons>expenses;

    fill(&expenses);
    show(expenses);

    cout << "\ndone.";
    system("pause");


void fill(array<double, seasons>*pa)

    for (int i = 0; i < seasons; i++)
    
        cout << "Enter " << Snames[i] << " expenses:";
        cin >> (*pa)[i];
    


void show(array<double, seasons>da)

    double total = 0.0;
    cout << "\nEXPENSES\n";
    for (int i = 0; i < seasons; i++)
    
        cout << Snames[i] << ":$" << da[i]<<"\t";
        total += da[i];
    
    cout << "\nTotal Expenses:$" << total << endl;

*/

const char Snames[4][10] = "Spring","Summer","Fall","Winter";
const int seasons = 4;
void fill_exp(double fe[]);
void show_exp(double se[]);

struct Expenses

    double expenses[seasons];
;

int main()

    //double expenses[seasons];        版本a

    Expenses exp;
    fill_exp(exp.expenses);
    show_exp(exp.expenses);

    //fill_exp(expenses);    版本a
    //show_exp(expenses);    版本a

    cout << "done.\n";
    system("pause");


void fill_exp(double fe[])

    for (int i = 0; i < seasons; i++)
    
        cout << "Enter " << Snames[i] << " expenses:";
        cin >> fe[i];
    


void show_exp(double se[])

    double total = 0;
    for (int i = 0; i < seasons; i++)
    
        cout << Snames[i] << ":$" << se[i] << "\t";
        total += se[i];
    
    cout << "\nTotal expenses:" << total << endl;

 

9.把程序补充完整。getinfo函数用于输入学生结构的信息,三种display函数显示学生的信息,但使用三种不同的参数传递方式。

#include<iostream>
using namespace std;

const int SLEN = 30;

struct student

    char fullname[SLEN];
    char hobby[SLEN];
    int ooplevel;
;

void getinfo(student pa[], int n);

void display1(student st);

void display2(const student *ps);

void display3(const student pa[], int n);

int main()

    student students[3];

    getinfo(students, 3);

    display1(students[0]);
    display2(&students[1]);
    display3(students, 3);

    cout << "done.\n";
    system("pause");


void getinfo(student pa[], int n)

    int i = 0;
    for (i = 0; i < n; i++)
    
        cout << "Input name of student " << i + 1 << ":\n";
        cin.get(pa[i].fullname, SLEN);
        cin.get();
        cout << "Input hobby of student " << i + 1 << ":\n";
        cin.get(pa[i].hobby, SLEN);
        cout << "Input ooplevel of student " << i + 1 << ":\n";
        cin >> pa->ooplevel;
        cin.get();
    


void display1(student st)

    cout << "Student1‘s name:" << st.fullname << endl;


void display2(const student *ps)

    cout << "Student2‘s hobby:" << ps->hobby << endl;


void display3(const student pa[], int n)

    for (int i = 0; i < n; i++)
    
        cout << pa[i].fullname << "  ";
    

 

10.函数指针练习。编写一个calculate()函数,接受三项参数,两个double值和一个函数指针,指针指向计算两数之和(或其它功能)的函数。可尝试使用函数指针数组。

#include<iostream>
using namespace std;

double add(double x, double y)

    return x + y;


double div(double x, double y)

    return x / y;


double calculate(double x, double y, double (*ptf)(double,double))

    return ptf(x, y);


int main()

    double x1, x2;
    double(*ptf[2])(double, double);
    ptf[0] = add;
    ptf[1] = div;

    cout << "Enter two number:";
    while (cin >> x1 >> x2)
    
        cout << "Add:" << calculate(x1, x2, ptf[0]) << endl;
        cout << "Div:" << calculate(x1, x2, ptf[1]) << endl;
        cout << "Enter two number:";
    
    
    cout << "done.\n";
    system("pause");

 

以上是关于练习题的主要内容,如果未能解决你的问题,请参考以下文章

C语言学习笔记

开始学习C++

通过 fstream 创建结构

2021年霸榜的程序员书有这样12本

VS2015 控制台cl编译器全局环境变量配置

2018阅读记录