ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:25.75KB ,
资源ID:11406554      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11406554.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(春VC++上机考试.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

春VC++上机考试.docx

1、春VC+上机考试VC01一、改错题 一个二维数组的每列元素的逆序操作是指将该二维数组每列元素的次序颠倒,例如:1 2 3 4 9 10 11 12二维数组5 6 7 8经过每列元素逆序操作后变为 5 6 7 8 9 10 11 12 1 2 3 4 下列程序实现二维数组每列元素的逆序操作。在该程序中,二维数组以一维数组的形式传递给函数inverse的参数p,其中参数m,n分别为所传递的二维数组的列数和行数。含错误的源程序如下:#includevoid inverse(int *p,int m,int n) for(int k=0;kp2) int t=p1; *p1=*p2; *p2=t; p

2、1+=m; p2-=m; void main() int a34; for(int i=0;i3;i+) for(int j=0;j4;j+) aij=i*4+j+1; coutendl; inverse(a,4,3); for(i=0;i3;i+) for(int j=0;j4;j+) coutaijt; coutendl; 正确的源程序如下:#includevoid inverse(int *p,int m,int n) for(int k=0;km;k+) int *p1=p+k,*p2=p+k+(n-1)*m; while(p1p2) int t=*p1; *p1=*p2; *p2=t

3、; p1+=m; p2-=m; void main() int a34; for(int i=0;i3;i+) for(int j=0;j4;j+) aij=i*4+j+1; coutendl; inverse(*a,4,3); for(i=0;i3;i+) for(int j=0;j4;j+) coutaijt; coutendl; 二、编程题 定义一个求两个集合交集的类DataSet,并在主函数中用两个字符串进行测试。具体要求如下:(1)私有数据成员:char p1,p2;指向存放两个原始集合的存储空间的指针char *p;指向存放上述两个集合的交集的存储空间的指针(2)公有成员函数 Da

4、taSet(char a,char b);初始化两个原始集合,同时为指针p动态分配内存空间,大小为数组a和b中较大的尺寸 void compress(char *p);消除指针p所指向的数组中的重复元素 void setcompress();通过分别调用compress函数,消除p1和p2所指向数据中的重复元素。由于集合没有重复的元素,因此在创建DataSet对象后,必须调用setcompress函数 void intersection();求指针p1和p2所指向集合的交集,结果存放在指针p所指向的存储空间中 void print();输出两个原始集合及它们的交集 DataSet();实现必要

5、的功能(3)在主函数中,创建一个DataSet类型的对象,在消除该对象中每个原始集合的重复元素之后,求它们的交集,并输出。VC02一、改错题 下列程序的功能是:查询一个带通配符”?”的字符串sub在另一个字符串str中出现的次数,其中通配符”?”可以代替任何一个字符。例如,字符串”a?c”在”abcdabceascac”中出现了3次(下划线部分),”a?a”在”abacadca”中出现了2次,”a?”在”abaca”出现了2次。含错误的源程序如下:#includevoid fun(char *str,char *sub) int n=0; while(*str) char *p1=str,*p

6、2=sub; while(*p1=*p2 & *p2=?) if(*(p2+1)=0 & *p1) n+; continue; p1+;p2+; str+; return n;void main() char str80,sub10; cout请输入被查询的字符:n; cin.getline(str,79); cout请输入要查询的字符:n; cin.getline(sub,9); int k=fun(&str,&sub); if(k) cout出现了k次。n; else cout没有出现n;正确的源程序如下:#includeint fun(char *str,char *sub) int n

7、=0; while(*str) char *p1=str,*p2=sub; while(*p1=*p2 | *p2=?) if(*(p2+1)=0 & *p1) n+; break; p1+;p2+; str+; return n;void main() char str80,sub10; cout请输入被查询的字符:n; cin.getline(str,80); cout请输入要查询的字符:n; cin.getline(sub,10); int k=fun(str,sub); if(k) cout出现了k次。n; else cout没有出现n;二、编程题 编程实现对大于1的整数进行质因数分解

8、。所谓整数的质因数分解是指将整数分解为其所有质数(素数)因数的积,例如,602*2*3*5。定义一个类Decompose实现上述功能。具体要求如下:(1)私有数据成员 int *a;指向存放质因数的动态存储空间 int num;待分解质因数的整数 int n;质因数的个数(2)公有成员函数 Decompose(int m);用m初始化num,并将n初始化为0,a初始化为空指针 void print();输出整数num的质因数 void primenum();求整数num的所有质因数(保留重复部分,例如60的质因数为2,2,3,5),并将这些质因数存放到指针a所指向的存储空间中 Decompos

9、e();释放动态分配的存储空间(3)在主函数中完成对该类的测试。从键盘输入一个大于1的整数number,定义类Decomose的对象d,并用number初始化d,调用函数primenum()求number的所有质因数,最后输出number的质因数分解结果。VC03一、改错题 折半查找的基本思想为:假设一数据集是按升序排列的,如果要查找的数小于该数据集第一个元素或大于该数据集的最后一个元素,则查找失败;否则,计算数据集的中间元素(如果元素个数为偶数2n,则中间元素约定为第n个元素),如果中间元素正好等于要查找的数,则查找成功;如果中间元素小于要查找的数,则从中间元素往后查找,否则从中间元素往前查

10、找;在缩小了的范围内重复应用上述方法既可。 下列程序中的函数search用递归方法实现在数组a中查找key的功能,如果查找成功,返回数组a中相应元素的下标值,否则返回-1,其中n1和n2分别为当前查找的数组下标范围。 主函数首先随机生成15个整数,然后用折半查找法在其中查找某一个键盘输入的数,并输出查找结果。含错误的源程序如下:#include#includeint search(int a,int key,int n1,int n2) if(an1key & an2key) return -1; if(key=an2) return n2; if(key=an1) return n1; in

11、t n=(n2-n1)/2; if(n=n1 | n=n2) return n; if(an=key) return n; if(ankey) return search(a,key,n1,n); else return search(a,key,n,n2);void sort(int *p,int n) /对数组排序 for(int i=0;in-1;i+) for(int j=i+1;j*(p+j) int t=*(p+i);*(p+i)=*(p+j);*(p+j)=t; void main() int data15,k,index; for(int i=0;i15;i+) datai=r

12、and()%100; /系统函数rand的功能是产生一个随机整数 sort(data,15); for(i=0;i15;i+) coutdatait; coutn; coutk; index=search(data,k,0,14); if(index=-1) coutThe number k isnt in this array!n; else coutindex=indexendl; coutdataindex=dataindexendl; 正确的源程序如下:#include#includeint search(int a,int key,int n1,int n2) if(an1key |

13、 an2key) return -1; if(key=an2) return n2; if(key=an1) return n1; int n=(n2+n1)/2; if(n=n1 & n=n2) return n; if(an=key) return n; if(ankey) return search(a,key,n+1,n2); else return search(a,key,n1,n-1);void sort(int *p,int n) /对数组排序 for(int i=0;in-1;i+) for(int j=i+1;j*(p+j) int t=*(p+i);*(p+i)=*(p+

14、j);*(p+j)=t; void main() int data15,k,index; for(int i=0;i15;i+) datai=rand()%100; /系统函数rand的功能是产生一个随机整数 sort(data,15); for(i=0;i15;i+) coutdatait; coutn; coutk; index=search(data,k,0,14); if(index=-1) coutThe number k isnt in this array!n; else coutindex=indexendl; coutdataindex=dataindexendl; 二、编程

15、题 定义一个类Array,求一个二维数组所有元素的平均值(精确到小数点后3位数),并将该平均值的整数和小数部分分别逆序后输出(如平均值为342.083,则将其整数和小数部分分别逆序后变为243.380)。类Array的具体要求如下:(1)私有数据成员 int a34;float ave1,ave2;ave1,ave2分别存放数组a中所有元素的平均值及其逆序值(2)公有成员函数 Array(int t4,int n);对私有成员a初始化 void average();计算ave1的值 void invert();按题目要求对ave1进行逆序处理,得到ave2 void print();输出所有成

16、员数据(3)在主函数中对该类进行测试。使用如下二维数组作为测试数据:112 211 630 200524 362 651 322269 60 710 54代码如下:#include#include class Arrayprivate: int a34; float ave1,ave2;public: Array(int t4,int n) for(int i=0;in;i+) for(int j=0;j4;j+) aij=tij; void average() float s=0; for(int i=0;i3;i+) for(int j=0;j0) s1=s1*10+a1%10; a1=a

17、1/10; int a2,s2=0,n=0; a2=int(ave1*1000+0.5)%1000; while(+n=3) s2=s2*10+a2%10; a2=a2/10; ave2=s1+s2/1000.0; void print() for(int i=0;i3;i+) for(int j=0;j4;j+) coutaijt; coutendl; coutave1=ave1endl; cout.setf(ios:fixed); coutave2=setprecision(3)ave2endl; ;void main() int t34=112,211,630,200,524,362,6

18、51,322,269,60,710,54; Array s(t,3); s.average(); s.invert(); s.print();VC04一、改错题一个二维数组的每行元素的逆序变换是指将该二维数组每行元素的次序颠倒。例如,二维数组1, 2, 3, 4,5, 6, 7, 8,9,10,11,12, 经过每行元素逆序变换后的数组为4,3,2,1,8,7,6,5,12,11,10,9 。下列程序实现了二维数组每行元素的逆序变换。在该程序中,将二维数组首行地址传递给函数inverse的参数p,其中参数n为所传递的二维数组的列数。函数print可以打印二维数组,其中二维数组以一维数组的形式传

19、递给指针p,m和n分别表示二维数组的行数和列数。含错误的源程序如下:#include void inverse(int *p, int n) int *p1=p, *p2=p1+n; while(p1 p2) int t = *p1; *p1 = *p2; *p2 = t; p1+; p2-; void print(int *p, int m, int n) int *p1 = p, *p2 = p1 + m*n - 1; while(p1 = p2) int count; while(count+n) cout *p1+ t; cout endl; void main() int a34;

20、for(int i = 0; i 3; i+) for(int j = 0; j 4; j+) aij = i * 4 + j + 1; for(i = 0; i 3; i+) inverse(a, 4); print(a, 3, 4);正确的源程序如下:#include void inverse(int (*p)4, int n) int *p1=*p, *p2=p1+n-1; while(p1 p2) int t = *p1; *p1 = *p2; *p2 = t; p1+; p2-; void print(int *p, int m, int n) int *p1 = p, *p2 =

21、p1 + m*n - 1; while(p1 = p2) int count=0; while(count+n) cout *p1+ t; cout endl; void main() int a34; for(int i = 0; i 3; i+) for(int j = 0; j 4; j+) aij = i * 4 + j + 1; for(i = 0; i 3; i+) inverse(a+i, 4); print(*a, 3, 4);二、编程题 编写一个程序求直角坐标系中点到直线的距离。具体要求如下:(1)定义一个点的类Point,含有:私有数据成员: float x,y;分别代表点

22、的横坐标和纵坐标公有成员函数: Point(float a,float b);分别对x和y初始化 float getX(),float getY();分别返回横坐标和纵坐标 void print();以(x,y)的形式输出点(2)定义一个直线类Line,含有:私有数据成员: Point p1,p2;分别表示直线的两个端点公有成员函数: Line(Point &,Point &);分别对p1和p2初始化 友元函数float distance(Line &p,Point &q);计算并输出点到直线的距离点(x,y)到由(x1,y1)和(x2,y2)两点确定的直线的距离公式为:(3)在主函数中利用上

23、述类定义一个点和一条直线,计算并输出点到直线间的距离。VC05一、改错题 用二分法解方程f(x)=0的具体算法如下:(1)输入x1、x2,直至f(x1)与f(x2)异号,说明方程在x1、x2之间有解(2)求x1和x2的中点x0(3)如果f(x0)与f(x1)同号,表明方程的解在x0与x2之间,用x0取代x1;否则方程的解在x0与x1之间,用x0取代x2(4)如果f(x0)的值足够小,则方程的近似解为x0;否则重复执行步骤(2)、(3)、(4),直至f(x0)足够小(5)输出方程的解x0要求用二分法解方程x2+4x-4=0和x3+2x2+3x-15=0。含错误的源程序如下:#include#in

24、cludedouble f1(double x) return x*x+4*x-4; double f2(double x) return x*x*x+2*x*x+3*x-15; void xx(double (*fp)(double), double &a,double &b) do coutab; while(fp(a)*fp(b)0);void fun(double (*fp)(double) double x0,x1,x2; xx(fp,&x1,&x2); do x0=(x2-x1)/2; coutx1,x2,x00) x2=x0; else x1=x0; while(fabs(fp(

25、x0)1e-5); cout方程的解为:x0endl;void main() cout解第一个方程:n; fun(f1); cout解第二个方程:n; fun(f2);正确的源程序如下:#include#includedouble f1(double x) return x*x+4*x-4; double f2(double x) return x*x*x+2*x*x+3*x-15; void xx(double (*fp)(double), double &a,double &b) do coutab; while(fp(a)*fp(b)=0);void fun(double (*fp)(double) double x0,x1,x2; xx(fp,x1,x2); do

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

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