自己编写的参考答案,在VS2019中都可以编译通过,不是标准答案,也不是最优答案,仅供参考

1.下面是一个头文件

//golf.h – for pr9-1.cpp

const int Len = 40;

struct golf

{

char fullname[Len];

int handicap;

};

// non-interactive version:

// function sets golf structure to provided name, handicap

// using values passed as arguement to the function

// 函数使用传递的name、hc,设置golf结构的成员

void setgolf(golf& g, const char* name, int hc);

// interactive version:

// function solicits name and handicap from user

// and sets the members of g to the values entered

// return 1 if name is entered, 0 if name is empty string

// 函数从用户请求name和handicap,并将g的成员设置为输入的值,

// 如果输入name则返回1,如果name为空字符串则返回0

int setgolf(golf& g);

// function resets handicap to new value

// 重置handicap为新值的函数

void handicap(golf& g, int hc);

// function displays contents of golf structure

// 用来显示golf的内容的函数

void showgolf(const golf& g);

注意到showgolf()被重载,可以这样使用其第一个版本:

golf ann;

setgolf(ann, “Ann Birdfree”, 24);

上述函数调用了提供存储在ann结构中的信息,可以这样使用其第三个版本

golf andy;

setgolf(andy);

上述函数将提示用户输入姓名和等级,并将它们存储在andy结构中,这个函数可以(但是不一定必须)在内部使用第一个版本。

根据这个头文件,创建一个多文件程序。

其中的一个文件名为golf.cpp,它提供了与有文件中的原型匹配的函数定义;

另一个文件应包含main(),并演示原型化函数的所有特性。

例如,包含一个让用户输入的循环,并使用输入的数据来填充一个由golf结构组成的数组,数组被填满或用户将高尔夫选手的姓名设置为空字符串时,循环将结束。main()函数只使用头文件原型化的函数来访问golf结构

golf.h:

#pragma once
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"golf.h"
#include<iostream>
#include<string>
using namespace std;
void setgolf(golf& g, const char* name, int hc)
{strncpy_s(g.fullname,40,name, sizeof(name));g.handicap = hc;
}
int setgolf(golf& g)
{cout << "请输入高尔夫球手的名字:";char name[Len];cin.get(name, Len);cout << "请输入高尔夫球手的等级:";int hc;(cin >> hc).get();setgolf(g, name, hc);if (!strcmp(g.fullname,name)){return 1;}else if (strcmp(g.fullname, name)){return 0;}
}
void handicap(golf& g, int hc)
{g.handicap = hc;
}
void showgolf(const golf& g)
{cout << "选手姓名:" << g.fullname << endl;cout << "选手等级:" << g.handicap << endl ;
}

mian():

#include<iostream>
#include"golf.h"
using namespace std;
int main()
{golf player[3];for (int i = 0; i < 3; i++){setgolf(player[i]);}handicap(player[2], 5);for (int i = 0; i < 3; i++){showgolf(player[i]);}
}

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

#include <iostream>
#include<string>
using namespace std;
void strcount(const string& input);
int main()
{string input;cout << "Enter a line:\n";getline(cin, input);while (input!=""){   strcount(input);cout << "Enter next line (empty line to quit):\n";getline(cin, input);}cout << "Bye\n";return 0;
}
void strcount(const string & input)
{static int total = 0;        int count = 0;               cout << "\"" << input << "\" contains ";           count = input.size();total += count;cout << count << " characters\n";cout << total << " characters total\n";
}

3.下面是一个结构声明:

struct chaff

{

char dross[20];

int slag;

};

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

法1:

#include<iostream>
using namespace std;
struct chaff
{char dross[20];int slag;
};
char buffer[512];
int main()
{chaff* p = new(buffer) chaff[2];for (int i = 0; i < 2; i++){cout << "请输入dross:";char dross[20];cin.get(dross, 20);strncpy_s(p[i].dross,20,dross,20);cout << "请输入slag:";int slag;(cin >> slag).get();p[i].slag = slag;}for (int i = 0; i < 2; i++){cout << "dross:" << p[i].dross<<endl;cout<<"slag:"<< p[i].slag << endl;}
}

法2:

#include<iostream>
using namespace std;
struct chaff
{char dross[20];int slag;
};
int main()
{chaff* p = new chaff[2];for (int i = 0; i < 2; i++){cout << "请输入dross:";char dross[20];cin.get(dross, 20);strncpy_s(p[i].dross, 20, dross, 20);cout << "请输入slag:";int slag;(cin >> slag).get();p[i].slag = slag;}for (int i = 0; i < 2; i++){cout << "dross:" << p[i].dross << endl;cout << "slag:" << p[i].slag << endl;}delete[]p;
}

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

namespace SALES

{

const int QUARTERS = 4;

struct Sales

{

double sales[QUARTERS];

double average;

double max;

double min;

};

// copies the lesser of 4 or n items from the array ar

// to the sales member of s and computes and stores the

// average, maximum, and minimum values of the entered items;

// remaining elements of sales, if any, set to 0

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

// gathers sales for 4 quarters interactively, stores them

// in the sales member of s and computes and stores the

// average, maximum, and minimum values

void setSales(Sales& s);

// display all information in structure s

void showSales(const Sales& s);

}

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

sales.h:

#pragma once
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.cpp:

#include"sales.h"
#include<iostream>
using namespace std;
namespace SALES
{void setSales(Sales& s, const double ar[], int n){if (n == 4){double sum = 0;double max = ar[0];double min = ar[0];for (int i = 0; i < 4; i++){s.sales[i] = ar[i];sum += ar[i];}s.average = sum / 4;for (int i = 0; i < 4; i++){max >= ar[i] ? max = max : max = ar[i];}for (int i = 0; i < 4; i++){min <= ar[i] ? min = min : min = ar[i];}s.max = max;s.min = min;}else if (n < 4){double sum = 0;double max = ar[0];double min = ar[0];for (int i = 0; i < n; i++){s.sales[i] = ar[i];sum += ar[i];}s.average = sum / n;for (int i = 0; i < n; i++){max >= ar[i] ? max = max : max = ar[i];}for (int i = 0; i < n; i++){min <= ar[i] ? min = min : min = ar[i];}s.max = max;s.min = min;for (int i = n; i < 4; i++){s.sales[i] = 0;}}}
void setSales(Sales& s){double ar[4];cout << "请输入4个季度的销售额:";for (int i = 0; i < 4; i++){cin >> ar[i];}double sum = 0;double max = ar[0];double min = ar[0];for (int i = 0; i < 4; i++){s.sales[i] = ar[i];sum += ar[i];}s.average = sum / 4;for (int i = 0; i < 4; i++){max >= ar[i] ? max = max : max = ar[i];}for (int i = 0; i < 4; i++){min <= ar[i] ? min = min : min = ar[i];}s.max = max;s.min = min;}void showSales(const Sales& s){cout << "四个季度的销售额分别为:";for (int i = 0; i < 4; i++){cout << s.sales[i] << "   ";}cout << endl;cout << "四个季度的销售额平均值为:";cout << s.average << endl;cout << "四个季度的销售额最大值为:";cout << s.max << endl;cout << "四个季度的销售额最小值为:";cout << s.min << endl;}
}

mian():

#include<iostream>
#include"sales.h"
using namespace std;
using namespace SALES;
int main()
{Sales s1;Sales s2;setSales(s1);double ar[3]{ 10.0 ,15.1,9.8};int n = 3;setSales(s2, ar, n);showSales(s1);showSales(s2);
}

