编程题的总结.docx
- 文档编号:24630817
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:21
- 大小:19.96KB
编程题的总结.docx
《编程题的总结.docx》由会员分享,可在线阅读,更多相关《编程题的总结.docx(21页珍藏版)》请在冰豆网上搜索。
编程题的总结
不太理解的题
1.
#include
usingnamespacestd;
charabc(char*);
charabc(char&);
voidmain(){
for(chari=’a’;i<’f’;i++){
abc(i);
abc(&i);
cout<
}
}
charabc(char*s){(*s)++;return*s;}
charabc(char&s){s++;returns;}
答案:
cf
2.
#include
classT
{public:
T(intx){a=x;b+=x;};
staticvoiddisplay(Tc)
{cout<<"a="< private: inta; staticintb; }; intT: : b=5; voidmain() {TA(6),B(8); T: : display(A); T: : display(B);} A.a=3b=13B.a=6b=11C.a=6b=19D.a=3b=8 a=5b=13a=8b=19a=8b=19a=6b=13 答案: c 3.以下是运输公司对所运货物计费的程序。 设每公里每吨的基本运费为p,货物重量为w,总运输里程在某段中的里程为Δs,折扣为d,则该段运费为: p*w*Δs*(1-d)。 总费用为各段费用之和,采用不加break的switch语句。 intmain(){ intc,s,s1; doublep,w,d,f; cout<<"输入运输单价p,重量w和里程s: "< cin>>p>>w>>s; s1=s; f=0; c=s/250; switch(c){ default: d=0.15;f+=p*w*(s-3000)*(1-d);s=3000; case8: case9: case10: case11: d=0.1;f+=p*w*(s-2000)*(1-d);s=2000; case4: case5: case6: case7: d=0.08;f+=p*w*(s-1000)*(1-d);s=1000; case2: case3: d=0.05;f+=p*w*(s-500)*(1-d);s=500; case1: d=0.02;f+=p*w*(s-250)*(1-d);s=250; case0: d=0;f+=p*w*s*(1-d); } cout<<"运输单价: "< "< "< cout<<"折扣后运费: "< return0; } 运输公司是怎样分段的? 并给出各段的折扣率。 ,设输入运输单价、重量和里程为0.5404300,输出结果是什么? 答案: 分段与运费打折情况如下: s<250不打折扣 250<=s<5002%折扣 500<=s<10005%折扣 1000<=s<20008%折扣 2000<=s<300010%折扣 3000<=s15%折扣 输出结果: 运输单价: 0.5重量: 40里程: 4300 折扣后运费: 77900 容易错的题 1. #include classA { intnum; public: A(inti){num=i;} A(A&a){num=a.num++;} voidprint(){cout< }; voidmain() { Aa (1),b(a); a.print(); b.print(); } 答案: 21不是12 2. #include voidmain() { ints=0; for(inti=1;;i++){ if(s>50)break; if(i%2==0)s+=i; } cout<<"i,s="< }答案: 15,56不是12,42(因为i又加了一个1才退出循环的啊! ) 3.输入10个数,用“选择法”将其按降序排列,然后输出。 #include voidmain() {inta[10],i,j,ip,t; for(i=0;i<10;i++) cin>>a[i]; for(i=0;i<9;i++) {ip=i; for(j=i+1;j<10;j++) if(a[ip] t=a[i]; a[i]=a[ip]; a[ip]=t;} for(i=0;i<10;i++) cout< cout< 3、输出非波那契数列的前20项,每项占用6个字符的宽度,每行输出5个数。 该数列的通项公式为: a1=1,a2=1,an=an-1+an-2(n>=3)。 **************************************************************************** #include #include voidmain() {inta=0,a1=0,a2=1,i; cout< for(i=2;i<=20;i++) {a=a1+a2; cout< if(i%5==0)cout< a1=a2;a2=a;} } ***************************************************************** #include voidmain() {intb[20]={1,1}; cout< for(inti=2;i<20;i++) {b[i]=a[i-1]+a[i-2]; cout< } ***************************************************************** 4、输入一个自然数,判断其是否为素数。 #include intf1(intn); voidmain() {inta; cin>>a; if(f1(a))cout<<"yes"< elsecout<<"no"< } intf1(intn) {inti=2,f=1; while(i<=n/2&&f==1) {if(n%i==0)f=0; i++;} returnf;} 5.下面程序在一组数中查找指定数据,请填空完善它。 #include intsearch(inta[],intn,intk) {inti; for(i=0;i if(a[i]=k) returni+1; return-1; } voidmain() {intb[10]={23,42,15,46,53,27,58,43,90,32}; intx,p; cout<<"请输入要查找的数据: "; cin>>x; p=search(b,10,x); if(p==1) cout<<"位置为: "< else cout<<"没找到! "; } 6.编写一个函数模板“CountArray”,用于统计一维数组中某个指定值的出现次数。 如对于一维整型数组: inta[]={1,2,3,5,5,7,8},调用此模板函数可统计出数组a中,“5”出现的次数为“2”。 template intCoutnArray(Ta[],intn,Tx){ intcount=0; for(inti=0;i if(x==a[i])count++ } returncount; } 7.现有Complex类用于描述复数,其部分代码如下: classComplex{ private: doublem_image;//描述实部 doublem_real;//描述虚部 public: Complex(doublei=0,doublej=0){ m_real=i; m_image=j; } }; (1)用友元重载+运算符 Complexoperator+(Complex&A,Complex&B){ intmimage=B.m_image+A.m_image; intmreal=B.m_real+A.m_real; returnComplex(mreal,mimage); } (2)用友元重载-运算符 Complexoperator+(Complex&A,double&d){ intreal=A.m_real-d; returnComplex(real,A.m_image); } (3)用友元重载<<运算符 Ostream&operator<<(Ostreamout,constComplex&A){ out< returnout } 8 #include classA { intnum; public: A(inti){num=i;} A(A&a){num=a.num++;} voidprint(){cout< }; voidmain() { Aa (1),b(a); a.print(); b.print(); } 答案: 21 9.猴子吃桃问题: 猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。 intmain(){ intday,x1,x2; day=9; x2=1; while(day>0){ x1=(x2+1)*2;//某天的桃子数x1是前一天桃子数x2加1后的2倍 x2=x1; day--; } cout<<"total="< return0; } 答案: 1534 10.用递归法求从1到n的平方和: f (1)=1(n=1) f(n)=f(n-1)+n*n(n>1) #include usingnamespacestd; intf(int); intmain(){ intn,s; cout<<"inputthenumbern: "; cin>>n; s=f(n); cout<<"Theresultis"< return0; } intf(intn){//递归法求平方和函数 if(n==1)return1; elsereturn(n*n+f(n-1)); } 11.若一头小母牛从出生第四个年头开始每年生一头母牛,按此规律,第n年时总共会有多少头母牛。 采用递推算法。 voidmain(){ intn,i; longa=0,b=0,c=0,d=1,temp; //a是3岁及以上母牛数,b是2岁,c是1岁,d是0岁 cout<<"请输入年数n: "; cin>>n; cout< for(i=1;i a+=b;//第n年时,3岁及以上母牛数 b=c;//第n年时,2岁母牛数 c=d;//第n年时,1岁母牛数 d=a;//第n年时,新生牛数 } cout<<"第n年总共有"<<(11)<<"头母牛。 "< } 12.在矩形类中重载关系运算符>=,采用友元,比较的依据是矩形面积的大小。 重载算术运算符+=,采用成员函数,更新矩形对象,其长与宽,分别添上形参矩形的长与宽。 重载算术运算符+,利用构造函数,采用友元。 classCRect{ intlength,witdth; public: CRect(intl,intw){ length=l; width=w; } friendintoperator>=(CRect&r1,CRect&r2){ returnr1.length*r1.width>=r1.length*r1.width;//比较面积 } voidoperator+=(CRect&r){ length+=r.length;//求长 width+=r.width;//求宽 } friendoperator+(CRect&r1,CRect&r2){ returnCRect(r1.length+r2.length,r1.width+r2.width);//利用构造函数 } } 14 编写程序,把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a: xxkl.dat”中。 #include #include voidmain(){ ofstream fout("a: xxk1.dat”);//定义输出文件流并打开文件得2分 if(! fout){ cerr<<"文件没有打开! "< exit(l): }//可有可无 intx; cin>>x; while(x! =-1){ fout< cin>>x; } 课后比较难的题 1.产生空字符串: #include #include char*mystrspc(char*string,intn) { inti; chara[100]; string=a; for(i=0;i { *(string+i)=32; cout<<*(string+i); } returna; } voidmain() { char*a; inti; cout<<"请输入空字符串的个数: "; cin>>i; a=newchar[i]; mystrspc(a,i); delete[]a; } 2.去掉尾部的空字符串: #include #include char*mytrim(char*string) {//去掉尾部的 intl=0,p=0; l=strlen(string); if(l==0)returnstring; p=l-1; while(string[p]==32) { string[p--]=0; if(p<0)break; } returnstring; } voidmain() { chara[100]="yuanjinlong"; cout< } 3.去掉前部的空字符串: #include #include char*myltrim(char*string) {//去掉前部的 intl=0,p; l=strlen(string); if(l==0)returnstring; p=0; while(string[p]==''||string[p]=='\t') { string[p++]='\n'; if(p>l)break; } returnstring; } voidmain() { chara[100]="yuanjinlong"; cout< } 4.递归法求feb数列的n项 #include intfeb(intn) { if(n==0)return(0); if(n==1)return (1); if(n>1)returnfeb(n-1)+feb(n-2); } voidmain() { cout< } 5.字符串查找函数 #include #include voidmystrchr(charstring[],intc) {inti; intk; k=strlen(string); for(i=0;i<=k;i++) { if(string[i]==c) { cout< i++; } } } voidmain() { chars1[100]=""; cout<<"请输入字符串"; cin>>s1; charb; cout<<"请输入查找字符"; cin>>b; intm=b; mystrchr(s1,m); } 6.字符串反转函数 #include #include voidmystrrev(charstring[]) {charm; inti,k; k=strlen(string); for(i=0;i<(k/2);i++) { m=string[i]; string[i]=string[k-1-i]; string[k-1-i]=m; } for(i=0;i cout< } voidmain() {chars1[100]; cout<<"请输入字符串"; cin>>s1; mystrrev(s1); } 7.转置 #include #definew200//定义常量w=200 voidzhzh(inta[],intm,intn)//定义函数转置zhzh,用一维数组保存 { intb[w]; for(inti=0;i { for(intj=0;j { { b[j*n+i]=a[i*m+j];//将a[]与矩阵第i行第j列相当的元素保存到b[]第j行第i列 } } } for(intk=0;k a[k]=b[k]; } voidmain()//用主函数来验证zhzh()函数 { inta[]={1,2,3,4,5,6,7,8,9,0,11,12,13,14,15}; for(inti=0;i<15;i++) { cout< if((i+1)%3==0)//按5行3列输出 cout< } zhzh(a,3,5);//调用转置函数 for(i=0;i<15;i++) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 总结