VC++程序设计课程实践基础题.docx

上传人:b****9 文档编号:24961723 上传时间:2023-06-03 格式:DOCX 页数:59 大小:266.77KB
下载 相关 举报
VC++程序设计课程实践基础题.docx_第1页
第1页 / 共59页
VC++程序设计课程实践基础题.docx_第2页
第2页 / 共59页
VC++程序设计课程实践基础题.docx_第3页
第3页 / 共59页
VC++程序设计课程实践基础题.docx_第4页
第4页 / 共59页
VC++程序设计课程实践基础题.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

VC++程序设计课程实践基础题.docx

《VC++程序设计课程实践基础题.docx》由会员分享,可在线阅读,更多相关《VC++程序设计课程实践基础题.docx(59页珍藏版)》请在冰豆网上搜索。

VC++程序设计课程实践基础题.docx

VC++程序设计课程实践基础题

VC++程序设计

课程实践指导

第1章课程实践概述

1.1VC++课程实践的性质与目的

“VC++课程实践”是在学习了“VC++程序设计”课程后进行的实践教学环节,该环节为学生提供一个既动手又动脑,独立实践的机会,使学生将课本上的理论知识和实践有机的结合起来,有利于巩固、提高和融合所学的课程知识,提高学生运用所学知识解决实际问题的能力。

主要目的如下:

1.进一步培养学生程序设计的思想,加深对VC++语言要素和控制结构的理解。

2.针对VC++中的重点和难点内容进行训练,强调好的程序设计风格。

3.进一步熟悉VC++的编程技巧和上机调试程序的方法。

4.掌握程序设计的常用算法。

1.2VC++课程实践的要求

学生必须仔细阅读本程序设计实践指导书,认真主动完成程序设计实践的要求。

要发挥自主学习的能力,充分利用时间,制订好程序设计实践的时间计划,并在程序设计实践过程中不断检测自己的计划完成情况。

根据系统的功能要求,学生必须在教师的指导下认真完成应用程序的设计。

具体要求如下:

1.系统功能模块分析、控制模块分析正确;

2.系统设计要实用;

3.编程简练、功能全面;

4.说明书、流程图要清楚。

1.3VC++课程实践的选题原则

题目可从第4章中选择,创新性题目可只选择1题,仅选提高题应不少于3题,仅选基础题应不少于6题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师审定)。

对于提高题、创新题及游戏题可组成团队开发,但应制定详细的项目分工说明。

1.4VC++课程实践的基本步骤

课程实践是一个从分析到设计,再到总结的过程,具体工作可按如下步骤依次进行:

1.确定问题要求,充分分析和理解问题本身,给出解决方案框架。

2.在确定解决方案框架过程中,考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。

3.详细设计和编码。

确定算法的主要流程,在此基础上进行代码设计。

4.上机前编写程序与检查。

可用2种方法检查程序,来有效提高调试效率,减少上机调试程序时的无谓错误。

方法一,用一组测试数据手工执行程序;方法二,通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,将程序中的明显错误事先排除。

5.上机调试程序。

6.完成课程实践报告。

1.5时间及地点安排

本课程实践按照教学要求在1周(按5天计算)内完成,每天至少上机3-4小时进行程序调试,总上机调试时间不少于15个小时。

题目布置后,所有同学应提前开始查找资料,作好准备。

具体时间安排如下:

1.分析设计准备阶段(前一周周六、周日);

2.编程调试阶段(周一~周四);

3.总结及书写课程实践报告阶段(周五);

4.检查验收阶段(时间由指导老师确定)。

验收地点:

机房。

1.6组织管理

良好的组织是课程实践质量的重要保证,在课程实践期间的主要组织工作安排如下:

1.每人独立完成所选任务,创新性题目可2~3人组成小组,自由组合,小组应指定一名组长。

2.由班长负责考勤。

3.指导教师负责指导学生。

1.7考核评价

根据学生完成情况,结合所选题目的难度及分析解决问题的能力和创新精神,确定成绩等级。

考核标准包括:

1.所设计程序的正确性、通用性,全面完成题目的要求(60%);

2.课程实践报告(20%):

包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,程序设计实践总结,参考书目等。

最后附源程序代码。

不符合以上要求者,则本次实践以不及格记;

3.平时考勤(20%)。

提交材料包括:

1.源程序。

按照程序设计课程实践的具体要求所开发的所有源程序;

2.程序的说明文件(保存在.txt中)。

