C++ 题库186道题(简缩).doc_第1页
C++ 题库186道题(简缩).doc_第2页
C++ 题库186道题(简缩).doc_第3页
C++ 题库186道题(简缩).doc_第4页
C++ 题库186道题(简缩).doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+题库182道设计题第1题:已知有结构体类型定义: struct node int data; struct node *nextPtr; ; 请编写函数void computingList(node * head),对head 指向的单向链表,分别统计结点的data成员值为负数、0、 正数的结点个数分别存入变量negtive、zero、positive中。 答案:struct node *p;p=head;while(p!=NULL)if(p-data 0)positive+; else if (p-data data = 0)zero+; p=p-nextPtr;第2题:设计函数char capitalize(char);将小写英文字符变为对应的大写字符。答案:char capitalize(char ch)if(ch=a&ch=z)return ch-a+A;else return ch;第3题:函数mySum(int a , int m, int n)返回二维 整数数组a中所有元素的和,m、n分别为数组a的行 数、列数。填写适当的代码,使得mySum()完成正确 的功能。答案:int i, j, s=0;for (i=0; im; i+)for (j=0; jn; j+)s = s + aij;return s;第4题: 求1-1000之间同构数的个数n。同构数是: 某数与其自身的平方数的后几位相同。 例如:2525625,25是同构数。答案: int i=1;k=m;j=m*m;while(k!=0)k/=10;i*=10;if(j%i=m)n+;第5题:补充函数aver的代码,该函数计算n个学生成绩(通 过参数cj传入)的平均分数。答案: int sum = 0;int i;for( i=0;in;i+)sum += cji;return (float)sum/n; 第6题:输入两个正整数m和n,求其最大公约数和最小公倍数。答案:while(r!=0)m=n;n=r;r=m%n;第7题:编程计算,计算公式如右图所示。答案:int i, k, s;s=0;for (i=1; i=20; i+)for (k=1; k=3; k+)s = s + (i+1)*(i+1)*(k+2)*(k+2);return s;第8题: 完成函数cal,该函数计算数组a中的所有数据的 最大值及最小值以及它们的差,并存入到全局变 量max、min、ca中。例如数组a中包含8,43,7, 18,2,56,37,123,25,26则max=123,min=2, ca=121。 答案:int i;max=min=a0;for(i=0; imax)max=ai;if(aimin)min=ai;ca=max-min;第9题:从文件中读入n个字符串,将其中以字母A开头的字符串复制 到二维字符数组str1中。答案:for(i=0;i=0)&(strcmp(stri,B)b&ac) return a;if(ba&bc) return b;return c;第13题:邮政汇款的收费标准是汇款金额的1%,但单笔收费上限是50元。 编写一个函数double shouFei(double money),根据输入的 汇款金额money,返回所要收取的费用。 答案:double shouFei(double money)double sf = 0;if(money 50.0)sf = 50.0;return sf;第14题:请输出个、十、百位数字各不相同的所有三位数, 结果写入f2.txt中,一个数一行。要求:输出时按从小到大的顺序输出。答案:for(i = 0; i 10; i+)for(j = 0; j 10; j+)for(k = 1; k 10; k+)if(i != j & j != k & i != k)output k j i;count+;if(count = 60)count = 0;output endl;elseoutput b)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;第17题:编写函数pfh,功能是返回两个实数的平方和。答案:double pfh(double x, double y) return x*x+y*y;第18题: 编写函数getSum()求整数m的各位数字之和并返回该值。 例如m252时,各位数字之和为9。答案:-int s=0,n;while( m!=0)n=m%10;s+=n;m=m/10;return s;-第19题:约瑟夫问题这是17世纪的法国数学家加斯帕在数目的游戏问题中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。答案:-int i,j,k;j=30; /*j:指向已经处理完毕的数组元素,从linki指向的人开始计数*/for(i=0;i15;i+) /*i:已扔下海的人数计数器*/for(k=0;) /*k:决定哪个人被扔下海的计数器*/if(k9)j=linkj.nextp; /*修改指针,取下一个人*/k+=linkj.no_out; /*进行计数。因已扔下海的人计标记为0*/else break; /*计数到15则停止计数*/linkj.no_out=0; /*将标记置 0,表示该人已被扔下海*/-第20题:函数compare比较两个长度为N的数组是否相等(即 两数组中下标相同的数组元素均相等)。请完成该 函数。答案:for(int index = 0; index m)node * p_new = new node;p_new-data =m;p_new-next = NULL;if(!p_head | !p_tail)p_tail = p_head = p_new; elsep_tail-next = p_new;p_tail=p_new;inf.close();void sort(node* p_head)for(node * p_i = p_head;p_i;p_i=p_i-next)node* p_k= p_i;for(node* p_j=p_i;p_j;p_j=p_j-next)if(p_j-data data)p_k=p_j;int x = p_i-data;p_i-data = p_k-data;p_k-data = x;void write_out(node* p_head, char* s_file)ofstream ouf(s_file,ios:out);for(node * p_cur = p_head; p_cur; p_cur=p_cur-next)oufdataendl;ouf.close();第22题:一个首项大于0且等差大于0的等差数列前四项和为 26,前四项积为880。请写一个函数返回该数列的第 20项的值。提示:如果一个数列从第二项起,每一项与它的前一项的 差等于同一个常数,这个数列就叫做等差数列,这 个常数叫做等差数列的公差。如等差数列:1,3, 5,7,9,11。公差是2,该数列的第5项值是9。答案:int myfun()int a,b,c,d,flag;for(flag=1,a=0; flag & a5;+a)for(d=1;flag & d5;+d)b=a+(a+d)+(a+2*d)+(a+3*d);c=a*(a+d) *(a+2*d)*(a+3*d);if(b=26&c=880)return a+19*d; return -1;第23题:打鱼还是晒网中国有句俗语叫三天打鱼两天晒网。某人从1990年1月1日起开始三天打鱼两天晒网,问这个人在以后的某一天中是打鱼还是晒网。答案:- for(year=1990;year0;i-)if (i0 & ai-1n)ai = ai-1;elsebreak;ai = n;第25题:一个整数数列,它的第一项是0,第二项是1, 以后每项都是前两项之和,编写求前n项之和的函数GetSum(int n)。答案:-int GetSum(int n)int a1 = 0, a2 = 1;int sum = a1 + a2; for(int i=0; i=a & stri=A & stri=Z)stri += 32;第27题:编写一个函数,实现对一维数组的二分(折半) 查找算法。如找到,则返回其数组下标,否则返回-1。 二分查找的思想是:要查找的数据保存在数组中,并且 数据已经排好序(如从小到大递增)。查找时,每次比较 数组中间(用数组下标判断)那个数据,如果相等,则找到; 如果小于它,则在数组左半边按照相同的方式查找;如果大于它, 则在数组右半边按相同方式查找。答案:int mid; while(true) if(last first) return -1; mid = (first+last)/2; if (key = sorted_arraymid) return mid; if (key sorted_arraymid) / search the left half last = mid - 1; else / search the right half first = mid + 1; 第28题:编写一个函数:将一个N进制数转换成M进制数(N和M在2到10进制之间), N进制数和M进制数均以字符串方式存储。第29题:完成函数sofd,该函数计算一个数的各位数字之和 并返回,如sofd(252)返回9。说明:sofd函数编写时只需考虑n大于等于0的情况,不用 处理负整数的情况。 答案:int m,s = 0;while(n!=0)m=n%10;s+=m;n=n/10;return s;第30题:请编写一段代码,求出给定正整数s的所有因子, 并按从小到大的顺序存放在数组factor中。例如:24的因子是1、2、3、4、6、8和12,因子个数是7。答案:for(int j=1;j=s/2;j+)if(s%j=0)factorcount=j;count+; 第31题:请编写函数int find(int n),判断整数n是否满足 下面的条件:n加上100后是一个完全平方数,n再 加上168又是一个完全平方数。若满足条件,函数 返回整数n;否则返回0。说明:如果一个整数n是另一个整数的平方,则称整数n是 完全平方数。例如81是9的平方,则81是完全平方数。答案:int x,y, result;result=0;x=sqrt(n+100); /*x为n加上100后开方后的结果*/y=sqrt(n+268); /*y为n再加上168后开方后的结果*/if(x*x=n+100 & y*y=n+268)result = n;return result;第32题:给定一组十进制正整数,请统计各个正整数的各位 数字中0的个数。数据保存在f1.txt文件中,要求编写 计算0的个数的函数countZero。答案:if(num = 0) return 1;while(num != 0)digi = num % 10;if(0 = digi)count += 1;num = (num - digi) / 10;return count;第33题: 用“辗转相除方法”计算两个数 x,y 的最大公约 数答案:-n=x%y;while(n!=0)x=y;y=n;n=x%y;-第34题:请编写函数 int occ_num(int a, int x, int len) 计算整数 x 在数组 a 中出现的次数,其中 len 为数组a的长度。答案:-int m =0;for(int i=0;ilen;i+)if(ai=x) m+;return m;-第35题: 编写函数 reverse, 对给定的10个数置逆序排列.答案:for(i=0;iN/2;i+) t = ai; ai=aN-1-i; an-1-i=t;第36题:下面程序中的函数void conv(char *s);将字符串s中的所有字符逆序存放,例如s中为”abc”时,调用该函数后s中的字符串变为”cba”,完成该函数。答案:int len = strlen(s), j;for (j=0;j0)x1=x1*x;n-;return x1;第38题:函数void sort(char a100, int len);对二维 字符数组中的字符串按字典顺序从小到大排序,编 写该函数。答案:char ch100; int i,j; bool flag=1; for(i=0;ilen-1&flag;i+) flag=0; for(j=0;j0) strcpy(ch,aj); strcpy(aj,aj+1); strcpy(aj+1,ch); flag=1; -int i,j,k; for(i=0;in;i+)k=i;for(j=i+1;j0) k=j;if(k!=i) char temp100; strcpy(temp,arrayi); strcpy(arrayi,arrayk); strcpy(arrayk,temp);第39题:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。答案:-for(i=0;i200;i+)for(j=0;jarrj)k=arrj+1;arrj+1=arrj;arrj=k;-第40题: 编写函数sum7s(int n), 该函数的功能是求1到 n之间(含n)所有7的倍数之和。若n小于7,则 返回0。 答案:int sum7s(int n)int sum = 0;for(int i=7; i=n; i+=7)sum += i;return sum;第41题:编写程序,求一个 3 5阶矩阵 a 与其自身转置矩阵 c 的乘积,结果存入数组 b 中。答案:for(i=0;i3;i+)for(j=0;j5;j+) cji=aij;for(i=0;i3;i+)for(j=0;j3;j+)for(int k=0;k5;k+) bij+=aik*ckj;第42题:有一群士兵,人数不超过n。孙子将其按照一行3人 排队,余2人;按照一行5人排队,余1人;按照一 行7人排队,刚好排成若干行。编写函数myArmy()来 计算士兵的人数。(提示:可以采用穷举法求解。)答案:for (c=1; c=n; c+)if (c%3=2) & (c%5=1) & (c%7=0)return;第43题: 编写一个函数trans,将传入此函数的直角坐标值 转换为极坐标值(求极坐标的公式如图所示),并 返回主调函数中,要求两值均以指针参数带回。答案:float x, y;x = *c;y = *q;*c = (float)sqrt(x*x + y*y);*q = (float)atan(y/x);第44题:定义人民币类IntRMB,数据成员包括:圆(IYuan)、角(Jiao)、分(Fen),均为整型。 类型转换函数将人民币类强制转换为浮点数,以圆为单位。参考:内置数据类型可以进行类型强制转换,类也可以进行同样的转换,这是通过定义类型 转换函数实现的。它只能是类的成员函数,不能是友元函数。 格式为:类名:operator 转换后的数据类型( ) 如:operator float()是转换为浮点数的成员函数。 使用时的格式为:float(对象名); 或 (float) 对象名; 答案:class IntRMB /人民币类 private: int IYuan; int Jiao; int Fen; public: IntRMB(int y=0,int j=0,int f=0); /构造函数 void print(); /数据输出函数 operator float(); /浮点数类型转换函数;IntRMB:IntRMB(int y,int j,int f)/构造函数IYuan=y;Jiao=j;Fen=f;IntRMB:operator float() float temp; temp=float(IYuan + (Jiao/10.0) + (Fen/100.0); return temp;void IntRMB:print() cout IYuan 元 Jiao 角 Fen 分 endl;第45题:阶乘尾数零的个数100!的尾数有多少个零? 答案:-for(i=5;i=100;i+=5) +count; if(!(i%25) +count; -第46题:编写一个以任意两点之间距离作为返回值的函数 double distance(Point point1, Point point2)。 注:计算距离会使用求平方根,它的函数原型是double sqrt(double v)。答案:double distance(Point point1, Point point2)return sqrt(point1.x-point2.x) * (point1.x-point2.x)+ (point1.y-point2.y) * (point1.y-point2.y)+ (point1.z-point2.z) * (point1.z-point2.z);第47题: 求多项式 1!+2!+3!+10!的值存入变量 out 中.答案:- for (int i=1; i=10; i+) n = n*i; s += n; cout sendl; out = s ;-第48题:某个公司采用公用电话传递数据,数据是四位的整 数,在传递过程中是加密的。加密规则如下:每位 数字都加上5,然后用和除以10的余数代替该数字, 再将第一位和第四位交换,第二位和第三位交换 。 写一个函数实现这个算法,函数原型是 int changeinfo(int info) 答案:int changeinfo(int info)int a4;a0=info%10;a1=info%100/10;a2=info%1000/100;a3=info/1000;for(int i=0;i=3;i+) ai+=5;ai%=10;for( i=0;i=3/2;i+)int t=ai; ai=a3-i; a3-i=t;return a0+a1*10+a2*100+a3*1000; 第49题:编写函数borrow,实现下述功能:小明有五本新书,要借 给A,B,C三位小朋友,若每人每次只能借一本,则可以有 多少种不同的借法?要求将计算出的结果返回。答案:-int a,b,c,count=0;for(a=1;a=5;a+) for(b=1;b=5;b+) for(c=1;a!=b&c=5;c+) if(c!=a&c!=b) count+;return count;-第50题: 判断一个数是否是素数(要求程序中设置一个参 数flag,flag为1代表是素数,为0代表不是)答案:for(n=2;n=m/2&flag;n+) if(m%n=0) flag=0; coutflagendl;第51题:下面的结构体comp表示复数,real表示其实部, img表示其虚部。函数add实现两个复数one和two 的加,并返回结果;函数mul实现两个复数one和 two的乘,并返回结果。请完成这两个函数。答案:temp.real=one.real+two.real;temp.img=one.img+two.img;temp.real=one.real*two.real-one.img*two.img;temp.img=one.real*two.img+one.img*two.real;第52题: 找出1-200之间的完数个数 n(完数是一个数的因 子之和是这个数本身。例如6=1+2+3)。答案:-n=0;for(m=1;m=200;m+)s=1;for(l=2;lm;l+)if(m%l=0)s+=l;if(m=s)n+;coutm;第53题:将100元换成用10元、5元和1元的组合,共有多少种组合方法。答案:int i,j,k,count=0;for(i=0;i=10;i+)/i是10元张数,j是5元张数,k是1元张数for(j=0;j=0)coutitjtkendl;count+;coutcount2) 是a中数组元素的个数。完成该函数的编写。 答案:int max,i,t,m;max=a0;for(i=1;imax)max=ai;m=i;t=a0;a0=am;am=t;max=a1;for(i=2;imax)max=ai;m=i;t=a1;a1=am;am=t;第55题:题目:设计函数PrintDiagram(m)打印直方图,直方图宽度为3行,每列代表数据1。 运行结果如样张所示。答案:void PrintDiagram(int m)int i ;cout|endl;for(i=0;i3;i+)cout|;for(int j=0;jm;j+) cout*;coutendl;cout|endl;第56题:创建一个整形数据的线性链表,对线性链表中的整 形数据进行排序,然后向线性链表中插入一个元素, 然后输入一个数找出该数是线性链表中第几个元素, 最后删除整个线性链表。答案:for(int i=2;i=len;i+) p1=new node; cout请输入一个整数p1-num; p2-next=p1; p2=p1; p2-next=NULL; for(p1=head;p1!=NULL;p1=p1-next) p=p1; for(p2=p1-next;p2!=NULL;p2=p2-next) if(p2-nump-num) p=p2; if(p!=p1) int temp; temp=p-num; p-num=p1-num; p1-num=temp; p1=p2=head; for(p1=head;p1-numpnode-num&p1-next!=NULL;p1=p1-next) p2=p1; if(p1-next=NULL) p1-next=pnode; pnode-next=NULL; else if(p1=head) pnode-next=p1; head=pnode; else pnode-next=p1; p2-next=pnode; for(p1=head;p1!=NULL;p1=p1-next) if(p1-num=key) break; i+; while(p1!=NULL) p2=p1; p1=p1-next; delete p2; 第57题:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换 。 写一个函数实现这个算法,函数原型是 int changeinfo(int info)答案:int changeinfo(int info) int a4; a0=info%10; a1=info%100/10; a2=info%1000/100;a3=info/1000; for(int i=0;i=3;i+) ai+=5;ai%=10; for( i=0;i=0) 要求前后两次求出的x的差的绝对值小于0.00005.。答案:while(fabs(y-x)1.0e-5) x=y; y=1/2.0*(x+a/x);第59题: 编写一个函数 int day_of_month(int year, int month) 输入年(year)、月(month),打印出该年份该月的天数。 (若输入数据不合法,要求返回值为0) 公历闰年的计算方法为: i) 能被4整除且不能被100整除的为闰年; 或者 ii) 能被400整除的是闰年。答案:switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论