C++ 程序设计(谭浩强)教材例题程序

C++程序设计题解与上机指导

教材例题程序

第一章
Ch1-1
#include <iostream>
using namespace std;
int main()
{
 cout<<"This is a C++ program.";
 return 0;
}

Ch1-2
#include <iostream>
using namespace std;
int main()
{
 int a,b, sum;
 cin>>a>>b;
 sum=a+b;
 cout<<"a+b="<<sum<<endl;
 return 0;
}

Ch1-3-1
#include <iostream>
using namespace std;
int max(int x,int y)
{ int z;
  if(x>y) z=x;
  else z=y;
  return(z);
}

int main()
{ int a,b,m;
  cin>>a>>b;
  m=max(a,b);
  cout<<"max="<<m<<endl;
  return 0;
}

Ch1-3-2
#include <iostream>
using namespace std;
int main()
{ int max(int x,int y);
  int a,b,c;
  cin>>a>>b;
  c=max(a,b);
  cout<<"max="<<c<<endl;
  return 0;
}

int max(int x,int y)
{
  int z;
  if(x>y) z=x;
  else z=y;
  return(z);
}

Ch1-4
#include <iostream>
using namespace std;
class Student
{
 private:
  int num;
  int score;
 public:
  void setdata()
  {
   cin>>num;
   cin>>score;
  }
  void display()
  {
   cout<<"num="<<num<<endl;
   cout<<"score="<<score<<endl;
  };
};
Student stud1,stud2;

int main()
{
  stud1.setdata();
  stud2.setdata();
  stud1.display();
  stud2.display();
  return 0;
 }

第二章

Ch2-1
#include <iostream>
using namespace std;
int main ( )
   {int i,j;
     i='A';
	 j='B';
	 cout<<i<<' '<<j<<'\n';
	 return 0;
}  

Ch2-2
#include <iostream>
using namespace std;
int main()
{char c1,c2;
 c1='a';
 c2='b';
 c1=c1-32;
 c2=c2-32;
 cout<<c1<<' '<<c2<<endl;
 return 0;
}

Ch2-3
#include <iostream>
#define PRICE 30
using namespace std;
int main ( )
{int num,total;
 num=10;
 total=num * PRICE;
 cout<<"total="<<total<<endl;
 return 0;
}

Ch2-4
#include <iostream>
using namespace std;
int main()
{ float x;
  int i;
  x=3.6;
  i=(int)x;
  cout<<"x="<<x<<",i="<<i<<endl;
  return 0;
}

Ch2-5
#include <iostream>
using namespace std;
int main()
{ unsigned short a;
  short int b=-1;
  a=b;
  cout<<"a="<<a<<endl;
  return 0;
}

第三章

Ch3-1
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{ 
 double a=123.456,b=3.14159,c=-3214.67; 
 cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);
 cout<<setw(10)<<a<<endl;
 cout<<setw(10)<<b<<endl;
 cout<<setw(10)<<c<<endl; 
 return 0;
}

Ch3-2
#include <iostream>
using namespace std;
int main()
{char a,b,c;
 a='B';b='O';c='y';
 putchar(a);putchar(b);putchar(c);putchar(10);
 putchar(66);putchar(79);putchar(89);putchar(10);
 return 0;
}

Ch3-3
#include <iostream>
using namespace std;
int main()
{char c;
 c=getchar();
 putchar(c+32);
 putchar('\n');
 return 0;
}

Ch3-3-2
#include <iostream>
using namespace std;
int main()
{putchar(getchar()+32);putchar('\n');
 return 0;
}

Ch3-4
#include <iostream>
using namespace std;
int main()
{int a;
 float b;
 char c;
 scanf("%d %c %f",&a,&c,&b);
 printf("a=%d,b=%f,c=%c\n",a,b,c);
 return 0;
}

Ch3-5
#include <iostream>
#include <cmath>
using namespace std;
int main()
{float  a,b,c,x1,x2;
 cin>>a>>b>>c;
 x1=(-b+sqrt(b*b-4*a*c))/(2*a);
 x2=(-b-sqrt(b*b-4*a*c))/(2*a);
 cout<<"x1="<<x1<<endl;
 cout<<"x2="<<x2<<endl;
 return 0;
}

Ch3-6
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
 double a,b,c;
 cout<<"please enter a,b,c:";
 cin>>a>>b>>c;
 if (a+b>c && b+c>a && c+a>b)
  {
   double s,area;
   s=(a+b+c)/2;
   area=sqrt(s*(s-a)*(s-b)*(s-c));
   cout<<setiosflags(ios::fixed)<<setprecision(4);
   cout<<"area="<<area<<endl;
  }
 else cout<<"it is not a trilateral!"<<endl;
 return 0;
}

Ch3-7
#include <iostream>
using namespace std;
int main()
{
  char ch;
  cin>>ch;
  ch=(ch>='A' && ch<='Z')?(ch+32):ch;
  cout<<ch<<endl;
  return 0;
}

Ch3-8
#include <iostream>
using namespace std;
int main()
{
  int year;
  bool leap;
  cout<<"please enter year:";
  cin>>year;
  if (year%4==0)
    {if(year%100==0)
      {if (year%400==0)
          leap=true;
       else leap=false;}
     else
		 leap=true;}
  else
      leap=false;
  if (leap)
     cout<<year<<" is ";
  else
     cout<<year<<" is not ";
     cout<<" a leap year."<<endl;
  return 0;
}

Ch3-9
#include <iostream>
using namespace std;
int main()
{int c,s;
 float p,w,d,f;
 cout<<"please enter p,w,s:";
 cin>>p>>w>>s;
 if(s>=3000) c=12;
 else c=s/250;
 switch (c)
 { case 0:d=0;break;
   case 1:d=2;break;
   case 2:
   case 3:d=5;break;
   case 4:
   case 5:
   case 6:
   case 7:d=8;break;
   case 8:
   case 9:
   case 10:
   case 11:d=10;break;
   case 12:d=15;break;
 }
  f=p*w*s*(1-d/100.0);
  cout<<"freight="<<f<<endl;
  return 0;
}

Ch3-10
#include <iostream>
using namespace std;
int main()
{
 int i=1,sum=0;
 while (i<=100)
  {sum=sum+i;
   i++;
  }
 cout<<"sum="<<sum<<endl;
 return 0;
}

Ch3-11
#include <iostream>
using namespace std;
int main()
{int i=1,sum=0;
 do 
  { sum=sum+i;
    i++;
   }while (i<=100);
 cout<<"sum="<<sum<<endl;
 return 0;
}

Ch3-12
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{int s=1;
 double n=1,t=1,pi=0;
 while((fabs(t)) > 1e-7)
   {pi=pi+t;
    n=n+2;
    s=-s;
    t=s/n;
	}
 pi=pi*4;
 cout<<"pi="<<setiosflags(ios::fixed)<<setprecision(6)<<pi<<endl;
 return 0;
}

Ch3-13
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{long f1,f2;
 int i;
 f1=f2=1;
 for(i=1;i<=20;i++)
   {cout<<setw(12)<<f1<<setw(12)<<f2;
    if(i%2==0) cout<<endl;
    f1=f1+f2;
    f2=f2+f1;
   }
  return 0;
 }

Ch3-14
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{int m,k,i,n=0;
 bool prime;
 for(m=101;m<=200;m=m+2)
   {prime=true;
	k=int(sqrt(m));
    for(i=2;i<=k;i++)
		if(m%i==0) {prime=false;break;}
    if (prime)
      {cout<<setw(5)<<m;
       n=n+1;
      }
    if(n%10==0) cout<<endl;
   }
 cout<<endl;
 return 0;
}

Ch3-15
#include <iostream>
using namespace std;
int main()
{char c;
 while ((c=getchar())!='\n')
   {if((c>='a' && c<='z') || (c>='A' && c<='Z'))
      {c=c+4;
       if(c>'Z' && c<='Z'+4 || c>'z') c=c-26;
      }
    cout<<c;
   }
 cout<<endl;
 return 0;
}

第四章

Ch4-1
#include <iostream>
using namespace std;
void printstar(void)
{
 cout<<"******************************"<<endl;
}

void print_message(void)
{
 cout<<"      Welcome  to  C++!"<<endl;
}

int main(void)
{
 printstar();
 print_message();
 printstar();
 return 0;
}

Ch4-2
#include <iostream>
using namespace std;
int max(int x,int y)
{int z;
 z=x>y?x:y;
 return(z);
}

int main()
{int a,b,c;
 cout<<"please enter two integer numbers:"; 
 cin>>a>>b;
 c=max(a,b);
 cout<<"max="<<c<<endl;
 return 0;
}

Ch4-3
#include <iostream>
using namespace std;
int main()
{float add(float,float);
 float a,b,c;
 cout<<"please enter a,b:";
 cin>>a>>b;
 c=add(a,b);
 cout<<"sum="<<c<<endl;
 return 0;
}

float add(float x,float y)
{float z;
 z=x+y;
 return (z);
}

Ch4-4
#include <iostream>
using namespace std;
inline int max(int,int, int);
int main()
{
 int i=10,j=20,k=30,m;
 m=max(i,j,k);
 cout<<"max="<<m<<endl;
 return 0;
}
inline int max(int a,int b,int c)
{if(b>a) a=b;                          
 if(c>a) a=c;
 return a;
}

Ch4-5
#include <iostream>
using namespace std;
int main()
{int max(int a,int b,int c);
 double max(double a,double b,double c);
 long max(long a,long b,long c);
 int i1,i2,i3,i;
 cin>>i1>>i2>>i3;
 i=max(i1,i2,i3);
 cout<<"i_max="<<i<<endl;
 double d1,d2,d3,d;
 cin>>d1>>d2>>d3;
 d=max(d1,d2,d3);
 cout<<"d_max="<<d<<endl;
 long g1,g2,g3,g;
 cin>>g1>>g2>>g3;
 g=max(g1,g2,g3);
 cout<<"g_max="<<g<<endl;
 return 0;
}

int max(int a,int b,int c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}

double max(double a,double b,double c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}

long max(long a,long b,long c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}

Ch4-6
#include <iostream>
using namespace std;
int main()
{int max(int a,int b,int c);
 int max(int a,int b);
 int a=8,b=-12,c=7;
 cout<<"max(a,b,c)="<<max(a,b,c)<<endl;
 cout<<"max(a,b)="<<max(a,b)<<endl;
 return 0;
}

int max(int a,int b,int c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}

int max(int a,int b)
{if(a>b) return a;
 else return b;
}

Ch4-7
#include <iostream>
using namespace std;
template <typename T>
T max(T a,T b,T c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}

int main()
{int i1=185,i2=-76,i3=567,i;
 double d1=56.87,d2=90.23,d3=-3214.76,d;
 long g1=67845,g2=-912456,g3=673456,g;
 i=max(i1,i2,i3);
 d=max(d1,d2,d3);
 g=max(g1,g2,g3);
 cout<<"i_max="<<i<<endl;
 cout<<"d_max="<<d<<endl;
 cout<<"g_max="<<g<<endl;
 return 0;
}

Ch4-8
#include <iostream>
using namespace std;
int main()
{int max(int a,int b,int c=0);
 int a,b,c;
 cin>>a>>b>>c;
 cout<<"max(a,b,c)="<<max(a,b,c)<<endl;
 cout<<"max(a,b)="<<max(a,b)<<endl;
 return 0;
}

int max(int a,int b,int c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}

Ch4-9
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double root(double,double);
double f(double);
double xpoint(double,double);
 
int main()
{double x1,x2,f1,f2,x;
 do
  {
   cout<<"input x1,x2:";
   cin>>x1>>x2;
   f1=f(x1);
   f2=f(x2);
  }while(f1*f2>=0);
 x=root(x1,x2);
 cout<<setiosflags(ios::fixed)<<setprecision(7);
 cout<<"A root of equation is "<<x<<endl;
 return 0;
}

double f(double x)
{
 double y;
 y=x*x*x-5*x*x+16*x-80;
 return y;
}

double xpoint(double x1,double x2)
{
 double y;
 y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
 return y;
}

double root(double x1,double x2)
{double x,y,y1;
 y1=f(x1);
 do
  {
   x=xpoint(x1,x2);
   y=f(x);
   if (y*y1>0)
    {y1=y;
     x1=x;
    }
   else
    x2=x;
  }while(fabs(y)>=0.000001);
 return x;
}

Ch4-10
#include <iostream>
using namespace std;
int age(int);
int main()
 {cout<<age(5)<<endl;
  return 0;
 }

int age(int n)
{
 int c;
 if(n==1) c=10;
 else c=age(n-1)+2;
 return c;
}

Ch4-11
#include <iostream>
using namespace std;
long fac(int);
int main()
 {int n;
  long y;
  cout<<"please input an integer:";
  cin>>n;
  y=fac(n);
  cout<<n<<"!="<<y<<endl;
  return 0;
 }

long fac(int n)
{
 long f;
 if(n<0)
  {cout<<"n<0,data error!"<<endl;
   f=-1;
  }
 else if (n==0||n==1) f=1;
 else f=fac(n-1)*n;
 return f;
}

Ch4-12
#include <iostream>
using namespace std;
int f(int a)
{auto int b=0;
 static int c=3;
 b=b+1;
 c=c+1;
 return a+b+c;
}

int main()
 {int a=2,i;
  for(i=0;i<3;i++)
	cout<<f(a)<<" ";
  cout<<endl;
  return 0;
 }

Ch4-13
#include <iostream>
using namespace std;
int fac(int);
int main()
 {
  int i;
  for(i=1;i<=5;i++)
   cout<<i<<"!="<<fac(i)<<endl;
   return 0;
 }

int fac(int n)
 {static int f=1;
  f=f*n;
  return f;
 }

Ch4-14
#include <iostream>
using namespace std;
int max(int,int);
int main()
 {extern int a,b;
  cout<<max(a,b)<<endl;
  return 0;
 }

int a=15,b=-7;
int max(int x,int y)
 {int z;
  z=x>y?x:y;
  return z;
 }

Ch4-15-1
//file1.cpp
#include <iostream>
using namespace std;
int main()
 { extern int max(int,int);
   int a,b;
   cin>>a>>b;
   cout<<max(a,b)<<endl;
   return 0;
 }

Ch4-15-2
//file2.cpp
int max(int x,int y)
{
 int z;
 z=x>y?x:y;
 return z;
 }

Ch4-16
#include <iostream>
using namespace std;
#define RUN
int main()
{int x=1,y=2,z=3;
 #ifndef RUN
  cout<<"x="<<x<<",y="<<y<<",z="<<z<<endl;
 #endif
 cout<<x*y*z<<endl;
 return 0;
}

第五章

