c++ primer plus 第六版第九章程式設計練習
阿新 • • 發佈:2018-12-22
9.1
//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<iostream> #include<cstring> #include"golf.h" void setgolf(golf &g, const char *name, int hc) { strcpy(g.fullname, name); g.handicap = hc; } int setgolf(golf &g) { char temp[Len]; std::cout << "enter the full name:"; std::cin.getline(temp, Len); if (strcmp(temp, "") == 0) return 0; else { strcpy(g.fullname, temp); return 1; } } void handicap(golf &g, int hc) { g.handicap = hc; } void showgolf(const golf &g) { using std::cout; using std::cin; using std::endl; cout << "fullname: " << g.fullname << "\nhandicap: " << g.handicap << endl; } //Main.cpp #include<iostream> #include"golf.h" int main() { using std::cout; using std::cin; golf andy; int flag; setgolf(andy, "Ann Birdfree", 24); cout << "non-interactive version:\n"; showgolf(andy); flag = setgolf(andy); if (flag) { cout << "enter handicap: "; cin >> andy.handicap; cout << "interactive version\n"; } else { cout << "invalid fullname\n"; } showgolf(andy); return 0; }
9.2
#include<iostream> #include<string> using namespace std; void strcount(string str); int main() { string str; cout << "enter a line\n"; getline(cin, str); while (cin) { strcount(str); cout << "enter next(empty to quit):"; getline(cin, str); if (str == "") break; } cout << "Bye\n"; return 0; } void strcount(string str) { int count=0; static int total=0; for (int i = 0; str[i] != '\0'; i++) { ++count; } total = total + count; cout << count << " characters\n"; cout << total << " characters total\n"; }
9.3
#include<iostream> #include<cstring> using namespace std; struct chaff { char dross[20]; int slag; }; char buffer[128]; int main() { chaff *dy= new chaff[2]; for (int i = 0; i < 2; i++) { strcpy((dy+i)->dross, "dynamic memory "); (dy + i)->slag = i+1; cout << dy + i << ":"; cout<< (dy + i)->dross << "," << (dy + i)->slag << endl; } delete[] dy; chaff *sta = new(buffer)chaff[2]; for (int i = 0; i < 2; i++) { strcpy((sta + i)->dross, "static memory "); (sta + i)->slag = i+1; cout << sta + i << ":"; cout << (sta + i)->dross << "," << (sta + i)->slag << endl; } cout << (void *)buffer << "= buffer address\n"; return 0; }
9.4
//sales.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);
}
//fuction.cpp
#include<iostream>
#include"sales.h"//需要使用SALES名稱空間中的結構定義、函式原型
namespace SALES //對SALES名稱空間的擴充套件,函式原型與函式定義必須在同一個名稱空間
{
using std::cout;
using std::cin;
using std::endl;
void setSales(Sales &s, const double ar[], int n)
{
int count=0;
double sum=0;
s.max = s.min =ar[0];
for (int i=0; i < n&&i < QUARTERS; i++)
{
s.sales[i] = ar[i];
++count;
sum = sum + s.sales[i];
if (s.max < s.sales[i])
s.max = s.sales[i];
if(s.min>s.sales[i])
{
s.min = s.sales[i];
}
}
s.average = sum / count;
}
void setSales(Sales &s)
{
double sum = 0;
cout << "enter sales:\n";
for (int i = 0; i < QUARTERS; i++)
{
cout << "#" << i + 1<<": ";
cin >> s.sales[i];
}
s.max = s.min = s.sales[0];
for (int i = 0; i < QUARTERS; i++)
{
sum = sum + s.sales[i];
if (s.max < s.sales[i])
s.max = s.sales[i];
if (s.min > s.sales[i])
s.min = s.sales[i];
}
s.average = sum / QUARTERS;
}
void showSales(const Sales &s)
{
for (int i = 0; i < QUARTERS; i++)
{
cout << "#" << i + 1 << ": " << s.sales[i] << endl;
}
cout << "max: " << s.max << endl
<< "min: " << s.min << endl
<< "average: " << s.average << endl;
}
}
//main()
#include<iostream>
#include"sales.h"
int main()
{
using namespace std;
using namespace SALES;
Sales s1, s2;
double ar[QUARTERS] = { 1.4,1.2,1.1,1.5 };
setSales(s1, ar, 4);
cout << "non-interactive version,n=4:\n";
showSales(s1);
setSales(s1, ar, 5);
cout << "non-interactive version,n>5:\n";
showSales(s1);
setSales(s1, ar, 3);
cout << "non-interactive version,n<4:\n";
showSales(s1);
cout << "interactive version:\n";
setSales(s2);
showSales(s2);
return 0;
}