江苏科技大学课程实践设计报告VC++.docx

上传人:b****3 文档编号:4970494 上传时间:2023-05-07 格式:DOCX 页数:28 大小:154.21KB
下载 相关 举报
江苏科技大学课程实践设计报告VC++.docx_第1页
第1页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第2页
第2页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第3页
第3页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第4页
第4页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第5页
第5页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第6页
第6页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第7页
第7页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第8页
第8页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第9页
第9页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第10页
第10页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第11页
第11页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第12页
第12页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第13页
第13页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第14页
第14页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第15页
第15页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第16页
第16页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第17页
第17页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第18页
第18页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第19页
第19页 / 共28页
江苏科技大学课程实践设计报告VC++.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

江苏科技大学课程实践设计报告VC++.docx

《江苏科技大学课程实践设计报告VC++.docx》由会员分享,可在线阅读,更多相关《江苏科技大学课程实践设计报告VC++.docx(28页珍藏版)》请在冰点文库上搜索。

江苏科技大学课程实践设计报告VC++.docx

江苏科技大学课程实践设计报告VC++

 

江苏科技大学

 

课程实践报告

 

 

 

 

 

设计题目:

计算机程序设计实践(VC++)

设计时间:

2010-03-01至2010-03-07

学院:

专业班级:

学生姓名:

学号

指导老师:

 

 

2010年03月

实践一

一、实践任务

1.基础题第2题:

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

具体要求如下:

(1)私有数据成员

●intn,k;存放公式中n和k的值;共有成员函数

(2)共有成员函数

●SP(intn1,intk1):

构造函数,初始化数据成员数据n和k。

●intpower(intm,intn):

求mn

●intfun():

求公式的累加和

●voidshow():

输出求得的结果

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

二、系统设计

(1)系统功能分析

本系统主要实现函数f(n,k)=1k+2k+3k+……+nk的求值。

(2)类的定义与描述

(3)编写源程序如下:

#include

classSP

{

intn;

intk;

public:

SP(intn1,intk1)

{

n=n1;

k=k1;

}

intpower(intm,intn)

{

ints=1;

for(inti=1;i<=n;i++)

s*=m;

returns;

}

intfun()

{

intf=0;

intj=1;

while(j<=n){

f+=power(j,k);

j++;

}

returnf;

}

voidshow()

{

cout<

}

};

voidmain()

{

intn,k;

cin>>n>>k;

SPs(n,k);

s.show();

}

三.系统测试

对类进行测试,测试数据为23;

预期输出结果为9

四.实验小结

此题的关键是fun函数中条件的控制,通过此次实践,熟悉了类的基本构造,学会了用类来求解函数。

五.参考文献:

[1]潘克勤,华伟《VisualC++程序设计》北京:

中国铁道出版社,2008

[2]张晓如,王芳《VisualC++程序设计解析与实训》北京:

中国铁道出版社,2008

实践二

一.实践任务

2.基础题第12题:

建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。

例如将字符串“abcde”交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。

具体要求如下:

(1)私有数据成员

●charstr1[60]:

存放被插入的字符串

●charstr2[40]:

存放待插入的字符串

●charstr3[100]:

存放插入后的字符串

(2)共有成员函数

●STRING(char*s1,char*s2):

构造函数,用s1和s2初始化str1和str2

●voidprocess():

将str2中的字符串插入到str1中,存放到str3中

●voidprint():

输出插入后的字符串

(3)在主程序中定义STRING类的对象test对该类进行测试

二.系统设计

(1)系统功能分析

本系统主要实现将一个字符串交叉插入到另一个字符串中。

(2)类的定义与描述

(3)编写源程序如下:

#include

#include

classSTRING

{

charstr1[60];

charstr2[40];

charstr3[100];

public:

STRING(char*s1,char*s2)

{

strcpy(str1,s1);

strcpy(str2,s2);

}

voidprocess()

{

inti=0,j=0;

while(str2[j])

{

str3[i++]=str2[j];

str3[i++]=str1[j++];

}

while(str1[j])

{

str3[i++]=str1[j++];

}

str3[i]='\0';

}

voidprint()

{

cout<

}

};

voidmain()