Ch5-1
#include <iostream>
using namespace std;
int main()
{int i,a[10];
 for (i=0;i<=9;i++)
a[i]=i;
 for (i=9;i>=0;i--)
cout<<a[i]<<" ";
 cout<<endl;
 return 0;
}

Ch5-2
#include <iostream>
#include <iomanip>
using namespace std;
int main()
  {
    int i;
    int f[20]={1,1};
    for(i=2;i<20;i++) 
		f[i]=f[i-2]+f[i-1];
    for(i=0;i<20;i++)
      {
        if(i%5==0) cout<<endl;
        cout<<setw(8)<<f[i];
      }
	cout<<endl;
	return 0;
}

Ch5-3
#include <iostream>
using namespace std;
int main()
{
  int a[10];
  int i,j,t;
  cout<<"input 10 numbers :"<<endl;
  for (i=0;i<10;i++)
    cin>>a[i];
  cout<<endl;
  for (j=0;j<9;j++)
    for(i=0;i<9-j;i++)
       if (a[i]>a[i+1])
	   {t=a[i];a[i]=a[i+1];a[i+1]=t;}
  cout<<"the sorted numbers :"<<endl;
  for(i=0;i<10;i++)
	  cout<<a[i]<<" ";
  cout<<endl;
  return 0;
}

Ch5-4
#include <iostream> 
using namespace std;
int main()
{
 int a[2][3]={{1,2,3},{4,5,6}};
 int b[3][2],i,j;
 cout<<"array a:"<<endl;
 for (i=0;i<=1;i++)
 {
   for (j=0;j<=2;j++)
   {  cout<<a[i][j]<<" ";
      b[j][i]=a[i][j];
   }
   cout<<endl;
  }
  cout<<"array b:"<<endl;
  for (i=0;i<=2;i++)
  {
    for(j=0;j<=1;j++)
      cout<<b[i][j]<<" ";
    cout<<endl;             
   } 
  return 0;
}

