版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、江苏科技大学计算机二级经典编程题整理1、 设计一个程序,求出5100之间的所有素数,要求每行输出5个数。判断一个整数是否为素数时用一个函数来实现。#includeint f(int n)for(int i=2;in;i+)if(n%i=0)break;if(!(in)return 1;else return 0;void main()int count=0;for(int n=5;n=100;n+)if(f(n)coutnt;if(+count%5=0)coutendl;2、 试编写一个函数求n!。#includeint f(int n)if(n=1|n=0)return 1;else ret
2、urn n*f(n-1);void main()int n;cinn;coutf(n)endl; 3、编写一个程序求分数相加,要求其结果为最简形式,如3/10+1/6=7/15。(此题包含:求最大公约数(经典算法)#includeint f(int m,int n) /求m,n的最大公约数for(int i=m;i-)if(m%i=0&n%i=0)return i;void main()int fz1,fm1,fz2,fm2,fz,fm;coutfz1fm1;coutfz2fm2;fz=fz1*fm2+fz2*fm1;fm=fm1*fm2;int t=f(fz,fm);fz/=t;fm/=t;
3、cout两分数之和为:fz/fmendl;4、编程实现对序列6,9,5,1,3,4,8,7进行升序排列。#includevoid f(int s,int n) /自定义函数实现数组排序,参数传递是双向的地址传递for(int i=0;in;i+)for(int j=i+1;jsj)int t=si;si=sj;sj=t;void main()int s=6,9,5,1,3,4,8,7;f(s,8);for(int i=0;i8;i+)coutsit; 5、设n是一个两位正整数,s1是n的各位数之和,s2是2*n的各位数之和。输出所有满足条件s1等于s2的n、s1、s2。要求用函数实现求各位数之
4、和。#includeint f(int n) /自定义函数求n的各位数之和int sum=0;while(n)sum+=n%10;n/=10;return sum;void main()for(int n=10;n=99;n+)if(f(n)=f(2*n)coutntf(n)tf(2*n)endl;6、【2010秋真题】试定义一个类Array,将4行5列二维数组的各列前3个元素依次拼接成一个整数,再将该整数赋值给相应列的最后一个元素。例如, (1)私有数据成员: int a45; (2)公有成员函数: Array(int b5,int n):构造函数,用二维数组b初始化数组a,参数n表示数组b
5、的行数。 void val(int j):将成员数组a第j列的前3个元素依次拼接成一个整数赋值给第4个元素。 void fun():利用成员函数vaLl()依次处理数组a的各列,完成题目的要求。 void print():按矩阵形式打印数组a (3)在主函数中完成对该类的测试。 输出示例: 原数组: 1 2 0 4 1 16 11 21 0 2 2 0 3 1 3 0 0 0 0 0 处理后的数组: l 2 0 4 1 16 11 21 0 2 2 0 3 1 3 1162 2110 213 401 123#includeclass Arrayint a45;public:Array(int
6、b5,int n);void val(int j);void fun();void print();Array:Array(int b5,int n)for(int i=0;in;i+)for(int j=0;j5;j+)aij=bij;void Array:val(int j)for(int i=0;i3;i+) /把aij连接到a3j中,分两步实现:一、根据aij的位 数计算a3j*=10;二、然后a3j+=aij; int t=aij; do a3j*=10; t/=10; while(t); a3j+=aij;void Array:fun()for(int i=0;i5;i+)val(
7、i);void Array:print()for(int i=0;i4;i+)for(int j=0;j5;j+)coutaijt;coutendl;/内循环代表某一行中的各列,内循环结束后输入换行符号实现换行void main()int b45=1,2,0,4,1,16,11,21,0,2,2,0,3,1,3;Array array(b,4);array.fun();array.print(); 7、 请查找字符串we are student,you are student”中的子串student,并在对应位置后面加上字符s。#includevoid main()char s150=we a
8、re student,you are student,*p1=s1;char s2=student,*p2=s2;while(*p1)p2=s2;/新一轮的检查,字符数组s2须从头开始while(*p1=*p2)if(*(p2+1)=0)/如果if为真,说明找到了子串,此后添加字符char *p3=p1;while(*+p3);while(p3p1)*(p3+1)=*p3; p3-;*(p1+1)=s;p1+,p2+;p1+;cout添加字符s后的字符串为:s1endl; 8、【题目】试定义一个类NUM,实现求大于整数m的最小的k个自反数。若将某个整数各位数字反序排列后得到的整数与原数相等,则
9、称这个整数为自反数。如整数1234逆序后为4321,两个数不相等,1234不是自反数;整数2332逆序后为2332,逆序前后的两个数相等,2332是自反数。具体要求如下: 1.私有数据成员 (1)int *p; /p指向用于存储满足条件的k个自反数的动态数组。 (2)int m, k; 2.公有成员函数 (1)NUM(int t1,int t2);构造函数,用参数t1,t2分别初始化m、k,并为p分配相应的存储空间。 (2)int isinv(int n);判断整数n是否为自反数,如果是,则返回1,否则返回0. (3)void fun();根据题意将求得的自反数按从小到大的顺序存放到p所指的动
10、态数组中。要求利用成员函数isinv()来判断某个整数是否为自反数。 (4)void print();按输出示例格式输出满足条件的自反数。 (5)NUM();析构函数,释放动态内存。 3.在主函数中对该类进行测试。 输入/输出示例(带下划线部分为键盘输入): 请输入m和k:1000 6 大于1000的6个自反数为:1001 1111 1221 1331 1441 1551#includeclass NUMint *p;int m,k;public:NUM(int t1,int t2);int isinv(int n);void fun();void print();NUM()if(p)dele
11、te p;NUM:NUM(int t1,int t2)m=t1;k=t2;p=new intk;int NUM:isinv(int n)/验证n是否是自反数有很多种方法,其中之一就是求出其反序的整数,比较两者是否相等int t=n,s=0;while(t)/求出n的反序整数ss*=10;s+=t%10;t/=10;if(s=n)return 1;return 0;void NUM:fun()for(int i=m+1,count=0;countk;i+)if(isinv(i)pcount+=i;void NUM:print()cout大于m的k个自反数为:;for(int i=0;ik;i+)
12、coutpit;void main()int m,k;coutmk;NUM num(m,k);num.fun();num.print();9、【题目】试定义一个类STR,实现求两个字符串的交集。两个字符串的交集是指同时属于两个字符串的字符的集合,且该集合中的字符各不相同。具体要求如下: (1)私有数据成员: char s150,s250,s050;字符串s0用于存放字符串s1和字符串s2的交集。 (2)公有成员函数: STR(char *p1,char *p2);构造函数,分别用参数p1和p2初始化成员数组s1和s2。 int isin(char *p,char c);判断字符c是否出现在字符
13、串p中,如果是,则返回值为1,否则返回0。 void fun();求成员数组s1和s2的交集,并将结果存放在成员数组s0中。提示:利用函数isin(char *,char)依次判断一个字符串中的每个字符是否包含于另一个字符串中,如果包含,且该字符不包含于成员数组s0中,则将该字符加入到成员数组s0中。 void print();按输出示例的格式输出所有数据成员。 (3)在主函数中对该类进行测试。 输出示例: 字符串1:abcdef123abc12 字符串2:acef123ace124 两个字符串的交集:acef123#include#includeclass STRchar s150,s250
14、,s050;public:STR(char *p1,char *p2);int isin(char *p,char c);void fun();void print();STR:STR(char *p1,char *p2)strcpy(s1,p1);strcpy(s2,p2);for(int i=0;i50;i+)s0i=0;int STR:isin(char *p,char c)while(*p) if(*p+=c)return 1;return 0;void STR:fun()/求成员数组s1和s2的交集,并将结果存放在成员数组s0中。char *p1=s1,*p2=s2,*p3=s0;w
15、hile(*p1)/检验s1中的每一个字符是否在s2中if(isin(s2,*p1)&!isin(s0,*p1)*p3+=*p1;/isin(s2,*p1) 就说满了*p1就是交集;/!isin(s0,*p1)这个交集是不曾出现过的p1+;void STR:print()cout字符串1:s1endl;cout字符串2:s2endl;cout字符串的交集:s0endl;void main()char p1=abcdef123abc12,p2=acef123ace124;STR str(p1,p2);str.fun();str.print();/*主函数功能:测试类(把类的成员函数都调用一遍,通
16、过对象)1、生成对象(会自动调用构造函数,须检查构造函数是否需要实参)2、通过对象挨个调用成员函数 10、 【题目】试定义一个类STR,将一个字符串中指定位置的连续字符拼接到另一个字符串尾部。具体要求如下:(1)私有数据成员:char *p;存放一个字符串。(2)公有成员函数:STR(char *s);构造函数。为数据成员p动态分配内存,并利用参数s初始化数据成员p。 void fun(char *s,int n1,int n2),将字符串s从第n1个字符(从0开始计数)开始的连续n2个字符拼接到数据成员p所指向的字符串之后,形成一个新的字符串。注意:必须要为p重新分配内存空间。 void p
17、rint();按输出示例格式输出数据成员p。 STR();析构函数,释放动态内存。(3)在主函数中完成对该类的测试。输入/输出示例(带下划线部分为键盘输入):字符串1:abcdefg字符串2:12345678输入起始位置和字符个数: 2 5处理后的字符串1为:abcdefg34567#include#includeclass STRchar *p;public:STR(char *s);void fun(char *s,int n1,int n2);void print();STR();STR:STR(char *s)p=new charstrlen(s)+1;strcpy(p,s);void
18、 STR:fun(char *s,int n1,int n2)char s3100;strcpy(s3,p);p=new charstrlen(s3)+n2+1;strcpy(p,s3);char *q1=p;while(*+q1);for(int i=0;in2;i+)/起始地址 s+n1*(q1+)=*(s+n1+i);*q1=0;void STR:print()coutpendl;STR:STR()if(p)delete p;void main()char s1100,s2100;couts1;couts2;int n1,n2;coutn1n2;STR str(s1);str.fun(s
19、2,n1,n2);str.print();11、【题目】试定义一个类Array,实现由一个数组派生出另一个数组。派生规则如下:新数组的元素取值为原数组中相同位置元素的左、右两个相邻元素前后拼接后形成的整数(左邻元素在前,右邻元素在后)。规定最左(右)列元素的左(右)邻元素为该元素所在行的最右(左)侧的元素。具体要求如下:(1)私有数据成员: int a 34; 原数组。 int b 34; 派生数组。(2) 公有成员函数 Array(int t4,int n);构造函数,利用参数t的前n行元素初始化数据成员a。 int nn(int t1,int t2);返回t1,t2拼接后形成的整数(t1在
20、前,t2在后)。 void fun();按题意生成新数组,并将结果存放到数据成员b中。 void print();按矩阵形式输出成员数组。(3)在主函数中对该类进行测试。输出示例:原数组:41 67 34 069 24 78 5862 64 5 45派生数组:67 4134 670 34415824 6978 2458 78694564 625 6445 562*/#include#includeclass Arrayint a34,b34;public:Array(int t4,int n);int nn(int t1,int t2);void fun();void print();Arra
21、y:Array(int t4,int n)for(int i=0;in;i+)for(int j=0;j4;j+)aij=tij;int Array:nn(int t1,int t2)int t=t2;dot1*=10;while(t/=10);return t1+t2; void Array:fun()int i,j;for(i=0;i3;i+)for(j=0;j4;j+)if(j=0) bij=nn(ai3,ai1);if(j=1|j=2)bij=nn(aij-1,aij+1);if(j=3)bij=nn(ai2,ai0);void Array:print()int i,j;cout原数组
22、:endl;for(i=0;i3;i+)for(j=0;j4;j+)coutaijt;coutendl;cout派生数组:endl;for(i=0;i3;i+)for(j=0;j4;j+)coutbijt;couts1;couts2;int n1,n2;coutn1n2;STR str(s1);str.fun(s2,n1,n2);str.print(); 12、 【题目】试定义一个数组类ARRAY,实现对数组a中的n(0n100)个整数从小到大进行编号,要求不改变数组a中元素的顺序,且相等的整数具有相同的编号,编号的结果存放在另一个数组b中。例如:当a=5,3,4,7,3,5,6时,a的第2和第5个元素值都为3,均是最小元素,因此其编号都为1,即b的第2和第5个元素均为1;a的第3个元素为4,为a的次小元素,编号为2,因此b的第3个元素值为2;依此类推,得到b=3,1,2,5,1,3,4。具体要求如下:(1)私有成员: int *a; 原数组。 int *b; 存放数组a的元素的编号。 int len
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑施工合同样本:学校建设协议
- 电力公司供水管道铺设项目合同
- 城市环保光纤布线合同
- 智能办公监控系统施工协议
- 交通运输服务招投标合同模板
- 宿舍区消防演练计划
- 社团投资管理规范
- 制造业临时工薪资发放规范
- 南宁市物业安全隐患排查
- 皮具店防火门安装协议
- DL∕T 1482-2015 架空输电线路无人机巡检作业技术导则
- 8-7悬挑式脚手架验收表
- 《你的名字》课件
- 诺如病毒防控知识完整版模板
- NB-T47008-2017承压设备用碳素钢和合金钢锻件
- 2023-2024学年全国初三上数学人教版期中考试试卷(含答案解析)
- 身体的红绿灯
- 每日食品安全检查记录,每周食品安全排查治理报告,每月食品安全调度会议纪要
- 福建陆军第七十三集团军医院招聘笔试真题2022
- 【我国公务员制度中存在的问题及对策4000字(论文)】
- 世界的气温与降水分布
评论
0/150
提交评论