C++ Primer Plus编程练习答案——第8章
Posted 开心果壳好硬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer Plus编程练习答案——第8章相关的知识,希望对你有一定的参考价值。
1 void ch8_1_print(const std::string & str, int n = 0 ) { 2 using namespace std; 3 static int flag = 0; 4 ++ flag; 5 if (!n) 6 cout << str << endl; 7 else { 8 for (int i = flag; i; -- i) 9 cout << str << endl; 10 } 11 } 12 void ch8_1() { 13 using namespace std; 14 string str{"ch8_1"}; 15 ch8_1_print(str); 16 ch8_1_print(str, 100); 17 } 18 19 void ch8_2_setvalue(CandyBar & bar, const char * bd = "Millennium Munch", double w = 2.85, unsigned long k = 350) { 20 strcpy(bar.brand, bd); 21 bar.weight = w; 22 bar.kll = k; 23 } 24 25 void ch8_2_show(const CandyBar & bar) { 26 using namespace std; 27 cout << "brand: " << bar.brand << endl; 28 cout << "weight: " << bar.weight << endl; 29 cout << "energy: " << bar.kll << endl; 30 } 31 32 void ch8_2() { 33 using namespace std; 34 CandyBar bar; 35 cout << "default value: " << endl; 36 ch8_2_setvalue(bar); 37 ch8_2_show(bar); 38 char s[] = "nnn"; 39 double w = 100.123; 40 unsigned long k = 1234; 41 cout << "reset value: " << endl; 42 ch8_2_setvalue(bar,s,w,k); 43 ch8_2_show(bar); 44 } 45 void ch8_3_str2upper(std::string & str) { 46 for (int i = 0; i < str.size(); ++ i) 47 str[i] = toupper(str[i]); 48 } 49 void ch8_3() { 50 using namespace std; 51 string s; 52 while (true) { 53 cout << "enter string(q to quit): "; 54 getline(cin, s); 55 if (s == "q") 56 break; 57 ch8_3_str2upper(s); 58 cout << "upper: " << s << endl; 59 } 60 } 61 62 void ch8_4_set(stringy & sy, const char * str) { 63 sy.str = new char[strlen(str)]; 64 strcpy(sy.str, str); 65 sy.ct = strlen(str); 66 } 67 68 void ch8_4_show(const stringy & sy, int n = 0) { 69 using namespace std; 70 if (!n) 71 cout << sy.str << endl; 72 else { 73 for (int i = 0; i < n; ++ i) 74 cout << sy.str[i]; 75 cout << endl; 76 } 77 } 78 79 void ch8_4_show(const char * str, int n = 0) { 80 using namespace std; 81 if (!n) 82 cout << str << endl; 83 else { 84 for (int i = 0; i < n; ++ i) 85 cout << str[i]; 86 cout << endl; 87 } 88 } 89 90 void ch8_4() { 91 using namespace std; 92 stringy beany; 93 char testing[] = "Reality isn\'t what it used to be."; 94 ch8_4_set(beany, testing); 95 ch8_4_show(beany); 96 ch8_4_show(beany, 2); 97 testing[0] = \'D\'; 98 testing[1] = \'u\'; 99 ch8_4_show(testing); 100 ch8_4_show(testing, 3); 101 ch8_4_show("Done!"); 102 } 103 104 template <typename T> 105 unsigned int ch8_5_max(const T * arr) { 106 unsigned int max_index = 0; 107 for (int i = 1; i < 5; ++ i) 108 if (arr[i] > arr[max_index]) 109 max_index = i; 110 return max_index; 111 } 112 113 void ch8_5() { 114 using namespace std; 115 int arr_int[5]{1,3,5,2,4}; 116 double arr_dou[5]{3.14,2.14,5.12,8.12,10.30}; 117 cout << "max int: " << arr_int[ch8_5_max(arr_int)] << endl; 118 cout << "max dou: " << arr_dou[ch8_5_max(arr_dou)] << endl; 119 } 120 121 template <typename T> 122 T ch8_6_maxn(T * arr, unsigned int n) { 123 int max_index = 0; 124 for (int i = 1; i < n; ++ i) 125 if (arr[i] > arr[max_index]) 126 max_index = i; 127 return arr[max_index]; 128 } 129 130 template <> char * ch8_6_maxn<char *>(char * arr[], unsigned int n) { 131 int max_index = 0; 132 for (int i = 1; i < n; ++ i) 133 if (strlen(arr[i]) - strlen(arr[max_index]) > 0) 134 max_index = i; 135 return arr[max_index]; 136 } 137 138 void ch8_6() { 139 using namespace std; 140 int arr_int[6]{1,2,3,4,5,6}; 141 double arr_dou[4]{1.1,2.2,3.3,4.4}; 142 char * arr_str[5]{ 143 "h", "he", "hel", "hell", "hello" 144 }; 145 cout << "max double: " << ch8_6_maxn(arr_int, 6) << endl; 146 cout << "max int : " << ch8_6_maxn(arr_dou, 4) << endl; 147 cout << "max str : " << ch8_6_maxn(arr_str, 5) << endl; 148 } 149 150 template <typename T> 151 T ch8_7_sumarray(T * arr, int n) { 152 T sum{0}; 153 for (int i = 0; i < n; ++ i) 154 sum += arr[i]; 155 return sum; 156 } 157 158 template <typename T> 159 T ch8_7_sumarray(T * arr[], int n) { 160 T sum{0}; 161 for (int i = 0; i < n; ++ i) 162 sum += * arr[i]; 163 return sum; 164 } 165 166 void ch8_7() { 167 using namespace std; 168 int things[6]{13,31,103,301,310,130}; 169 debts mr_E[3]{ 170 {"Ima Wolfe", 2400.0}, 171 {"Ura Foxe", 1300.0}, 172 {"Iby Stout", 1800.0} 173 }; 174 double * pd[3]; 175 for (int i = 0; i < 3; ++ i) 176 pd[i] = &mr_E[i].amount; 177 cout << "sum of things: " << ch8_7_sumarray(things, 6) << endl; 178 cout << "sum of debts: " << ch8_7_sumarray(pd, 3) << endl; 179 }
以上是关于C++ Primer Plus编程练习答案——第8章的主要内容,如果未能解决你的问题,请参考以下文章