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

p221.8

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstring>
 4 using namespace std;
 5 const int SLEN = 30;
 6 struct student{
 7     char fullname[SLEN];
 8     char hobby[SLEN];
 9     int ooplevel;
10 };
11 int getinfo(student pa[], int n);
12 void display1(student st);
13 void display2(const student *ps);
14 void display3(const student pa[], int n);
15 
16 int main(){
17     cout << "enter class size:";
18     int class_size;
19     cin >> class_size;
20     while (cin.get() != '\n')
21         continue;
22     student *ptr_stu = new student[class_size];
23     int entered = getinfo(ptr_stu, class_size);
24     for (int i = 0; i < entered; i++){
25         display1(ptr_stu[i]);
26         display2(&ptr_stu[i]);
27     }
28     display3(ptr_stu, entered);
29     delete[]ptr_stu;
30     cout << "done\n";
31     system("pause");
32     return 0;
33 }
34 
35 int getinfo(student pa[], int n){
36     int i = 0, count = 0;
37     while (i < n && *pa[i].fullname != '\0'){
38         cin.getline(pa[i].fullname, SLEN);
39         cin.getline(pa[i].hobby, SLEN);
40         cin >> pa[i].ooplevel;
41         cin.get();
42         count++;
43         i++;
44     }
45     return count;
46 }
47 
48 void display1(student st){
49     cout << "st.fullname" << st.fullname <<
50         endl << "st.hobby" << st.hobby <<
51         endl << "st.ooplevel" << st.ooplevel <<
52         endl;
53 }
54 
55 void display2(const student *ps){
56     cout << "ps->fullname" << ps->fullname <<
57         endl << "ps->hobby" << ps->hobby <<
58         endl << "ps->ooplevel" << ps->ooplevel <<
59         endl;
60 }
61 
62 void display3(const student pa[], int n){
63     for (int i = 0; i < n; i++){
64         cout << "pa[i].fullname" << pa[i].fullname
65             << endl << "pa[i].hobby" << pa[i].hobby
66             << endl << "pa[i].ooplevel" << pa[i].ooplevel
67             << endl;
68     }
69 }

p259.2

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstring>
 4 using namespace std;
 5 struct candybar {
 6     char brand[81];
 7     float weight;
 8     int calory;
 9 };
10 void assign(candybar &, char br[81]="millennium munch", float w=2.85, int c=350);
11 void show_menu(candybar&);
12 
13 int main(){
14     candybar tasty;
15     assign(tasty);
16     show_menu(tasty);
17     system("pause");
18     return 0;
19 }
20 
21 void assign(candybar &delicious, char br[81], float w , int c){
22     strcpy(delicious.brand, br);
23     delicious.weight = w;
24     delicious.calory = c;
25 }
26 
27 void show_menu(candybar&delicious){
28     cout << delicious.brand << endl;
29     cout << delicious.weight << endl;
30     cout << delicious.calory << endl;
31 }

p259.4

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cctype>
 4 using namespace std;
 5 struct stringy{
 6     char* str;
 7     int ct;
 8 };
 9 void set(stringy &, const char*);
10 void show(const stringy &, int times = 1);
11 void show(const char*, int times = 1);
12 
13 int main(){
14     stringy beany;
15     char testing[] = "reality isn't what it used to be.";
16     set(beany, testing);
17     show(beany);
18     show(beany, 2);
19     delete beany.str;
20     testing[0] = 'D';
21     testing[1] = 'u';
22     show(testing);
23     show(testing, 3);
24     show("Done!");
25     system("pause");
26     return 0;
27 }
28 
29 void set(stringy &beany, const char* testing){
30     int num = strlen(testing);
31     beany.str = new char[num + 1];
32     strcpy(beany.str, testing);
33     beany.ct = num;
34 }
35 
36 void show(const stringy &beany, int times){
37     for (int i = 0; i < times; i++)
38         cout << beany.str << endl
39             << beany.ct << endl;
40 }
41 
42 void show(const char* testing, int times){
43     for (int i = 0; i < times; i++)
44         cout << testing << endl;
45 }

p260.6

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstring>
 4 using namespace std;
 5 template<class T>
 6 T maxn(T ar[], int num);
 7 template<> char *maxn(char *pt[], int num);
 8 
 9 int main(){
10     int num1[6];
11     double num2[4];
12     cout << "enter the member of two array\n";
13     for (int i = 0; i < 6; i++)
14         cin >> num1[i];
15     for (int i = 0; i < 4; i++)
16         cin >> num2[i];
17     int imax = maxn(num1, 6);
18     double dmax = maxn(num2, 4);
19     cout << "imax is" << imax << endl
20         << "dmax is" << dmax << endl;
21     char *str[5];
22     str[0] = "his eyes came round";
23     str[1] = "it all seems very unchanged";
24     str[2] = "which contain of old the pipes";
25     str[3] = "yes, billy, i know";
26     str[4] = "will you be please to dine";
27     char *address = maxn(str, 5);
28     cout << (int*)address << " " <<
29         address << endl;
30     system("pause");
31     return 0;
32 }
33 
34 template<class T>
35 T maxn(T ar[], int num){
36     T max=ar[0];
37     for (int i = 1; i < num; i++)
38         if (max < ar[i])
39             max = ar[i];
40     return max;
41 }
42 
43 template<> char *maxn(char *pt[], int num){
44     int length[5], i;
45     for (i = 0; i < 5; i++)
46         length[i] = strlen(pt[i]);
47     int max = length[0];
48     for (i = 0; i < 5; i++)
49         if (max < length[i])
50             max = length[i];
51     for (i = 0; i < 5; i++)
52         if (max == length[i])
53             break;
54     return pt[i];            
55 }
posted @ 2015-05-26 16:03  pioneer1132203  阅读(151)  评论(0编辑  收藏  举报