VC++程序设计课程实践基础题.docx
- 文档编号:24961723
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:59
- 大小:266.77KB
VC++程序设计课程实践基础题.docx
《VC++程序设计课程实践基础题.docx》由会员分享,可在线阅读,更多相关《VC++程序设计课程实践基础题.docx(59页珍藏版)》请在冰豆网上搜索。
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 程序设计 课程 实践 基础