9.1
//golf.h
#ifndef GOLF_H_
#define 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);
#endif
//golf.cpp
#include <iostream>
#include <cstring>
#include "golf.h"
using namespace std;
void setgolf(golf & g, const char * name, int hc)
{
strcpy(g.fullname, name);
g.handicap = hc;
}
int setgolf(golf & g)
{
cin.get();
cout << "Please enter the fullname: ";
cin.getline(g.fullname, Len);
if(strlen(g.fullname) == 0)
return 0;
cout << "Please enter the handicap: ";
cin >> g.handicap;
return 1;
}
void handicap(golf & g, int hc)
{
g.handicap = hc;
}
void showgolf(const golf & g)
{
cout << "The full name is: " << g.fullname << endl
<< "The handicap is: " << g.handicap << endl;
}
//main.cpp
#include <iostream>
#include "golf.h"
using namespace std;
int main()
{
cout << " How many members: ";
int n;
cin >> n;
golf a[n];
for (int i = 0; i < n && setgolf(a[i]); ++i)
showgolf(a[i]);
}
cout << "Done!" << endl;
return 0;
9.2修改程序清单9.9:用string对象代替字符数组。这样,该程序将不再需要检查输入的字符串是否过长,同时可以将输入字符串通字符串“”进行比较,以判断是否为空行。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void strcount(const string str);
int main()
{
string input;
cout << "Please enter a line: ";
getline(cin,input);
while (input != "")
{
strcount(input);
cout << "Please enter next line: ";
getline(cin,input);
}
cout << "Bye" << endl;
return 0;
}
void strcount(const string str)
{
static int total = 0;
int count = 0;
cout << "\"" << str << "\" contains ";
while (str[count])
count++;
total += count;
cout << count << " characters" << endl
<< total << " characters total" << endl;
}
9.3
#include <iostream>
#include <cstring>
#include <new>
using namespace std;
struct chaff
{
char dross[20];
int slag;
};
void show(chaff & p);
char buffer[512];
int main()
{
char dross[20];
int slag;
chaff *pd1 = new chaff[2];
for(int i = 0; i < 2; i++)
{
cout << "# " << i + 1 << ": \n";
cout <<"Enter the dross: ";
cin.getline(dross,20);
cout << "Enter the slag: ";
cin >> slag;
cin.get();
strcpy(pd1[i].dross, dross);
strcpy(pd2[i].dross, dross);
pd1[i].slag = pd2[i].slag = slag;
cout << "pd1 # \n";
show(pd1[i]);
cout << "pd2 # \n";
show(pd2[i]);
}
delete [] pd1;
return 0;
}
void show(chaff & p)
{
cout << "The doss: " << p.dross << endl;
cout << "The slag: " << p.slag << endl;
}
9.4
//namesp.h
#ifndef NAMESP_H_
#define NAMESP_H_
namespace SALES
{
struct Sales
{
double sales[4];
double average;
double max;
double min;
};
void setSales(Sales & s, const double ar[], int n);
void setSales(Sales & s);
void showSales(const Sales & s);
}
#endif
//namesp.cpp
#include <iostream>
#include "namesp.h"
using namespace std;
namespace SALES
{
void setSales(Sales & s,const double ar[], int n)
{
if(n < 4)
{
for(int i = 0; i < n; i++)
s.sales[i] = ar[i];
for(int i = 0; i < 4; i++)
s.sales[i] = 0;
}
else
for(int i = 0; i < 4; i++)
s.sales[i] = ar[i];
double sum = s.sales[0];
s.max = s.sales[0];
s.min = s.sales[0];
for(int i = 1; i < 4; i++)
{
sum += s.sales[i];
s.max = s.max > s.sales[i] ? s.max : s.sales[i];
s.min = s.min < s.sales[i] ? s.min : s.sales[i];
}
s.average = sum / 4;
}
void setSales(Sales & s)
{
double sum = 0.0;
cout << "Enter 4 sales quarters: \n";
for(int i = 0; i < 4; i++)
{
cout << "# " << i + 1 << ": ";
cin >> s.sales[i];
sum += s.sales[i];
if(i = 0)
{
s.max = s.sales[i];
s.min = s.sales[i];
}
else
{
s.max = s.max > s.sales[i] ? s.max : s.sales[i];
s.min = s.min < s.sales[i] ? s.min : s.sales[i];
}
}
s.average = sum / 4;
}
void showSales(const Sales $ s)
{
cout << "The sales: ";
for(int i = 0; i < 4; i++)
cout << s.sales[i] << " ";
cout << endl;
cout << "The average: " << s.average << endl
<< "The max: " << s.max << endl
<< "The min: " << s.min << endl;
}
}
//main.cpp
#include <iostream>
#include "namesp.h"
int main()
{
using namespace std;
using namespace SALES;
Sales s1, s2, s3;
cout << "The first: \n";
setSales(s1);
showSales(s1);
cout << endl;
double ar1[] = {5, 4, 8, 6, 1};
double ar2[] = {4, 7, 9};
cout << "The second: \n";
setSales(s2, ar1, 5);
showSales(s2);
cout << endl;
cout << "The third: \n";
setSales(s3, ar2, 3);
showSales(s3);
return 0;
}