栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ Primer Plus 第九章编程题练习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ Primer Plus 第九章编程题练习

C++ Primer Plus 第九章编程题练习

第一题

题目描述

下面是一个头文件:

const int Len = 40;

struct golf
{
    char fullname[Len];
    int handicap;
};

int setgolf(golf &g);
void handicap(golf &g, int hc);
void showgolf(const golf &g);

函数说明

注意到setgolf( )被重载,可以这样使用其第一个版本:
golf ann;
setgolf (ann,"Ann Birdfree", 24);
上述函数调用提供了存储在ann结构中的信息。可以这样使用其第二个版本:
golf andy;
setgolf (andy);
上述函数将提示用户输入姓名和等级,并将它们存储在andy结构中。这个函数可以(但是不一定必须) 在内部使用第一个版本。
根据这个头文件,创建一个多文件程序。其中的一个文件名为golf.cpp,它提供了与头文件中的 原型匹配的函数定义;另一个文件应包含main(),并演示原型化函数的所有特性。例如,包含一个 让用户输入的循环,并使用输入的数据来填充一个由golf结构组成的数组,数组被填满或用户将高 尔夫选手的姓名设置为空字符串时,循环将结束。main( )函数只使用头文件中原型化的函数来访问 golf结构。

代码片段
//golf.h
const int Len = 40;
struct golf
{
    char fullname[Len];
    int handicap;
};
void setgolf(golf &g, const char *name, int hc);
int setgolf(golf &g);
void handicap(golf &g, int hc);
void showgolf(const golf &g);
//golf.cpp
#include
#include
#include"golf.h"
 
