(自己编写,已全部测试成功)C++ Primer Plus第九章_内存模型与名称空间_答案:
第一题:
//golf.h
#include<iostream>
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<iostream>
#include "golf.h"
using namespace std;
void setgolf(golf& g, const char* name, int hc) {
int i ;
for (i = 0; *(name + i) != '\0';i++) {
g.fullname[i] = *(name + i);
}
g.fullname[i] = '\0';
g.handicap = hc;
}
int setgolf(golf& g) {
cout << "Enter fullname of golf (string): " << endl;
cin.get(g.fullname, Len);
cin.clear(); //清除上一次输入的标记
cout << "Enter handicap of golf (number): " << endl;
cin >> g.handicap;
if (g.fullname[0]=='\0') {
return 1;
}
return 0;
}
void handicap(golf& g, int hc) {
g.handicap = hc;
}
void showgolf(const golf& g) {
cout << "golf's full name: " <<g.fullname<< endl;
cout << "golf's handicap: " << g.handicap << endl;
}
//main.cpp
#include<iostream>
#include "golf.h"
using namespace std;
int main() {
golf g;
char name[Len] ="roger lee yaka" ;
setgolf(g, name, 25);
//cout << setgolf(g) << endl;
showgolf(g);
handicap(g, 4);
showgolf(g);
}
第二题:
//main.cpp
#include<iostream>
#include<string>
using namespace std;
void strcount(string str);
int main() {
string input;
char next;
cout << "Enter a line : " << endl;
getline(cin,input);
cin.clear();
while (input.empty()!=true) {
strcount(input);
cout << "Enter a line : " << endl;
getline(cin, input);
cin.clear();
}
return 0;
}
void strcount(string str) {
static int total = 0;
total += str.length();
cout << str.length() << " characters ." << endl;
cout << total << " characters total ." << endl;
}
第三题:
//main.cpp
#include<iostream>
#include<string>
using namespace std;
struct chaff {
char dross[20];
int slag;
};
int main() {
char buffer[512];
cout << "nuffer address: " << (void*)buffer << endl;
chaff* pl = new (buffer) chaff[2];//new 这里代表定位运算符
cout << "pl address: " << pl << endl;
strcpy_s(pl[0].dross, "abc");
pl[0].slag = 1;
strcpy_s(pl[1].dross, "def");
pl[1].slag = 2;
for (int i = 0; i < 2;i++) {
cout << "pl["<<i << "] at " << &pl[i] << endl;
cout << "dross:\t"<<pl[i].dross << endl;
cout << "slag:\t"<<pl[i].slag << endl;
}
return 0;
}
第四题:
//head.h
#pragma once
#include<iostream>
namespace SALES {
const int QUARTERS = 4;
struct Sales {
double sales[QUARTERS];
double average;
double max;
double min;
};
void setSales(Sales& s, const double ar[]) {
for (int i = 0; i < QUARTERS; i++) {
s.sales[i] = ar[i];
}
s.average = (s.sales[0] + s.sales[1] + s.sales[2] + s.sales[3]) / 4;
double max = s.sales[0];
double min = s.sales[0];
for (int i = 0; i < 4; i++) {
if (max < s.sales[i]) {
max = s.sales[i];
}
if (min > s.sales[0]) {
min = s.sales[i];
}
}
s.max = max;
s.min = min;
}
void setSales(Sales& s) {
std::cout << "Enter the four quarters sales volume: " << std::endl;
std::cin >> s.sales[0] >> s.sales[1] >> s.sales[2] >> s.sales[3];
s.average = (s.sales[0] + s.sales[1] + s.sales[2] + s.sales[3]) / 4;
double max = s.sales[0];
double min = s.sales[0];
for (int i = 0; i < 4; i++) {
if (max < s.sales[i]) {
max = s.sales[i];
}
if (min > s.sales[0]) {
min = s.sales[i];
}
}
s.max = max;
s.min = min;
}
void showSales(const Sales& s) {
std::cout << "The four quarters sales volume: " << std::endl;
std::cout << s.sales[0] << " " << s.sales[1] << " " << s.sales[2] << " " << s.sales[3] << std::endl;
std::cout << "The average: " << std::endl;
std::cout << s.average << std::endl;
std::cout << "The max: " << std::endl;
std::cout << s.max << std::endl;
std::cout << "The min: " << std::endl;
std::cout << s.min << std::endl;
}
}
//main.cpp
#include<iostream>
#include "head.h"
using namespace SALES;
int main() {
Sales s1;
double ar[4] = {
151,565,484,999 };
setSales(s1, ar);
showSales(s1);
Sales s2;
setSales(s2);
showSales(s2);
return 0;
}