c++ primer plus 习题答案(3)

p296.3

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<string>
 4 #include<cstring>
 5 #include<new>
 6 using namespace std;
 7 struct chaff
 8 {
 9     char dross[20];
10     int slag;
11 };
12 void setarray(chaff *pt);
13 void showarray(chaff *pt);
14 
15 int main(){
16     char buffer[40];
17     chaff ar[2], *pt;
18     pt = new(buffer)chaff[2];
19     setarray(pt);
20     showarray(pt);
21     system("pause");
22     return 0;
23 }
24 
25 void setarray(chaff *pt){
26     int i;
27     char adross[20], pdross[20], ch;
28     cout << "enter a line\n";
29     cin.get(adross, 20);
30     while (cin){
31         cin.get(ch);
32         while (ch != \n)
33             cin.get(ch);
34         break;
35     }
36     strcpy(pt->dross, adross);
37     cout << "enter another line\n";
38     cin.get(pdross, 20);
39     while (cin){
40         cin.get(ch);
41         while (ch != \n)
42             cin.get(ch);
43         break;
44     }
45     strcpy((pt + 1)->dross, pdross);
46     cout << "enter two integer\n";
47     cin >> pt->slag;
48     cin >> (pt + 1)->slag;
49     cin.get();                    
50 }
51 
52 void showarray(chaff *pt){
53     cout << pt->dross << " " <<
54         pt->slag << endl <<
55         (pt + 1)->dross << " " <<
56         (pt + 1)->slag << endl;
57 }

p296.4

 1 sales.cpp
 2 
 3 #include<iostream>
 4 #include"sales.h"
 5 using namespace std;
 6 
 7 void SALES::setsales(Sales &s, const double ar[], int n){
 8     int num, i, sum=0;
 9     if (n <= QUARTERS)
10         num = n;
11     else num = QUARTERS;
12     for (i = 0; i < num; i++){
13         s.sales[i] = ar[i];
14         sum += s.sales[i];
15     }
16     s.average = sum / num;
17     s.max = s.sales[0];
18     s.min = s.sales[0];
19     for (i = 1; i < num; i++){
20         if (s.max < s.sales[i])
21             s.max = s.sales[i];
22         if (s.min>s.sales[i])
23             s.min = s.sales[i];
24     }
25 }
26 
27 void SALES::setsales(Sales &s){
28     cout << "enter double into an array\n";
29     int i;
30     double sum = 0;
31     for (i = 0; i < QUARTERS; i++){
32         cin >> s.sales[i];
33         sum += s.sales[i];
34     }
35     s.average = sum / QUARTERS;
36     s.max = s.sales[0];
37     s.min = s.sales[0];
38     for (i = 1; i < QUARTERS; i++){
39         if (s.max < s.sales[i])
40             s.max = s.sales[i];
41         if (s.min>s.sales[i])
42             s.min = s.sales[i];
43     }
44 }
45 
46 void SALES::showsales(const Sales & s){
47     for (int i = 0; i < QUARTERS; i++)
48         cout << s.sales[i] << " ";
49     cout << "average is " << s.average << endl <<
50         "max is " << s.max << endl <<
51         "min is " << s.min << endl;
52 }
53 
54 驱动程序
55 
56 #include<iostream>
57 #include<cstdlib>
58 #include<string>
59 #include<cstring>
60 #include"sales.h"
61 using namespace std;
62 
63 int main(){
64     cout << "enter a number you want to fill the array\n";
65     int n, i;
66     cin >> n;
67     double *ar = new double[n+1];
68     cout << "enter an double array\n";
69     for (i = 0; i < n; i++)
70         cin >> ar[i];
71     SALES::Sales ex1, ex2;
72     SALES::setsales(ex1, ar, n);
73     SALES::setsales(ex2);
74     SALES::showsales(ex1);
75     SALES::showsales(ex2);
76     delete[]ar;
77     system("pause");
78     return 0;
79 }
80 
81 
82 头文件
83 
84 namespace SALES
85 {
86     const int QUARTERS = 4;
87     struct Sales{
88         double sales[QUARTERS];
89         double average;
90         double max;
91         double min;
92     };
93     void setsales(Sales &s, const double ar[], int n);
94     void setsales(Sales &s);
95     void showsales(const Sales&s);
96 }

p332.1

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 class Bankacount{
 7     char name[30];
 8     char num[20];
 9     double deposit;
10 public:
11     Bankacount(char *pt="nobody", char *ar="0", double balance=0.0);
12     ~Bankacount();
13     void storage(double ct);
14     void withdraw(double ct);
15     void show()const;
16 };
17 
18 Bankacount::Bankacount(char *pt, char *ar, double balance)
19 {
20     strncpy(name, pt, 29);
21     name[30] = \0;
22     strncpy(num, ar, 19);
23     num[20] = \0;
24     deposit = balance;
25 }
26 
27 Bankacount::~Bankacount(){
28 
29 }
30 
31 void Bankacount::storage(double ct){
32     if (ct < 0)
33         cout << "the deposit must be positive\n";
34     else deposit += ct;
35 }
36 
37 void Bankacount::withdraw(double ct){
38     if (ct<0)
39         cout << "the deposit must be positive\n";
40     else deposit -= ct;
41 }
42 
43 void Bankacount::show()const{
44     cout << "name is " << name << endl
45         << "number is " << num << endl
46         << "deposit now is " << deposit << endl;
47 }
48 
49 
50 int main(){
51     Bankacount acount1("GE", "asdf", 0.0);
52     Bankacount acount2;
53     Bankacount acount3 = Bankacount("DELL", "34WE", 2.3);
54     acount1.show();
55     acount2.show();
56     acount3.show();
57     acount1.storage(4.5);
58     acount2.withdraw(2.7);
59     acount1.show();
60     acount2.show();
61 
62     system("pause");
63     return 0;
64 }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。