【C++】C++PrimerPlus(第6版)中文版 第9章 内存模型和名称空间 编程练习 参考答案
自己编写的参考答案,在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章 内存模型和名称空间 编程练习 参考答案相关推荐
- 《数据库原理与应用》(第三版) 第 5 章 数据类型及关系表创建 基础 习题参考答案
1.Tinyint数据类型定义的数据的取值范围是多少? 答:0-255 2.SmallDatatime类型精确到哪个时间单位? 答:分钟 3.定点小数类型numeric中的p和q的含义分别是什么? 答 ...
- UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订)...
UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订) 基本信息 原书名: Unix Network Programming, Vol ...
- C++PrimerPlus(第6版)中文版:Chapter16.4.6关联容器_setops.cpp
本小节主要讲set的使用方法. 关联容器将值和键关联在一起,并使用键来查找值. 关联容器的优点在于:它提供了对元素的快速访问.插入元素的时候,不需要指定插入位置,因为关联容器是排过序的,它知道新元素来 ...
- C++PrimerPlus(第6版)中文版:Chapter8.2.4_Example8.6strc_ref.cpp
引用非常适合于结构和类,下面的例子就演示了这一点. // Chapter8.2.4_Example8.6strc_ref.cpp.cpp : 此文件包含 "main" 函数.程序执 ...
- C++PrimerPlus(第6版)中文版:Chapter16.1string类_16.3hangman.cpp
这是一个历史悠久的小游戏,早在维多利亚时代就已流行起来,规则简单且有趣,在7步之内猜出单词,否则小人将会"上吊". Hangman直译为"上吊的人",是一个猜单 ...
- C Primer Plus (第五版)中文版——第 10 章 数组和指针
10.1 数组 数组(array)由一系列类型相同的元素构成.数组声明(array declaration)中包括数组元素的数目和元素的类型.如: int month[12]; /* 12个整数的数 ...
- C++ Primer Plus 第六版(中文版)第十一章(重置版)编程练习答案
//本章程序需分多文件运行,请读者注意; //本博主所写的代码仅为阅读者提供参考; //若有不足之处请提出,博主会尽所能修改; //附上课后编程练习题目; //若是对您有用的话请点赞或分享提供给它人; ...
- 企业会计准则2020版pdf_2020年下半年CATTI三级笔译中译英真题+参考答案+原文件汉英对照PDF版...
当今世界,以互联网为代表的信息技术日新月异,引领了社会生产新变革,创造了人类生活新空间,拓展了国家治理新领域,极大提高了人类认识世界.改造世界的能力. Today, the rapid advance ...
- 《C++ Primer Plus(第六版)》(13)(第九章 内存模型和命名空间 笔记)
1.为了保持通用性,C++使用术语翻译单元,而不是文件,文件不是计算机组织信息时的唯一方式. 2.C++允许编译器使用自己的名称修饰,因此不同的编译器编译出来的二进制模块(对象代码文件),通常是无法链 ...
最新文章
- OpenCV的cvLoadImage函数
- Linux下l2tp客户端xl2tpd的安装配置
- Java并发编程的艺术(一)——并发编程需要注意的问题
- CIFAR-10数据集可视化二进制版本
- 现代儿童亟待满足的八种需要
- ibm台式计算机不能自动关机,IBM X3650 M3 不定时自动关机求大神
- oracle update 改为 merge
- 安装CUDA时出现黑屏的现象解决办法
- 排序算法-冒泡排序详细讲解(BubbleSort)
- 黑马程序员-黑马,人生的一个重要转折
- hb100 微波雷达arduino_【Arduino】108种传感器系列实验(03)-微波雷达感应开关...-Arduino中文社区 - Powered by Discuz!...
- 郑立:一个80后神话的倒掉
- 计算机毕业设计之java+javaweb的蛋糕甜品商城系统
- csgo举报机器人怎么安排_求一个CSGO的举报和点赞用的机器人
- 选择华为账号第三方登录,让你无法拒绝的3个理由
- GitHub每月优秀热门项目推荐:2021年11月
- 【机器学习】目标函数总结
- 信号与系统第三章复习
- 程振波 算法设计与分析_算法设计与分析
- 什么是营销漏斗模型?如何创建一个营销漏斗策略
热门文章
- 作文第一次用计算机350,第一次作文350字
- 互联网产品运营日记(1):上线首日
- 平均股价的时间序列图形_数据可视化——pandas绘制股票走势图
- 服务器硬盘上面的12gb和6gb的区别,4GB和6GB有什么区别?看完千万别买错,已有多人后悔!...
- word插入图片显示不全
- Scala基础语法学习
- automagica 调用迅雷批量下载美剧
- Ubuntu安装Gcc时,显示“无法解析域名cn.archive.ubuntu.com”,如下方式可解决
- 谷歌的Pixel Watch学习能力爆表,他能从手机中学到什么呢?
- thinkPHP中{$Think }用法