******大学
课程实践报告
设计题目:计算机程序设计实践(VC++)
设计时间:20##-03-01至 20##-03-07
学 院:******工程学院
专业班级:******
学生名字:*** 学号: ******
指导老师:***
2010 年 3 月
一、实践任务
建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组边。
具体要求如下:
(1) 私有数据成员
● float array[20]:一维整型数组。
● int n:数组中元素的个数。
(2) 公有成员函数
● MOVE(float [],int m):构造数组,初始化成员数据。
● void average():输出平均值,并将数组中的元素按要求重新放置。
● void print():输出一维数组。
二、系统测试
系统测试主要通过主函数中定义的对象来完成。
主函数定义如下:
void main(){
float b[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3};
MOVE Test(b,9);
Test.average();
Test.print();
cout<<endl;
}
三、实践小结
1、 对类的整体的格式要掌握;
2、 指针的应用。
四、源程序清单
#include<iostream.h>
class MOVE{
float array[20];
int n;
public:
MOVE(float b[],int m);
void average();
void print();
};
MOVE ::MOVE(float b[],int m){
for (int i=0;i<m;i++)
array[i]=b[i];
n=m;
}
void MOVE::average(){
float s=0.0;
float t;
float *p;
int i,j=0,x;
x=n;
p=new float [n+1];
for(i=0;i<n;i++)
s+=array[i];
t=s/n;
cout<<"一维数组的平均值为:"<<t<<endl;
for(i=0;i<n;i++){
if(array[i]<t) p[j++]=array[i];
else
p[--x]=array[i];
}
for(i=0;i<n;i++)
array[i]=p[i];
delete []p;
}
void MOVE::print(){
for (int i=0;i<n;i++)
cout<<array[i]<<'\t';
}
void main(){
float b[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3};
MOVE Test(b,9);
Test.average();
Test.print();
cout<<endl;
}
一、实践任务
建立一个类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}对该类进行测试。
二、系统测试
void main(){
int b[]={21,65,43,87,12,84,44,97,32,55};
MOVE test(b,10);
test.exchange();
test.print();
}
三、实践小结
1、关键是找到最大值与最小值的在原数组中所在的位置
四、源程序清单
#include<iostream.h>
class MOVE{
int *array;
int n;
public:
MOVE(int b[],int m);
void exchange();
void print();
~MOVE();
};
MOVE::MOVE(int b[],int m){
array=new int[m+1];
for (int i=0;i<m;i++)
array[i]=b[i];
n=m;
}
void MOVE::exchange(){
int i,j,t,k,s;
int *p;
p=new int[n+1];
for(i=0;i<n;i++)
p[i]=array[i];
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if (p[i]>p[j]){
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
for(i=0;i<n;i++){
if(array[i]==p[0]) k=i;
if(array[i]==p[n-1]) s=i;
}
t=array[k];
array[k]=array[s];
array[s]=t;
delete[]p;
}
void MOVE::print(){
for(int i=0;i<n;i++)
cout<<array[i]<<'\t';
}
MOVE::~MOVE(){delete []array;}
void main(){
int b[]={21,65,43,87,12,84,44,97,32,55};
MOVE test(b,10);
test.exchange();
test.print();
}
一、实践任务
定义一个字符串类String,实现判断该字符串是否为回文字符串。所谓回文字符串,是指该字符串左右对称。例如字符串“123321”是回文字符串。
具体要求如下:
(1)私有数据成员
● char *str;
● int y:标记是否为回文字符串。
(2) 公有成员函数
● String(char *s):构造函数,用给定的参数s初始化数据成员str。Y初始化为0.
● void hunwen():判断str所指向的字符串是否为回文字符串.
● void show():在屏幕上显示字符串。
(3) 在主程序中定义字符串 char s[]=” ababcedbaba”作为原始字符串。定义一个String 类对象test,用s初始化test,完成对该类的测试。
二、系统测试
void main()
{
char *str="ababcedbaba";
String test(str);
test.huiwen();
test.show();
}
三、实践小结
1、判断是否为回文数是这道题目的关键所在
四、源程序清单
#include<iostream.h>
#include <string.h>
class String
{
char *str;
int y;
public:
String(char*s)
{
str=new char[strlen(s)+1];
strcpy(str,s);
y=0;
}
void huiwen();
void show();
};
void String::huiwen()
{
int n=strlen(str);
char *p1=str,*p2=str;
for(int i=0,j=n;i<n;i++)
if(p1[i]!=p2[--j]) break;
if(i==n) y=1;
}
void String::show()
{
if(y) cout<<str<<endl;
else cout<<"此字符串不是回文字符串";
}
void main()
{
char *str="ababcedbaba";
String test(str);
test.huiwen();
test.show();
}
一、实践任务
建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。例如将字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。
具体要求如下:
(1)私有数据成员
● char str1[80]:存放被插入的字符。
● char str2[40]:存放待插入的字符。
(2)公有成员数据
● STRING (char *s1,char *s2):构造函数,用s1和s2初始化str1和str2。
● void process():将str2中的字符串插入到str1。
● void print():输出插入后的字符。
二、系统测试
void main ()
{
char str1[80],str2[40];
cin.getline(str1,9);
cin.getline(str2,9);
STRING test(str1,str2);
test.process();
test.print();
}
三、实践小结
1、一个字符串插入一个字符串,主要在于,要另用一个数组存放新字符串
四、源程序清单
#include <iostream.h>
#include <string.h>
class STRING
{
char str1[80];
char str2[40];
public:
STRING (char *s1,char *s2)
{
for(int i=0;i<=80;i++)
str1[i]=s1[i];
for( i=0;i<=40;i++)
str2[i]=s2[i];
}
void process();
void print();
};
void STRING::process()
{
char t[40];
int i=0,j=0;
strcpy(t,str1);
while(str2[i])
{
str1[j++]=str2[i];
str1[j++]=t[i];
i++;
}
}
void STRING::print()
{
for(int i=0;i<10;i++)
cout<<str1[i];
}
void main ()
{
char str1[80],str2[40];
cin.getline(str1,9);
cin.getline(str2,9);
STRING test(str1,str2);
test.process();
test.print();
}
一、实践任务
建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。
具体要求如下:
(1)私有数据成员
● int array[20]:一位整型数组。
● int n:数组中元素的个数。
(2)公有成员函数
● MOVE(int b[],int m):构造函数,初始化成员数据。
● void change():进行循环换位。
● void print():输出一维数组。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
二、系统测试
void main()
{ int n;
int array[20]={21,65,43,87,12,84,44,97,32,55};
cout<<"输入n的值:"<<endl;
cin>>n;
MOVE test(array,n);
test.change();
test.print();}
三、实践小结
1、要将最后三位拉出来重新考虑
四、源程序清单
#include <iostream.h>
class MOVE
{
int array[20];
int n;
public:
MOVE(int b[],int m)
{
for(int i=0;i<m;i++)
array[i]=b[i];
n=m;
}
void change();
void print();
};
void MOVE ::change()
{
int a,b,c;
a=array[n-3];
b=array[n-2];
c=array[n-1];
for(int i=0;i<n-3;i++)
{
array[i+3]=array[i];
}
array[0]=a;
array[1]=b;
array[2]=c;
}
void MOVE::print()
{
for(int i=0;i<n;i++)
cout<<array[i]<<'\t';
}
void main()
{
int n;
int array[20]={21,65,43,87,12,84,44,97,32,55};
cout<<"输入n的值:"<<endl;
cin>>n;
MOVE test(array,n);
test.change();
test.print();
}
一、实践任务
建立一个类MOVE,实现将数组中大写字母元素放在小写字母元素的左边。
具体要求如下:
(1)私有数据成员
● char *array:一维字符数组。
● int n:数组中元素的个数。
(2)公有成员函数
● MOVE(char b[],int m):构造函数,初始化成员数据。
● void change():进行排序换位。
● void print():输出一维数组。
● ~MOVE():析构函数。
(3)在主程序中用数据“fdsUFfsTjfsKFEkWC”对该类进行测试。
二、系统测试
void MOVE::print()
{
for(int i=0;i<n;i++)
cout<<array[i];
cout<<'\0';
}
void main()
{
char *array="fdsUFfsTjfsKFEkWC";
MOVE test(array,17);
test.change();
test.print();
}
三、实践小结
1、判断大小写字母;
2、存放新数组。
四、源程序清单
#include <iostream.h>
class MOVE
{
char *array;
int n;
public :
MOVE (char b[],int m)
{
array=new char[m+1];
for(int i=0;i<m;i++)
{
array[i]=b[i];
}
n=m;
}
void change();
void print();
~MOVE() {delete []array;}
};
void MOVE::change()
{
int x=0;
int y=n;
char *p;
p=new char[n+1];
for(int i=0;i<n;i++)
{
if(array[i]>='A' && array[i]<='Z')
p[x++]=array[i];
else if(array[i]>='a' && array[i]<='z')
p[--y]=array[i];
}
for(i=0;i<n;i++)
array[i]=p[i];
}
void MOVE::print()
{
for(int i=0;i<n;i++)
cout<<array[i];
cout<<'\0';
}
void main()
{
char *array="fdsUFfsTjfsKFEkWC";
MOVE test(array,17);
test.change();
test.print();
}