Liny_@NotePad

沉迷ACG中

《Essential C++》第二章练习

YOYO posted @ 2009年7月20日 19:43 in 【C/C++】 with tags Essential C++ 练习 , 2405 阅读

关于函数的声明与定义还不是很清楚。。继续苦读 = =

练习2.1

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool fibon_elem( int, int & );
  5.  
  6. int main()
  7. {
  8.         int pos;
  9.         while(true)
  10.         {
  11.                 cout<<"Please enter a position: ";
  12.                 cin>>pos;
  13.  
  14.                 if( pos == -1 ) break;
  15.  
  16.                 int elem;
  17.                 if ( fibon_elem( pos, elem ) )
  18.                 {
  19.                         cout<< "element # " << pos
  20.                                 << " is " << elem << endl;
  21.                 }
  22.                 else
  23.                 {
  24.                         cout<< "Sorry, Could not calculate element # "
  25.                                 << pos << endl;
  26.                 }
  27.  
  28.         }
  29.  
  30.         return 0;
  31. }
  32.  
  33. bool fibon_elem( int pos, int & elem)
  34. {
  35.         if( pos <= 0 || pos > 1024 )
  36.         {
  37.                 elem = 0;
  38.                 return false;
  39.         }
  40.  
  41.         elem = 1;
  42.         int n_2 = 1, n_1 = 1;
  43.         for( int ix = 3; ix<=pos; ++ix)
  44.         {
  45.                 elem = n_2 + n_1;
  46.                 n_2 = n_1; n_1 = elem;
  47.         }
  48.  
  49.         return true;
  50. }

 练习2.2

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. bool build_pentagonal_vector( int , vector<int> & );
  7.  
  8. void display_vector(const vector<int>, const string);
  9.  
  10. int main()
  11. {
  12.         int size;
  13.  
  14.         cout<<" Please input the vector's length: ";
  15.         cin>>size;
  16.  
  17.         vector<int> ve;
  18.        
  19.         if(build_pentagonal_vector(size, ve))
  20.         {
  21.                 display_vector(ve, "int");
  22.         }
  23.  
  24.         return 0;
  25. }
  26.  
  27. bool build_pentagonal_vector( int size, vector<int> & ve )
  28. {
  29.  
  30.         if( size <= 0 || size > 1024 )
  31.         {
  32.                 cout<<"The size is not legal ! "<<endl;
  33.                 return false;
  34.         }
  35.  
  36.         for(int t = 1; t <= size; t++)
  37.         {
  38.                 ve.push_back(t*(3*t-1)/2);
  39.         }
  40.  
  41.         return true;
  42. }
  43.  
  44. void display_vector(vector<int> ve, string type)
  45. {
  46.         vector<int>::iterator iter = ve.begin();
  47.         for( ; iter != ve.end(); iter++ )
  48.         {
  49.                 cout << (*iter) << " ";
  50.         }
  51.         cout << endl;
  52. }

 练习2.3

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. bool build_pentagonal_vector( int , vector<int> & );
  7.  
  8. void display_vector(const vector<int>, const string);
  9.  
  10. int main()
  11. {
  12.         int size;
  13.  
  14.         cout<<" Please input the vector's length: ";
  15.         cin>>size;
  16.  
  17.         vector<int> ve;
  18.        
  19.         if(build_pentagonal_vector(size, ve))
  20.         {
  21.                 display_vector(ve, "int");
  22.         }
  23.  
  24.         return 0;
  25. }
  26.  
  27. inline bool check_size ( int size )
  28. {
  29.         if( size <= 0 || size > 1024 )
  30.         {
  31.                 cout<<"The size is not legal ! "<<endl;
  32.                 return false;
  33.         }
  34.         return true;
  35. }
  36.  
  37. bool build_pentagonal_vector( int size, vector<int> & ve )
  38. {
  39.         if(!check_size(size)) return false;
  40.  
  41.         for(int t = 1; t <= size; t++)
  42.         {
  43.                 ve.push_back(t*(3*t-1)/2);
  44.         }
  45.  
  46.         return true;
  47. }
  48.  
  49. void display_vector(vector<int> ve, string type)
  50. {
  51.         vector<int>::iterator iter = ve.begin();
  52.         for( ; iter != ve.end(); iter++ )
  53.         {
  54.                 cout << (*iter) << " ";
  55.         }
  56.         cout << endl;
  57. }

 练习2.4

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. const vector<int> * pentagonal_vector( int size );
  7. int print_pos( const vector<int>, int );
  8.  
  9. int main()
  10. {
  11.         int size;
  12.  
  13.         cout<<"Please input the vector's size: ";
  14.         cin>>size;
  15.  
  16.         const vector<int> *ve = pentagonal_vector(size);
  17.  
  18.         int pos;
  19.         cout<<"Please input your pos: ";
  20.         cin>>pos;
  21.         cout<<"The position # " << pos <<" element is " << print_pos(*ve, pos) << endl;
  22.  
  23.         return 0;
  24. }
  25.  
  26. const vector<int> * pentagonal_vector( int size )
  27. {
  28.         static vector<int> ve;
  29.  
  30.         if( ve.size() < size )
  31.         {
  32.                 for( int i=ve.size(); i<=size; i++ )
  33.                 {
  34.                         ve.push_back( i*(3*i-1)/2 );
  35.                 }
  36.         }
  37.  
  38.         return &ve;
  39. }
  40.  
  41. int print_pos( const vector<int> ve, int pos )
  42. {
  43.         if( pos < 0 || pos > ve.size() )
  44.         {
  45.                 return -1;
  46.         }
  47.         else
  48.         {
  49.                 return ve[pos];
  50.         }
  51. }

 练习2.5

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. inline int max ( int a , int b )
  7. {
  8.         return a>=b?a:b;
  9. }
  10.  
  11. inline float max ( float a , float b )
  12. {
  13.         return a>=b?a:b;
  14. }
  15.  
  16. inline string max ( string a, string b )
  17. {
  18.         return a>=b?a:b;
  19. }
  20.  
  21. inline int max ( vector<int> v )
  22. {
  23.         int m = v[0];
  24.         for(int i = 1; i<v.size(); i++)
  25.         {
  26.                 if(v[i]>m) m = v[i];
  27.         }
  28.         return m;
  29. }
  30.  
  31. inline float max ( vector<float> v )
  32. {
  33.         float m = v[0];
  34.         for(int i = 1; i<v.size(); i++)
  35.         {
  36.                 if(v[i]>m) m = v[i];
  37.         }
  38.         return m;
  39. }
  40.  
  41. inline string max ( vector<string> v )
  42. {
  43.         string m = v[0];
  44.         for(int i = 1; i<v.size(); i++)
  45.         {
  46.                 if(v[i]>m) m = v[i];
  47.         }
  48.         return m;
  49. }
  50.  
  51. inline int max ( int array[], int size )
  52. {
  53.         int m = array[0];
  54.         for(int i = 1; i<size; i++)
  55.         {
  56.                 if(array[i]>m) m = array[i];
  57.         }
  58.         return m;
  59. }
  60.  
  61. inline float max ( float array[], int size )
  62. {
  63.         float m = array[0];
  64.         for(int i = 1; i<size; i++)
  65.         {
  66.                 if(array[i]>m) m = array[i];
  67.         }
  68.         return m;
  69. }
  70.  
  71. inline string max ( string array[], int size )
  72. {
  73.         string m = array[0];
  74.         for(int i = 1; i<size; i++)
  75.         {
  76.                 if(array[i]>m) m = array[i];
  77.         }
  78.         return m;
  79. }
  80.  
  81. int main()
  82. {
  83.         int a = 3, b = 2;
  84.         cout<<max(a,b)<<endl;
  85.  
  86.         float c = 0.1, d = 0.11;
  87.         cout<<max(c, d)<<endl;
  88.  
  89.         string e = "hi", f = "gogo";
  90.         cout<<max(e,f)<<endl;
  91.  
  92.         vector<int> vi;
  93.         vi.push_back(3);
  94.         vi.push_back(4);
  95.         vi.push_back(5);
  96.         vi.push_back(1);
  97.         vi.push_back(2);
  98.         cout<<max(vi)<<endl;
  99.  
  100.         vector<float> vf;
  101.         vf.push_back(0);
  102.         vf.push_back(0.42);
  103.         vf.push_back(0.51);
  104.         vf.push_back(0.01);
  105.         vf.push_back(2.0);
  106.         cout<<max(vf)<<endl;
  107.  
  108.         vector<string> vs;
  109.         vs.push_back("go");
  110.         vs.push_back("z");
  111.         vs.push_back("yy");
  112.         vs.push_back("a");
  113.         cout<<max(vs)<<endl;
  114.  
  115.         int ai[] = { 3, 2, 5, 1, 3 };
  116.         cout<<max(ai, 5)<<endl;
  117.  
  118.         float af[] = { 0.01, 0.02, 0.1, 0.2, 0 };
  119.         cout<<max(af, 5)<<endl;
  120.  
  121.         string as[] = {"a", "b", "c", "d", "" };
  122.         cout<<max(as, 5)<<endl;
  123.  
  124.         return 0;
  125. }

 练习2.6

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. template<typename T>
  7. inline T max ( T a , T b )
  8. {
  9.         return a>=b?a:b;
  10. }
  11.  
  12. template<typename T>
  13. inline T max ( vector<T> v )
  14. {
  15.         T m = v[0];
  16.         for(int i = 1; i<v.size(); i++)
  17.         {
  18.                 if(v[i]>m) m = v[i];
  19.         }
  20.         return m;
  21. }
  22.  
  23. template<typename T>
  24. inline T max ( T array[], int size )
  25. {
  26.         T m = array[0];
  27.         for(int i = 1; i<size; i++)
  28.         {
  29.                 if(array[i]>m) m = array[i];
  30.         }
  31.         return m;
  32. }
  33.  
  34. int main()
  35. {
  36.         int a = 3, b = 2;
  37.         cout<<max(a,b)<<endl;
  38.  
  39.         float c = 0.1, d = 0.11;
  40.         cout<<max(c, d)<<endl;
  41.  
  42.         string e = "hi", f = "gogo";
  43.         cout<<max(e,f)<<endl;
  44.  
  45.         vector<int> vi;
  46.         vi.push_back(3);
  47.         vi.push_back(4);
  48.         vi.push_back(5);
  49.         vi.push_back(1);
  50.         vi.push_back(2);
  51.         cout<<max(vi)<<endl;
  52.  
  53.         vector<float> vf;
  54.         vf.push_back(0);
  55.         vf.push_back(0.42);
  56.         vf.push_back(0.51);
  57.         vf.push_back(0.01);
  58.         vf.push_back(2.0);
  59.         cout<<max(vf)<<endl;
  60.  
  61.         vector<string> vs;
  62.         vs.push_back("go");
  63.         vs.push_back("z");
  64.         vs.push_back("yy");
  65.         vs.push_back("a");
  66.         cout<<max(vs)<<endl;
  67.  
  68.         int ai[] = { 3, 2, 5, 1, 3 };
  69.         cout<<max(ai, 5)<<endl;
  70.  
  71.         float af[] = { 0.01, 0.02, 0.1, 0.2, 0 };
  72.         cout<<max(af, 5)<<endl;
  73.  
  74.         string as[] = {"a", "b", "c", "d", "" };
  75.         cout<<max(as, 5)<<endl;
  76.  
  77.         return 0;
  78. }

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter