资源描述
一、函数的定义与调用
(1)分别用冒泡法(升序)、选择法(降序)、擂台法(升序)编写三个对一维数组进行排序的函数,函数名为sort1()、sort2()、sort3()。再定义一个输出数组元素值的函数print()。在主函数中定义一维整型数组a[N](N=10),用键盘输入10个整数给a[N]数组。依次调用sort1()、print()、sort2()、print()、sort3()、print(),进行升序、降序、升序的操作,并输出每次排序后的结果。
输入十个实验数据:10,25,90,80,70,35,65,40,55,5
(2)编写一个函数px(float x,int n)用递归的方法求下列级数前n项的和s。
在主函数中定义变量x与n,用键盘输入x与n的值,调用px()函数计算并返回级数前n项和s。最后输出s的值。
输入实验数据:x=1.2 n=10
解答参考
(1)
#include <iostream.h>
#include <iomanip.h>
#define N 10
void print(int a[])
{ int i;
for(i=0;i<N;i++)
cout<<setw(5)<<a[i];
cout<<endl;
}
void sort1( int a[] )
{ int i,j,temp;
for(i=0;i<N-1;i++)
for(j=0;j<=N-1-i;j++)
if (a[j]>a[j+1])
{ temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
void sort2( int a[] )
{ int i,j,temp;
for(i=0;i<N-1;i++)
for(j=i+1; j<N;j++)
if (a[i]<a[j])
{ temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
void sort3( int a[] )
{
int i,j,k,temp;
for(i=0;i<N-1;i++)
{ k=i;
for(j=i+1; j<N;j++)
if (a[k]>a[j]) k=j;
if (k>i)
{ temp=a[i]; a[i]=a[k]; a[k]=temp;}
}
}
void main(void)
{
int i;
int b[10];
cout<<"请输入10个数:"<<endl;
for(i=0;i<10;i++)
cin>>b[i];
sort1(b);
cout<<"输出排好序的10个数:"<<endl;
print(b);
sort2(b);
cout<<"输出排好序的10个数:"<<endl;
print(b);
sort3(b);
cout<<"输出排好序的10个数:"<<endl;
print(b);
}
程序运行结果:
请输入10个数:
2 6 9 11 5 61 25 32 22 14 19
输出排好序的10个数:
2 5 6 9 10 11 14 22 25 32
输出排好序的10个数:
32 25 22 14 11 10 9 6 5 2
输出排好序的10个数:
2 5 6 9 10 11 14 22 25 32
(2)
①递归公式为:
x ; n=1
px(n)=
px(n-1)+(-1)n-1xn ; n>1
②递归结束条件: n=1
③递归约束条件: n>1
# include <iostream.h>
# include <math.h>
void main(void)
{ float x;
int n;
float px(float,int);
cout<<"please input x,n:";
cin>>x>>n;
cout<<"px="<<px(x,n)<<endl;
}
float px(float x,int n)
{ float p;
if (n==1)
p=x;
else
p=px(x,n-1)-pow(-1,n)*pow(x,n);
return p;
}
程序运行结果:
please input x,n:2 4
px=-10
二、类与对象的定义与使用
(1)定义一个复数类plex,复数的实部Real与虚部Image定义为私有数据成员。用复数类定义复数对象c1、c2、c3,用默认构造函数将c1初始化为c1=20+40i ,将c2初始化为c2=0+0i,用拷贝构造函数将c3初始化为c3=20+40i。用公有成员函数Dispaly()显示复数c1、c2与c3 的内容。
(2)定义一个学生成绩类Score,描述学生成绩的私有数据成员为学号(No)、姓名(Name[8])、数学(Math)、物理(Phi)、数据结构(Data)、平均分(ave)。定义能输入学生成绩的公有成员函数Write(),能计算学生平均分的公有成员函数Average(),能显示学生成绩的公有成员函数Display()。在主函数中用Score类定义学生成绩对象数组s[3]。用Write()输入学生成绩,用Average()计算每个学生的平均分,最后用Display()显示每个学生的成绩。
实验数据:
No Name Math Phi Data Ave
1001 Zhou 80 70 60
1002 Chen 90 80 85
1003 Wang 70 75 89
(3)定义一个矩形类Rectangle,矩形的左上角(Left,Top)与右下角坐标(Right,Bottom)定义为保护数据成员。用公有成员函数Diagonal()计算出矩形对角线的长度,公有成员函数Show()显示矩形左上角与右下角坐标及对角线长度。在主函数中用new运算符动态建立矩形对象r1,初值为(10,10,20,20)。然后调用Show()显示矩形左上角与右下角坐标及对角线长度。最后用delete运算符回收为矩形动态分配的存储空间。
解答参考
(1)
# include <iostream.h>
class plex
{ private:
float Real,Image;
public:
plex(float r,float i) //定义有参构造函数
{ Real=r;
Image=i;
}
plex(plex &c) //定义拷贝构造函数
{ Real=c.Real;
Image=c.Image;
}
plex() //定义无参构造函数
{ Real=0;
Image=0;
}
void Display()
{ cout<<Real<<"+"<<Image<<"i"<<'\n';}
} ;
void main(void)
{ plex c1(10,20),c2,c3(c1);
c1.Display();
c2.Display();
c3.Display();
}
程序运行结果:
10+20i
0+0i
10+20i
(2)
# include <iostream.h>
# include <string.h>
class Score
{ private:
int No;
char Name[8];
float Math,Phi,Data,Ave;
public:
void Write(int no,char name[],float math,float phi,float data)
{ No=no;
strcpy(Name,name);
Math=math;
Phi=phi;
Data=data;
}
void Average(void)
{ Ave=(Math+Phi+Data)/3;}
void Display()
{ cout<<No<<'\t'<<Name<<'\t'<<Math<<'\t';
cout<<Phi<<'\t'<<Data<<'\t'<<Ave<<'\n';
}
};
void main(void)
{ int i,no;
char name[8];
float math,phi,data;
Score s[3];
cout<<"Input 3 student data"<<'\n';
for (i=0;i<3;i++)
{
cin>>no>>name>>math>>phi>>data;
s[i].Write(no,name,math,phi,data);
s[i].Average();
}
cout<<"学号 姓名 数学 物理 数据结构 平均分\n";
for (i=0;i<3;i++)
s[i].Display();
}
程序运行结果:
Input 3 student data
1001 Zhou 80 70 60
1002 Chen 90 80 85
1003 Wang 70 75 89
学号 姓名 数学 物理 数据结构 平均分
1001 Zhou 80 70 60 70
1002 Chen 90 80 85 85
1003 Wang 70 75 89 78
(3)
# include <iostream.h>
# include <math.h>
class Rectangle
{ protected:
float Left,Top;
float Right,Bottom;
public:
Rectangle(float l,float t, float r,float b)
{ Left=l;Top=t;
Right=r;Bottom=b;
}
Rectangle(Rectangle & R)
{ Left=0;Top=0;
Right=R.Right;Bottom=R.Bottom;
}
double Diagonal()
{ return sqrt((Left-Right)* (Left-Right)+(Top-Bottom)*(Top-Bottom));}
void Show()
{ cout<<"(Left,Top)=("<<Left<<","<<Top<<")"<<'\n';
cout<<"(Right,Bottom)=("<<Right<<","<<Bottom<<")"<<'\n';
cout<<" Diagonal="<< Diagonal()<<'\n';
}
} ;
void main(void)
{ Rectangle *r1=new Rectangle(10,10,20,20);
r1->Show();
delete r1;
}
程序运行结果:
(Left,Top)=(10,10)
(Right,Bottom)=(20,20)
Diagonal=14.1421
三、类的继承
(1)定义描述职工档案的类Archives,私有数据成员为职工号(No)、姓名(Name[8])、性别(Sex)、年龄(Age)。成员函数有:构造函数、显示职工信息的函数Show()。再由职工档案类派生出职工工资类Laborage,在职工工资类Laborage中新增数据成员:应发工资(SSalary)、社保金(Security)、实发工资(Fsalary),其成员函数有:构造函数,计算实发工资的函数Count(),计算公式为:实发工资=应发工资-社保金。显示职工档案及工资的函数Display()。在主函数中用Laborage类定义职工对象lab,并赋初始值(1001,”Cheng”,’M’,21,2000,100),然后显示职工档案与工资。
(2)定义描述矩形的类Rectangle,其数据成员为矩形的中心坐标(X,Y)、长(Length)与宽(Width)。成员函数为计算矩形面积的函数Area()与构造函数。再定义描述圆的类Circle,其数据成员为圆的中心坐标(X,Y)与半径R,其成员函数为构造函数。再由矩形类与圆类多重派生出长方体类Cuboid,其数据成员为长方体的高(High)与体积(Volume)。成员函数为:构造函数,计算体积的函数Vol(),显示矩形坐标(X,Y)、长方体的长、宽、高与体积的函数Show()。主函数中用长方体类定义长方体对象cub,并赋初始值(10,10,10,20,30,30,10,10),最后显示长方体的矩形坐标(X,Y)与长方体的长、宽、高与体积。
(3)定义个人信息类Person,其数据成员有姓名、性别、出生年月。并以Person为基类定义一个学生的派生类Student,增加描述学生的信息:班级、学号、专业、英语成绩和数学成绩。再由基类Person定义一个职工的派生类Employee,增加描述职工的信息:部门、职务、工资。编写程序实现学生与职工信息的输入与输出。
解答参考
(1)
# include <iostream.h>
# include <string.h>
class Archives
{ private:
int No;
char Name[8];
char Sex;
int Age;
public:
Archives(int n,char name[],char s,int a)
{ No=n;
strcpy(Name,name);
Sex=s;
Age=a;
}
void Show(void)
{ cout<<"No="<<No<<'\t'<<"Name="<<Name<<'\t'
<<"Sex="<<Sex<<'\t'<<"Age="<<Age<<'\n';
}
};
class Laborage:public Archives
{ private:
float SSalary,Security,Fsalary;
public:
Laborage(int n,char name[],char s,int a,float ss,float se):
Archives(n,name,s,a)
{ SSalary=ss;
Security=se;
}
void Count()
{
Fsalary=SSalary-Security;
}
void Display(void)
{ Show();
cout<<"SSalary="<<SSalary<<'\t'<<"Security="<<Security
<<'\t'<<"Fsalary="<<Fsalary<<'\n';
}
};
void main(void)
{ Laborage lab(1001,"Zhou",'M',52,2000,200);
lab.Count();
lab.Display();
}
程序运行结果:
No=1001 Name=Zhou Sex=M Age=52
SSalary=2000 Security=200 Fsalary=1800
(2)
# include <iostream.h>
# define PI 3.14159
class Rectangle //定义一个长方体类
{ protected:
float Length,Width;
float Centerx,Centery;
public:
Rectangle(float l,float w,float x,float y)
{ Length=l;
Width=w;
Centerx=x;
Centery=y;
}
float Area(void)
{ return Length*Width;}
};
class Circle //定义一个圆形类
{ protected:
float radius;
float Centerx,Centery;
public:
Circle(float r,float x,float y)
{ radius=r;
Centerx=x;
Centery=y;
}
double Area(void)
{ return radius*radius*PI;}
};
class Cuboid:public Rectangle,public Circle //由基类Rectangle、Circle派生出类Cuboid
{ private:
float High;
double RVolume,CVolume;
public:
Cuboid(float l,float w,float x1,float y1,float r,float x2,float y2,float h):Rectangle(l,w,x1,y1),Circle(r,x2,y2)
{ High=h;}
void Vol(void) //分别计算长方体和圆柱体的体积
{ RVolume=Rectangle::Area()*High;
CVolume=Circle::Area()*High;
}
void Show(void) //分别显示长方体和圆柱体的信息
{ cout<<"Length="<<Length<<'\t'<<"Width="<<Width<<'\t'
<<"High="<<High<<'\n';
cout<<"Rectangle Center coordinate = "<<Rectangle::Centerx<<','
<<Rectangle::Centery<<'\n';
Vol();
cout<<"Cuboid Volume="<<RVolume<<'\n';
cout<<"Radius="<<radius<<'\t'<<"High="<<High<<'\n';
cout<<"Circle Center coordinate = "<<Circle::Centerx<<','
<<Circle::Centery<<'\n';
cout<<"Cylinder Volume="<<CVolume<<'\n';
}
};
void main (void)
{ Cuboid cub(10,10,10,20,30,30,10,10);
cub.Show();
}
程序运行结果:
Length=10 Width=10 High=10
Rectangle Center coordinate = 10,20
Rectangle Volume=1000
Radius=30 High=10
Circle Center coordinate = 30,10
Circle Volume=28274.3
(3)
# include <iostream.h>
# include <string.h>
class Person
{ private:
char Name[8];
char Sex;
char Birth[10];
public:
Person()
{}
Person(char name[],char sex,char birth[])
{ strcpy(Name,name);
Sex=sex;
strcpy(Birth,birth);
}
void Show()
{ cout<<Name<<'\t'<<Sex<<'\t';
cout<<Birth<<'\t';
}
};
class Student:public Person
{ private:
char Sclass[10];
int No;
char Major[10];
float Eng,Math;
public:
Student():Person()
{}
Student(char name[],char sex,char birth[],char sclass[],int no,char major[],float eng,float math):Person(name,sex,birth)
{ strcpy(Sclass,sclass);
No=no;
strcpy(Major,major);
Eng=eng;
Math=math;
}
void Print()
{ Person::Show();
cout<<Sclass<<'\t'<<No<<'\t';
cout<<Major<<'\t'<<Eng<<'\t'<<Math<<endl;
}
};
class Employee :public Person
{ private:
char Department[10];
char Title[10];
float Salary;
public:
Employee():Person()
{}
Employee(char name[],char sex,char birth[],char department[10],char title[10],
float salary) : Person(name,sex,birth)
{ strcpy(Department,department);
strcpy(Title,title);
Salary=salary;
}
void Print()
{ Person::Show();
cout<<Department<<'\t';
cout<<Title<<'\t'<<Salary<<endl;
}
};
void main(void)
{ int no;
char name[8],sex,birth[10],major[10],class1[10],depa[10],title[10];
float eng,math,salary;
Student *s;
Employee *e;
cout<<"Input a student data"<<'\n';
cin>>name>>sex>>birth>>class1>>no>>major>>eng>>math;
s=new Student(name,sex,birth,class1,no,major,eng,math);
cout<<"The student information:\n";
s->Print();
cout<<"Input an employee data"<<'\n';
cin>>name>>sex>>birth>>depa>>title>>salary;
e=new Employee(name,sex,birth,depa,title,salary);
cout<<"The employee information:\n";
e->Print();
}
展开阅读全文