{

STRINGtest("ABCDEFG","abcde");

test.process();

test.print();

}

三.系统测试

预期输出结果:

aAbBcCdDeEFG

四.实验小结

通过本次实验,进一步了解了拷贝构造函数和while语句的使用。

使用while语句时要控制好循环体执行的条件才能保证程序的正常运行。

五.参考文献:

[1]潘克勤,华伟《VisualC++程序设计》北京:

中国铁道出版社,2008

[2]张晓如,王芳《VisualC++程序设计解析与实训》北京:

中国铁道出版社,2008

实践三

一.实践任务

3.基础题第23题:

分数相加,两个分数分别是1/5和7/20,他们相加后得11/20,方法是先求出两个分数分母的最小公倍数,通分后,再求两个分子的和,最后约减结果分数的分子和分母,即用分子分母的最大公约数分别除分子和分母。

求m、n最大公约数的一种方法是:

将m、n较小的一个数赋值给变量k,然后分别用{k,k-1,k-2,……,1}中的数去除m和n,第一个能把m和n同时除尽的数就是m和n的最大公约数。

假定m、n的最大公约数是v,则它们的最小公倍数就是m*n/v。

试建立一个分数类Fract,完成两个分数相加的功能。

具体要求如下:

(1)私有数据成员

●intnum,den:

num为分子,den为分母

(2)共有成员函数

●Fract(inta=0,intb=0):

构造函数,用a和b分别初始化分子num、分母den

●intged(intm,intn):

求m、n的最大公约数。

此函数供成员add()函数调用

●Fractadd(Fractf):

将参数分数f与对象自身相加,返回约简后的分数对象

●voidshow():

按照num/den的形式在屏幕上显示分数

(3)在主程序中定义两个分数对象f1和f2,其初值分别是1/5和7/20,通过f1调用成员函数add完成f1和f2的相加,将得到的分数赋给对象f3,显示分数对象f3。

二.系统设计

(1)系统功能分析

本系统主要实现两个分数的相加,并将结果化为最简形式后以分数的形式输出。

(2)类的定义与描述

(3)编写源程序如下:

#include

classFract

{

intnum;

intden;

public:

Fract(inta=0,intb=1)

{

num=a;

den=b;

}

intged(intm,intn)

{

if(m>n)

{

intt;

t=m;m=n;n=t;

}

intv;

for(intk=m;k>0;k--)

{

if(n%k==0&&m%k==0){

v=k;

break;

}

}

returnv;

}

Fractadd(Fractf)

{

intfm,fz,v;

fm=den*f.den/ged(den,f.den);

num=fm/den*num;

f.num=fm/f.den*f.num;

fz=num+f.num;

v=ged(fz,fm);

fm=fm/v;

fz=fz/v;

FractF(fz,fm);

returnF;

}

voidshow()

{

cout<

}

};

voidmain()

{

Fractf1(1,5),f2(7,20),f3;

f3=f1.add(f2);

f3.show();

}

三.系统测试

测试数据1/57/20

预期输出结果11/20

四.实验小结

通过本次实践,我巩固了分数的表示方法及最小公倍数的求法。

本题的难点在于add函数,要注意再函数中定义一个类的对象并通过返回类的对象获得结果。

五.参考文献:

[1]潘克勤,华伟《VisualC++程序设计》北京:

中国铁道出版社,2008

[2]张晓如,王芳《VisualC++程序设计解析与实训》北京:

中国铁道出版社,2008

实践四

一.实践任务

4.基础题第25题:

建立一个类NUM,并统计待定序列中相同的字符的个数。

具体要求如下:

(1)私有数据成员

●chardata[25]:

随机生成25个字符

●intnum[128]:

储存每个字符出现的次数

(2)共有数据成员

●NUM(intdata):

构造函数,同时初始化数组data

●voidprocess():

统计数组data中每个字符出现的个数,并保存到数组num中

●voidprint():

输出每个出现过的字符及其出现的个数,每行输出5个没有出现过的字符不显示

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

二.系统设计

(1)系统功能分析

本系统主要实现统计待定序列中相同的字符的个数。

(2)类的定义与描述

(3)编写源程序如下:

#include

#include

classNUM

