您的当前位置:首页江科大c++实践报告册

江科大c++实践报告册

来源:锐游网


江苏科技大学

课程实践报告

设计题目: 程序设计(VC++)实践 设计时间: 2014-9-1 至 2014-9-5

学 院: 计算机科学与工程学院 专业班级: 通信工程 学生姓名: 张伟 学号 ********** ****: * *

2014年 09月

}

试题一

一、程序设计基本题

试建立一个类SP,求f(n,k)=1k +2k+3k+…+nk ,另有辅助函数power(m,n)用于求mn 。 具体要求如下:

(1)私有成员函数。

 int n,k:存放公式中n和k的值;

(2)公有成员函数。

 SP(int n1,int k1):构造函数,初始化成员数据n和k。  int power(int m,int n):求mn 。  int fun( ):求公式的累加和。  void show( ):输出求得的结果。

(3)在主程序中定义对象s,对该类进行测试。

二、系统设计

1、概要设计

通过类SP的成员函数power()求出m的n次方的值,再通过成员函数fun( )调用power( )函数求出f(n,k)的值。

2、详细设计

①类的定义如下: class SP {

int n,k; public:

SP(int n1,int k1){} int power(int m,int n){} int fun ( ){} void show( ) };

②类的主要成员函数的设计 int power(int m,int n) {

int p=1; //用for循环语句来实现求mn的值 for(int i=1;iint fun(int n,int k) {

s=0; //用for循环语句来实现公式的累加和

for(int j=1;j<=n;j++) s+=power(j,k); return s; }

三、系统测试

在主函数中初始化SP的对象s,并调用其成员函数show( )输出测试结果。 主函数定义如下: void main( ) {

int n,k; cin>>n>>k; SP s(n,k); s.power(n,k); s.fun(n,k); s.show( ); }

用以测试的数据为: 2 3

预期的输出结果为:

9

四、实践小结

这道题值得注意的是在成员函数fun( )中调用了函数power( ),还有对for循环语句的熟练运用。

五、源程序清单

#include class SP {

int n,k,s; public:

SP(int n1,int k1){ n=n1; k=k1;}

