您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 钱能--C++程序设计教程(第二版)第二章
本人在大连理工大学读研需要C++,以前只学过C,根据网评,找了国内的钱能老师写的《c++程序设计教程(第二版)》,书上的例子比较不错,但是在网上一直没有下到完整的包括例子和习题的解答,于是我就突发奇想,一方面也是督促自己学习C++,想把书上和习题上的所有编程题目的答案都写出来,供正在学习C++的同学参考。现在看到第二章,以后会经常的更新答案,我也是新手,可能在编程风格和思路上有待提高,也有一些题目不知道该如何下手,路过的朋友知道的可以告诉我,我的邮箱是guosheng-14@163.com,可以督促我继续写以后的答案。第二章第一部分(例题)//2.1.1--1球表面积#includeiostreamusingnamespacestd;intmain(){doubleradius;coutpleaseinputtheradius:endl;cinradius;doubleresult=radius*radius*3.14*4;couttheresultis:resultendl;}//2.1.2—球表面积函数实现#includeiostreamusingnamespacestd;voidmianji();intmain(){mianji();}voidmianji(){doubler;coutpleaseinputtheradius:endl;cinr;if(r0)return;couttheresultis:r*r*3.14*4endl;}//2.4.1—梯形M#includeiostreamusingnamespacestd;intmain(){for(inti=1;i=10;i++){for(intj=1;j=i;j++)coutM;coutendl;}}//2.41--例2-2倒三角M#includeiostreamusingnamespacestd;intmain(){for(inti=1;i=10;++i){for(intj=0;ji-1;++j)cout;for(intj=2*(10-i)+1;j0;j--)coutM;coutendl;}}//2.41--例2-3正三角字母//省略部分和不省略部分都能执行,一个是数字判断,一个是字母判断。#includeiostreamusingnamespacestd;intmain(){for(inti=1;i=10;++i){for(intj=0;j=10-i;++j)cout;//for(intj=1;j=2*i-1;++j)//{//charch='A'-1+j;//coutch;//}for(charj='A';j-'A'2*i-1;++j)coutj;coutendl;}}//2.42—素数判定1#includeiostreamusingnamespacestd;intmain(){intnumber;coutpleaseinputanumber:endl;cinnumber;for(inti=2;inumber;++i){if(number%i==0){coutthisnumberisnotaprimeendl;return1;}}coutthisnumberisaprimeendl;}//2.4.2—素数判定2#includeiostream#includecmathusingnamespacestd;intmain(){coutpleaseinputanumber:endl;intnumber;cinnumber;doublea=sqrt(number*1.0);for(inti=2;ia;++i){if(number%i==0){coutthisnumberisnotaprimeendl;return1;}}coutthisnumberisaprimeendl;}//2.5.2—输出流控制—倒三角M#includeiostream#includeiomanipusingnamespacestd;intmain(){for(inti=9;i0;i--){coutsetw(10-i)setfill('');coutsetw(2*i-1)setfill('M')'M'endl;}}//2.5.2—输出流控制—string版本—倒三角M#includeiostream#includestringusingnamespacestd;intmain(){for(inti=0;i10;++i)coutstring(i,'')+string(2*10-1-2*i,'M')endl;}//2.5.3—文件流复制#includefstream#includeiostream#includestringusingnamespacestd;intmain(){ifstreamfin(original.txt);ofstreamfout(copy.txt);for(stringstr;getline(fin,str);)foutstrendl;}//2.5.3—文件流+素数判断#includeiostream#includefstream#includevectorusingnamespacestd;intmain(){vectorintprime(10000,1);for(inti=2;i10000;++i){if(prime[i]){for(intj=i;j*i10000;j++)prime[i*j]=0;}}ifstreamin(original.txt);for(inta;ina&&a1&&a10000;)coutais(prime[a]?:not)aprime.endl;}//2.7.1—百钱买百鸡+文件流#includeiostream#includefstreamusingnamespacestd;intmain(){ofstreamfout(original.txt);fout百钱买百鸡问题endl;for(inti=1;i=100/7;i++)for(intj=1;j=(100-i*7)/5;j++)for(intk=1;k98;k++){if(k%3!=0)continue;if(i+j+k==100&&i*7+j*5+k/3==100)foutcoocks:i,hens:j,chicks:kendl;}}//2.7.2—函数逼近π#includeiostream#includecmathusingnamespacestd;intmain(){doubles=0,item=1;for(inti=1,sign=1;abs(item)1e-6;i+=2,sign*=-1){item=sign/double(i);s+=item;}couts*4endl;}第二部分//1—函数逼近—方法1#includeiostream#includecmathusingnamespacestd;intmain(){coutpleaseinputanumber:endl;doublex,s=1,item=1;cinx;s+=x;//解决首项问题for(inti=1,sign=-1,p=1;abs(item)1e-8;i++,sign*=-1)//p是记录分母阶乘{x*=x;//x各阶p*=(p+1);item=sign*x/double(p);s+=item;}couttheresultissendl;}//1—函数逼近—方法2—少了几行,看不看都行。#includeiostream#includecmathusingnamespacestd;intmain(){coutpleaseinputanumber:endl;doublex,s=1,item=1;cinx;for(intp=1,sign=1;abs(item)1e-8;p++,sign*=-1){item=abs(item)*sign*x/double(p);s+=item;}couttheresultissendl;}//2—阶乘和#includeiostreamusingnamespacestd;intmain(){ints=0;for(inti=1,item=1;i13;i++){item*=i;s+=item;}coutsendl;}//3—水仙花问题#includeiostream#includefstreamusingnamespacestd;intmain(){ofstreamfout(original.txt);fout水仙花问题endl;for(inti=100;i1000;i++){inthandred,ten,single;handred=i/100;ten=(i-handred*100)/10;single=i%10;if(handred*handred*handred+ten*ten*ten+single*single*single-i)continue;foutiendl;}}//4—完数问题//我感觉这道题目比较难,可能我没想出更好的方法。我的思路就是先能找出一个数的所有的不同的因子,有很多细节,在下面注释了。#includeiostreamusingnamespacestd;intmain(){for(intp=2;p=1000;p++)//外层循环{intx=p;//找因子的过程中需要改变X的值,最后比较的还有一个Pinta[10],k=0,m=1,s=1;//数组存放不同的因子,K是下标,m标记是不是第一个因子for(inti=2;i=x;i++)//因为是不是地一个因子对数组的操作是不一样的。{if(x%i==0)//如果是因子,下面是考虑是不是不同的因子{if(m==1)//第一个因子不用比较一定要存放到数组当中{a[k]=i;k++;m++;}else//不是第一个因子的情况下{for(intp=0;p=k-1;p++){if(a[p]!=i&&(p==(k-1)))//如果因子不等于数组里面的因子而且已经{//比较到最后一个数的时候a[k]=i;k++;break;}}}x=x/i;if(x==1)break;i=1;}}for(inti=0;i=k-1;i++)s+=a[i];if(p==s){coutp=1;for(inti=0;i=k-1;i++)cout+a[i];coutendl;}}}我的思路跟正常的人的思路一样的,假如一个数100,找因子,先找到2,记录一下,100/2=50,50也有因子2,但是和已经记录的比较,已经存在了,不用在记录了,50/2=25,25的因子是5,从记录里面找,没有,在记录的本子里记上5,以此类推。答题思路就是这样。//5—对数问题#includeiostreamusingnamespacestd;intmain(){for(inti=100,handred,single;i1000;i++){handred=i/100;single=i%10;if(handred-single)continue;coutiendl;}}//6—猴子吃桃问题#includeiostreamusingnamespacestd;intmain(){ints=1;for(inti=1;i10;i++){coutsendl;//猴子有这么能吃么?把每次运算结果看一边,还是我理解有问题?s=(s+1
本文标题:钱能--C++程序设计教程(第二版)第二章
链接地址:https://www.777doc.com/doc-4036555 .html