{chardata[25];

intnum[128];

public:

NUM()

{intt;

for(inti=0;i<25;)

{t=rand();

if(t>32&&t<=127)

data[i++]=char(t);}

}

voidprocess()

{for(inti=0;i<128;i++)

num[i]=0;

for(intm=33;m<128;m++)

{for(intj=0;j<25;j++)

{if(char(m)==data[j])

num[m]++;}

}

}

voidprint()

{intcount=0;

for(inti=33;i<128;i++)

{if(num[i]!

=0)

{count++;

cout<

if(count%5==0)

cout<

}

}

cout<

}

};

voidmain()

{NUMtest;

test.process();

test.print();

}

三.系统测试

四.实验小结

本次实践开始忽视了字符和整型的转化,导致调试运行时老报错,而且,由于此题牵扯到随机字符的产生,所以在编写程序时一定不要忘记文件包含

五.参考文献:

[1]潘克勤,华伟《VisualC++程序设计》北京:

中国铁道出版社,2008

[2]张晓如,王芳《VisualC++程序设计解析与实训》北京:

中国铁道出版社,2008

实践五

一.实践任务

5.基础题第27题:

建立一个类NUM,求指定数据范围内的所有素数。

具体要求如下:

(1)私有数据成员

●intdata[10]:

依次存放原始数据

●intprime[10]:

存放指定数据内所求出的所有素数

●intnum:

存放素数个数

(2)共有数据成员

●NUM(intn[]):

构造函数,用参数n初始化data,同时初始化num为0

●intisprime(intx):

判断x是否为素数。

若是素数返回1,否则返回0

●voidprocess():

求指定data数组中的所有素数,把它们依次存放在数组prime中,并将求出的素数个数赋给num

●voidprint():

输出求出的素数个数及所有素数,每行输出4个素数

(3)在主函数中完成对该类的测试。

定义NUM类的对象test,通过test调用成员函数完成求素数及输出素数的工作。

原始数据为{4,5,9,11,36,29,31,101,56,199}

二.系统设计

(1)系统功能分析

本系统主要实现求指定数据范围内素数的个数,并将这些素数输出。

(2)类的定义与描述

(3)编写源程序如下:

#include

#include

classNUM

