复习题加编程练习
//8.7 //1 只有一行代码的小型,非递归函数适合作为内联函数 //2 void song(const char* name, int times = 1); 只有原型包含默认值的信息 void song(const char* name = "Oh,My Papa!", int times = 1); //3 void iquote(int n) { cout << '"' << n << '"'; } void iquote(double n) { cout << "\"" << n << "\""; } void iquote(string str) { cout << '"' << str << '"'; } //4 void display(const box& box) { cout << "maker = " << box.maker << endl; } void calculate(box& box) { box.volume = box.height * box.width * box.length; } //5 先改原型 void fill(std::array<double, Seasons>& pa); void show(std::array<double, Seasons>& da); 改调用 fill(expenses); 改fill函数 cin >> (*pa)[i]; 改成cin >> pa[i]; 改show的函数头 void show(std::array<double, seasons>& da) //6 默认参数和函数重载都可以完成 double mass(double density, double volume = 1); double mass(double density, double volumn); double mass(double density); 不能使用默认参数,因为必须从左到右指定参数, 可以用函数重载 void repeat(int times, const char* pstr); void repeat(const char* pstr); 只能使用函数重载 int average(int a, int b); double average(double x, double y); 不能这么做,因为两个版本特征标会相同 //没看懂题 //7 template <typename T> T bigger(T a, T b) { return(a > b ? a : b); } //8 template<>box bigger(const box& a, const box& b) { return a.volume > b.volume ? a : b; } //9 float float& float& int double
////practice 1 //#include<iostream> //using namespace std; // //void Print(char* str, int n = 0); // //int main() //{ // char str[20]; // cout << "输入一个字符串:"; // cin >> str; // Print(str); // int n = 0; // cout << "再输入一个字符串和一个数字:"; // cin >> str >> n; // Print(str, n); // // return 0; //} // //void Print(char* str, int n) //{ // if (n != 0) // { // Print(str, n - 1); // } // cout << "第" << n + 1 << "次调用Print: " << str << endl; //} ////practice 2 //#include<iostream> //#include<cstring> //using namespace std; // //struct CandyBar //{ // char name[30]; // double weight; // int calorie; //}; //char name1[30] = "Millennium Munch"; //void setdata(CandyBar& candy, const char* name =name1, // const double weight = 2.85, const int calorie = 350); //void display(const CandyBar& candy); // //int main() //{ // CandyBar candy1, candy2; // char name[30]; // double weight = 0.0; // int calorie = 0; // cout << "输入第一个糖果的数据:"; // cin.getline(name, 30); // cin >> weight >> calorie; // setdata(candy1, name, weight, calorie); // setdata(candy2); // cout << "两个糖果的信息显示:" << endl; // display(candy1); // display(candy2); // return 0; //} // //void setdata(CandyBar& candy, const char* name, const double weight, const int calorie) //{ // strcpy_s(candy.name, name); //candy.name = name1;地址不能赋给地址,用string或strcpy_s或strcpy) // candy.weight = weight; // candy.calorie = calorie; //} // //void display(const CandyBar& candy) //{ // cout << "name=" << candy.name << endl; // cout << "weight=" << candy.weight << endl; // cout << "calorie=" << candy.calorie << endl; //} ////practice 3 //#include<cctype> //#include<iostream> //#include<cstring> //#include<string> // //using namespace std; // //string transform(string& str); // //int main() //{ // cout << "Enter a string (q to quit): "; // string str1; // while (getline(cin,str1)) // { // if (str1[0] == 'q') // { // cout << "Bye!" << endl; // break; // } // else // { // str1 = transform(str1); // cout << str1 << endl; // cout << "Next string (q to quit): "; // } // } // // return 0; //} // //string transform(string& str) //{ // for (int i = 0; i < str.size(); i++) // str[i] = toupper(str[i]); // return str; //} /* //practice 4 #pragma warning( disable : 4996) #include <iostream> #include <cstring> using namespace std; struct stringy { char* str; int ct; }; void set(stringy& str, const char*); void show(const stringy&, int n = 1); void show(const char*, int n = 1); int main() { stringy beany; char testing[] = "Reality isn't what it used to be."; set(beany, testing); show(beany); show(beany, 2); testing[0] = 'D'; testing[1] = 'u'; show(testing); show(testing, 3); show("Done!"); return 0; } void set(stringy& str, const char* t) { char* copy_t= new char[strlen(t) + 1]; //strlen(str1)是计算字符串的长度,不包括字符串末尾的“\0”!!! //strcpy_s(str.str, t); //两个参数但如果:char *str=new char[7];会出错:提示不支持两个参数 //链接https://blog.csdn.net/johnny710vip/article/details/6681160?ops_request_misc=&request_id=&biz_id= //102&utm_term=strcpy_s&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-8-. //pc_search_result_before_js&spm=1018.2226.3001.4187 strcpy(copy_t, t); //在include前加上#pragma warning( disable : 4996),否则会报错要求使用strcpy_s str.str = copy_t; str.ct = strlen(t) + 1; } void show(const stringy& str, int n) { for (int i = 0; i < n; i++) { cout << str.str << endl; } cout << endl; } void show(const char* str, int n) { for (int i = 0; i < n; i++) { cout << str << endl; } cout << endl; } */ /* //practice 5 #include<iostream> using namespace std; template <typename T> T max(const T*); int main() { int one[5] = { 5,8,2,4,5 }; double two[5] = { 2.5,8.9,99.2,5.1,5.5 }; cout << max(one) << endl; cout << max(two) << endl; return 0; } template<typename T> T max(const T* t) { T temp = t[0]; for (int i = 1; i < 5; i++) if (temp < t[i]) temp = t[i]; return temp; } */ /* //prcatice 6 #include<iostream> #include<cstring> using namespace std; template<typename T> T maxn(T*, int); template <>char* maxn(char**, int); int main() { int test1[6] = { 1,3,8,6,4, }; double test2[4] = { 1.1,2.2,5.5,9.9 }; const char* test3[5] = { "yuetian", "yue tiann", "yeutianyues", "yue", "yuetianyues", }; cout << "The max number of test1: " << maxn(test1, 6) << endl; cout << "The max number of test2: " << maxn(test2, 4) << endl; cout << "The longgest member's address: " <<(void*) maxn(test3, 4) << endl; //需要转换为void*指针,重载的操作符<<遇到地址会自动输出字符串 cout << "The adderss is the pointer of: " << maxn(test3, 4) << endl; cout << "Done!" << endl; return 0; } template<typename T> T maxn(T* array, int n) { T temp = array[0]; for (int i = 1; i < n; i++) { if (temp < array[i]) temp = array[i]; } return temp; } template <>char* maxn(char** str, int n) { int i = 0; char* address=str[0]; for (i = 1; i < n; i++) { if (strlen(address) < (strlen(str[i]))) address = str[i]; } return address; } */ //practice 7 #include<iostream> using namespace std; template<typename T> T SumArray(T arr[], int n); template<typename T> T SumArray(T* arr[], int n); struct debts { char name[50]; double amount; }; int main() { int things[6] = { 13,31,103,310,130 }; debts mr_E[3] = { {"Ima Wolfe",2400.0}, {"Ura Foxe",1300.0}, {"Iby Stout",1800.0} }; double* pd[3]; for (int i = 0; i < 3; i++) pd[i] = &mr_E[i].amount; cout << "The sum of things: " << SumArray(things, 6) << endl; cout << "The sum of amount of debt: " << SumArray(pd, 3) << endl; return 0; } template<typename T> T SumArray(T arr[], int n) { T temp = 0; for (int i = 0 ; i < n; i++) temp += arr[i]; return temp; } template<typename T> T SumArray(T* arr[], int n) { T temp = 0; for (int i = 0; i < n; i++) temp += *arr[i]; return temp; }