C++50题答案_第1页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

本学期程序设计基础课程实行上机考核,现将考核有关事项通知如下:(1) 考核时间:本学期最后一次上机时间为机试。(2) 考核内容:C+面向过程部分,主要是算法设计与实现。考题来自本学期布置的作业、部分例题及一些补充的题目。(3) 考试形式:机试前进入机房时,每人随机抽取一道题(同一个班的同学保证不抽到同一题),然后上机编程,调试通过后报告监考人员审核,审核通过后将源程序拷贝到监考人员U盘上,然后可以离开机房。源程序文件明必须是“学号姓名.cpp”,如“2012211532刘天.cpp”。(4) 考试要求:机试时考试规则同课堂考试一致,不允许带书、纸张等。不能携带任何可用计算机处理的软件或数据(不允许任何私人携带的U盘、磁盘或计算器) ,不能携带任何类型的通讯工具,包括无线电接收器、移动电话。(5) 考试成绩:本次机试成绩将在程序设计基础课程成绩中占25%的比重。(6) 其它有关事项由主考教师和监考人员负责处理。附:考试题集1. 利用异或运算对输入的文本进行加密解密输出,用户输入一个文本(字符串,设不超过20个字符),然后输入作为密钥的字符,程序输入加密及解密的字符串。/加密字符串#includevoid main() char a21,b,key; int i; couta; coutb; for(i=0;ai!=0;i+) ai=aib; cout加密后:; for(i=0;ai!=0;i+) coutai; coutendlkey; for(i=0;ai!=0;i+) ai=aikey; for(i=0;ai!=0;i+) coutai; coutendl; 已阅,请放心食用2. 编写一个程序,用户输入年份及月份两个数据,程序输出该月份的天数。(提示:对2月要考虑是否闰年,闰年年份要么能被4整除且不能被100整除,要么能被400整除,除次之外都不是闰年)。#includevoid main() int year,month,days; coutyearmonth; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) days=31; coutyear年month月有days天n; else if(month=4|month=6|month=9|month=11) days=30; coutyear年month月有days天n; else if(year%4=0&year%100!=0)|year%400=0) days=29; coutyear年month月有days天n; else days=28; coutyear年month月有days天n; 已阅,请放心食用 3. 某大桥按不同型号征收车辆过桥费:自行车免费,摩托车2元,小汽车5元,大客车与货车8元,货柜车12元。编写一个程序,按车辆的不同型号计算通过该大桥应征的过桥费。(提示:可以用整数对不同型号的车辆进行编码)/收过桥费#includevoid main() int kind; cout1.自行车n; cout2.摩托车n; cout3.小汽车n; cout4.大货车或客车n; cout5.货柜车n; coutkind; switch(kind) case 1: cout费用:0元endl; break; case 2: cout费用:2元endl; break; case 3: cout费用:5元endl; break; case 4: cout费用:8元endl; break; case 5: cout费用:12元endl; break; default: cout错误!endl; 已阅,请放心食用4. 输入一位同学的考试成绩,若是90100分,输出“Excellent”,8089输出“Very good”,7079输出“Good”,6069输出“Pass”,60分以下输出“No Pass”。#includevoid main() int marks; coutmarks; switch(marks/10) case 10:case 9: coutExcellentn; break; case 8: coutVery Goodn; break; case 7: coutGoodn; break; case 6: coutPassn; break; default : coutNo Passn; 已阅,请放心食用5. 旅行社的订票量小于10张时,航空公司给予10%的折扣;订票量大于或等于10张且小于20张时,航空公司给予15%的折扣;订票量大于或等于20张且小于30张时,航空公司给予30%的折扣;订票量大于或等于30张时,航空公司给予最高的45%的折扣。编程输入订票张数及单张机票票价,程序输出折扣率及应付款额。/旅行社折扣#includevoid main() int num,price; float discount,total_price; coutnumprice; switch(num/10) case 0: discount=0.1; break; case 1: discount=0.15; break; case 2: discount=0.3; break; default: discount=0.45; total_price=num*price*(1-discount); cout总价格为:total_priceendl;已阅,请放心食用6. 用户输入一个整数流(输入1000表示数据输入结束),如4 1 13 0 6 -5 1 -1 7 -12 19 0 100 编写程序统计输入流中-1、0和+1的个数。/输入数流#includevoid main() int a100,i,j,x=0,y=0,z=0; coutai; if(ai=1000) break; for(j=0;aj!=1000;j+) if(aj=-1) x+; if(aj=0) y+; if(aj=1) z+; cout该数流中含-1:x项n; cout该数流中含 0:y项n; cout该数流中含 1:z项n;已阅,请放心食用7. 编写一个程序,求一个自然数中含有多少个2的因子。如,6含1个2的因子,8含3个2的因子,11不含2的因子。(提示,程序应检查用户输入的合法性)。/求2因子#includevoid main() int x,i,n;docoutx; while(x=0); n=x; for(i=0;n%2=0;i+) n/=2; cout整数x含有i个2因子endl;已阅,请放心食用8. 编写一个程序解决爱因斯坦台阶问题:有人走以台阶,若以每步走2级则最后剩1级;若每步走3级则最后剩2级;若以每步走4级则最后剩3级;若以每步走5级则最后剩4级;若以每步走6级则最后剩5级;若以每步走7级则最后刚好不剩。问台阶共有几级?#includevoid main() int i; for(i=0;i+) if(i%2=1&i%3=2&i%4=3&i%5=4&i%6=5&i%7=0)break; cout最小可能值是:iendl;已阅,请放心食用9. 公鸡5元1只,母鸡3元1只,小鸡1元3只,花了100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?/百元买百鸡#includevoid main() int cock,hen,chicken,price; for(cock=0;cock=20;cock+) for(hen=0;hen=33;hen+) chicken=100-cock-hen; if(chicken%3=0&5*cock+3*hen+chicken/3=100) cout公鸡cock只,母鸡hen只,小鸡chicken只n; 已阅,请放心食用10. 编程实现解决下述问题的算法:一位顾客在购物时,如果买4个苹果剩下4角钱如果买5个苹果则缺5角钱,请问,该顾客带了多少钱?多少钱可以头一个苹果?#includevoid main() int money,money1,money2,i,m,n; for(i=1;i+) if(4+4*i=5*i-5) money=4+4*i; money1=money/10; money2=money-10*money1; cout顾客带了money1元money2角,苹果价格为每个i角n; break; 已阅,请放心食用11. 编写程序计算100之内可以被13整除的自然数之和。#includevoid main() int i,sum=0; for(i=1;i=100;i+) if(i%13=0) sum+=i; cout100以内可以被13整除的自然数之和为:sumendl;已阅,请放心食用12. 键盘输入m和n(10mn32000),求出mn间所有素数且按每行8个数形式输出。/求m到n的素数#include#includeint f(int i)int l;for(l=2;li;l+)if(i%l=0)return 0;return 1;void main()int m,n,x,i,j;int k=0;docout输入m,n (其中10mmn;while(m=n|n32000);for(i=m;i=n;i+)if(f(i)coutsetw(6)i;k+;if(k%8=0)coutendl;coutendl;已阅,请放心食用13. 编写程序打印乘法口诀表。/打印乘法口诀表#includevoid main() int a,b,t; for(i=1;i=9;i+) for(j=1;j=i;j+) couti*j=i*jt; coutendl; 已阅,请放心食用14. 编程实现求解最大公约数的欧几里德算法,用户输入两个任意正整数,程序输出他们的最大公约数。算法如下:步骤1:如果p q,则交换p和q。步骤2:令r是p / q 的余数。步骤3:如果r = 0,则令g = q并终止;否则令p = q, q = r并转向步骤2 14./求最大公约数#includevoid main()int p,q,r;coutpq;if(pq)r=q;q=p;p=r;r=p%q;while(r!=0)p=q;q=r;r=p%q;cout最大公约数是:qendl;已阅,请放心食用15. 求不超过正整数n的2的最大幂值,如输入17,程序应输出4(24=1617)。#includevoid main() int n,t=1,i; coutn; for(i=0;i+,t*=2) if(tn) couti-1n; break; 已阅,请放心食用16. 有关专家十分关注珠江渔业资源的问题。目前珠江中大约有8000万条鱼,平均每年以3.5%的速度减少。请编写一个程序,计算在多少年之后鱼的数目下降到目前的一半?多少年后下降到目前的十分之一?(提示注意整数类型的取值范围)。#includevoid main() double fishnum=8e7,fish; int year; for(year=0,fish=fishnum;year+,fish*=0.965) if(fish=4e7) cout当鱼的数目等于原来的一半时,需要year年n; break; for(year=0,fish=fishnum;year+,fish*=0.965) if(fish=8e6) cout当鱼的数目等于原来的十分之一时,需要year年n; break; 已阅,请放心食用17. 编程求解一元二次方程ax2+bx+c=0的根。要求:设计完备的测试数据集,考虑a, b, c各种取值对根的影响/二次方程求解#include#includevoid main()float a,b,c,x1,x2,t; coutabc; t=b*b-4*a*c;if(a=0&b=0)cout根为一切实数n;else if(a=0)cout根为-c/bn;else if(t0)cout无根n;else if(t=0)cout根为-b/(2*a)0)cout根为(-b+sqrt(t)/(2*a)和(-b-sqrt(t)/(2*a)n;已阅,请放心食用18. 编写一个程序,输入全班同学某门课考试成绩,计算平均成绩并找出其中最高分与最低分。(提示:批量数据通常不事先规定输入的数据数量,而是以一个特殊的标志作为输入结束。程序根据结束标志统计人数)/班级分数#includevoid main() int a100,i,max,min,s=0; coutai; if(ai=1000)break; if(i=0) max=a0; min=a0; max=maxai?max:ai; min=minai?min:ai; s+=ai; cout该班同学成绩中最高分为:maxn最低分为minn平均分为s/in;已阅,请放心食用19. 编一程序模拟整数加、减、乘、除四则运算。当你在键盘上输入5+6后,程序将输出=11,当你在键盘上输入11*7后,程序将输出=77。/模拟四则运算#includevoid main() float a,b; char x; cout请输入算式:axb; if(x=+) cout=a+bendl; else if(x=-) cout=a-bendl; else if(x=*) cout=a*bendl; else if(x=/) cout=a/bendl; else couterror!endl;已阅,请放心食用20. 把一张1元钞票换成1分、2分和5分的硬币,每种至少有1枚,问有多少种换法?#includevoid main()int i,j,k,m=0; for(i=1;i=20;i+)for(j=1;j=1) m+=1; couti=i j=j k=kendl; cout共有m种结果n;已阅,请放心食用21. 求自然对数底(e)的近似值。e的近似值计算公式为:当余项rn时停止计算。设=1e-8#include#includemain() int i; double temp=1,sum=0; for(i=1;temp=1e-8;i+) sum+=temp; temp/=i; coute=1+1/1!+1/2!+1/3!+.=setprecision(9)sumendl; (控制输出流显示浮点数的有效数字个数)已阅,请放心食用22. !#includevoid main()int sum=0,n=1,i;for(i=1;i=7;i+)n*=i;sum+=n;coutsumendl;已阅,请放心食用23. /求#includevoid main()int i,s=0; for(i=1;i=39;i+=2)s+=i*(i+1);cout结果是:sendl;已阅,请放心食用24. Y=X(-1)n+1的值,精确到10-6。/求值,精确到10e-6#include#includevoid main()int i,x; coutx; double temp=x,s=0; for(i=1;fabs(temp)=1e-6;i+=2)s+=temp; temp=temp*(-x*x)/(float)(i+1)*(i+2);cout结果是:sendl;已阅,请放心食用25. 编制一个程序,读入一个正整数,并反向输出。例如,读入123,输出是321。25./反向输出#include#includevoid main() int x,i,j; coutx; for(i=0;i+) if(x/(int)pow(10,i)=0)break; int a100; for(j=0;ji;j+) aj=(x%(int)pow(10,j+1)/(int)pow(10,j); cout反向输出为:; for(int b=0;bi;b+)coutab; coutendl;/*#includevoid main()int i;char x100;coutx;for(i=0;xi;)i+;cout=0;i-)coutint(xi-48);coutn;*/已阅,请放心食用26. 水仙花数问题:水仙花数是一种三位数,它的值等于每个数字的立方和。例如,153=13+53+33。编程输出小于999的水仙花数。/水仙花数#includevoid main()int i,a,b,c; for(i=100;i=999;i+)a=i/100;b=(i-100*a)/10;c=i-100*a-10*b;if(i=a*a*a+b*b*b+c*c*c)coutiendl;已阅,请放心食用27. 求一整数的等差数列,该数列满足下述条件:头4项数的和值为26,积值为880。(提示:该数列公差为正整数,否则数列将出现负数;该数列的首项必须小于5,且其公差也小于5,否则头四项数的和将大于26。)/等差数列#includevoid main()int k=1,d,a1,a2,a3,a4; bool b=false; for(k=1;k+)for(d=0;dk;d+)a1=k-d; a2=2*k-d; a3=3*k-d; a4=4*k-d;if(a1+a2+a3+a4=26&a1*a2*a3*a4=880)cout该数列通项为:an=kn-dendl;b=true;break;if(b) break;已阅,请放心食用28. 完数问题:若有一数,其值等于它的因子之和,则该数称为完数。例如,6的因子为1、2、3,而6=1+2+3,故6是完数。编程输出1000之内的所有完数及其因子。/完数问题#includevoid main()int i,s,j; for(i=1;i=1000;i+)s=1;for(j=2;ji;j+)if(i%j)=0) s=s+j;if(i=s)coutin;已阅,请放心食用29. 100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马2匹驮1担。试编程计算大、中、小马的数目。#includevoid main() int a,b,c; for(a=0;a=100;a+=2) for(b=0;b0) cout大马c匹,中马b匹,小马a匹n; 已阅,请放心食用30. 编程产生出1到10以内的所有数对并输出,其中ij。/输出数对#includevoid main()int i,j;for(i=1;i10;i+)for(j=1;jj)couti,j ;coutn;已阅,请放心食用31. 编程求出1000以内的所有符合如下条件的数:其高位数字小于低位数字。如12,238等。但21,548不符合条件。/输出数#includevoid main()int i,a,b,c;for(i=1;i1000;i+)a=i/100;b=i/10-a*10;c=i-a*100-b*10;if(a=0&bc&b!=0)couti ;else if(a!=0&ab&bc)couti ;coutn;已阅,请放心食用32. 求任一整数N的标准分解式,即素数因子之积。例如16=2*2*2*2, 15=3*5。#includevoid main()int N,i; coutN; coutN=; for(i=2;i=N;)if(N%i=0) couti*;N/=i;else i+;coutNendl;已阅,请放心食用33. 斐波那契(Fibonacci)数列问题:Fibonacci数列递归定义为:x0=0,x1=1,xi+1=xi+xi-1, i=2,3,即从第二项开始,数列中的每一个元素等于前面两个元素之和。编程输出前20项Fibonacci数。(提示可以用递归或迭代两种方式编程)/斐波那契(Fibonacci)数列问题#includeint f(int i)int r;if(i=0|i=1) r=1;else r=f(i-1)+f(i-2);return r;void main()int n,r,m=0;for(n=0;n20;n+)r=f(n); coutr ;已阅,请放心食用34. 打印下面图形。 1 1 3 1 1 3 5 3 1 1 3 5 7 5 3 1 1 3 5 7 9 7 5 3 1 1 3 21 3 1 #include#include void main() int x,y,z,i; for(x=1;x=11;x+)for(i=1;i=(11-x)*3;i+)/打印空格(每个数字占2格,数字与数字之间1格)cout ;for(y=1;y=(2*x-1);y+=2)/打印杨辉三角左侧 coutsetw(2)y0;z-=2)/打印杨辉三角右侧 coutsetw(2)z ;coutn;已阅,请放心食用35. 打印如下图形A B C D EB C D E AC D E A BD E A B CE A B C D#includevoid main()char a5=A,B,C,D,E,i,j,x;for(i=0;i=4;i+)for(j=i;j=4;j+)coutaj ;for(x=0;xi;x+)coutax ;coutendl;已阅,请放心食用36. 正读和反读都一样的数称为回文数。编写程序输入一个整数max_num,输出从0到max_num中用二进制表示和十进制表示都是回文数的整数。定义一个函数is_circle_num()判断一个数(number)在某个进制(radius)下是否为回文数。例如,整数313就是该程序输出的一个数,因为它的二进制表示为10011001。#include#includestatic int is_circle_num(int number,int radius);int main()int num,max_num;coutmax_num;for(num=0;nummax_num;num+)if(is_circle_num(num,10)=1&is_circle_num(num,2)=1)coutsetw(6)num;cout是十进制和二进制回文数n;return 0;int is_circle_num(int number,int radius)int left_num,right_num;int max_power,left_power,right_power;max_power=1;while(max_power=number/radius)max_power*=radius;left_power=max_power;right_power=radius;while(right_power=left_power)right_num=(number%right_power)/(right_power/radius);left_num=(number/left_power)%radius;if(right_num!=left_num)return 0;right_power=right_power*radius;left_power=left_power/radius;return 1;已阅,请放心食用37. 编写一个递归函数:将一个整数转换为相应的字符串并输出,函数原型可声明为:void int2str(int number)。#includevoid int2str(int number) int a; if(number=0) return; a=number%10; int2str(number/10); coutchar(a+48) ;void main() int num; coutnum ; if(num0) num=-num; cout-; else if(num=0) coutchar(48); int2str( num ) ; cout endl ;已阅,请放心食用38. 用函数实现将一个以字符串形式表示的十六进制数转换为一个十进制整数。例如,输入”A2”转换为162。#include int turn(char ch) int i,num=0; for(i=0;chi;i+) if(chi=A&chi=0&chi=9) num=16*num+chi-0; return num; void main() char ch100; coutch; cout这个数的10进制是 :turn(ch)n;已阅,请放心食用39. 编写一个将十进制整数转换为十六进制字符串的函数。#include void turn(int x) int t; if(x=0) return; t=x%16; turn(x/16); if(t=0&t=9) cout=10&t=15) coutchar(t+55); void main() int x; coutx; cout这个数的16进制是 :; turn(x); coutn;已阅,请放心食用40. 编写出判断一个整数是否为素数的函数,并求出在2000以内的有十个以上的所有连续的非素数组。/输出十个以上的所有连续的非素数组#include#includeint f(int n) int i; for(i=2;in;i+) if(n%i=0) return 0; return 1;void main() int m,i,j,h; for(m=2;m=2000;m+) h=0; if(f(m)=1) for(i=1;i+) if(!f(m+i&(m+i=10) for(j=1;j=h;j+)coutm+j ; coutn; m+=h; 已阅,请放心食用41. 编制一个程序,统计从标准输入设备上输入的字符流(以?结束)中每个英文字母(大小写不分开计)出现的次数。#includevoid main() int n26=0,i; char ch; do cinch; if(ch=A&ch=a&ch=z) nch-a+; while(ch!=?); for(i=0; i26; i+) if(ni) coutchar(i+A):nit; coutendl;已阅,请放心食用42. 编程实现“冒泡排序算法”,将输入的若干整数由小到大(升序)排序输出。要求定义一个排序函数,其原型是void bubble(int data, int lengt

温馨提示

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

评论

0/150

提交评论