{intdata[10];

intprime[10];

intnum;

public:

NUM(intn[])

{num=0;

for(inti=0;i<10;i++)

data[i]=n[i];

}

intisprime(intx)

{intleap;

if(x==0||x==1)

{};

for(inti=2;i

if(x%i==0)

leap=0;

if(i>x-1)

leap=1;

returnleap;

}

voidprocess()

{inti=0;

for(intj=0;j<10;j++)

{

if(isprime(data[j]))

{prime[i++]=data[j];

num++;

}

}

}

voidprint()

{

cout<<"素数的个数是:

"<<'\t'<

cout<<"素数为:

"<

for(inti=0;i

{

cout<

if((i+1)%4==0)cout<

}

cout<

}

};

voidmain()

{inta[10]={4,5,9,11,36,29,31,101,56,199};

NUMtest(a);

test.process();

test.print();

}

三.系统测试

测试数据:

4,5,9,11,36,29,31,101,56,199

预期输出结果:

素数的个数是:

6

素数为:

5112931

101199

四.实验小结

本题相对来说很简单,主要就是素数的判断,而素数的判断经过多次的练习已经熟练

掌握。

五.参考文献:

[1]潘克勤,华伟《VisualC++程序设计》北京:

中国铁道出版社,2008

[2]张晓如,王芳《VisualC++程序设计解析与实训》北京:

中国铁道出版社,2008

实践六

一.实践任务

6.提高题第6题:

设计一个大学师生类,包括学生类(Student),教师类(Professor),职员类(Staff),教师类是职员类的派生类。

另有一类既作为学生又兼做助教的,可作为学生类和职员类的派生类(StudentStaff)。

另外定义一个所有类的父类(DataRec)。

具体要求如下:

(1)DataRec类中数据成员又姓名,家庭住址,定义为指针变量。

成员函数有构造函数,析构函数,输出函数,strsave函数。

输出函数定义为虚函数。

Strsave函数用来动态申请内存空间,拷贝参数中的字符串,返回内存空间的首地址。

因为所有的派生类都要用到,设置为保护权限

(2)Student类数据成员有专业、学号,专业定义为指针变量。

Staff类数据成员有部门、计时薪酬,部门定义为指针变量。

Professor类数据成员有工资,这三个类都有输出函数,用来输出自己的数据成员

(3)StudentStaff类多重继承学生类和职员类。

成员函数有输出函数

(4)DataRec类可以定义为虚基类

(5)每个类中数据成员定义为私有的

(6)编写main函数,测试上述所要求的各种功能。

二.系统设计

1.概要设计

(1)系统功能分析

本系统的功能是存储大学师生的基本信息,如:

姓名,家庭住址,专业,部门等。

(2)类的层次图:

2.详细设计

(1)类的描述与定义

●基类DataRec有2个保护成员,定义如下:

classDataRec{//基类

protected:

char*name;//姓名

char*address;}//地址

●学生类有2个私有成员,定义如下:

classStudent:

DataRec{//学生类

private:

char*major;//专业

intnumber;}//学号

●员工类有2个保护成员,定义如下:

classStaff:

DataRec{//员工类

protected:

char*department;//.部门

doublet_salary;}//计时工资

●Professor类有一个私有成员,定义如下:

classProfessor:

Staff{//professor类

private:

doublesalary;}//工资

(4)主要成员函数设计

●基类的构造函数定义如下:

DataRec(char*nam,char*addr)

{name=strsave(nam);

address=strsave(addr);}

●基类的析构函数定义如下:

~DataRec(){

delete[]name;

delete[]address;}

●基类中strsave函数定义如下:

char*strsave(char*s){

char*r=newchar[strlen(s)+1];

strcpy(r,s);

returnr;}

●基类中输出函数的功能没有必要先定义,将其说明为纯虚函数,其具体实现在派生类中定义:

virtualvoidOutput()=0;

●Student类的构造函数定义如下:

Student(char*nam,char*addr,char*majo,intnum):

DataRec(nam,addr)

{major=strsave(majo);

number=num;}

●Student类的析构函数定义如下:

~Student()

{delete[]major;}

●Student类的输出函数定义如下:

voidOutput()

{cout<

cout<

cout<<"Major:

"<

cout<<"Idnumber:

"<

●Staff类的构造函数定义如下:

Staff(char*nam,char*addr,char*depar,doublet_sala):

DataRec(nam,addr){

department=strsave(depar);

t_salary=t_sala;}

●Staff类的析构函数定义如下:

~Staff(){

delete[]department;}

●Staff类的输出函数定义如下:

voidOutput(){

cout<

cout<

cout<<"Department:

"<

cout<<"hourlywage:

"<

●Professor类的构造函数定义如下:

Professor(char*name,char*addr,char*depar,intt_sala,doublesalar):

Staff(nam,addr,depar,t_sala)

{salary=salar;}

●Professor类的输出函数定义如下:

voidOutput(){

Staff:

:

Output();

cout<<"Salary:

"<

●StudentStaff类构造函数定义如下:

StudentStaff(char*nam,char*addr,char*majo,intnum,intsalar,char*depar,doublet_sala):

Student(nam,addr,majo,num),Staff(nam,addr,depar,t_sala)

{};

●StudentStaff类的输出函数定义如下:

voidOutput(){

Student:

:

Output();

cout<<"Department:

"<

cout<<"hourlywage:

"<

三.系统测试

系统测试主要通过在主函数中定义对象来完成,主函数定义如下:

voidmain(void)

{

Studentastu("WangVi","运河路","Computerscience",8401031);

Staffastaf("LiXin","北京路","ElectricalEngineer",16.5);

Professoraprofes("ZhangXi","南京路","ComputerScience",0,3000);

StudentStaffastustaf("WangXi","乌鲁木齐路","ComputerScience",8401032,0,"ElectricalEngineer",5.8);

astu.Output();

cout<<"\n";

astaf.Output();

cout<<"\n";

aprofes.Output();

cout<<"\n";

astustaf.Output();

cout<<"\n";

}

预期输出结果为:

WangVi

运河路

Major:

Computerscience

Idnumber:

8401

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2