江苏科技大学课程实践报告设计题目: 程序设计(VC++)实践设计时间: 2014-9-1 至2014-9-5学院: 计算机科学与工程学院专业班级: 通信工程学生姓名: 张伟学号********** ****: **2014年09月}试题一一、程序设计基本题试建立一个类SP,求f(n,k)=1k +2k+3k+…+n k ,另有辅助函数power(m,n)用于求m n 。
具体要求如下:(1)私有成员函数。
●int n,k:存放公式中n和k的值;(2)公有成员函数。
●SP(int n1,int k1):构造函数,初始化成员数据n和k。
●int power(int m,int n):求m n 。
●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循环语句来实现求m n的值for(int i=1;i<n+1;i++)p=p*m;return p;}int 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<iostream.h>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;i<n+1;i++)p=p*m;return p;}int fun(int n,int k){s=0;for(int j=1;j<=n;j++)s+=power(j,k);return s;}void show(){cout<<"和为"<<s<<endl;}};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;i<n;i++)s+=array[i];p=s/n; //求数组中所有元素之和的平均值int a,b,min=array[0],max=array[0];cout<<"平均值:"<<p<<'\n';for(i=0;i<n;i++){if(max<array[i]){max=array[i];a=i;}} //求所有元素中的最大值for(i=0;i<n;i++){if(min>array[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( );}用以测试的数据为:2165 43 87 12 84 44 97 32 55预期的输出结果为:平均值:542165 43 87 97 84 44 12 32 55四、实践小结这道题主要是求数组中所有元素的平均值以及元素中的最大值和最小值,同时还要注意析构函数的运用。
五、源程序清单#include<iostream.h>class MOVE{int *array;int n;public:MOVE(int b[],int m){n=m;array=new int[n];for(int i=0;i<n;i++)array[i]=b[i];}void exchange(){float p,s=0;for(int i=0;i<n;i++)s+=array[i];p=s/n;int a,b,min=array[0],max=array[0];cout<<"平均值:"<<p<<'\n';for(i=0;i<n;i++){if(max<array[i]){max=array[i];a=i;}}for(i=0;i<n;i++){if(min>array[i]){min=array[i];b=i;}}array[a]=min;array[b]=max;}void print(){for(int i=0;i<n;i++)cout<<array[i]<<'\t';cout<<'\n';}~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<p2;p1++,p2--)if(*p1!=*p2){b=1;break;}}三、系统测试在主程序中定义字符串char s[]=“ababcedbaba”作为原始字符串。
定义一个String类对象test,用s初始化test,并调用其成员函数huiwen( )和show( )。
void main( ){char *s="ababcedbaba";String test(s);test.huiwen( );test.show( );}用以测试的字符串为:ababcedbaba预期的输出结果为:ababcedbaba不是回文字符串四、实践小结这道题困难在于用指针来操作字符串,定义了两个指针,分别指向字符串的首尾,通过比较两个指针所指的字符是否相等来判断是否为回文字符串。
相等则前一个指针自增,后一个自减。
若不等则不是回文字符串。
五、源程序清单#include<iostream.h>#include<string.h>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(;p1<p2;p1++,p2--)if(*p1!=*p2){b=1;break;}}void show(){if(b)cout<<str<<"不是回文字符串"<<'\n';else cout<<str<<"是回文字符串"<<'\n';}~String(){if(str)delete[]str;}};void main(){char *s="ababcedbaba";String test(s);test.huiwen();test.show();}试题四一、程序设计基本题建立一个类MOVE,实现将数组中大写字母元素放在小写字母元素的左边。