【C++】C++PrimerPlus(第6版)中文版 第9章 内存模型和名称空间 编程练习 参考答案相关推荐

  1. 《数据库原理与应用》(第三版) 第 5 章 数据类型及关系表创建 基础 习题参考答案

    1.Tinyint数据类型定义的数据的取值范围是多少? 答:0-255 2.SmallDatatime类型精确到哪个时间单位? 答:分钟 3.定点小数类型numeric中的p和q的含义分别是什么? 答 ...

  2. UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订)...

    UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订) 基本信息 原书名: Unix Network Programming, Vol ...

  3. C++PrimerPlus(第6版)中文版:Chapter16.4.6关联容器_setops.cpp

    本小节主要讲set的使用方法. 关联容器将值和键关联在一起,并使用键来查找值. 关联容器的优点在于:它提供了对元素的快速访问.插入元素的时候,不需要指定插入位置,因为关联容器是排过序的,它知道新元素来 ...

  4. C++PrimerPlus(第6版)中文版:Chapter8.2.4_Example8.6strc_ref.cpp

    引用非常适合于结构和类,下面的例子就演示了这一点. // Chapter8.2.4_Example8.6strc_ref.cpp.cpp : 此文件包含 "main" 函数.程序执 ...

  5. C++PrimerPlus(第6版)中文版:Chapter16.1string类_16.3hangman.cpp

    这是一个历史悠久的小游戏,早在维多利亚时代就已流行起来,规则简单且有趣,在7步之内猜出单词,否则小人将会"上吊". Hangman直译为"上吊的人",是一个猜单 ...

  6. C Primer Plus (第五版)中文版——第 10 章 数组和指针

    10.1  数组 数组(array)由一系列类型相同的元素构成.数组声明(array declaration)中包括数组元素的数目和元素的类型.如: int month[12]; /* 12个整数的数 ...

  7. C++ Primer Plus 第六版(中文版)第十一章(重置版)编程练习答案

    //本章程序需分多文件运行,请读者注意; //本博主所写的代码仅为阅读者提供参考; //若有不足之处请提出,博主会尽所能修改; //附上课后编程练习题目; //若是对您有用的话请点赞或分享提供给它人; ...

  8. 企业会计准则2020版pdf_2020年下半年CATTI三级笔译中译英真题+参考答案+原文件汉英对照PDF版...

    当今世界,以互联网为代表的信息技术日新月异,引领了社会生产新变革,创造了人类生活新空间,拓展了国家治理新领域,极大提高了人类认识世界.改造世界的能力. Today, the rapid advance ...

  9. 《C++ Primer Plus(第六版)》(13)(第九章 内存模型和命名空间 笔记)

    1.为了保持通用性,C++使用术语翻译单元,而不是文件,文件不是计算机组织信息时的唯一方式. 2.C++允许编译器使用自己的名称修饰,因此不同的编译器编译出来的二进制模块(对象代码文件),通常是无法链 ...

最新文章

  1. OpenCV的cvLoadImage函数
  2. Linux下l2tp客户端xl2tpd的安装配置
  3. Java并发编程的艺术(一)——并发编程需要注意的问题
  4. CIFAR-10数据集可视化二进制版本
  5. 现代儿童亟待满足的八种需要
  6. ibm台式计算机不能自动关机,IBM X3650 M3 不定时自动关机求大神
  7. oracle update 改为 merge
  8. 安装CUDA时出现黑屏的现象解决办法
  9. 排序算法-冒泡排序详细讲解(BubbleSort)
  10. 黑马程序员-黑马,人生的一个重要转折
  11. hb100 微波雷达arduino_【Arduino】108种传感器系列实验(03)-微波雷达感应开关...-Arduino中文社区 - Powered by Discuz!...
  12. 郑立:一个80后神话的倒掉
  13. 计算机毕业设计之java+javaweb的蛋糕甜品商城系统
  14. csgo举报机器人怎么安排_求一个CSGO的举报和点赞用的机器人
  15. 选择华为账号第三方登录,让你无法拒绝的3个理由
  16. GitHub每月优秀热门项目推荐:2021年11月
  17. 【机器学习】目标函数总结
  18. 信号与系统第三章复习
  19. 程振波 算法设计与分析_算法设计与分析
  20. 什么是营销漏斗模型?如何创建一个营销漏斗策略

热门文章

  1. 作文第一次用计算机350,第一次作文350字
  2. 互联网产品运营日记(1):上线首日
  3. 平均股价的时间序列图形_数据可视化——pandas绘制股票走势图
  4. 服务器硬盘上面的12gb和6gb的区别,4GB和6GB有什么区别?看完千万别买错,已有多人后悔!...
  5. word插入图片显示不全
  6. Scala基础语法学习
  7. automagica 调用迅雷批量下载美剧
  8. Ubuntu安装Gcc时,显示“无法解析域名cn.archive.ubuntu.com”,如下方式可解决
  9. 谷歌的Pixel Watch学习能力爆表,他能从手机中学到什么呢?
  10. thinkPHP中{$Think }用法