Ch5-5
#include <iostream>
using namespace std;
int main()
{ int i,j,row=0,colum=0,max;
  int a[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
  max=a[0][0];
  for (i=0;i<=2;i++)
    for (j=0;j<=3;j++)
      if (a[i][j]>max)
	  {max=a[i][j];
        row=i;
        colum=j;
       }
  cout<<"max="<<max<<",row="<<row<<",colum="<<colum<<endl;
  return 0;
 }

Ch5-6
#include <iostream>
using namespace std;
int main()
{ int max_value(int x,int max);
  int i,j,row=0,colum=0,max;
  int a[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
  max=a[0][0];
  for (i=0;i<=2;i++)
    for (j=0;j<=3;j++)
	{
	 max=max_value(a[i][j],max);
	 if(max==a[i][j])
	 { row=i;
       colum=j;
      }
	}
  cout<<"max="<<max<<",row="<<row<<",colum="<<colum<<endl;
  return 0;
 }

int max_value(int x,int max)
{ if(x>max) return x;
  else return max;
}

Ch5-7
#include <iostream>
using namespace std;
int main()
{void select_sort(int array[],int n);             
 int a[10],i;
 cout<<"enter the originl array:"<<endl;
 for(i=0;i<10;i++)                                
   cin>>a[i];
 cout<<endl;
 select_sort(a,10);                              
 cout<<"the sorted array:"<<endl;
 for(i=0;i<10;i++)                             
   cout<<a[i]<<"  ";
 cout<<endl;
 return 0;
}

void select_sort(int array[],int n)              
{int i,j,k,t;
 for(i=0;i<n-1;i++)
 {k=i;
  for(j=i+1;j<n;j++)                    
    if(array[j]<array[k]) k=j;
 t=array[k];array[k]=array[i];array[i]=t;
}
}

Ch5-8
#include <iostream> 
using namespace std;
int main()
{int max_value(int array[][4]);
 int a[3][4]={{11,32,45,67},{22,44,66,88},{15,72,43,37}};
 cout<<"max value is "<<max_value(a)<<endl;
 return 0;
}
int max_value(int array[][4])
{int i,j,max;
 max=array[0][0];
 for( i=0;i<3;i++)
     for(j=0;j<4;j++)
       if(array[i][j]>max) max=array[i][j];
 return max;
}

Ch5-9
#include <iostream>
using namespace std;
int main()
{char diamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
 int i,j;
 for (i=0;i<5;i++)
   {for (j=0;j<5;j++)
     cout<<diamond[i][j];
    cout<<endl;
	}
  return 0;
 }

Ch5-10
#include <iostream>
#include <string>
using namespace std;
int main()
{ void max_string(char str[][30],int i);
  int i;
  char country_name[3][30];
  for(i=0;i<3;i++)
    cin>>country_name[i];
  max_string(country_name,3);
  return 0;
}

void max_string(char str[][30],int n)
{
  int i;
  char string[30];
  strcpy(string,str[0]);
  for(i=0;i<n;i++)
	  if(strcmp(str[i],string)>0) strcpy(string,str[i]);
  cout<<endl<<"the largest string is∶"<<string<<endl;
}

Ch5-11
#include <iostream>
#include <string>
using namespace std;
int main()
{void swap(string,string);
 string string1,string2,string3,temp;
 cout<<"please input three strings:";
 cin>>string1>>string2>>string3;
 if(string2>string3) {temp=string2;string2=string3;string3=temp;}
 if(string1<string2) cout<<string1<<" "<<string2<<" "<<string3<<endl;
 else if(string1<string3) cout<<string2<<" "<<string1<<" "<<string3<<endl;
 else cout<<string2<<" "<<string3<<" "<<string1<<endl;
 return 0;
}

Ch5-12
#include <iostream>
#include <string>
using namespace std;
string name[50],num[50];
int n;
int main()
{void input_data();
 void search(string find_name);
 string find_name;
 cout<<"please input number of this class:";
 cin>>n;
 input_data();
 cout<<"please input name you want find:";
 cin>>find_name;
 search(find_name);
 return 0;
}

void input_data()
{
 int i;
 for (i=0;i<n;i++)
   {cout<<"input name and number of student "<<i+1<<":";
    cin>>name[i]>>num[i];}
}

void search(string find_name)
{int i;
 bool flag=false;
 for(i=0;i<n;i++)
   if(name[i]==find_name)
     {cout<<name[i]<<" "<<num[i]<<endl;flag=true;break;}
 if(flag==false) cout<<"can't find this name";
}

第六章

Ch6-1
#include <iostream>
using namespace std;
int main()
{int a,b;
 int *pointer_1,*pointer_2;
 a=100;b=10;
 pointer_1=&a;      //把变量a的地址赋给pointer_1
 pointer_2=&b;      //把变量b的地址赋给pointer_2
 cout<<a<<" "<<b<<endl;
 cout<<*pointer_1<<" "<<*pointer_2<<endl;
 return 0;
}

Ch6-2
#include  <iostream>
using namespace std;
int main()
{
  int *p1,*p2,*p,a,b;
  cin>>a>>b;
  p1=&a;
  p2=&b;
  if(a<b)
  {p=p1;p1=p2;p2=p;}
  cout<<"a="<<a<<" b="<<b<<endl;
  cout<<"max="<<*p1<<" min="<<*p2<<endl;
  return 0;
}

Ch6-3-1
#include  <iostream>
using namespace std;
int main()
{ void swap(int *p1,int *p2);
  int *pointer_1,*pointer_2,a,b;
  cin>>a>>b;
  pointer_1=&a;
  pointer_2=&b;
  if(a<b) swap(pointer_1,pointer_2);
  cout<<"max="<<a<<" min="<<b<<endl;
  return 0;
}

void swap(int *p1,int *p2)
{ int temp;
  temp=*p1;
  *p1=*p2;
  *p2=temp;
}

Ch6-3-2
#include  <iostream>
using namespace std;
int main()
{ void swap(int *p1,int *p2);
  int *pointer_1,*pointer_2,a,b;
  cin>>a>>b;
  pointer_1=&a;
  pointer_2=&b;
  if(a<b) swap(pointer_1,pointer_2);
  cout<<"max="<<a<<" min="<<b<<endl;
  return 0;
}

void swap(int *p1,int *p2)
{ int *temp;
  temp=p1;
  p1=p2;
  p2=temp;
}

Ch6-4
#include <iostream>
using namespace std;
int main()
{ void exchange(int *,int *,int *);
  int a,b,c,*p1,*p2,*p3;
  cin>>a>>b>>c;
  p1=&a;p2=&b;p3=&c;
  exchange(p1,p2,p3);
  cout<<a<<" "<<b<<" "<<c<<endl;
  return 0;
}

void exchange(int *q1,int *q2,int *q3)
{void swap(int *,int *);
 if(*q1<*q2) swap(q1,q2);
 if(*q1<*q3) swap(q1,q3);
 if(*q2<*q3) swap(q2,q3);
}

void swap(int *pt1,int *pt2)
{int temp;
 temp=*pt1;
 *pt1=*pt2;
 *pt2=temp;
}

Ch6-5-1
#include <iostream>
using namespace std;
int main()
{
  int a[10];
  int i;
  for(i=0;i<10;i++)
    cin>>a[i];
  cout<<endl;
  for(i=0;i<10;i++)
    cout<<a[i]<<" ";
  cout<<endl;
  return 0;
}

Ch6-5-2
#include <iostream>
using namespace std;
int main()
{
  int a[10];
  int i;
  for(i=0;i<10;i++)
    cin>>*(a+i);
  cout<<endl;
  for(i=0;i<10;i++)
    cout<<*(a+i)<<" ";
  cout<<endl;
  return 0;
}

Ch6-5-3
#include <iostream>
using namespace std;
int main()
{
  int a[10];
  int i,*p=a ;
  for(i=0;i<10;i++)
    cin>>*(p+i);
  cout<<endl;
    for(p=a;p<(a+10);p++)
    cout<<*p<<" ";
  cout<<endl;
  return 0;
}

Ch6-6
#include <iostream>
using namespace std;
int main()
{void select_sort(int *p,int n);             //函数声明
 int a[10],i;
 double c=3.6,*q=&c;
 cout<<"enter the originl array:"<<endl;
 for(i=0;i<10;i++)                                //输入10个数
   cin>>a[i];
 cout<<endl;
 select_sort(a,10);                              //函数调用,数组名作实参
 cout<<"the sorted array:"<<endl;
 for(i=0;i<10;i++)                               //输出10已排好序的数
   cout<<a[i]<<"  ";
 cout<<endl;
 return 0;
}

void select_sort(int *p,int n)              
{int i,j,k,t;
 for(i=0;i<n-1;i++)
 {k=i;
     for(j=i+1;j<n;j++)                     
       if(*(p+j)<*(p+k)) k=j;
	   t=*(p+k);*(p+k)=*(p+i);*(p+i)=t;
 }
}

Ch6-7
#include <iostream>
using namespace std;
int main()
{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
  int *p;
  for(p=a[0];p<a[0]+12;p++)
    cout<<*p<<" ";
  cout<<endl;
  return 0;
}

Ch6-8
#include <iostream>
using namespace std;
int main()
{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
  int (*p)[4],i,j;
  cin>>i>>j;
  p=a;
  cout<<*(*(p+i)+j)<<endl;
  return 0;
}

Ch6-9
#include <iostream>
using namespace std;
int main()
{ void output(int (*p)[4]);
  int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
  output(a);
  return 0;
}

void output(int (*p)[4])  
{ int i,j;
  for(i=0;i<3;i++)
	for(j=0;j<4;j++)  
      cout<<*(*(p+i)+j)<<" ";
  cout<<endl;
}

Ch6-10
#include <iostream>
using namespace std;
int main()
{ char str[]="I love CHINA!";
  cout<<str<<endl;
  return 0;
}

Ch6-11
#include <string>
#include <iostream>
using namespace std;
int main()
{ string str="I love CHINA!";
  cout<<str<<endl;
  return 0;
}

Ch6-12
#include <iostream>
using namespace std;
int main()
{ char *str="I love CHINA!";
  cout<<str<<endl;
  return 0;
}

Ch6-13
#include <iostream>
using namespace std;
int main()
{ char str1[]="I love CHINA!",str2[20],*p1,*p2;
  p1=str1;p2=str2;
  for(;*p1!='\0';p1++,p2++)
    *p2=*p1;
  *p2='\0';
  p1=str1;p2=str2;
  cout<<"str1 is: "<<p1<<endl;
  cout<<"str2 is: "<<p2<<endl;
  return 0;
}

Ch6-14-1
#include <iostream>
using namespace std;
int main()
{int max(int x,int y);              //函数声明
 int a,b,m;
 cin>>a>>b;
 m=max(a,b);                        //调用函数max,求出最大值,赋予m
 cout<<"max="<<m<<endl;
 return 0;
}

int max(int x,int y)
{int z;
 if(x>y) z=x;
 else z=y;
 return(z);
}

Ch6-14-2
#include <iostream>
using namespace std;
int main()
{int max(int x,int y);
 int (*p)(int,int);
 int a,b,m;
 p=max;
 cin>>a>>b;
 m=p(a,b);
 cout<<"max="<<m<<endl;
 return 0;
}

int max(int x,int y)
{int z;
 if(x>y) z=x;
 else z=y;
 return(z);
}

Ch6-15-1
#include <iostream>
using namespace std;
int main()
{ void sort(char *name[],int n);
  void print(char *name[],int n);
  char *name[]={"BASIC","FORTRAN","C++","PASCAL","COBOL"};
  int n=5;
  sort(name,n);
  print(name,n);
  return 0;
}
void sort(char *name[],int n)
{char *temp;
 int i,j,k;
 for(i=0;i<n-1;i++)
 {k=i;
  for(j=i+1;j<n;j++)
    if(strcmp(name[k],name[j])>0) k=j;
  if(k!=i)
  { temp=name[i];name[i]=name[k];name[k]=temp;}
 }
}

void print(char *name[],int n)
{int i;
 for(i=0;i<n;i++)
   cout<<name[i]<<endl;
}

Ch6-15-2
#include <iostream>
using namespace std;
int main()
{ void sort(char *name[],int n);
  void print(char *name[],int n);
  char *name[]={"BASIC","FORTRAN","C++","PASCAL","COBOL"};
  int n=5;
  sort(name,n);
  print(name,n);
  return 0;
}
void sort(char *name[],int n)
{char *temp;
 int i,j,k;
 for(i=0;i<n-1;i++)
 {k=i;
  for(j=i+1;j<n;j++)
    if(strcmp(name[k],name[j])>0) k=j;
  if(k!=i)
  { temp=name[i];name[i]=name[k];name[k]=temp;}
 }
}

void print(char *name[],int n)
{int i=0;
 char *p;
 p=name[0];
 while(i<n)
  {p=*(name+i++);
   cout<<p<<endl;
  }
}

Ch6-16
#include <iostream>
using namespace std;
int main()
{ char **p;
  char *name[]={"BASIC","FORTRAN","C++","PASCAL","COBOL"};
  p=name+2;
  cout<<*p<<endl;
  cout<<**p<<endl;
  return 0;
 }

Ch6-17
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
 int a=10;
 int &b=a;
 a=a*a;
 cout<<a<<setw(6)<<b<<endl;
 b=b/5;
 cout<<b<<setw(6)<<a<<endl;
 return 0;
}

Ch6-18
#include <iostream>
using namespace std;
int main()
{void swap(int,int);
 int i=3;
 int j=5;
 swap(i,j);
 cout<<i<<" "<<j<<endl;
 return 0;
}

void swap(int a,int b)
{int temp;
 temp=a;
 a=b;
 b=temp;
}

Ch6-19
#include <iostream>
using namespace std;
int main()
{void swap(int *,int *);
 int i=3,j=5;
 swap(&i,&j);
 cout<<i<<" "<<j<<endl;
 return 0;
}

void swap(int *p1,int *p2)
{int temp;
 temp=*p1;
 *p1=*p2;
 *p2=temp;
}

Ch6-20
#include <iostream>
using namespace std;
int main()
{void swap(int &,int &);
 int i=3,j=5;
 swap(i,j);
 cout<<"i="<<i<<" "<<"j="<<j<<endl;
 return 0;
}

void swap(int &a,int &b)
{int temp;
 temp=a;
 a=b;
 b=temp;
}

Ch6-21
#include <iostream>
using namespace std;
int main()
{void sort(int &,int &,int &);
 int a,b,c,a1,b1,c1;
 cout<<"Please enter 3 integers:";
 cin>>a>>b>>c;
 a1=a;b1=b;c1=c;
 sort(a1,b1,c1);
 cout<<a<<" "<<b<<" "<<c<<" in sorted order is ";
 cout<<a1<<" "<<b1<<" "<<c1<<endl;
 return 0;
}
void sort(int &i,int &j,int &k)
{ void change(int &,int &);
  if (i>j) change(i,j);
  if (i>k) change(i,k);
  if (j>k) change(j,k);
}
void change(int &x,int &y)
{ int temp;
  temp=x;
  x=y;
  y=temp;
}

第七章

Ch7-1
#include <iostream>
using namespace std;
struct Date
  {int month;
   int day;
   int year;
  };
 struct Student
  {int num;
   char name[20];
   char sex;
   Date birthday;
   float score;
  }student1,student2={10002,"Wang Li",'f',5,23,1982,89.5};

int main()
{student1=student2;
 cout<<student1.num<<endl;
 cout<<student1.name<<endl;
 cout<<student1.sex<<endl;
 cout<<student1.birthday.month<<'/'<<student1.birthday.day<<'/';
 cout<<student1.birthday.year<<endl;
 cout<<student1.score<<endl;
 return 0;
}

Ch7-2-1
#include <iostream>
#include <string>
using namespace std;
struct Person
 { char name[20];
   int count;
 };
int main()
 {Person leader[3]={"Li",0,"Zhang",0,"Fun",0};
  int i,j;
  char leader_name[20];
  for(i=0;i<10;i++)
    {cin>>leader_name;
     for(j=0;j<3;j++)
       if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;
     }
  cout<<endl;
  for(i=0;i<3;i++)
    {cout<<leader[i].name<<":"<<leader[i].count<<endl;}
  return 0;
 }

Ch7-2-2
#include <iostream>
#include <string>
using namespace std;
struct Person
 { string name;
   int count;
 };
int main()
 {Person leader[3]={"Li",0,"Zhang",0,"Fun",0};
  int i,j;
  string leader_name;
  for(i=0;i<3;i++)
    {cin>>leader_name;
     for(j=0;j<10;j++)
       if(leader_name==leader[j].name) leader[j].count++;
     }
  cout<<endl;
  for(i=0;i<3;i++)
    {cout<<leader[i].name<<":"<<leader[i].count<<endl;}
  return 0;
 }

Ch7-3
#include <iostream>
#include <string>
using namespace std;
int main()
 {struct student
   {int num;
    string name;
    char sex;
    float score;
 };
 student stu;
 student *p=&stu;
 stu.num=10301;
 stu.name="Wang Fun";
 stu.sex='f';
 stu.score=89.5;
 cout<<stu.num<<" "<<stu.name<<" "<<stu.sex<<" "<<stu.score<<endl;
 cout<<(*p).num<<" "<<(*p).name<<" "<<(*p).sex<<" "<<(*p).score<<endl;
 return 0;
}

Ch7-4
#define NULL 0   
#include <iostream>
using namespace std; 
struct Student
 {long num;
  float score;
  struct Student *next;
 };
int main()
{Student a,b,c,*head,*p;
 a.num=31001; a.score=89.5;
 b.num=31003; b.score=90;
 c.num=31007; c.score=85;
 head=&a;
 a.next=&b;
 b.next=&c;
 c.next=NULL;
 p=head;
 do        
   {cout<<p->num<<"  "<<p->score<<endl;
    p=p->next;
   } while(p!=NULL);
 return 0;
}

Ch7-5-1
#include <iostream>
#include <string>
using namespace std;
struct Student
{int num;
 string name;
 float score[3];
};
int main()
{void print(Student);
 Student stu;
 stu.num=12345;
 stu.name="Li Fung";
 stu.score[0]=67.5;
 stu.score[1]=89;
 stu.score[2]=78.5;
 print(stu);
 return 0;
}

void print(Student stu)
{cout<<stu.num<<" "<<stu.name<<" "<<stu.score[0]<<" "
     <<stu.score[1]<<" "<<stu.score[2]<<endl;
}

Ch7-5-2
#include <iostream>
#include <string>
using namespace std;
struct Student
{int num;
 string name;
 float score[3];
}stu={12345,"Li Fung",67.5,89,78.5};

int main()
{void print(Student *);
 Student *pt=&stu;
 print(pt);
 return 0;
}

void print(Student *p)
{cout<<p->num<<" "<<p->name<<" "<<p->score[0]<<" "
     <<p->score[1]<<" "<<p->score[2]<<endl;
}

Ch7-5-3
#include <iostream>
#include <string>
using namespace std;
struct Student
{int num;
 string name;
 float score[3];
}stu={12345,"Li Fung",67.5,89,78.5};

int main()
{void print(Student &);
 print(stu);
 return 0;
}

void print(Student &stud)
{cout<<stud.num<<" "<<stud.name<<" "<<stud.score[0]<<" "<<stud.score[1]<<" "<<stud.score[2]<<endl;
}

Ch7-6
#include <iostream>
#include <string>
using namespace std;
struct Student 
{string name;
 int num;
 char sex;
};
int main ( )
{
 Student *p;
 p=new Student;
 p->name="Wang Fun";
 p->num=10123;
 p->sex='m';
 cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;
 delete p;
 return 0;
}

Ch7-7
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
struct S
  {int num;
   string name;
   char sex;
   char job;
   union
     {int grade;
      char position[10];
     }category;
  }person[2];

int main()
{ int i;
  for(i=0;i<2;i++)
   {cin>>person[i].num>>person[i].name>>person[i].sex>>person[i].job;
    if(person[i].job=='s') cin>>person[i].category.grade;
    else if (person[i].job=='t') cin>>person[i].category.position;
        else cout<<"input error!";
   }
  cout<<endl<<"No.  Name   sex  job  grade/position"<<endl;
  for(i=0;i<2;i++)
    {if (person[i].job=='s')
      cout<<person[i].num<<setw(6)<<person[i].name<<"    "<<person[i].sex
      <<"    "<<person[i].job<<setw(10)<<person[i].category.grade<<endl;
     else
      cout<<person[i].num<<setw(6)<<person[i].name<<"    "<<person[i].sex
      <<"    "<<person[i].job<<setw(10)<<person[i].category.position<<endl;
    }
  return 0;
 }

Ch7-8
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{enum color {red,yellow,blue,white,black};
 color pri;
 int i,j,k,n=0,loop;
 for (i=red;i<=black;i++)
   for (j=red;j<=black;j++)
     if (i!=j)
      { for (k=red;k<=black;k++)
        if ((k!=i) && (k!=j))
         {n=n+1;
          cout<<n;
          for (loop=1;loop<=3;loop++)
           {switch (loop)
             {case 1: pri=color(i);break;
              case 2: pri=color(j);break;
              case 3: pri=color(k);break;
              default:break;
             }
          switch (pri)
            {case red:    cout<<setw(8)<<"red"; break;
             case yellow: cout<<setw(8)<<"yellow"; break;
             case blue:   cout<<setw(8)<<"blue"; break;
             case white:  cout<<setw(8)<<"white"; break;
             case black:  cout<<setw(8)<<"black"; break;
             default   :                   break;
            }
         }
      cout<<endl;
     }
   }
   cout<<"total:"<<n<<endl;
   return 0;
}

第八章

Ch8-1
#include <iostream>
using namespace std;
class Time
 {public:
  int hour;
  int minute;
  int sec;
 };
int main()
 { Time t1;
   Time &t2=t1;
   cin>>t2.hour;
   cin>>t2.minute;
   cin>>t1.sec;
   cout<<t1.hour<<":"<<t1.minute<<":"<<t2.sec<<endl;
 }

Ch8-2-a
#include <iostream>
using namespace std;
class Time
 {public:
  int hour;
  int minute;
  int sec;
 };
int main()
 {Time t1;
  cin>>t1.hour;
  cin>>t1.minute;
  cin>>t1.sec;
  cout<<t1.hour<<":"<<t1.minute<<":"<<t1.sec<<endl;
  Time t2;
  cin>>t2.hour;
  cin>>t2.minute;
  cin>>t2.sec;
  cout<<t2.hour<<":"<<t2.minute<<":"<<t2.sec<<endl;
  return 0;
 }

Ch8-2-b
#include <iostream>
using namespace std;
class Time
 {public:
  int hour;
  int minute;
  int sec;
 };
int main()
 {
  void set_time(Time&) ;
  void show_time(Time&);
  Time t1;
  set_time(t1);
  show_time(t1);
  Time t2;
  set_time(t2);
  show_time(t2);
  return 0;
 }
 
void set_time(Time& t)
 {
  cin>>t.hour;
  cin>>t.minute;
  cin>>t.sec;
 }
 
void show_time(Time& t)
 {
  cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
 }

Ch8-2-c
#include <iostream>
using namespace std;
class Time
 {public:
  int hour;
  int minute;
  int sec;
 };
int main()
 {
  void set_time(Time&,int hour=0,int minute=0,int sec=0);
  void show_time(Time&);
  Time t1;
  set_time(t1,12,23,34);
  show_time(t1);
  Time t2;
  set_time(t2);
  show_time(t2);
  return 0;
 }
 
void set_time(Time& t,int hour=9,int minute=30,int sec=0)
 {
  t.hour=hour;
  t.minute=minute;
  t.sec=sec;
 }
 
void show_time(Time& t)
 {
  cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
 }

Ch8-3
#include <iostream>
using namespace std;
class Time
 {public:
   void set_time() ;
   void show_time();
  private:
   int hour;
   int minute;
   int sec;
 };
int main()
 {
  Time t1;
  t1.set_time();
  t1.show_time();
  Time t2;
  t2.set_time();
  t2.show_time();
  return 0;
 }
 
void Time::set_time()
 {
  cin>>hour;
  cin>>minute;
  cin>>sec;
 }
 
void Time::show_time()
 {
  cout<<hour<<":"<<minute<<":"<<sec<<endl;
 }

Ch8-4
#include <iostream>
using namespace std;
class Array_max
{public:
   void set_value();
   void max_value();
   void show_value();
 private:
   int array[10];
   int max;
};

void Array_max::set_value()
 { int i;
   for (i=0;i<10;i++)
     cin>>array[i];
 }

void Array_max::max_value()
 {int i;
  max=array[0];
  for (i=1;i<10;i++)
   if(array[i]>max) max=array[i];
  }

void Array_max::show_value()
 {cout<<"max="<<max;
 }

int main()
 {Array_max  arrmax;
  arrmax.set_value();
  arrmax.max_value();
  arrmax.show_value();
  return 0;
 }

Main
//main.cpp
#include <iostream>
#include "student.h"
int main()
{Student stud;
 stud.display();
 return 0;
}

Student
//student.cpp                            这是源文件,在此文件中进行函数的定义
#include <iostream>
#include "student.h"                    //不要漏写此行
void Student::display( )                 //在类外定义display类函数
{cout<<"num:"<<num<<endl;
 cout<<"name:"<<name<<endl;
 cout<<"sex:"<<sex<<endl;
}

第九章

Ch9-1
#include <iostream>
using namespace std;
class Time
 {public:
   Time()
   {hour=0;
    minute=0;
    sec=0;
   }  
   void set_time();
   void show_time();
  private:
   int hour;
   int minute;
   int sec;
 };

void Time::set_time()
{cin>>hour;
 cin>>minute;
 cin>>sec;
}

void Time::show_time()
 {
  cout<<hour<<":"<<minute<<":"<<sec<<endl;
 }

int main()
 {
  Time t1;
  t1.show_time();
  Time t2;
  t2.show_time();
  return 0;
 }

Ch9-1-1
#include <iostream>
using namespace std;

class Time
 {public:
   Time()
   {hour=0;
    minute=0;
    sec=0;
   }
   void set_time();
   void show_time();
  private:
   int hour;
   int minute;
   int sec;
 };
int main()
 {
  Time t1;
  t1.set_time();
  t1.show_time();
  Time t2;
  t2.show_time();
  return 0;
 }

void Time::set_time()
{cin>>hour;
 cin>>minute;
 cin>>sec;
}

void Time::show_time()
 {
  cout<<hour<<":"<<minute<<":"<<sec<<endl;
 }

Ch9-1-2
#include <iostream>
using namespace std;

class Time
 {public:
   Time();
   void show_time();
  private:
   int hour;
   int minute;
   int sec;
 };

Time::Time()
 {
  hour=0;
  minute=0;
  sec=0;
 }

int main()
 {
  Time t1;
  t1.show_time();
  Time t2;
  t2.show_time();
  return 0;
 }
 
void Time::show_time()
 {
  cout<<hour<<":"<<minute<<":"<<sec<<endl;
 }

Ch9-2
#include <iostream>
using namespace std;
class Box
 {public:
   Box(int,int,int);
   int volume();
  private:
   int height;
   int width;
   int length;
 };
Box::Box(int h,int w,int len)
 {height=h;
  width=w;
  length=len;
 }

int Box::volume()
 {return(height*width*length);
 }
 
    
int main()
 {
  Box box1(12,25,30);
  cout<<"The volume of box1 is "<<box1.volume()<<endl;
  Box box2(15,30,21);
  cout<<"The volume of box2 is "<<box2.volume()<<endl;
  return 0;
 }

Ch9-3
#include <iostream>
using namespace std;
class Box
 {public:
   Box();                  
   Box(int h,int w ,int len):height(h),width(w),length(len){}
   int volume();
  private:
   int height;
   int width;
   int length;
 };
Box::Box()                 
 {height=10;
  width=10;
  length=10;
 }

int Box::volume()
 {return(height*width*length);
 }
    
int main()
 {
  Box box1;                                    
  cout<<"The volume of box1 is "<<box1.volume()<<endl;
  Box box2(15,30,25);                          
  cout<<"The volume of box2 is "<<box2.volume()<<endl;
  return 0;
 }

Ch9-4
#include <iostream>
using namespace std;
class Box
 {public:
   Box(int w=10,int h=10,int len=10);
   int volume();
  private:
   int height;
   int width;
   int length;
 };

Box::Box(int w,int h,int len)
 {height=h;
  width=w;
  length=len;
 }

int Box::volume()
 {return(height*width*length);
 }
 
    
int main()
 {
  Box box1;
  cout<<"The volume of box1 is "<<box1.volume()<<endl;
  Box box2(15);
  cout<<"The volume of box2 is "<<box2.volume()<<endl;
  Box box3(15,30);
  cout<<"The volume of box3 is "<<box3.volume()<<endl;
  Box box4(15,30,20);
  cout<<"The volume of box4 is "<<box4.volume()<<endl;
  return 0;
 }

Ch9-4-2
#include <iostream>
using namespace std;
class Box
 {public:
   Box(int=10,int=10,int=10);
   int volume();
  private:
   int height;
   int width;
   int length;
 };
 
Box::Box(int h,int w,int len):height(h),width(w),length(len)
{ }

int Box::volume()
 {return(height*width*length);
 }
 
    
int main()
 {
  Box box1;
  cout<<"The volume of box1 is "<<box1.volume()<<endl;
  Box box2(15);
  cout<<"The volume of box2 is "<<box2.volume()<<endl;
  Box box3(15,30);
  cout<<"The volume of box3 is "<<box3.volume()<<endl;
  Box box4(15,30,20);
  cout<<"The volume of box4 is "<<box4.volume()<<endl;
  return 0;
 }

Ch9-5
#include <iostream>
#include <string>
using namespace std;
class Student
 {public:
   Student(int n,string nam,char s)
    {num=n;
     name=nam;
     sex=s;
     cout<<"Constructor called."<<endl;
    }
   ~Student()
   {cout<<"Destructor called."<<endl;}
   void display()
   {cout<<"num:"<<num<<endl;
    cout<<"name:"<<name<<endl;
	cout<<"sex:"<<sex<<endl<<endl;
   }
  private:
    int num;
    string name;
    char sex;
};

int main()
  {Student stud1(10010,"Wang_li",'f');
   stud1.display();
   Student stud2(10011,"Zhang_fun",'m');
   stud2.display();
   return 0;
}

Ch9-6
#include <iostream>
using namespace std;

class Box
 {public:
   Box(int h=10,int w=12,int len=15):height(h),width(w),length(len){ }
   int volume();
  private:
   int height;
   int width;
   int length;
 };

int Box::volume()
 {return(height*width*length);
 }
    
int main()
 {
  Box a[3]={
   Box(10,12,15),
   Box(15,18,20),
   Box(16,20,26)
   };
  cout<<"volume of a[0] is "<<a[0].volume()<<endl;
  cout<<"volume of a[0] is "<<a[1].volume()<<endl;
  cout<<"volume of a[0] is "<<a[2].volume()<<endl;
  return 0;
 }

Ch9-7
#include <iostream>
using namespace std;
 class Time
 {public:
   Time(int,int,int);
   int hour;
   int minute;
   int sec;
   void get_time();
 };
 Time::Time(int h,int m,int s)
 {hour=h;
  minute=m;
  sec=s;
 }
void Time::get_time()
   {cout<<hour<<":"<<minute<<":"<<sec<<endl;}

int main()
 {Time t1(10,13,56);
  int *p1=&t1.hour;
  cout<<*p1<<endl;
  t1.get_time();
  Time *p2=&t1;
  p2->get_time();
  void (Time::*p3)();
  p3=&Time::get_time;
  (t1.*p3)();
  return 0;
}

Ch9-8
#include <iostream>
using namespace std;
class Time
 {public:
   Time(int,int,int);
   int hour;
   int minute;
   int sec;
 };
 Time::Time(int h,int m,int s)
 {hour=h;
  minute=m;
  sec=s;
 }
 
void fun(Time &t)
{t.hour=18;}

int main()
{Time t1(10,13,56);
 fun(t1);
 cout<<t1.hour<<endl;
 return 0;
}

Ch9-9
#include <iostream>
using namespace std;
class Box
 {public:
   Box(int=10,int=10,int=10);               
   int volume();
  private:
   int height;
   int width;
   int length;
 };

Box::Box(int h,int w,int len)
 {height=h;
  width=w;
  length=len;
 }

int Box::volume()
 {return(height*width*length);      
 }
     
int main()
 {
  Box box1(15,30,25),box2;                       
  cout<<"The volume of box1 is "<<box1.volume()<<endl;
  box2=box1;                                   
  cout<<"The volume of box2 is "<<box2.volume()<<endl;
  return 0;
 }

Ch9-9-2
#include <iostream>
using namespace std;

class Box
 {public:
   Box(int=10,int=10,int=10);
   int volume();
  private:
   int height;
   int width;
   int length;
 };

Box::Box(int h,int w,int len)
 {height=h;
  width=w;
  length=len;
 }
int Box::volume()
 {return(height*width*length);
 }
 
    
int main()
 {Box box1(15,30,25);
  cout<<"The volume of box1 is "<<box1.volume()<<endl;
  Box box2=box1,box3=box2;
  cout<<"The volume of box2 is "<<box2.volume()<<endl;
  cout<<"The volume of box3 is "<<box3.volume()<<endl;
  return 0;
  
 }

Ch9-10
#include <iostream>
using namespace std;

class Box
 {public:
   Box(int,int);
   int volume();
   static int height;
   int width;
   int length;
 };

Box::Box(int w,int len)
 {
  width=w;
  length=len;
 }
int Box::volume()
 {return(height*width*length);
 }
int Box::height=10;

int main()
 {
  Box a(15,20),b(20,30);
  cout<<a.height<<endl;
  cout<<b.height<<endl;
  cout<<Box::height<<endl;
  cout<<a.volume()<<endl;
  return 0;
 }

Ch9-11
#include <iostream>
using namespace std;
class Student
 {public:
   Student(int,int,int);
   void total();
   static float average();
  private:
   int num;
   int age;
   float score;
   static float sum;
   static int count;
 };

 Student::Student(int m,int a,int s)
 {num=m;
  age=a;
  score=s;
 }
 
void Student::total()
   {
    sum+=score;
    count++;
   }
   
float  Student::average()
 { return(sum/count);
 }

float Student::sum=0;
int Student::count=0;

int main()
 {
   Student stud[3]={
     Student(1001,18,70),
     Student(1002,19,79),
     Student(1005,20,98)
    };
   int n;
   cout<<"please input the number of students:";
   cin>>n;
   for(int i=0;i<n;i++)
     stud[i].total();
   cout<<"The average score of "<<n<<" students is "<<stud[0].average()<<endl;
   return 0;
 }

Ch9-12
#include <iostream>
using namespace std;

class Time
 {public:
   Time(int,int,int);
   friend void display(Time &);
  private:
   int hour;
   int minute;
   int sec;
 };
 Time::Time(int h,int m,int s)
 {hour=h;
  minute=m;
  sec=s;
 }
void display(Time &t)
 {
  cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
 }
   
int main()
{
 Time t1(10,13,56);
 display(t1);
 return 0;
}

Ch9-13
#include <iostream>
using namespace std;
class Date;
class Time
 {public:
   Time(int,int,int);
   void display(const Date&);
  private:
   int hour;
   int minute;
   int sec;
 };

 class Date
 {public:
   Date(int,int,int);
   friend void Time::display(const Date &);
  private:
   int month;
   int day;
   int year;
 };

 Time::Time(int h,int m,int s)
 {hour=h;
  minute=m;
  sec=s;
 }

void Time::display(const Date &da)
 {cout<<da.month<<"/"<<da.day<<"/"<<da.year<<endl;
  cout<<hour<<":"<<minute<<":"<<sec<<endl;
 }
 
 
Date::Date(int m,int d,int y)
 {month=m;
  day=d;
  year=y;
 }
   
int main()
{Time t1(10,13,56);
 Date d1(12,25,2004);
 t1.display(d1);
 return 0;
}

Ch9-14
#include <iostream>
using namespace std;
template<class numtype>
class Compare
 {public:
   Compare(numtype a,numtype b)
    {x=a;y=b;}
   numtype max()
    {return (x>y)?x:y;}
   numtype min()
    {return (x<y)?x:y;}
  private:
    numtype x,y;
 };
int main()
{Compare<int> cmp1(3,7);
 cout<<cmp1.max()<<" is the Maximum of two inteder numbers."<<endl;
 cout<<cmp1.min()<<" is the Minimum of two inteder numbers."<<endl<<endl;
 Compare<float> cmp2(45.78,93.6);
 cout<<cmp2.max()<<" is the Maximum of two float numbers."<<endl;
 cout<<cmp2.min()<<" is the Minimum of two float numbers."<<endl<<endl;
 Compare<char> cmp3('a','A');
 cout<<cmp3.max()<<" is the Maximum of two characters."<<endl;
 cout<<cmp3.min()<<" is the Minimum of two characters."<<endl;
 return 0;
}

第十章

Ch10-1
#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   Complex complex_add(Complex &c2);
   void display();
  private:
   double real;
   double imag;
 };
Complex Complex::complex_add(Complex &c2)
{return Complex(real+c2.real,imag+c2.imag);}
   
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1.complex_add(c2);
 cout<<"c1="; c1.display();
 cout<<"c2="; c2.display();
 cout<<"c1+c2="; c3.display();
 return 0;
}

Ch10-2
#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   Complex operator + (Complex &c2);
   void display();
  private:
   double real;
   double imag;
 };
Complex Complex::operator + (Complex &c2)
{Complex c;
 c.real=real+c2.real;
 c.imag=imag+c2.imag;
return c;}
   
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c1=";c1.display();
 cout<<"c2=";c2.display();
 cout<<"c1+c2=";c3.display();
 return 0;
}

Ch10-2-2
#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   Complex operator + (Complex &c2);
   void display();
  private:
   double real;
   double imag;
 };
Complex Complex::operator + (Complex &c2)
 {return Complex(real+c2.real,imag+c2.imag);}
   
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c1="; c1.display();
 cout<<"c2="; c2.display();
 cout<<"c1+c2="; c3.display();
 return 0;
}

Ch10-3
#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r){real=r;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   friend Complex operator+ (Complex &c1,Complex &c2);
   void display();
  private:
   double real;
   double imag;
 };

Complex operator+ (Complex &c1,Complex &c2)
 {return Complex(c1.real+c2.real, c1.imag+c2.imag);}
   
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c1="; c1.display();
 cout<<"c2="; c2.display();
 cout<<"c1+c2="; c3.display();
 return 0;
}

Ch10-4-1
#include <iostream>
using namespace std;
class String           //String 是用户自己指定的类名
 {public:
   String(){p=NULL;}
   String(char *str);
   void display();
  private:
   char *p;
 };
 
String::String(char *str)
  {p=str;}

void String::display()
  {cout<<p;}

int main()
  {String string1("Hello"),string2("Book");
   string1.display();
   cout<<endl;
   string2.display();
   return 0;
}

Ch10-4-2(vc)
//本程序适用于VC++ 6.0
#include <iostream.h>
#include <string.h>
class String
 {public:
   String(){p=NULL;}
   String(char *str);
   friend bool operator>(String &string1,String &string2);
   friend bool operator<(String &string1,String &string2);
   friend bool operator==(String &string1,String &string2);
   void display();
  private:
   char *p;
 };
 
String::String(char *str)
  {p=str;}

void String::display()
{cout<<p;}


bool operator>(String &string1,String &string2)
  {if(strcmp(string1.p,string2.p)>0)
    return true;
   else return false;
  }

int main()
{String string1("Hello"),string2("Book");
 cout<<(string1>string2)<<endl;
 return 0;
}

Ch10-4-2
#include <iostream>
#include <cstring>
using namespace std;
class String
 {public:
   String(){p=NULL;}
   String(char *str);
   friend bool operator>(String &string1,String &string2);
   friend bool operator<(String &string1,String &string2);
   friend bool operator==(String &string1,String &string2);
   void display();
  private:
   char *p;
 };
 
String::String(char *str)
  {p=str;}

void String::display()
{cout<<p;}


bool operator>(String &string1,String &string2)
  {if(strcmp(string1.p,string2.p)>0)
    return true;
   else return false;
  }

int main()
{String string1("Hello"),string2("Book");
 cout<<(string1>string2)<<endl;
 return 0;
}

Ch10-4-3(vc)
//本程序适用于VC++ 6.0
#include <iostream.h>
#include <string.h>
class String
 {public:
   String(){p=NULL;}
   String(char *str);
   friend bool operator>(String &string1,String &string2);
   friend bool operator<(String &string1,String &string2);
   friend bool operator==(String &string1,String &string2);
   void display();
  private:
   char *p;
 };
 
String::String(char *str)
  {p=str;}

void String::display()
{cout<<p;}

bool operator>(String &string1,String &string2)
  {if(strcmp(string1.p,string2.p)>0)
    return true;
   else
    return false;
  }

bool operator<(String &string1,String &string2)
  {if(strcmp(string1.p,string2.p)<0)
    return true;
   else
    return false;
  }

bool operator==(String &string1,String &string2)
  {if(strcmp(string1.p,string2.p)==0)
    return true;
   else
    return false;
  }

int main()
{String string1("Hello"),string2("Book"),string3("Computer");
 cout<<(string1>string2)<<endl;
 cout<<(string1<string3)<<endl;
 cout<<(string1==string2)<<endl;
 return 0;
}

Ch10-4-3
#include <iostream>
#include <string>
using namespace std;
class String
 {public:
   String(){p=NULL;}
   String(char *str);
   friend bool operator>(String &string1,String &string2);
   friend bool operator<(String &string1,String &string2);
   friend bool operator==(String &string1,String &string2);
   void display();
  private:
   char *p;
 };
 
String::String(char *str)
  {p=str;}

void String::display()
{cout<<p;}

bool operator>(String &string1,String &string2)
  {if(strcmp(string1.p,string2.p)>0)
    return true;
   else
    return false;
  }

bool operator<(String &string1,String &string2)
  {if(strcmp(string1.p,string2.p)<0)
    return true;
   else
    return false;
  }

bool operator==(String &string1,String &string2)
  {if(strcmp(string1.p,string2.p)==0)
    return true;
   else
    return false;
  }

int main()
{String string1("Hello"),string2("Book"),string3("Computer");
 cout<<(string1>string2)<<endl;
 cout<<(string1<string3)<<endl;
 cout<<(string1==string2)<<endl;
 return 0;
}

Ch10-4-4(vc)
//本程序适用于VC++ 6.0
#include <iostream.h>
#include <string.h>
class String
 {public:
   String(){p=NULL;}
   String(char *str);
   friend bool operator>(String &string1,String &string2);
   friend bool operator<(String &string1,String &string2);
   friend bool operator==(String &string1,String &string2);
  void display();
  private:
   char *p;
 };
 
String::String(char *str)
{p=str;
}

void String::display()
 {cout<<p;}
 
bool operator>(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)>0)
   return true;
 else
   return false;
}

bool operator<(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)<0)
   return true;
 else
   return false;
}

bool operator==(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)==0)
   return true;
 else
   return false;
}

void compare(String &string1,String &string2)
{if(operator>(string1,string2)==1)
  {string1.display();cout<<">";string2.display();}
 else
  if(operator<(string1,string2)==1)
   {string1.display();cout<<"<";string2.display();}
 else
  if(operator==(string1,string2)==1)
   {string1.display();cout<<"=";string2.display();}
 cout<<endl;
}

int main()
{String string1("Hello"),string2("Book"),string3("Computer"),string4("Hello");
 compare(string1,string2);
 compare(string2,string3);
 compare(string1,string4);
 return 0;
}

Ch10-4-4
#include <iostream>
#include <cstring>
using namespace std;
class String
 {public:
   String(){p=NULL;}
   String(char *str);
   friend bool operator>(String &string1,String &string2);
   friend bool operator<(String &string1,String &string2);
   friend bool operator==(String &string1,String &string2);
  void display();
  private:
   char *p;
 };
 
String::String(char *str)
{p=str;
}

void String::display()
 {cout<<p;}
 
bool operator>(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)>0)
   return true;
 else
   return false;
}

bool operator<(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)<0)
   return true;
 else
   return false;
}

bool operator==(String &string1,String &string2)
{if(strcmp(string1.p,string2.p)==0)
   return true;
 else
   return false;
}

void compare(String &string1,String &string2)
{if(operator>(string1,string2)==1)
  {string1.display();cout<<">";string2.display();}
 else
  if(operator<(string1,string2)==1)
   {string1.display();cout<<"<";string2.display();}
 else
  if(operator==(string1,string2)==1)
   {string1.display();cout<<"=";string2.display();}
 cout<<endl;
}

int main()
{String string1("Hello"),string2("Book"),string3("Computer"),string4("Hello");
 compare(string1,string2);
 compare(string2,string3);
 compare(string1,string4);
 return 0;
}

Ch10-5
#include <iostream>
using namespace std;
class Time
{public:
   Time(){minute=0;sec=0;}
   Time(int m,int s):minute(m),sec(s){}
   Time operator++();
   void display(){cout<<minute<<":"<<sec<<endl;}
  private:
   int minute;
   int sec;
 };

Time Time::operator++()
{if(++sec>=60)
  {sec-=60;
   ++minute;}
   return *this;
}
   
int main()
{Time time1(34,0);
 for (int i=0;i<61;i++)
	{++time1;
     time1.display();}
 return 0;
}

Ch10-6
#include <iostream>
using namespace std;
class Time
{public:
   Time(){minute=0;sec=0;}
   Time(int m,int s):minute(m),sec(s){}
   Time operator++();
   Time operator++(int);
   void display(){cout<<minute<<":"<<sec<<endl;}
  private:
   int minute;
   int sec;
 };
 

Time Time::operator++()
{if(++sec>=60)
  {sec-=60;
   ++minute;}
 return *this;
}
Time Time::operator++(int)
{Time temp(*this);
 sec++;
 if(sec>=60)
  {sec-=60;
   ++minute;}
 return temp;
}

   
int main()
{Time time1(34,59),time2;
 cout<<" time1 : ";
 time1.display();
 ++time1;
 cout<<"++time1: ";
 time1.display();
 time2=time1++;
 cout<<"time1++: ";
 time1.display();
 cout<<" time2 : ";
 time2.display();
 return 0;
}

Ch10-7(vc)
//本程序适用于VC++ 6.0
#include <iostream.h>          
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   Complex operator + (Complex &c2);
   friend ostream& operator << (ostream&,Complex&);
  private:
   double real;
   double imag;
 };
Complex Complex::operator + (Complex &c2)
 {return Complex(real+c2.real,imag+c2.imag);}
   
ostream& operator << (ostream& output,Complex& c)
{output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
 return output;
}

int  main()
{Complex c1(2,4),c2(6,10),c3;
 c3=c1+c2;
 cout<<c3;
 return 0;
}

Ch10-7
#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   Complex operator + (Complex &c2);
   friend ostream& operator << (ostream&,Complex&);
  private:
   double real;
   double imag;
 };
Complex Complex::operator + (Complex &c2)
 {return Complex(real+c2.real,imag+c2.imag);}
   
ostream& operator << (ostream& output,Complex& c)
{output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
 return output;
}

int  main()
{Complex c1(2,4),c2(6,10),c3;
 c3=c1+c2;
 cout<<c3;
 return 0;
}

Ch10-8(vc)
//本程序适用于VC++ 6.0
#include <iostream.h>
class Complex
 {public:
   friend ostream& operator << (ostream&,Complex&);
   friend istream& operator >> (istream&,Complex&);
  private:
   double real;
   double imag;
 };
   
ostream& operator << (ostream& output,Complex& c)
{output<<"("<<c.real;
 if(c.imag>=0) output<<"+";
 output<<c.imag<<"i)";
 return output;
}

istream& operator >> (istream& input,Complex& c)
{cout<<"input real part and imaginary part of complex number:";
 input>>c.real>>c.imag;
 return input;
}

int main()
{Complex c1,c2;
 cin>>c1>>c2;
 cout<<"c1="<<c1<<endl;
 cout<<"c2="<<c2<<endl;
 return 0;
}

Ch10-8
#include <iostream>
using namespace std;
class Complex
 {public:
   friend ostream& operator << (ostream&,Complex&);
   friend istream& operator >> (istream&,Complex&);
  private:
   double real;
   double imag;
 };
   
ostream& operator << (ostream& output,Complex& c)
{output<<"("<<c.real<<"+"<<c.imag<<"i)";
 return output;
}

istream& operator >> (istream& input,Complex& c)
{cout<<"input real part and imaginary part of complex number:";
 input>>c.real>>c.imag;
 return input;
}


int main()
{Complex c1,c2;
 cin>>c1>>c2;
 cout<<"c1="<<c1<<endl;
 cout<<"c2="<<c2<<endl;
 return 0;
}

Ch10-9
#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   operator double() {return real;}    
  private:
   double real;
   double imag;
 };
 
int main()
{Complex c1(3,4),c2(5,-10),c3;
 double d;
 d=2.5+c1;
 cout<<d<<endl;
 return 0;
}

Ch10-10
#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r){real=r;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   friend Complex operator + (Complex c1,Complex c2);
   void display();
  private:
   double real;
   double imag;
 };
 
Complex operator + (Complex c1,Complex c2)
 {return Complex(c1.real+c2.real, c1.imag+c2.imag);}
   
void Complex::display()
{cout<<"("<<real<<"+"<<imag<<"i)"<<endl;}

int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1+2.5;
 c3.display();
 return 0;
}

Ch10-10-2
#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r){real=r;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   operator double(){cout<<return real;}
   friend Complex operator + (Complex c1,Complex c2);                
   void display();
  private:
   double real;
   double imag;
 };
 
Complex operator + (Complex c1,Complex c2)
 {return Complex(c1.real+c2.real, c1.imag+c2.imag);}
   
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1+2.5;
 c3.display();
 return 0;
}

第十一章

Ch11-1
#include <iostream>
#include <string>
using namespace std;
class Student
{public:
  void get_value()
   {cin>>num>>name>>sex;}
  void display( )
    {cout<<"num: "<<num<<endl;
     cout<<"name: "<<name<<endl;
     cout<<"sex: "<<sex<<endl;}
 private :
   int num;
   string name;
   char sex;
};   

class Student1: public Student
 {public:
   void get_value_1()
    {cin>>age>>addr;}
   void display_1()
    {  //cout<<"num: "<<num<<endl;        //企图引用基类的私有成员,错误
       //cout<<"name: "<<name<<endl;      //企图引用基类的私有成员,错误
       //cout<<"sex: "<<sex<<endl;        //企图引用基类的私有成员,错误
       cout<<"age: "<<age<<endl;          //引用派生类的私有成员,正确
       cout<<"address: "<<addr<<endl;}    //引用派生类的私有成员,正确
  private:
       int age;
       string addr;
 };
 
int main()
 {Student1 stud1;
  stud1.get_value();
  stud1.get_value_1();
  stud1.display();
  stud1.display_1();
  return 0;
}

Ch11-2
#include <iostream>
#include <string>
using namespace std;
class Student
{public:
  void display( )
    {cout<<"num: "<<num<<endl;
     cout<<"name: "<<name<<endl;
     cout<<"sex: "<<sex<<endl;}
 private :
   int num;
   string name;
   char sex;
};   

class Student1: private Student
 {public:
   void display_1()
       {display();
       cout<<"age: "<<age<<endl;          //引用派生类的私有成员,正确
       cout<<"address: "<<addr<<endl;}    //引用派生类的私有成员,正确
  private:
       int age;
       string addr;
 };
 
int main()
 {Student1 stud1;
  stud1.display_1();
  return 0;
}

Ch11-3
#include <iostream>
#include <string>
using namespace std;
class Student                        //声明基类
{public:                             //基类公用成员                
  void display( );
 protected :                         //基类保护成员
    int num;
    string name;
    char sex;
};

void Student::display( )
   {cout<<"num: "<<num<<endl;
    cout<<"name: "<<name<<endl;
    cout<<"sex: "<<sex<<endl;
   }
   
class Student1: protected Student     //用protected继承方式声明一个派生类
{public:
   void display1( );
 private:
   int age;                          
   string addr;
};

void Student1::display1( )
    {cout<<"num: "<<num<<endl;         //引用基类的保护成员,合法
     cout<<"name: "<<name<<endl;       //引用基类的保护成员,合法
     cout<<"sex: "<<sex<<endl;         //引用基类的保护成员,合法
     cout<<"age: "<<age<<endl;         //引用派生类的私有成员,合法
     cout<<"address: "<<addr<<endl;    //引用派生类的私有成员,合法
   

int main( )
 {Student1 stud1;                      //stud2是派生类student2的对象
  stud1.display1( );                  //display是派生类中的公用成员函数
  return 0;
 }

Ch11-5
#include <iostream>
#include<string>
using namespace std;
class Student                              //声明基类
 {public:                                  //公用部分
   Student(int n,string nam,char s )       //基类构造函数
    {num=n;
     name=nam;
     sex=s; }
   ~Student( ) { }
  protected:                               //保护部分
    int num;
    string name;
    char sex ;                            //基类析构函数
};

class Student1: public Student                   //声明公用派生类student
 {public:
   Student1(int n,string nam,char s,int a,char ad[]) : Student(n,nam,s),age(a)
                                             //派生类构造函数
    {age=a;                          //在函数体中只对派生类新增的数据成员初始化
     addr=ad;
    }
   void show( )
    {cout<<"num: "<<num<<endl;
     cout<<"name: "<<name<<endl;
     cout<<"sex: "<<sex<<endl;
     cout<<"age: "<<age<<endl;
     cout<<"address: "<<addr<<endl<<endl;
    }
   ~Student1( ) { }                      //派生类析构函数
  private:                               //派生类的私有部分
   int age;                          
   string addr;                
 };
 
int main( )
 {Student1 stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");
  Student1 stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");
  stud1.show( );            //输出第一个学生的数据
  stud2.show( );            //输出第二个学生的数据
  return 0;
}

Ch11-6
#include <iostream>
#include <string>
using namespace std;
class Student                              //声明基类
 {public:                                  //公用部分
   Student(int n,string nam)              //基类构造函数
    {num=n;
     name=nam;
    }
   void display()                           //输出基类数据成员
    {cout<<"num:"<<num<<endl<<"name:"<<name<<endl;}
  protected:                                //保护部分
    int num;
    string name;
};

class Student1: public Student              //用public继承方式声明派生类student
 {public:
   Student1(int n,string nam,int n1,string nam1,int a,string ad)
      :Student(n,nam),monitor(n1,nam1)               //派生类构造函数
    {age=a;                                 //在此处只对派生类新增的数据成员初始化
     addr=ad;
    }
   void show( )
    {cout<<"This student is:"<<endl;
     display();                               //输出num和name
     cout<<"age: "<<age<<endl;
     cout<<"address: "<<addr<<endl<<endl;
    }
    
   void show_monitor()                        //输出子对象的数据成员
    {cout<<endl<<"Class monitor is:"<<endl;
     monitor.display();                       //调用基类成员函数
    }
   private:                                //派生类的私有数据
    Student monitor;                       //定义子对象(班长)
    int age;
    string addr;                
  };
 
int main( )
 {Student1 stud1(10010,"Wang-li",10001,"Li-sun",19,"115 Beijing Road,Shanghai");
  stud1.show( );                             //输出第一个学生的数据
  stud1.show_monitor();                       //输出子对象的数据
  return 0;
 }

Ch11-7
#include <iostream>
#include<string>
using namespace std;
class Student                              //声明基类
 {public:                                  //公用部分
   Student(int n, string nam )            //基类构造函数
    {num=n;
     name=nam;
    }
   void display()                           //输出基类数据成员
    {cout<<"num:"<<num<<endl;
     cout<<"name:"<<name<<endl;
    }
  protected:                                //保护部分
    int num;                                //基类有两个数据成员
    string name;
};

class Student1: public Student               //声明公用派生类Student1
 {public:
   Student1(int n,char nam[10],int a):Student(n,nam)        //派生类构造函数
    {age=a; }                         //在此处只对派生类新增的数据成员初始化
   void show( )                               //输出num,name和age 
    {display();                               //输出num和name
     cout<<"age: "<<age<<endl;
    }
   private:                                   //派生类的私有数据
    int age;                                  //增加一个数据成员
  };

class Student2:public Student1               //声明间接公用派生类student2
 {public:
   //下面是间接派生类构造函数
   Student2(int n, string nam,int a,int s):Student1(n,nam,a)
    {score=s;}
   void show_all()                              //输出全部数据成员
    {show();                                    //输出num和name 
     cout<<"score:"<<score<<endl;               //输出age
    }
  private:
   int score;                                   //增加一个数据成员
 };
 
int main( )
 {Student2 stud(10010,"Li",17,89);
  stud.show_all( );                            //输出学生的全部数据
return 0;
 }

Ch11-8
#include <iostream>
#include <string>
using namespace std;
class Teacher                              //声明Teacher(教师)类
 {public:                                  //公用部分
   Teacher(string nam,int a,string t)      //构造函数
    {name=nam;
     age=a;
     title=t;}
   void display()                          //输出教师有关数据
     {cout<<"name:"<<name<<endl;
      cout<<"age"<<age<<endl;
      cout<<"title:"<<title<<endl;
     }
  protected:                               //保护部分
    string name;
    int age;
    string title;                          //职称
};

class Student                              //声明类Student(学生)
 {public:
   Student(string nam,char s,float sco)
     {name1=nam;
      sex=s;
      score=sco;}                         //构造函数
   void display1()                        //输出学生有关数据
    {cout<<"name:"<<name1<<endl;
     cout<<"sex:"<<sex<<endl;
     cout<<"score:"<<score<<endl;
    }
  protected:                               //保护部分
   string name1;
   char sex;
   float score;                            //成绩
 };

class Graduate:public Teacher,public Student   //声明多重继承的派生类Graduate
 {public:
   Graduate(string nam,int a,char s,string t,float sco,float w):
        Teacher(nam,a,t),Student(nam,s,sco),wage(w) {}
   void show( )                                 //输出人员的有关数据
    {cout<<"name:"<<name<<endl;
     cout<<"age:"<<age<<endl;
     cout<<"sex:"<<sex<<endl;
     cout<<"score:"<<score<<endl;
     cout<<"title:"<<title<<endl;
     cout<<"wages:"<<wage<<endl;
     }
  private:
    float wage;                     //工资
 };
 
int main( )
 {Graduate grad1("Wang-li",24,'f',"assistant",89.5,1234.5);
  grad1.show( );
  return 0;
}

Ch11-9
#include <iostream>
#include <string>
using namespace std;
//定义公共基类Person
class Person                              
{public:
  Person(char *nam,char s,int a)            //构造函数     
   {strcpy(name,nam);sex=s;age=a;}
 protected:                                 //保护成员
   char name[20];
   char sex;
   int age;
};
//定义类Teacher
class Teacher:virtual public Person                //声明Person为公用继承的虚基类
 {public:                                 
   Teacher(char *nam,char s,int a,char *t):Person(nam,s,a)       //构造函数
    {strcpy(title,t); 
    }
  protected:                                       //保护成员
    char title[10];                                //职称
};
//定义类Student
class Student:virtual public Person               //声明Person为公用继承的虚基类
 {public:
   Student(char *nam,char s,int a,float sco):    //构造函数
      Person(nam,s,a),score(sco){}               //初始化表
  protected:                                     //保护成员
    float score;                                 //成绩
 };
//定义多重继承的派生类Graduate
class Graduate:public Teacher,public Student     //声明Teacher和Student类为公用继承的直接基类
 {public:
   Graduate(char *nam,char s,int a,char *t,float sco,float w):                  //构造函数
       Person(nam,s,a),Teacher(nam,s,a,t),Student(nam,s,a,sco),wage(w){}       //初始化表
    void show( )                                 //输出研究生的有关数据
    {cout<<"name:"<<name<<endl;
     cout<<"age:"<<age<<endl;
     cout<<"sex:"<<sex<<endl;
     cout<<"score:"<<score<<endl;
     cout<<"title:"<<title<<endl;
     cout<<"wages:"<<wage<<endl;
     }
  private:
    float wage;                     //工资
 };
 
int main( )
 {Graduate grad1("Wang-li",'f',24,"assistant",89.5,1234.5);
  grad1.show( );
  return 0;
}

第十二章

Ch12-1-1(vc)
#include <iostream.h>
//using namespace std;
//声明类Point
class Point
{public:
  Point(float=0,float=0);
  void setPoint(float,float);
  float getX() const {return x;}
  float getY() const {return y;}
  friend ostream & operator<<(ostream &,const Point &);
protected:
  float x,y;
};
//定义Point类的成员函数
//Point的构造函数
Point::Point(float a,float b)
{x=a;y=b;}
//设置x和y的坐标值
void Point::setPoint(float a,float b)
{x=a;y=b;}
//输出点的坐标
ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;
 return output;
}
int main()
{Point p(3.5,6.4);
 cout<<"x="<<p.getX()<<",y="<<p.getY()<<endl;
 p.setPoint(8.5,6.8);
 cout<<"p(new):"<<p<<endl;
 return 0;
}

Ch12-1-1
#include <iostream>
using namespace std;
//声明类Point
class Point
{public:
  Point(float=0,float=0);
  void setPoint(float,float);
  float getX() const {return x;}
  float getY() const {return y;}
  friend ostream & operator<<(ostream &,const Point &);
protected:
  float x,y;
};
//定义Point类的成员函数
//Point的构造函数
Point::Point(float a,float b)
{x=a;y=b;}
//设置x和y的坐标值
void Point::setPoint(float a,float b)
{x=a;y=b;}
//输出点的坐标
ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;
 return output;
}
int main()
{Point p(3.5,6.4);
 cout<<"x="<<p.getX()<<",y="<<p.getY()<<endl;
 p.setPoint(8.5,6.8);
 cout<<"p(new):"<<p<<endl;
 return 0;
}

Ch12-1-2(vc)
#include <iostream.h>
//using namespace std;
//声明类Point
class Point
{public:
  Point(float=0,float=0);
  void setPoint(float,float);
  float getX() const {return x;}
  float getY() const {return y;}
  friend ostream & operator<<(ostream &,const Point &);
protected:
  float x,y;
};
//定义Point类的成员函数
//Point的构造函数
Point::Point(float a,float b)
{x=a;y=b;}
//设置x和y的坐标值
void Point::setPoint(float a,float b)
{x=a;y=b;}
//输出点的坐标
ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;
 return output;
}

class Circle:public Point
{public:
  Circle(float x=0,float y=0,float r=0);
  void setRadius(float);
  float getRadius() const;
  float area () const;
  friend ostream &operator<<(ostream &,const Circle &);
 private:
  float radius;
};

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::setRadius(float r)
{radius=r;}

float Circle::getRadius() const {return radius;}

float Circle::area() const
{return 3.14159*radius*radius;}

ostream &operator<<(ostream &output,const Circle &c)
{output<<"Center=["<<c.x<<","<<c.y<<"], Radius="<<c.radius<<", area="<<c.area()<<endl;
 return output;
}

int main()
{Circle c(3.5,6.4,5.2);
 cout<<"original circle:\nx="<<c.getX()<<", y="<<c.getY()<<", r="<<c.getRadius()
     <<", area="<<c.area()<<endl;
 c.setRadius(7.5);
 c.setPoint(5,5);
 cout<<"new circle:\n"<<c;
 Point &pRef=c;
 cout<<"pRef:"<<pRef;
 return 0;
}

Ch12-1-2
#include <iostream>
using namespace std;
//声明类Point
class Point
{public:
  Point(float=0,float=0);
  void setPoint(float,float);
  float getX() const {return x;}
  float getY() const {return y;}
  friend ostream & operator<<(ostream &,const Point &);
protected:
  float x,y;
};
//定义Point类的成员函数
//Point的构造函数
Point::Point(float a,float b)
{x=a;y=b;}
//设置x和y的坐标值
void Point::setPoint(float a,float b)
{x=a;y=b;}
//输出点的坐标
ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;
 return output;
}

class Circle:public Point
{public:
  Circle(float x=0,float y=0,float r=0);
  void setRadius(float);
  float getRadius() const;
  float area () const;
  friend ostream &operator<<(ostream &,const Circle &);
 private:
  float radius;
};

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::setRadius(float r)
{radius=r;}

float Circle::getRadius() const {return radius;}

float Circle::area() const
{return 3.14159*radius*radius;}

ostream &operator<<(ostream &output,const Circle &c)
{output<<"Center=["<<c.x<<","<<c.y<<"], Radius="<<c.radius<<", area="<<c.area()<<endl;
 return output;
}

int main()
{Circle c(3.5,6.4,5.2);
 cout<<"original circle:\nx="<<c.getX()<<", y="<<c.getY()<<", r="<<c.getRadius()
     <<", area="<<c.area()<<endl;
 c.setRadius(7.5);
 c.setPoint(5,5);
 cout<<"new circle:\n"<<c;
 Point &pRef=c;
 cout<<"pRef:"<<pRef;
 return 0;
}

Ch12-1-3(vc)
#include <iostream.h>
class Point
{public:
  Point(float=0,float=0);
  void setPoint(float,float);
  float getX() const {return x;}
  float getY() const {return y;}
  friend ostream & operator<<(ostream &,const Point &);
protected:
  float x,y;
};

Point::Point(float a,float b)
{x=a;y=b;}
void Point::setPoint(float a,float b)
{x=a;y=b;}
ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;
 return output;
}

class Circle:public Point
{public:
  Circle(float x=0,float y=0,float r=0);
  void setRadius(float);
  float getRadius() const;
  float area () const;
  friend ostream &operator<<(ostream &,const Circle &);
 protected:
  float radius;
};

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::setRadius(float r)
{radius=r;}

float Circle::getRadius() const {return radius;}

float Circle::area() const
{return 3.14159*radius*radius;}

ostream &operator<<(ostream &output,const Circle &c)
{output<<"Center=["<<c.x<<","<<c.y<<"], r="<<c.radius<<", area="<<c.area()<<endl;
 return output;
}

class Cylinder:public Circle
{public:
  Cylinder (float x=0,float y=0,float r=0,float h=0);
  void setHeight(float);
  float getHeight() const;
  float area() const;
  float volume() const;
  friend ostream& operator<<(ostream&,const Cylinder&);
 protected:
  float height;
};

Cylinder::Cylinder(float a,float b,float r,float h)
    :Circle(a,b,r),height(h){}

void Cylinder::setHeight(float h){height=h;}

float Cylinder::getHeight() const {return height;}

float Cylinder::area() const
{ return 2*Circle::area()+2*3.14159*radius*height;}

float Cylinder::volume() const
{return Circle::area()*height;}

ostream &operator<<(ostream &output,const Cylinder& cy)
{output<<"Center=["<<cy.x<<","<<cy.y<<"], r="<<cy.radius<<", h="<<cy.height
       <<"\narea="<<cy.area()<<", volume="<<cy.volume()<<endl;
 return output;
}

int main()
{Cylinder cy1(3.5,6.4,5.2,10);
 cout<<"\noriginal cylinder:\nx="<<cy1.getX()<<", y="<<cy1.getY()<<", r="
     <<cy1.getRadius()<<", h="<<cy1.getHeight()<<"\narea="<<cy1.area()
     <<", volume="<<cy1.volume()<<endl;
 cy1.setHeight(15);
 cy1.setRadius(7.5);
 cy1.setPoint(5,5);
 cout<<"\nnew cylinder:\n"<<cy1;
 Point &pRef=cy1;
 cout<<"\npRef as a point:"<<pRef;
 Circle &cRef=cy1;
 cout<<"\ncRef as a Circle:"<<cRef;
 return 0;
}

Ch12-1-3
#include <iostream>
using namespace std;
class Point
{public:
  Point(float=0,float=0);
  void setPoint(float,float);
  float getX() const {return x;}
  float getY() const {return y;}
  friend ostream & operator<<(ostream &,const Point &);
protected:
  float x,y;
};

Point::Point(float a,float b)
{x=a;y=b;}
void Point::setPoint(float a,float b)
{x=a;y=b;}
ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;
 return output;
}

class Circle:public Point
{public:
  Circle(float x=0,float y=0,float r=0);
  void setRadius(float);
  float getRadius() const;
  float area () const;
  friend ostream &operator<<(ostream &,const Circle &);
 protected:
  float radius;
};

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::setRadius(float r)
{radius=r;}

float Circle::getRadius() const {return radius;}

float Circle::area() const
{return 3.14159*radius*radius;}

ostream &operator<<(ostream &output,const Circle &c)
{output<<"Center=["<<c.x<<","<<c.y<<"], r="<<c.radius<<", area="<<c.area()<<endl;
 return output;
}

class Cylinder:public Circle
{public:
  Cylinder (float x=0,float y=0,float r=0,float h=0);
  void setHeight(float);
  float getHeight() const;
  float area() const;
  float volume() const;
  friend ostream& operator<<(ostream&,const Cylinder&);
 protected:
  float height;
};

Cylinder::Cylinder(float a,float b,float r,float h)
    :Circle(a,b,r),height(h){}

void Cylinder::setHeight(float h){height=h;}

float Cylinder::getHeight() const {return height;}

float Cylinder::area() const
{ return 2*Circle::area()+2*3.14159*radius*height;}

float Cylinder::volume() const
{return Circle::area()*height;}

ostream &operator<<(ostream &output,const Cylinder& cy)
{output<<"Center=["<<cy.x<<","<<cy.y<<"], r="<<cy.radius<<", h="<<cy.height
       <<"\narea="<<cy.area()<<", volume="<<cy.volume()<<endl;
 return output;
}

int main()
{Cylinder cy1(3.5,6.4,5.2,10);
 cout<<"\noriginal cylinder:\nx="<<cy1.getX()<<", y="<<cy1.getY()<<", r="
     <<cy1.getRadius()<<", h="<<cy1.getHeight()<<"\narea="<<cy1.area()
     <<", volume="<<cy1.volume()<<endl;
 cy1.setHeight(15);
 cy1.setRadius(7.5);
 cy1.setPoint(5,5);
 cout<<"\nnew cylinder:\n"<<cy1;
 Point &pRef=cy1;
 cout<<"\npRef as a point:"<<pRef;
 Circle &cRef=cy1;
 cout<<"\ncRef as a Circle:"<<cRef;
 return 0;
}

Ch12-2
#include <iostream>
#include <string>
using namespace std;
class Student
 {public:
   Student(int,string,float);
   void display();
  protected:
   int num;
   string name;
   float score;
 };

Student::Student(int n,string nam,float s)
 {num=n;name=nam;score=s;}

void Student::display()
 {cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\n\n";}
 
class Graduate:public Student
 {public:
   Graduate(int,string,float,float);
   void display();
  private:
   float pay;
};

void Graduate::display()
 {cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\npay="<<pay<<endl;}

Graduate::Graduate(int n,string nam,float s,float p):Student(n,nam,s),pay(p){}

int main()
 {Student stud1(1001,"Li",87.5);
  Graduate grad1(2001,"Wang",98.5,563.5);
  Student *pt=&stud1;
  pt->display();
  pt=&grad1;
  pt->display();
  return 0;
 }

Ch12-2-2
#include <iostream>
#include <string>
using namespace std;
class Student
 {public:
   Student(int,string,float);
   virtual void display();
  protected:
   int num;
   string name;
   float score;
 };

Student::Student(int n,string nam,float s)
 {num=n;name=nam;score=s;}

void Student::display()
 {cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\n\n";}
 
class Graduate:public Student
 {public:
   Graduate(int,string,float,float);
   void display();
 private:
  float pay;
};

void Graduate::display()
 {cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\npay="<<pay<<endl;}

Graduate::Graduate(int n,string nam,float s,float p):Student(n,nam,s),pay(p){}

int main()
 {Student stud1(1001,"Li",87.5);
  Graduate grad1(2001,"Wang",98.5,1200);
  Student *pt=&stud1;
  pt->display();
  pt=&grad1;
  pt->display();
  return 0;
 }

Ch12-3
#include <iostream>
using namespace std;
class Point
{public:
  Point(){}
  ~Point(){cout<<"executing Point destructor"<<endl;}
};

class Circle:public Point
{public:
  Circle(){}
  ~Circle(){cout<<"executing Circle destructor"<<endl;}
 private:
  int radus;
};

int main()
{Point *p=new Circle;
 delete p;
 return 0;
}

Ch12-3-2
#include <iostream>
using namespace std;
class Point
{public:
  Point(){}
  virtual ~Point(){cout<<"executing Point destructor"<<endl;}
};

class Circle:public Point
{public:
  Circle(){}
  ~Circle(){cout<<"executing Circle destructor"<<endl;}
 private:
  int radus;
};

void main()
{Point *p=new Circle;
 delete p;
}

Ch12-4(vc)

#include <iostream.h>
//声明抽象基类Shape
class Shape
{public:
 virtual float area() const {return 0.0;}        //虚函数
 virtual float volume() const {return 0.0;}      //虚函数
 virtual void shapeName() const =0;              //纯虚函数
};

//声明Point类
class Point:public Shape                         //Point是Shape的公用派生类
{public:
  Point(float=0,float=0);
  void setPoint(float,float);
  float getX() const {return x;}
  float getY() const {return y;}
  virtual void shapeName() const {cout<<"Point:";}  //对纯虚函数进行定义
  friend ostream & operator<<(ostream &,const Point &);
protected:
  float x,y;
};

Point::Point(float a,float b)
{x=a;y=b;}

void Point::setPoint(float a,float b)
{x=a;y=b;}

ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]";
 return output;
}

//声明Circle类
class Circle:public Point
{public:
  Circle(float x=0,float y=0,float r=0);
  void setRadius(float);
  float getRadius() const;
  virtual float area() const;
  virtual void shapeName() const {cout<<"Circle:";}         //对纯虚函数进行再定义
  friend ostream &operator<<(ostream &,const Circle &);
 protected:
  float radius;
};

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::setRadius(float r)
{radius=r;}

float Circle::getRadius() const {return radius;}

float Circle::area() const
{return 3.14159*radius*radius;}

ostream &operator<<(ostream &output,const Circle &c)
{output<<"["<<c.x<<","<<c.y<<"], r="<<c.radius;
 return output;
}

//声明Cylinder类
class Cylinder:public Circle
{public:
  Cylinder (float x=0,float y=0,float r=0,float h=0);
  void setHeight(float);
  float getHeight() const;
  virtual float area() const;
  virtual float volume() const;
  virtual void shapeName() const {cout<<"Cylinder:";}         //对纯虚函数进行再定义
  friend ostream& operator<<(ostream&,const Cylinder&);
 protected:
  float height;
};

Cylinder::Cylinder(float a,float b,float r,float h)
    :Circle(a,b,r),height(h){}

void Cylinder::setHeight(float h){height=h;}

float Cylinder::getHeight() const {return height;}

float Cylinder::area() const
{ return 2*Circle::area()+2*3.14159*radius*height;}

float Cylinder::volume() const
{return Circle::area()*height;}

ostream &operator<<(ostream &output,const Cylinder& cy)
{output<<"["<<cy.x<<","<<cy.y<<"], r="<<cy.radius<<", h="<<cy.height;
 return output;
}

int main()
{Point point(3.2,4.5);                           //建立Point类对象point
 Circle circle(2.4,12,5.6);                      //建立Circle类对象circle
 Cylinder cylinder(3.5,6.4,5.2,10.5);            //建立Cylinder类对象cylinder

 point.shapeName();                              //静态关联
 cout<<point<<endl;
 
 circle.shapeName();                             //静态关联
 cout<<circle<<endl;

 cylinder.shapeName();                           //静态关联
 cout<<cylinder<<endl<<endl;

 Shape *pt;                                      //定义基类指针

 pt=&point;                                      //指针指向Point类对象
 pt->shapeName();                                //动态关联
 cout<<"x="<<point.getX()<<",y="<<point.getY()<<"\narea="<<pt->area()
     <<"\nvolume="<<pt->volume()<<"\n\n";

 pt=&circle;                                     //指针指向Circle类对象
 pt->shapeName();                                //动态关联
 cout<<"x="<<circle.getX()<<",y="<<circle.getY()<<"\narea="<<pt->area()
     <<"\nvolume="<<pt->volume()<<"\n\n";

 pt=&cylinder;                                   //指针指向Cylinder类对象
 pt->shapeName();                                //动态关联
 cout<<"x="<<cylinder.getX()<<",y="<<cylinder.getY()<<"\narea="<<pt->area()
     <<"\nvolume="<<pt->volume()<<"\n\n";
 return 0;
}

Ch12-4
#include <iostream>
using namespace std;
//声明抽象基类Shape
class Shape
{public:
 virtual float area() const {return 0.0;}        //虚函数
 virtual float volume() const {return 0.0;}      //虚函数
 virtual void shapeName() const =0;              //纯虚函数
};

//声明Point类
class Point:public Shape                         //Point是Shape的公用派生类
{public:
  Point(float=0,float=0);
  void setPoint(float,float);
  float getX() const {return x;}
  float getY() const {return y;}
  virtual void shapeName() const {cout<<"Point:";}  //对纯虚函数进行定义
  friend ostream & operator<<(ostream &,const Point &);
protected:
  float x,y;
};

Point::Point(float a,float b)
{x=a;y=b;}

void Point::setPoint(float a,float b)
{x=a;y=b;}

ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]";
 return output;
}

//声明Circle类
class Circle:public Point
{public:
  Circle(float x=0,float y=0,float r=0);
  void setRadius(float);
  float getRadius() const;
  virtual float area() const;
  virtual void shapeName() const {cout<<"Circle:";}         //对纯虚函数进行再定义
  friend ostream &operator<<(ostream &,const Circle &);
 protected:
  float radius;
};

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::setRadius(float r)
{radius=r;}

float Circle::getRadius() const {return radius;}

float Circle::area() const
{return 3.14159*radius*radius;}

ostream &operator<<(ostream &output,const Circle &c)
{output<<"["<<c.x<<","<<c.y<<"], r="<<c.radius;
 return output;
}

//声明Cylinder类
class Cylinder:public Circle
{public:
  Cylinder (float x=0,float y=0,float r=0,float h=0);
  void setHeight(float);
  float getHeight() const;
  virtual float area() const;
  virtual float volume() const;
  virtual void shapeName() const {cout<<"Cylinder:";}         //对纯虚函数进行再定义
  friend ostream& operator<<(ostream&,const Cylinder&);
 protected:
  float height;
};

Cylinder::Cylinder(float a,float b,float r,float h)
    :Circle(a,b,r),height(h){}

void Cylinder::setHeight(float h){height=h;}

float Cylinder::getHeight() const {return height;}

float Cylinder::area() const
{ return 2*Circle::area()+2*3.14159*radius*height;}

float Cylinder::volume() const
{return Circle::area()*height;}

ostream &operator<<(ostream &output,const Cylinder& cy)
{output<<"["<<cy.x<<","<<cy.y<<"], r="<<cy.radius<<", h="<<cy.height;
 return output;
}

int main()
{Point point(3.2,4.5);                           //建立Point类对象point
 Circle circle(2.4,12,5.6);                      //建立Circle类对象circle
 Cylinder cylinder(3.5,6.4,5.2,10.5);            //建立Cylinder类对象cylinder

 point.shapeName();                              //静态关联
 cout<<point<<endl;
 
 circle.shapeName();                             //静态关联
 cout<<circle<<endl;

 cylinder.shapeName();                           //静态关联
 cout<<cylinder<<endl<<endl;

 Shape *pt;                                      //定义基类指针

 pt=&point;                                      //指针指向Point类对象
 pt->shapeName();                                //动态关联
 cout<<"x="<<point.getX()<<",y="<<point.getY()<<"\narea="<<pt->area()
     <<"\nvolume="<<pt->volume()<<"\n\n";

 pt=&circle;                                     //指针指向Circle类对象
 pt->shapeName();                                //动态关联
 cout<<"x="<<circle.getX()<<",y="<<circle.getY()<<"\narea="<<pt->area()
     <<"\nvolume="<<pt->volume()<<"\n\n";

 pt=&cylinder;                                   //指针指向Cylinder类对象
 pt->shapeName();                                //动态关联
 cout<<"x="<<cylinder.getX()<<",y="<<cylinder.getY()<<"\narea="<<pt->area()
     <<"\nvolume="<<pt->volume()<<"\n\n";
 return 0;
}

第十三章

Ch13-1
#include <iostream>
#include <math.h>
using namespace std;
int main()
{float a,b,c,disc;
 cout<<"please input a,b,c:";
 cin>>a>>b>>c;
 if (a==0)
  cerr<<"a is equal to zero,error!"<<endl;
 else
  if ((disc=b*b-4*a*c)<0)
   cerr<<"disc=b*b-4*a*c<0"<<endl;
  else
   {cout<<"x1="<<(-b+sqrt(disc))/(2*a)<<endl;
    cout<<"x2="<<(-b-sqrt(disc))/(2*a)<<endl;
   }
 return 0;
}

Ch13-2
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{int a;
 cout<<"input a:";
 cin>>a;
 cout<<"dec:"<<dec<<a<<endl;
 cout<<"hex:"<<hex<<a<<endl;
 cout<<"oct:"<<setbase(8)<<a<<endl;
 char *pt="China";
 cout<<setw(10)<<pt<<endl;
 cout<<setfill('*')<<setw(10)<<pt<<endl;
 double pi=22.0/7.0;
 cout<<setiosflags(ios::scientific)<<setprecision(8);
 cout<<"pi="<<pi<<endl;
 cout<<"pi="<<setprecision(4)<<pi<<endl;
 cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl;
 return 0;
}

Ch13-3
#include <iostream>
using namespace std;
int main()
{int a=21;
 cout.setf(ios::showbase);
 cout<<"dec:"<<a<<endl;
 cout.unsetf(ios::dec);
 cout.setf(ios::hex);
 cout<<"hex:"<<a<<endl;
 cout.unsetf(ios::hex);
 cout.setf(ios::oct);
 cout<<"oct:"<<a<<endl;
 char *pt="China";
 cout.width(10);
 cout<<pt<<endl;
 cout.width(10);
 cout.fill('*');
 cout<<pt<<endl;
 double pi=22.0/7.0;
 cout.setf(ios::scientific);
 cout<<"pi=";
 cout.width(14);
 cout<<pi<<endl;
 cout.unsetf(ios::scientific);
 cout.setf(ios::fixed);
 cout.width(12);
 cout.setf(ios::showpos);
 cout.setf(ios::internal);
 cout.precision(6);
 cout<<pi<<endl;
 return 0;
}

Ch13-4
#include <iostream>
using namespace std;
int main()
{char *a="BASIC";
 for(int i=4;i>=0;i--)
  cout.put(*(a+i));
 cout.put('\n');
 return 0;
}

Ch13-4-2
#include <iostream>
int main()
{char *a="BASIC";
 for(int i=4;i>=0;i--)
  putchar(*(a+i));
 putchar('\n');
 return 0;
}

Ch13-5
#include <iostream>
using namespace std;
int main()
{float grade;
 cout<<"enter grade:";
 while(cin>>grade)
  {if(grade>=85) cout<<grade<<" GOOD!"<<endl;
   if(grade<60) cout<<grade<<" fail!"<<endl;
   cout<<"enter grade:";
  }
 cout<<"The end."<<endl;
 return 0;
}

Ch13-6
#include <iostream>
using namespace std;
int main()
{char c;
 cout<<"enter a sentence:"<<endl;
 while((c=cin.get())!=EOF)
  cout.put(c);
 return 0;
}

Ch13-6-2
#include <iostream>
using namespace std;
int main()
{char c;
 cout<<"enter a sentence:"<<endl;
 while(cin.get(c))
  {cout.put(c);
  }
 cout<<"end"<<endl;
 return 0;
}

Ch13-6-3
#include <iostream>
using namespace std;
int main()
{char ch[20];
 cout<<"enter a sentence:"<<endl;
 cin.get(ch,10,'\n');
 cout<<ch<<endl;
 return 0;
}

Ch13-7
#include <iostream>
using namespace std;
int main()
{char ch[20];
 cout<<"enter a sentence:"<<endl;
 cin>>ch;
 cout<<"The string read with cin is:"<<ch<<endl;
 cin.getline(ch,20,'/');
 cout<<"The second part is:"<<ch<<endl;
 cin.getline(ch,20);
 cout<<"The third part is:"<<ch<<endl;
 return 0;
}

Ch13-8
#include <iostream>
using namespace std;
int main()
{char c;
 while(!cin.eof())
  if((c=cin.get())!=' ')
     cout.put(c);
 return 0;
}

Ch13-9
#include <iostream>
using namespace std;
int main()
{char c[20];
 int ch;
 cout<<"please enter a sentence."<<endl;
 cin.getline(c,15,'/');
 cout<<"The first part is:"<<c<<endl;
 ch=cin.peek();
 cout<<"The next character(ASCII code) is:"<<ch<<endl;
 cin.putback(c[0]);
 cin.getline(c,15,'/');
 cout<<"The second part is:"<<c<<endl;
 return 0;
}

Ch13-10
#include <iostream>
using namespace std;
int main()
{char ch[20];
 cin.get(ch,20,'/');
 cout<<"The first part is:"<<ch<<endl;
 cin.get(ch,20,'/');
 cout<<"The second part is:"<<ch<<endl;
 return 0;
}

Ch13-10-2
#include <iostream>
using namespace std;
int main()
{char ch[20];
 cin.get(ch,20,'/');
 cout<<"The first part is:"<<ch<<endl;
 cin.ignore();
 cin.get(ch,20,'/');
 cout<<"The second part is:"<<ch<<endl;
 return 0;
}

Ch13-11
#include <fstream>
using namespace std;
int main()
{int a[10];
 ofstream outfile("f1.dat");
 if(!outfile)
  {cerr<<"open error!"<<endl;
   exit(1);
  }
 cout<<"enter 10 integer numbers:"<<endl;
 for(int i=0;i<10;i++)
  {cin>>a[i];
   outfile<<a[i]<<" ";}
 outfile.close();
 return 0;
}

Ch13-12
#include <fstream>
using namespace std;
int main()
{int a[10],max,i,order;
 ifstream infile("f1.dat",ios::in); 
 if(!infile)
  {cerr<<"open error!"<<endl;
   exit(1);
  }
 for(i=0;i<10;i++)
   {infile>>a[i];
    cout<<a[i]<<" ";}
 cout<<endl;
 max=a[0];
 order=0;
 for(i=1;i<10;i++)
   if(a[i]>max)
     {max=a[i];
      order=i;
     }
 cout<<"max="<<max<<endl<<"order="<<order<<endl;
 infile.close();
 return 0;
}

Ch13-13
#include <fstream>
using namespace std;
void save_to_file()
{ofstream outfile("f2.dat");
 if(!outfile)
  {cerr<<"open f2.dat error!"<<endl;
   exit(1);
  }
 char c[80];
 cin.getline(c,80);
 for(int i=0;c[i];i++)
  if(c[i]>=65 && c[i]<=90||c[i]>=97 && c[i]<=122)
    {outfile.put(c[i]);
     cout<<c[i];}
 cout<<endl;
 outfile.close();
}

void get_from_file()
{char ch;
 ifstream infile("f2.dat",ios::in);
 if(!infile)
  {cerr<<"open f2.dat error!"<<endl;
   exit(1);
  }
 ofstream outfile("f3.dat");
 if(!outfile)
  {cerr<<"open f3.dat error!"<<endl;
   exit(1);
  }
 while(infile.get(ch))
  {if(ch>=97 && ch<=122)
     ch=ch-32;
   outfile.put(ch);
   cout<<ch;
  }
 cout<<endl;
 infile.close();
 outfile.close();
}
int main()
{save_to_file();
 get_from_file();
 return 0;
}

Ch13-13-2
#include <fstream>
using namespace std;
void display_file(char *filename)
{ifstream infile(filename,ios::in);
 if(!infile)
  {cerr<<"open error!"<<endl;
   exit(1);}
 char ch;
 while(infile.get(ch))
   cout.put(ch);
 cout<<endl;
 infile.close();
}
int main()
{display_file("f3.dat");
 return 0;
}

Ch13-14
#include <fstream>
using namespace std;
struct student
{char name[20];
 int num;
 int age;
 char sex;
};
int main()
{student stud[3]={"Li",1001,18,'f',"Fun",1002,19,'m',"Wang",1004,17,'f'};
 ofstream outfile("stud.dat",ios::binary);
 if(!outfile)
  {cerr<<"open error!"<<endl;
   abort();
  }
 for(int i=0;i<3;i++)
   outfile.write((char *)&stud[i],sizeof(stud[i]));
  outfile.close();
 return 0;
}

Ch13-14-2
#include <fstream>
using namespace std;
struct student
{char name[20];
 int num;
 int age;
 char sex;
};
int main()
{student stud[3]={"Li",1001,18,'f',"Fun",1002,19,'m',"Wang",1004,17,'f'};
 ofstream outfile("stud.dat",ios::binary);
 if(!outfile)
  {cerr<<"open error!"<<endl;
   abort();
  }
  outfile.write((char *)&stud[0],sizeof(stud));
  outfile.close();
  return 0;
}

Ch13-15
#include <fstream>
using namespace std;
struct student
{char name[20];
 int num;
 int age;
 char sex;
 };
int main()
{student stud[3];
 int i;
 ifstream infile("stud.dat",ios::binary);
 if(!infile)
  {cerr<<"open error!"<<endl;
   abort();
  }
  for(i=0;i<3;i++)
   infile.read((char*)&stud[i],sizeof(stud[i]));
  infile.close();
  for(i=0;i<3;i++)
   {cout<<"NO."<<i+1<<endl;
    cout<<"name:"<<stud[i].name<<endl;
    cout<<"num:"<<stud[i].num<<endl;;
    cout<<"age:"<<stud[i].age<<endl;
    cout<<"sex:"<<stud[i].sex<<endl<<endl;
   }
   return 0;
  }

Ch13-16
#include <fstream>
using namespace std;
struct student
{int num;
 char name[20];
 float score;
};
int main()
{int i;
 student stud[5]={1001,"Li",85,1002,"Fun",97.5,1004,"Wang",54,
                  1006,"Tan",76.5,1010,"ling",96};
 fstream iofile("stud.dat",ios::in|ios::out|ios::binary);
 if(!iofile)
  {cerr<<"open error!"<<endl;
   abort();
  }
 for(i=0;i<5;i++)
   iofile.write((char *)&stud[i],sizeof(stud[i]));
 student stud1[5];
 for(i=0;i<5;i=i+2)
   {iofile.seekg(i*sizeof(stud[i]),ios::beg);
    iofile.read((char *)&stud1[i/2],sizeof(stud1[i]));
    cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;
   }
 cout<<endl;
 stud[2].num=1012;
 strcpy(stud[2].name,"Wu");
 stud[2].score=60;
 iofile.seekp(2*sizeof(stud[0]),ios::beg);
 iofile.write((char *)&stud[2],sizeof(stud[2]));
 iofile.seekg(0,ios::beg);
 for(i=0;i<5;i++)
   {iofile.read((char *)&stud[i],sizeof(stud[i]));
    cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
   }
 iofile.close();
 return 0;
}

Ch13-17
#include <strstream>
#include <iostream>
using namespace std;
struct student
{int num;
 char name[20];
 float score;
};
int main()
{student stud[3]={1001,"Li",78,1002,"Wang",89.5,1004,"Fun",90};
 char c[50];
 ostrstream strout(c,30);
 for(int i=0;i<3;i++)
  strout<<stud[i].num<<stud[i].name<<stud[i].score;
 strout<<ends;
 cout<<"array c:"<<endl<<c<<endl;
 return 0;
}

Ch13-18
#include <strstream>
#include <iostream>
using namespace std;
int main()
{char c[50]="12 34 65 -23 -32 33 61 99 321 32";
 int a[10],i,j,t;
 cout<<"array c:"<<c<<endl;
 istrstream strin(c,sizeof(c));
 for(i=0;i<10;i++)
  strin>>a[i];
 cout<<"array a:";
 for(i=0;i<10;i++)
   cout<<a[i]<<" ";
 cout<<endl;
 for(i=0;i<9;i++)
   for(j=0;j<9-i;j++)
      if(a[j]>a[j+1])
        {t=a[j];a[j]=a[j+1];a[j+1]=t;}
 ostrstream strout(c,sizeof(c));
 for(i=0;i<10;i++)
   strout<<a[i]<<" ";
 strout<<ends;
 cout<<"array c:"<<c<<endl;
 return 0;
}

第十四章

Ch14-1-1
#include <iostream>
#include <cmath>
using namespace std;
int main()
{double triangle(double,double,double);
 double a,b,c;
 cin>>a>>b>>c;
   while(a>0 && b>0 && c>0)
    {cout<<triangle(a,b,c)<<endl;
     cin>>a>>b>>c;
    }
 return 0;
}
  
double triangle(double a,double b,double c)
{double area;
 double s=(a+b+c)/2;
 area=sqrt(s*(s-a)*(s-b)*(s-c));
 return area; 
}

Ch14-1-2
#include <iostream>
#include <cmath>
using namespace std;
int main()
{double triangle(double,double,double);
 double a,b,c;
 cin>>a>>b>>c;
 try
  {while(a>0 && b>0 && c>0)
    {cout<<triangle(a,b,c)<<endl;
     cin>>a>>b>>c;}
  }
 catch(double)
  {cout<<"a="<<a<<",b="<<b<<",c="<<c<<",that is not a traingle!"<<endl;}
 cout<<"end"<<endl;
 return 0;
}
  
double triangle(double a,double b,double c)
{double s=(a+b+c)/2;
 if (a+b<=c||b+c<=a||c+a<=b) throw a;
 return sqrt(s*(s-a)*(s-b)*(s-c));
}

Ch14-2-1
#include <iostream>
using namespace std;
int main()
{void f1();
 try
  {f1();}
 catch(double)
  {cout<<"OK0!"<<endl;}
 cout<<"end0"<<endl;
 return 0;
}
void f1()
{void f2();
 try
  {f2();}
 catch(char)
  {cout<<"OK1!";}
 cout<<"end1"<<endl;
}

void f2()
{void f3();
 try
 {f3();}
 catch(int)
 {cout<<"Ok2!"<<endl;}
 cout<<"end2"<<endl;
}
void f3()
{double a=0;
 try
  {throw a;}
 catch(float)
  {cout<<"OK3!"<<endl;}
 cout<<"end3"<<endl;
}

Ch14-2-2
#include <iostream>
using namespace std;
int main()
{void f1();
 try
  {f1();}
 catch(double)
  {cout<<"OK0!"<<endl;}
 cout<<"end0"<<endl;
 return 0;
}

void f1()
{void f2();
 try
  {f2();}
 catch(char)
  {cout<<"OK1!";}
 cout<<"end1"<<endl;
}

void f2()
{void f3();
 try
 {f3();}
 catch(int)
 {cout<<"Ok2!"<<endl;}
 cout<<"end2"<<endl;
}
void f3()
{double a=0;
 try
  {throw a;}
 catch(double)
  {cout<<"OK3!"<<endl;}
 cout<<"end3"<<endl;
}

Ch14-2-3
#include <iostream>
using namespace std;
int main()
{void f1();
 try
  {f1();}
 catch(double)
  {cout<<"OK0!"<<endl;}
 cout<<"end0"<<endl;
 return 0;
}

void f1()
{void f2();
 try
  {f2();}
 catch(char)
  {cout<<"OK1!";}
 cout<<"end1"<<endl;
}

void f2()
{void f3();
 try
 {f3();}
 catch(int)
 {cout<<"Ok2!"<<endl;}
 cout<<"end2"<<endl;
}
void f3()
{double a=0;
 try
  {throw a;}
 catch(double)
  {cout<<"OK3!"<<endl;throw;}
 cout<<"end3"<<endl;
}

Ch14-3
#include <iostream>
#include <string>
using namespace std;
class Student
 {public:
   Student(int n,string nam)
    {cout<<"construtot-"<<n<<endl;
     num=n;name=nam;}
   ~Student(){cout<<"destructor-"<<num<<endl;}
   void get_data();
  private:
   int num;
   string name;
 };
void Student::get_data()
 {if(num==0) throw num;
  else cout<<num<<" "<<name<<endl;
  cout<<"in get_data()"<<endl;
 }

void fun()
{Student stud1(1101,"tan");
 stud1.get_data();
 Student stud2(0,"Li");
 stud2.get_data();
}
int main()
{cout<<"main begin"<<endl;
 cout<<"call fun()"<<endl;
 try
  {fun();}
 catch(int n)
  {cout<<"num="<<n<<",error!"<<endl;}
 cout<<"main end"<<endl;
 return 0;
}

Ch14-4-1
#include <iostream>
using namespace std;
#include "header1.h"
int main()
 {Student stud1(101,"Wang",18);
  stud1.get_data();
  cout<<fun(5,3)<<endl;
  return 0;
 }

Ch14-4-2
#include <iostream>
using namespace std;
#include "header1.h"
#include "header2.h"
int main()
 {Student stud1(101,"Wang",18);
  stud1.get_data();
  cout<<fun(5,3)<<endl;
  return 0;
 }

Ch14-5
//main file
#include <iostream>
#include "header11.h"
#include "header22.h"
int main()
 {Ns1::Student stud1(101,"Wang",18);
  stud1.get_data();
  cout<<Ns1::fun(5,3)<<endl;
  Ns2::Student stud2(102,"Li",'f');
  stud2.get_data();
  cout<<Ns2::fun(5,3)<<endl;
  return 0;
 }

C++程序设计谭浩强例题和习题答案 习 题 说 明 在这部分中提供了由谭浩强编著的《C++程序设计(清华大学出版社出版)一书中各章的全部习题的参考解答。 为了帮助读者更好地理解程序,我们在有的程序中加了必要的注释。对有的题目,我们提供了几种不同的解法和程序,供读者比较分析。 习题解答程序按章设立文件夹(子目录),如文件夹xt1中包含的是第1章全部习题的解答程序程序的文件名以xt开头,与例题号一一对应,如xt7-3.cpp是第7章第3题的解答程序。对于给出了两种或多种解答程序的,在文件名中加了顺序号,如xt6-11-1.cpp是第6章第11题的第1种解答程序,xt6-11-2.cpp是第6章第11题的第2种解答程序。 我们提供的只是参考答案,并不一定是惟一正确的答案,甚至不一定是最好的答案,读者完全可以举一反三,编写出更好的程序。 这些程序只供读者参考,未经作者同意,请勿自行印刷或出版。 例 题 说 明 在这部分中提供了由谭浩强编著的《C++程序设计(清华大学出版社出版)一书中各章的例题程序,以方便教师进行教学,也便于读者上机运行这些程序以及在此基础上修改和调试程序程序按章设立文件夹(子目录),如文件夹c12中包含的是第12章全部例题程序程序的文件名以c开头,与例题号一一对应,如c5-7.cpp是第5章例5.7的程序。对于教材中同一例题中包含两个或多个程序的,在文件名中加了顺序号,如c10-4-1.cpp是例10.4的第1个程序,c10-4-2.cpp是例10.4的第2个程序教材中所有的程序都是符合C++标准规定的,在GCC中能通过,但有的程序在Visual C++ 6.0中通不过。如果在Visual C++ 6.0环境下运行程序,需要对程序作一些修改。例如,如果程序c10-4-1.cpp在Visual C++ 6.0环境下编译,第1行应改为“include <iostream.h>”,并将第2行“using namespace std;”取消即可顺利通过编译,其他类似。我们在教材例题程序中还提供了能在Visual C++ 6.0环境下运行的程序,在文件名中加了"(VC)"字样,如c10-4-2(VC) 表示它是对程序c10-4-2修改后能用于Visual C++ 6.0环境的程序
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小巫技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值