在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;

3.课程实践报告。

保存在word文档中,文件名要求按照“姓名-学号-实践报告”起名,如文件名为“张三-0840308112-实践报告.doc”。

注:

(1)程序及报告提交电子稿,发送至指导老师的邮箱(由教师提供)中;

(2)报告除需提交电子稿外,必须每人另提交一份打印件。

第4章课程实践示例

4.1基础题示例

1.任务

建立一个类Integer_String,把一个正整数转换为字符串。

具体要求如下:

(1)私有数据成员

●intnum:

要转换的正整数。

●char*s:

用动态空间存储转换得到的字符串。

(2)公有成员函数

●Integer_String(intn):

用参数n初始化数据成员num。

●intf():

求数据成员num的位数。

●voidfun():

把正整数num转换为字符串s。

●voidshow():

输出数据成员num和s;

●~Integer_String():

释放动态空间。

(3)在主函数中对定义的类进行测试。

用正整数12345初始化类Integer_String的对象test,调用相关成员函数后输出转换结果。

2.系统设计

(1)任务分析

通过类Integer_String的成员函数f()求出数据成员num的位数,并以此为依据给数据成员s分配大小适当的动态空间,在成员函数fun()中依次取出num的各位数字并转换成对应字符后存入数据成员s,程序结束前释放为s分配的动态空间。

类的定义如下:

classInteger_String{

intnum;

char*s;

public:

Integer_String(int);

intf();

voidfun();

voidshow();

~Integer_String();

};

(2)算法设计

●求整数num(设num为正整数)的位数

定义变量d(初值为1)表示num(n)的位数,以n>10作为循环条件,每循环一次d的值增加一位,n去掉一位(n/=10),循环结束后d的值就是n的位数。

为保持num

的值不变,把其赋给变量n,通过n求num的位数。

●把整数num转换为字符串s

①取出num(n)的个位并转换为字符,然后赋给s的首字符(char*p=s):

*p=n%10+'0';

②去掉n的个位:

n/=10;

③p指向s的下一位:

p++;

④重复①②步直至n==0(循环条件为:

n!

=0,即n);

⑤给字符串s添加结束标记,并指向最后一个字符:

*p--='\0';

⑥把字符串s逆序:

使p1指向s的首字符:

char*p1=s,交换*p1和*p,然后p1指向后一个字符、p指向前一个字符:

