江苏科技大学课程实践报告设计题目:计算机程序设计实践(c++)设计时间:至学院:专业班级:学生姓名:学号指导老师:2015年12月实践任务一(基本题第二题)1.实践任务试建立一个类SP,求f(n,k)=1^k +2^k+3^k+……+n^k ,另有辅助函数power(m,n)用于求m^n。
2.系统设计1)概要设计通过类SP的成员函数power()求出m的n次方的值,再通过成员函数fun( )调用power( )函数求出f(n,k)的值。
2)详细设计类的描述与定义class SP{int n,k;//私有成员,n对应底数,k对应指数public:SP(int n1,int k1)//构造函数{n=n1;k=k1;}int power(int c,int d);//求c^dint fun();//求f(n,k)void show();//输出结果};主要成员函数int power(int c,int d){int add=1;for(int i=1;i<d+1;i++) add*=c;return add;}int fun(){int r=0;for(int i=1;i<n+1;i++)r+=power(i,k);//循环加调用power()求f(n,k)return r;}void show(){//调用fun()输出结果cout<<"f("<<n<<','<<k<<")=";for(int i=1;i<n+1;i++){cout<<i<<'^'<<k;if(i!=n) cout<<'+';}cout<<'='<<fun()<<endl;}3.系统测试用以测试的数据为:f1(1,1),f2(3,4),f3(9,9)预期的输出结果为:1 98 5743049854.实践小结简单的类和循环的运用5.原程序清单#include<iostream.h>class SP{int n,k;public:SP(int n1,int k1){n=n1;k=k1;}int power(int c,int d){int add=1;for(int i=1;i<d+1;i++) add*=c;return add;}int fun(){int r=0;for(int i=1;i<n+1;i++) r+=power(i,k);return r;}void show(){cout<<"f("<<n<<','<<k<<")=";for(int i=1;i<n+1;i++){cout<<i<<'^'<<k;if(i!=n) cout<<'+';}cout<<'='<<fun()<<endl;}};void main(){SP f1(1,1),f2(3,4),f3(9,9);f1.show();f2.show();f3.show();}实践任务二(基本题二十题)1.实践任务 90゜旋转,如图2.系统设计1)概要设计通过类Array 的成员函数xuanzhuan ()求出方阵的旋转结果,并通过函数show ()输出结果2)详细设计类的描述与定义class Array{int a[4][4];//私有成员,矩阵爸爸public:Array(int a1[][4],int n)//构造函数,简单的双重循环赋值私有成员 {for(int i=0;i<4;i++)for(int j=0;j<4;j++)a[i][j]=a1[i][j];}void xuanzhuan();//实现旋转void show();//实现输出};主要成员函数void xuanzhuan(){//旋转过程int b[4][4];for(int j=0;j<4;j++)// 通过独立的二维数组保存改变的数组 for(int i=0;i<4;i++) b[3-j][i]=a[i][j];1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13for(int m=0;m<4;m++)// 重新改变原数组for(int n=0;n<4;n++) a[m][n]=b[m][n];}void show(){//循环输出结果for(int i=0;i<4;i++){for(int j=0;j<4;j++)cout<<a[i][j]<<'\t';cout<<endl;}}3.系统测试用以测试的数据为:1 2 3 45 6 7 89 10 11 121314 15 16预期的输出结果为:4 8 12 163 7 11 152 6 10 141 5 9 134.实践小结当二维数组为类的成员时,构造处理过程,和旋转的数学逻辑过程,规律的发现和实现5.原程序清单#include<iostream.h>class Array{int a[4][4];public:Array(int a1[][4],int n){for(int i=0;i<4;i++) for(int j=0;j<4;j++)a[i][j]=a1[i][j];}void xuanzhuan(){int b[4][4];for(int j=0;j<4;j++) for(int i=0;i<4;i++)b[3-j][i]=a[i][j];for(int m=0;m<4;m++) for(int n=0;n<4;n++)a[m][n]=b[m][n];}void show(){for(int i=0;i<4;i++){for(int j=0;j<4;j++)cout<<a[i][j]<<'\t';cout<<endl;}}};void main(){int b[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};Array m(b,4);m.show();m.xuanzhuan();cout<<endl;m.show();}实践任务三(提高题第十题)1.实践任务设计一个程序通过虚函数求长方形的面积和长方体的表面积2.系统设计1)概要设计通过类Rectangle的构造函数初始化长宽,再构造虚函数fun()求面积和show()输出结果。
然后再派生类Cuboid表示长方体再动态联编虚函数fun()求面积和show()输出结果。
并在主函数中用基类的指针调用函数实现函数功能类的结构简单的单线继承类Rectangle=>类Cuboid2)详细设计类的描述与定义基类Rectangle有三个保护成员,定义如下:class Rectangle{protected:int l,w;//长宽int s;//面积public://成员函数};派生类Cuboid有一个保护成员,定义如下:class Cuboid{int h;//高public://成员函数};主要成员函数设计基类Rectangle的构造函数定义如下:Rectangle(int x,int y){l=x;w=y;}基类Rectangle的成员函数定义如下:virtual void fun(){s=l*w;}virtual void show(){cout<<"长方形的长为"<<l<<','<<"宽为"<<w<<','<<"表面积为"<<s<<endl;}派生类Cuboid的构造函数定义如下:Cuboid(int x,int y,int z):Rectangle(x,y){h=z;}派生类Cuboid的成员函数定义如下:void fun(){s=2*l*w+2*w*h+2*l*h;}void show(){cout<<"长方体的长为"<<l<<','<<"宽为"<<w<<','<<"高为"<<l<<','<<"表面积为"<<s<<endl;}3.系统测试分别对两个类进行测试,但是派生类Cuboid的测试需要基类指针的调用。
用以测试的数据为:Rectangle a1(2,3),*p;Cuboid b1(2,3,4);预期的输出结果为:长方形的长为2,宽为3,表面积为6长方体的长为2,宽为3,高为4,表面积为964.实践小结类的继承与多态性的简单使用,虚函数是类中被声明为virtual的非静态成员函数。
学会动态联编在主函数中的使用,有一定的理解难度,但是数学概念很简单,面积的运算。
需要扎实的基础知识5.原程序清单#include<iostream.h>class Rectangle{protected:int l,w;int s;public:Rectangle(int x,int y){l=x;w=y;}virtual void fun(){s=l*w;}virtual void show(){cout<<"长方形的长为"<<l<<','<<"宽为"<<w<<','<<"表面积为"<<s<<endl;}};class Cuboid:public Rectangle{int h;public:Cuboid(int x,int y,int z):Rectangle(x,y){h=z;}void fun(){s=2*l*w+2*w*h+2*l*h;}void show(){cout<<"长方体的长为"<<l<<','<<"宽为"<<w<<','<<"高为"<<l<<','<<"表面积为"<<s<<endl;}};void main (){Rectangle a1(2,3),*p;Cuboid b1(2,3,4);a1.fun();a1.show();p=&b1;p->fun();p->show();}实践任务四(提高题十一题)1.实践任务设计一个程序,查询2000年1年1月(星期六)后的某天是星期几2.系统设计1)概要设计首先定义两个函数 leap (int year)判断是否为闰年,判断输入的日期是否合法,创建一个类date保存日期,定义一个派生类判断星期,输出结果解决问题。