void setgolf(golf &g, const char *name, int hc)
{
    strcpy(g.fullname,name);
    handicap(g,hc);
    return ;
}
int setgolf(golf &g)
{
    using namespace std;
    cin.clear();
    cin.sync();
    cout<<"Fullname: ";
    cin.getline(g.fullname,Len);
    if(!strcmp(g.fullname,""))
        return 0;
    else
    {
        cout<<"Handicap: ";(cin>>g.handicap).get();
        return 1;
    }
}
void handicap(golf &g, int hc)
{
    g.handicap=hc;
}
void showgolf(const golf &g)
{
    using std::cout;
    cout<<"Fullname: "< 
//main.cpp
#include 
#include "golf.h"

int m = 0;
int main(void)
{
    using namespace std;
    cout << "Please enter how many persons will you enter? " << endl;
    while (!(cin >> m))
    {
        cout << "Invalid input! Please enter ahain!n";

        cin.clear();
        cin.sync();
    }
    cin.clear();
    cin.sync();
    golf *pr = new golf[m];
    cout << "Now, you can input your data in the formal of below data: n";
    setgolf(pr[0], "fullname1", 1);
    showgolf(pr[0]);
    cout << "Below are your inputs: n";
    for (int i = 0; i < m&&setgolf(pr[i]); i++)
        cout << "nThe next input: nn";
    cout << "nThe input has finished!nBye!n";
    cout << "Below are your input: n";
    for (int i = 0; i < m && pr[i].fullname[0] != ''; i++)
        showgolf(pr[i]);
    while (cin.get() != EOF)
        ;
    return 0;
}


第二题

题目描述

修改程序清单9.9,用string 对象代替字符数组。这样,该程序将不再需要检查输入的字符串是否 过长,同时可以将输入字符串同字符串“” 进行比较,以判断是否为空行。

代码片段
#include 
#include
#include

using namespace std;

const int Size = 10;
void strcount(const string str)
{
    static int total = 0;
    int count = 0;
    cout << """ << str << "" contains ";
    for(int i=0;str[i]!='';i++)
        if(str[i]!=' ')
            count++;
    total += count;
    cout << count << " charactersn";
    cout << total << " characters total!n";
}

int main()
{
    string input;
    cout << "Enter a line:" << endl;
    while (getline(cin,input))
    {
       if(input=="")
        break;
       cin.clear();
       cin.sync();
       strcount(input);
       cout<<"Enter next line( empty line to quit): "< 


第三题

题目描述

下面是一个结构声明

struct chaff{
    char dross[20];
    int slag;
}

编写一个程序,使用定位new运算符将一个包含两个这种结构的数组放在一个缓冲区中。然后,给结构的成员赋值(对于char数组,使用函数strcpy()),并使用一个循环来显示内容。一种方法是像程序清单9.10那样将一个静态数组用作缓冲区;另一种方法是使用常规new运算符来分配缓冲区。

代码片段
#include 
#include
using namespace std;
struct chaff
{
    char dross[20];
    int slag;
};
char zeon[512];
int main(void)
{
    chaff *pr = new (zeon) chaff[2];
    chaff *ps = new chaff[2];
    cout<<"Please enter your data:n";
    for(int i=0;i<2;i++)
    {
        cout<<"Dross: ";
        char name[20];
        cin.getline(name,20);
        cin.clear();
        cin.sync();
        strcpy((pr+i)->dross,name);
        strcpy((ps+i)->dross,name);
        cout<<"nSlag: ";
        cin>>(pr+i)->slag;
        cin.get();
        (ps+i)->slag=(pr+i)->slag;
    }
    for(int i=0;i<2;i++)
    {
        cout<<"n#"<dross<dross;
        cout<<"nSlag: "<<(ps+i)->dross<slag< 


第四题

题目描述

请基于下面这个名称空间编写一个由3个文件组成的程序:

namespace SALES
{
    const int QUARTERS = 4;
    
    struct Sales
    {
        double sales[QUARTERS];
        double average;
        double max;
        double min;
    };

    void setSales(Sales &S, const double ar[], int n);
    void setSales(Sales &s);
    void showSales(const Sales &s);
}

第一个文件是一个头文件,其中包含名称空间;第二个文件是一个源代码文件,它对这个名称空间进行扩展,以提供这三个函数的定义;第三个文件声明两个Sales对象,并使用setSales( )的交互式版本为一个结构提供值,然后使用setSales( )的非交互式版本为另一个结构提供值。另外它还使用showSales( )来显示这两个结构的内容。

代码片段
//4.h
namespace sALEs
{
    const int QUARTERs = 4;

    struct sales
    {
        double sales[QUARTERs];
        double average;
        double max;
        double min;
    };

    void setsales(sales &s, const double ar[], int n);
    void setsales(sales &s);
    void showsales(const sales &s);
}
//4.cpp
#include 
#include "4.h"
namespace sALEs
{

    void setsales(sales &s, const double ar[], int n)
    {
        double sum = 0;
        double min = ar[0], max = ar[0];
        for (int i = 0; i < QUARTERs && i < n; i++)
        {
            s.sales[i] = ar[i];
            sum += ar[i];
            if (min > ar[i])
                min = ar[i];
            if (max < ar[i])
                max = ar[i];
        }
        s.average = sum / (n > QUARTERs ? QUARTERs : n);
        s.min = min;
        s.max = max;
    }
    void setsales(sales &s)
    {
        using std::cout, std::cin;
        cout << "Please enter the sales(lesser than 0 to quit and no more than four numbers): n";
        double min, max, sum = 0;
        int i;
        for (i = 0; i < 4; i++)
        {
            cout << "#" << i+1 << "n";
            cin >> s.sales[i];
            if (s.sales[i] < 0)
                break;
            if (i == 0)
                max = min = s.sales[0];
            sum += s.sales[i];
            if (min > s.sales[i])
                min = s.sales[i];
            if (max < s.sales[i])
                max = s.sales[i];
        }
        cout << "Bye!n";
        s.average=sum/i;     s.min = min;
		        s.max = max;
		    }
    void showsales(const sales &s)
    {
        using namespace std;
        cout<<"sales:n";
        for(int i=0;i<4;i++)
        {
            if(s.sales[i]>1e-6)
            cout<
                cout< 
//main.cpp
#include
#include"4.h"

int main(void)
{
    using namespace sALEs;
    sales exam1,exam2;
    double temp[3]={1.1,2.2,3.3};
    setsales(exam1,temp,3);
    showsales(exam1);
    setsales(exam2);
    showsales(exam2);
    while(std::cin.get()!=EOF);
    return 0;
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993650.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号