p1++,p--;直到p1和p相遇(循环条件为:

p1

3.系统测试

在主函数中以整数初始化Integer_String的对象,并调用其成员函数show()输出测试结果(整数num和字符串s)。

主函数定义如下:

voidmain(){

Integer_Stringtest=12345;

test.fun();

test.show();

}

用以测试的整数为:

12345

预期的输出结果为:

整数为:

12345

字符串为:

12345

4.源程序清单

#include

classInteger_String{

intnum;

char*s;

public:

Integer_String(intn){

num=n;

}

intf(){

intd=1,n=num;

while(n>10){

d++;

n/=10;

}

returnd;

}

voidfun(){

intn=num,len=f();

s=newchar[len+1];

for(char*p=s,*p1=s;n;p++){

*p=n%10+'0';

n/=10;

}

*p--='\0';

while(p1

n=*p1,*p1=*p,*p=n;

p1++,p--;

}

}

voidshow(){

cout<<"整数为:

"<

cout<<"字符串为:

"<

}

~Integer_String(){

delete[]s;

}

};

voidmain(){

Integer_Stringtest=12345;

test.fun();

test.show();

}

第5章课程实践题选

5.1基础题

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

具体要求如下:

(1)私有数据成员

●intn:

前若干项的项数。

●doublex:

存放x的值。

●double*p:

根据n的大小动态申请存放Pn(x)前n项的数组空间。

(2)公有成员函数

●PP(intnum,doublex1):

构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。

●~PP():

析构函数,释放p指向的动态内存空间。

●doublefun(intn1,doublex):

递归函数,用于求多项式

的第n1项。

注意:

将递归公式中的n用作函数参数。

本函数供process函数调用。

●voidprocess():

完成求前n项的工作,并将它们存放到p指向的动态数组中。

●voidshow():

输出n和x,并将前n项以每行4个数的形式输出到屏幕上。

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

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

2.试建立一个类SP,求

,另有辅助函数power(m,n)用于求

具体要求如下:

(1)私有成员数据。

●intn,k:

存放公式中n和k的值;

(2)公有成员函数。

●SP(intn1,intk1):

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

●intpower(intm,intn):

求mn。

●intfun():

求公式的累加和。

●voidshow():

输出求得的结果。

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

3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。

具体要求如下:

(1)私有数据成员

●floatarray[20]:

一维整型数组。

●intn:

数组中元素的个数。

(2)公有成员函数

●MOVE(floatb[],intm):

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

●voidaverage():

输出平均值,并将数组中的元素按要求重新放置。

●voidprint():

输出一维数组。

(3)在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。

4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。

具体要求如下:

(1)私有数据成员

●int*array:

一维整型数组。

●intn:

数组中元素的个数。

(2)公有成员函数

●MOVE(intb[],intm):

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

●voidexchange():

输出平均值,并将数组中的元素按要求重新放置。

●voidprint():

输出一维数组。

●~MOVE():

析构函数。

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

5.定义一个类Palindrome,实现绝对回文数。

设计一个算法实现对任意整型数字判断是否为绝对回文数。

所谓绝对回文数,是指十进制数和二进制数均对称的数。

具体要求如下:

(1)私有数据成员

●intn:

整型数字。

●inty:

标记是否为回文数。

(2)公有成员函数

●Palindrome(intx):

构造函数,根据x参数初始化数据成员n,y初始化为0。

●voidhuiwen():

判断数n是否为绝对回文数。

●voidshow():

若该数为回文数,则在屏幕显示。

(3)在主程序中定义inta,由键盘输入数字。

定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。

6.定义一个字符串类String,实现判断该字符串是否为回文字符串。

所谓回文字符串,是指该字符串左右对称。

例如字符串“123321”是回文字符串。

具体要求如下:

(1)私有数据成员

●char*str;

●inty:

标记是否为回文字符串。

(2)公有成员函数

●String(char*s):

构造函数,用给定的参数s初始化数据成员str。

y初始化为0。

●voidhuiwen():

判断str所指向的字符串是否为回文字符串。

●voidshow():

在屏幕上显示字符串。

(3)在主程序中定义字符串chars[]=”ababcedbaba”作为原始字符串。

定义一个String类对象test,用s初始化test,完成对该类的测试。

7.建立一个类PHALANX,生成并显示一个折叠方阵。

折叠方阵如下图所示。

折叠方阵的生成过程为:

起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。

具体要求如下:

(1)私有数据成员

●int(*p)[20]:

指向按照折叠规律存放方阵的二维整型数组。

●intstartnum:

折叠方阵的起始数。

●intn:

存放方针的层数。

(2)公有成员函数

●PHALANX(ints,intm):

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

●voidprocess():

生成起始数为startnum的n行方阵。

●voidprint():

输出折叠方阵。

●~PHALANX():

析构函数。

(3)在主程序中对该类进行测试。

8.建立一个MATRIX,生成并显示一个螺旋方阵。

螺旋方阵如下图所示,起始数置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。

具体要求如下:

(1)私有数据成员

●inta[20][20]:

二维整型数组存放螺旋方阵。

●intstartnum:

螺旋方阵的起始数。

●intn:

存放方针的层数。

(2)公有成员函数

●MATRIX(ints,intm):

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

●voidprocess():

生成起始数为startnum的n行螺旋方阵。

●voidprint():

输出螺旋方阵。

(3)在主程序中定义MATRIX类的对象t对该类进行测试。

9.定义一个字符串类CString,并设计一个算法对该串中各个不同字符出现的频率进行统计。

具体要求如下:

(1)私有数据成员

●char*str:

指向要统计的字符串。

●char(*p)[2]:

动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的次数(次数在存放时,用该数字对应的ASCII值存放;在输出次数时,输出该ASCII字符对应的ASCII值即可)。

●intsize:

存放字符串中出现的所有不同的字符的个数。

(2)公有成员函数

●CString(char*s):

根据s参数初始化数据成员str;p和size初始值为0。

●voidCount():

p根据s所指字符串长度分配空间。

然后把str所指字符串中的每个字符放入p数组中,设置每个字符的出现次数为1。

根据p数组统计不同字符出现的频率,并求得size的实际大小。

最后根据size的实际大小,重新分配p所指空间,并把不同字符及其出现次数重新放回p数组(提示:

可以借助临时数组或指针来实现)。

●voidShow():

屏幕显示字符串、字符串的每个字符和与之对应的次数。

●~CString():

释放动态分配的空间。

(3)在主程序中定义字符串chars[]=”abdabcdesffffd”。

定义一个CString类对象test,用s以初始化test,完成对该类的测试。

10.定义一个字符串类CString,并设计一个算法实现,给定关键字str1在字符串str中出现时用关键字str2进行替换的功能。

具体要求如下:

(1)私有数据成员

●char*str;原始字符串。

●char*str1;目标关键字。

●char*str2;替换关键字。

●intflag;标记替换是否完成替换。

(2)公有成员函数

●CString(char*s,chars1[],char*s2):

用给定的参数s、s1和s2相对应的初始化数据成员str、str1和str2。

flag设置缺省0。

●voidReplace():

判断str字符串中是否出现str1,若出现就用str2替换,否则什么都不做。

若替换成功了标记flag为1,若替换不成功则标记flag为0。

●voidShow():

若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始字符串;若不成功则显示原始字符串。

●~CString():

释放动态分配的空间。

(3)在主程序中定义字符串chars[]=”Iamstudent,youarestudenttoo,weareallstudent.”作为原始字符串,定义chars1[]=”student”作为目标关键字,定义chars2[]=”teacher”作为替换关键字。

定义一个CString类对象test,用s,s1和s2初始化test,完成对该类的测试。

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

例如将字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。

具体要求如下:

(1)私有数据成员

●charstr1[80]:

存放被插入的字符串。

●charstr2[40]:

存放待插入的字符串。

(2)公有成员函数

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

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

●voidprocess():

将str2中的字符串插入到str1中。

●voidprint():

输出插入后的字符串。

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

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对该类进行测试。

13.建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。

具体要求如下:

(1)私有数据成员

●intarray[20]:

一维整型数组。

●intn:

数组中元素的个数。

(2)公有成员函数

●MOVE(intb[],intm):

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

●voidchange():

进行循环换位。

●voidprint():

输出一维数组。

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

14.建立一个类MOVE,实现将数组中大字字母元素放在小写字母元素的左边。

具体要求如下:

(1)私有数据成员

●char*array:

一维字符数组。

●intn:

数组中元素的个数。

(2)公有成员函数

●MOVE(charb[],intm):

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

●voidchange():

进行排序换位。

●voidprint():

输出一维数组。

●~MOVE():

析构函数。

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

15.定义一个一维数组类Carray,并根据给定算法实现对原始一维数组进行线性变换。

这里给定的线性变换算法为:

T(bx)=bT(x)+i;其中,b为变换常量,x为变量,i为当前类中成员数组的下标值。

根据该算法,原始数组在变化后,当前数组元素的值是由常量b和i下标来决定的。

具体要求如下:

(1)私有数据成员

●int*a:

指针a指向一个动态分配的原始数组。

●intn:

n表示该数组的大小。

●intb:

线性变换的常量。

(2)公有成员函数

●Carray(inta[],intn,intx):

用给定的参数a、n和x初始化数据成员a、n和b。

缺省都设置为0。

●voidTransform():

根据上述变化算法,求解数组变换。

●voidShow():

在屏幕上显示数组元素。

●~Carray():

释放动态分配的空间。

(3)在主程序中定义数组intarr[]={1,2,3,4,5,6,7,8,9,10}作为原始数组,intb;由键盘输入,作为线性变换的常量。

定义一个Carray类对象test,用arr初始化test,完成对该类的测试。

16.定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。

方阵的变换形式为:

F=W*fT

f为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为

1001

0110

0110

1001

具体要求如下:

(1)私有数据成员

●int(*a)[4]:

a指向方阵数组。

●intw[4][4]:

w为变换矩阵。

●intm:

m表示方阵的行和列数。

(2)公有成员函数

●CMatrix(inta[][4],intm):

用给定的参数a和m初始化数据成员a和m;对变换矩阵w进行初始化,要求必须用循环实现。

●voidTransform():

根据上述变换算法,求出变换后的数组形式,存放在原始数组内。

●voidshow():

在屏幕上显示数组元素。

●~CMatrix():

释放动态分配的空间。

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

定义一个CMatrix类对象test,用arr初始化test,完成对该类的测试。

17.定义一个类SIN,求

具体要求如下:

(1)私有成员数据。

●intx:

输入公式中x的值,求sin(x)。

●intn:

输入公式中n的值。

(2)公有成员函数。

●SIN(intx,intn):

构造函数,用于初始化x和n的值。

●intpower(intq):

求q!

的值。

●intmi(int

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1