int power(int m,int n){ int p=1; for(int i=1;iint fun(int n,int k){ s=0; for(int j=1;j<=n;j++)

s+=power(j,k); return s; }

void show() { cout<<\"和为\"<void main() {

int n,k; cin>>n>>k; SP s(n,k); s.power(n,k); s.fun(n,k); s.show(); }

试题二

一、程序设计基本题

建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。 具体要求如下: (1)私有成员函数

 int *array:一维整型数组。  int n:数组中元素的个数。

(2)公有成员函数

 MOVE(int b[ ],int m):构造函数,初始化成员数据。  void exchange():输出平均值,并将数组中的元素按要求重新放

置。

 void print():输出一维数组。  ~MOVE:析构函数。

(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对 该类进行测试。

二、系统设计

1、概要设计

根据数组中元素的个数开辟一个动态数组空间array,通过类MOVE的成员函数exchange()输出一维数组的平均值,并把数组中最大元素和最小元素的位置相互交换,并把新的数组放在开辟的动态数组空间中。程序结束前释放为array分配的动态空间。

2、详细设计

①类的定义如下: class MOVE {

int *array; int n; public:

MOVE(int b[ ],int m){} void exchange( ){} void print( ){} ~MOVE( ){} };

②类的主要成员函数的设计 void exchange() {

float p,s=0;

for(int i=0;ip=s/n; //求数组中所有元素之和的平均值 int a,b,min=array[0],max=array[0]; cout<<\"平均值:\"<if(max} //求所有元素中的最大值 for(i=0;iarray[i]) { min=array[i]; b=i; }

} //求所有元素中的最小值 array[a]=min; array[b]=max; }

三、系统测试

在主函数中初始化MOVE的对象move,并调用其成员函数exchange( )和print( )输出测试结果。

主函数定义如下:

void main( ) {

int s[ ]={21,65,43,87,12,84,44,97,32,55}; MOVE move(s,10); move.exchange( ); move.print( ); }

用以测试的数据为:

21 65 43 87 12 84 44 97 32 55 预期的输出结果为: 平均值:54

21 65 43 87 97 84 44 12 32 55

四、实践小结

这道题主要是求数组中所有元素的平均值以及元素中的最大值和最小值,同时还要注意析构函数的运用。

五、源程序清单

#include class MOVE {

int *array; int n; public:

MOVE(int b[],int m) { n=m; array=new int[n]; for(int i=0;ivoid exchange() { float p,s=0; for(int i=0;iint a,b,min=array[0],max=array[0]; cout<<\"平均值:\"<if(maxa=i; } } for(i=0;iarray[i]) { min=array[i]; b=i; } }

array[a]=min; array[b]=max; }

void print() { for(int i=0;i~MOVE() { if(array)delete[]array; } };

void main() {

int s[]={21,65,43,87,12,84,44,97,32,55}; MOVE move(s,10); move.exchange(); move.print(); }

试题三

一、程序设计基本题

定义一个字符串类String,实现判断该字符串是否为回文字符串。所谓回文 字符串,是指该字符串左右对称。例如字符串“123321”是回文字符串。 具体要求如下: (1)私有成员函数

 char*str;

 int y:标记是否为回文字符串。

(2)公有成员函数

 String(char*s):构造函数,用给定的参数s初始化数据成员str。

Y初始化为0。  void huiwen():判断str所指向的字符串是否为回文字符串。  void show():在屏幕上显示字符串。

(3)在主程序中定义字符串char s[]=“ababcedbaba”作为原始字符串。定 义一个String类对象test,用s初始化test,完成对该类的测试。

二、系统设计

1、概要设计

通过回文函数来进行判断,然后将函数判断结果进行输出。 2、详细设计

①类的定义如下: class String {

char *str; int b; public:

String(char *s){} void huiwen( ){} void show( ){} ~String( ){} };

②类的主要成员函数的设计 void huiwen() {

char *p1=str,*p2=str; while(*p2)p2++;p2--;

for(;p1三、系统测试

在主程序中定义字符串char s[]=“ababcedbaba”作为原始字符串。定义一个String类对象test,用s初始化test,并调用其成员函数huiwen( )和show( )。

void main( ) {

char *s=\"ababcedbaba\"; String test(s); test.huiwen( ); test.show( ); }

用以测试的字符串为: ababcedbaba

预期的输出结果为:

ababcedbaba不是回文字符串

四、实践小结

这道题困难在于用指针来操作字符串,定义了两个指针,分别指向字符串的首尾,通过比较两个指针所指的字符是否相等来判断是否为回文字符串。相等则前一个指针自增,后一个自减。若不等则不是回文字符串。

五、源程序清单

#include #include class String {

char *str; int b; public:

String(char *s) { str=new char[strlen(s)+1]; strcpy(str,s); b=0; }

void huiwen() { char *p1=str,*p2=str; while(*p2)p2++;p2--; for(;p1void show() { if(b) cout<~String() { if(str)delete[]str;

} };

void main() {

char *s=\"ababcedbaba\"; String test(s); test.huiwen(); test.show(); }

试题四

一、程序设计基本题

建立一个类MOVE,实现将数组中大写字母元素放在小写字母元素的左边。 具体要求如下: (1)私有数据成员

● char*array:一维字符数组。 ● int n:数据中元素的个数。 (2)公有成员函数

● MOVE(char b[ ],int m) :构造函数,初始化成员数据。 ● void change( ):进行排序换位。 ● void print( ):输出一维数组。 ● ~MOVE( ):析构函数。

(3)在主程序中用数据“fdsUFfsTjfsKFEkWC”对该类进行测试。

二、系统设计

1、概要设计

为array开辟一个动态数组空间,通过类MOVE的成员函数change( )来实现将数组中的大写字母元素放在小写字母元素的左边的功能。程序结束前释放为array分配的动态空间。

2、详细设计 类的定义如下: class MOVE{ char *array; int n; public:

MOVE(char ,int ); void change( ); void print( ); ~MOVE( ); };

三、系统测试

在主函数中初始化类MOVE的对象,并调用其成员函数print()输出测试

结果。主函数定义如下:

void main( ) {

char*arr=\"fdsUFfsTjfsKFEkWC\";

MOVE test(arr,17); test.change( ); test.print( );

}

用以测试的数据为: FdsUFfsTjfsKFEkWC 预期输出结果为: UFTKFEWCfdsfsjfsk

四、实践小结

这道题和之前的一道题有点类似,

六、源程序清单

#include class MOVE {

char*array; int n; public:

MOVE(char b[],int m) { n=m; array=new char[n]; for(int i=0;ivoid change() { char a; for(int i=1;i='a'&&array[i-1]<='z') { a=array[i-1]; for(int j=i-1;jarray[n-1]=a; i--; } } }

void print() { for(int i=0;i~MOVE() { if(array)delete[]array; } };

void main() {

char*arr=\"fdsUFfsTjfsKFEkWC\"; MOVE test(arr,17); test.change(); test.print(); }

试题五

一、程序设计基本题

定义一个方阵类Array,实现对方阵进行顺时针90度旋转。如图所示:

1 2 3 4 13 9 5 1 5 6 7 8 14 10 6 2 9 10 11 12 15 11 7 3 13 14 15 16 16 12 8 4

具体要求如下:

(1)私有成员函数。

 int a[4][4]:用于存放方阵。

(2)公有成员函数。

 Array(int a1[][4],int n):构造函数,用给定的参数a1初始化数据

成员a。

 void xuanzhuan():实现对方阵a进行顺时针90度的旋转。  int fun( ):求公式的累加和。

 void show():在屏幕上显示数组元素。

(3)在主程序中定义数组int b[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}

作为原始数组。定义一个Array类对象test,用b初始化test,完成对该类的测试。在主程序中定义对象s,对该类进行测试。

二、系统设计

1、概要设计

旋 通过类的成员函数xuanzhuan( )来实现对方阵a进行顺时针90度的旋转,

转后再放入二维数组中。

2、详细设计

①类的定义如下: class Array {

int a[4][4]; public:

Array(int a1[ ][4],int n){} void xuanzhuan( ){} void show( ){} };

②类的主要成员函数的设计 void xuanzhuan( ) {

int b[4][4]; for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { b[i][j]=a[i][j]; } }

for(int x=0;x<4;x++) { for(int y=0;y<4;y++) a[x][y]=b[3-y][x]; } }

三、系统测试

在主程序中定义数组int b[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}作为原始数组。定义一个Array类对象test,用b初始化test,完成对该类的测试。在主程序中定义对象s,对该类进行测试

void main() {

int b[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

Array test(b,4); test.xuanzhuan( ); test.show( ); }

用以测试的数组为:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 预期的输出结果为:

13 9 5 1 14 10 6 2

15 11 7 3 16 12 8 4

四、实践小结

这道题可以举一反三,通过这道题的运算可以方便以后旋转类的基本设计。

五、源程序清单

#include class Array { int a[4][4]; public: Array(int a1[][4],int n) { for(int i=0;ifor(int i=0;i<4;i++) { for(int j=0;j<4;j++) { b[i][j]=a[i][j]; } } for(int x=0;x<4;x++) { for(int y=0;y<4;y++) a[x][y]=b[3-y][x]; }

} void show() { for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { cout<void main() { int b[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; Array test(b,4); test.xuanzhuan( ); test.show( ); }

试题六

一、程序设计基本题

36.建立一个类Intersection求两个整数集合的交集。

(1)私有数据成员

int set[20]:用数组空间set存储集合。 int len:表示该集合中元素的个数

(2)公有成员函数

Intersection(int *s,int l):用s初始化集合,用变量l初始化其长度。 Intersection( ):把set中各元素和长度初始化为0。

int f(int num):判断整数num是否属于集合,是返回1,否则返回0; Intersection operator&&(Intersection t):重载&&,求当前对象的集合和参

数对象t的集合的交集,方法是用对象t的集合中的每个元素作为参数调用f函数,若该元素属于当前对象的集合,则把它复制给交集。 void show():输出集合。

二、系统设计

1、概要设计

在主函数中对定义的类进行测试。定义数组s1:{1,3,4,5,7,8}、s2:{1,2,3,5,7,9,11},并用它们初始化类Intersection的对象obj1和obj2,然后调用相关的成员函数输出集合;定义对象obj3,并用obj1和obj2的与运算符结果(交集)初始化该对象,并输出交集。

2、详细设计 class Intersection{ private: int set[20]; int len; public:

Intersection() { for(int i=0;iIntersection() { for(int i=0;i<20;i++) set[i]=0; len=0; }

int f(int num) { for(int i=0;iIntersection operator&&(Intersection t) { Intersection turn; int i; for(i=0;ivoid show() { for(int i=0;i} };

三、系统测试

通过函数嵌套多次重复的对两数组进行挑选,将相同项挑选出。

void main() {

int s1[]={1,3,4,5,7,8},s2[]={1,2,3,5,7,9,11}; Intersection obj1(s1,6),obj2(s2,7); cout<<\"集合1:\"<四、实践小结

理解交集含义,并利用循环判断语句实现,并需掌握运算符重载的方式。

五、源程序清单

#include class Intersection{ private: int set[20]; int len; public:

Intersection(int*s,int l) { for(int i=0;iIntersection() { for(int i=0;i<20;i++) set[i]=0; len=0;

}

int f(int num) { for(int i=0;iIntersection operator&&(Intersection t) { Intersection turn; int i; for(i=0;ivoid show() { for(int i=0;ivoid main() {

int s1[]={1,3,4,5,7,8},s2[]={1,2,3,5,7,9,11}; Intersection obj1(s1,6),obj2(s2,7); cout<<\"集合1:\"<试题七

一、程序设计基本题

35.建立一个类Union求两个整数集合的并集。

(1)私有数据成员

int *set1,len1:用动态空间set1存储集合1,len1表示其元素的个数。 int *set2,len2:用动态空间set2存储集合2,len2表示其元素的个数。 int set[20],len:用数组空间set存储并集,len表示其元素的个数

(2)公有成员函数

Union(int *s1,int l1,int *s2,int l2):用变量s1和l1初始化集合1及其长度,

用变量s2和l2初始化集合2及其长度,并把并集的长度置为0;

int f(int num):判断整数num是否属于集合1,是返回1,否则返回0; void fun():求集合1和集合2的并集,方法是先把集合1中的所有元素复

制给并集,然后调用f函数把集合2中不属于集合1的元素复制给并集; void show():输出集合1、集合2和并集; ~Union():释放动态空间。

二、系统设计

1、概念设计

在主函数中对定义的类进行测试。定义数组s1:{1,2,3,4,5,6,7,8}、s2:{1,3,5,7,9,11},并用它们初始化类Union的对象obj,然后调用相关的成员函数,求并集,输出集合1、集合2和并集。

三、系统测试

void main() {

int s1[]={1,2,3,4,5,6,7,8},s2[]={1,3,5,7,9,11}; Union obj(s1,8,s2,6); obj.fun(); obj.show(); }

四、实践小结

应理解并集含义,并利用循环判断语句实现。

五、源程序清单

#include class Union{ private:

int*set1,len1; int*set2,len2; int set[20],len; public:

Union(int*s1,int l1,int*s2,int l2) {

set1=new int[l1]; int i; for(i=0;ivoid fun(); void show(); };

void Union::fun()//求集合1和集合2的并集; {

for(int i=0;ivoid Union::show() { cout<<\"集合1:\"<cout<void main() {

int s1[]={1,2,3,4,5,6,7,8},s2[]={1,3,5,7,9,11}; Union obj(s1,8,s2,6); obj.fun(); obj.show(); }

试题八

一、程序设计基本题

试建立一个类PP,求出下列多项式的前n项的值。

1 n=0

Pn(x) = x n=1 ((2n-1)xPn-1(x)-(n-1)P n-2 (x)) n>1 具体要求如下:

(1) 私有数据成员

 int n:前若干项的项数。  double x:存放x的值。  double *p:根据n的大小动态申请存放Pn(x)前n项的数组空间。 (2) 共有成员函数

 PP(int num,double x1):构造函数,初始化数据成员n和x,使

p指向动态申请的数据空间。

 ~PP( ):析构函数,释放p指向的动态内存空间。

 double fun(int n1,double x):递归函数,用于求多项式Pn(x)的

第n1项。注意:将递归公式中的n用作函数参数。本函数供process函数调用。  void process( ):完成求前n项的工作,并将它们存放发到p指向

的动态数组中。

 void show( ):输出n和x,并将前n项以每行4个数的形式输出

到屏幕上。

(3) 在主函数中完成对该类的测试。先输入num和x1,并定义一个PP

类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,并输出多项式前num项的值。

二、系统设计

1、概要设计

其中用fun( ) 通过类PP的成员函数process( )来求多项式Pn(x)的前n项的值,

函数来求第n项的值,根据n的大小来给数据成员p分配动态空间,程序结束前释放为items分配的动态空间。

2、详细设计

①类的定义如下: class PP {

int n; double x; double *p; public:

PP(int num,double x1){} void process( ){} void show( ){} };

②类的主要成员函数的设计

double fun(int n1,double x) { if(n1==0) return 1; else if(n1==1)return x; return ((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1; }

三、系统测试

先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,并输出多项式前num项的值。

void main() {

int num; double x1; cin>>num>>x1; PP items(num,x1); items.fun(num,x1); items.process(); items.show(); }

用以测试的数据为: 3 4

预期的输出结果为: n=3 x=4

1 4 23.5 154

四、实践小结

这道题主要是把题目看懂,其实只是一些简单的函数定义而已。

008

五、源程序清单

#include class PP { int n; double x; double *p; public: PP(int num,double x1){ n=num; x=x1; p=new double[n+1];} ~PP(){if(p)delete[]p;} double fun(int n1,double x) { if(n1==0)return 1; else if(n1==1)return x; return ((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1; } void process() { for(int i=0;ivoid main() { int num; double x1; cin>>num>>x1; PP items(num,x1); items.fun(num,x1); items.process();

}

items.show();

因篇幅问题不能全部显示,请点此查看更多更全内容

Top