c++程序设计原理与实践第三章课后答案.docx
- 文档编号:11943938
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:18
- 大小:230.22KB
c++程序设计原理与实践第三章课后答案.docx
《c++程序设计原理与实践第三章课后答案.docx》由会员分享,可在线阅读,更多相关《c++程序设计原理与实践第三章课后答案.docx(18页珍藏版)》请在冰豆网上搜索。
c++程序设计原理与实践第三章课后答案
“std_lib_facilities.h”这个头文件是《c++程序设计原理与实践》一直用到的头文件,要将此头文件放在你的文件目录中,下面我给出这个头文件:
//
//Thisisastandardlibrarysupportcodetothechaptersofthebook
//"Programming--PrinciplesandPracticeUsingC++"byBjarneStroustrup
//
#ifndefSTD_LIB_FACILITIES_GUARD
#defineSTD_LIB_FACILITIES_GUARD1
#include
usingnamespacestd;
//------------------------------------------------------------------------------
//Thecalltokeep_window_open()isneededonsomeWindowsmachinestoprevent
//themfromclosingthewindowbeforeyouhaveachancetoreadtheoutput.
inlinevoidkeep_window_open()
{
cin.get();
}
//------------------------------------------------------------------------------
#endif//STD_LIB_FACILITIES_GUARD
将上述代码拷贝到记事本中,把后缀.txt改为.h,放在你的根目录即可引用。
第3章对象,类型和值
第6题
#include"std_lib_facilities.h"
intmain()
{
inta;
intb;
intc;
intt;
cout<<"请您输入三个数:
\n";
cin>>a>>b>>c;
if(a>b)//如果a大于b,将a,b交换.
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
cout< } 下面是vc6.0的运行结果: 第7题 #include #include usingnamespacestd; //------------------------------------------------------------------------------ intmain() { cout<<"请您输入三个字符串: \n"; stringfirst; stringsecond; stringthird; stringspace; cin>>first>>second>>third;//读入三个字符串。 if(first>second) { space=first; first=second; second=space; } if(first>third) { space=first; first=third; third=space; } if(second>third) { space=second; second=third; third=space; } cout< return0; } //------------------------------------------------------------------------------ Vc6.0运行结果如下: 第8题 #include"std_lib_facilities.h" intmain() { cout<<"请您输入您需要测试的数: \n"; inta; cin>>a; if(a%2==0)cout<<"您输入的数: "< elsecout<<"您输入的数: "< return0; } Vc6.0运行结果如下: 第9题 #include #include usingnamespacestd; intmain() { stringstr; cout<<"请您输入一个英文数字: \n"; cin>>str; if(str=="zero")cout<<"对应的阿拉伯数字是: "<<"0\n"; elseif(str=="one")cout<<"对应的阿拉伯数字是: "<<"1\n"; elseif(str=="two")cout<<"对应的阿拉伯数字是: "<<"2\n"; elseif(str=="three")cout<<"对应的阿拉伯数字是: "<<"3\n"; elseif(str=="four")cout<<"对应的阿拉伯数字是: "<<"4\n"; elsecout<<"暂时超出处理范围\n"; return0; } Vc6.0运行结果如下: 第10题 这道题在第六章用了一章去讲述,大家如有疑问,可以对照看一下。 //计算器程序 //本程序的目的是实现四则运算。 //2013年7月19日写的这些代码。 //版本号为003 //总体设计思想是: 将表达式变成单词,通过语法分析达到符合运算规则的目的。 //还缺少大括弧,不能实现累计,不能实现科学计算器,不能输入一个'q'就停止等。 #include"std_lib_facilities.h" //------------------------------------------------------------------------------ classToken{ public: charkind;//whatkindoftoken doublevalue;//fornumbers: avalue Token(charch)//makeaTokenfromachar : kind(ch),value(0){} Token(charch,doubleval)//makeaTokenfromacharandadouble : kind(ch),value(val){} }; //------------------------------------------------------------------------------ classToken_stream{ public: Token_stream();//makeaToken_streamthatreadsfromcin Tokenget();//getaToken(get()isdefinedelsewhere) voidputback(Tokent);//putaTokenback private: boolfull;//isthereaTokeninthebuffer? Tokenbuffer;//hereiswherewekeepaTokenputbackusingputback() }; //------------------------------------------------------------------------------ //Theconstructorjustsetsfulltoindicatethatthebufferisempty: Token_stream: : Token_stream() : full(false),buffer(0)//noTokeninbuffer { } //------------------------------------------------------------------------------ //Theputback()memberfunctionputsitsargumentbackintotheToken_stream'sbuffer: voidToken_stream: : putback(Tokent) { if(full)perror("putback()intoafullbuffer"); buffer=t;//copyttobuffer full=true;//bufferisnowfull } //------------------------------------------------------------------------------ TokenToken_stream: : get() { if(full){//dowealreadyhaveaTokenready? //removetokenfrombuffer full=false; returnbuffer; } charch; cin>>ch;//notethat>>skipswhitespace(space,newline,tab,etc.) switch(ch){ case';': //for"print" case'q': //for"quit" case'(': case')': case'+': case'-': case'*': case'/': case'%': returnToken(ch);//leteachcharacterrepresentitself case'.': case'0': case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': case'9': { cin.putback(ch);//putdigitbackintotheinputstream doubleval; cin>>val;//readafloating-pointnumber returnToken('s',val);//let'8'represent"anumber" } default: perror("Badtoken"); } } //------------------------------------------------------------------------------ Token_streamts;//providesget()andputback() //------------------------------------------------------------------------------ doubleexpression();//declarationsothatprimary()cancallexpression() //------------------------------------------------------------------------------ //dealwithnumbersandparentheses doubleprimary() { Tokent=ts.get(); switch(t.kind){ case'(': //handle'('expression')' { doubled=expression(); t=ts.get(); if(t.kind! =')')perror("')'expected"); returnd; } case's': //按照惯例用‘8’代替数字类型,但本程序需要'8'参与运算,所以这里用's'表示数字类型。 returnt.value;//returnthenumber'svalue default: perror("primaryexpected"); } } //------------------------------------------------------------------------------ //dealwith*,/,and% doubleterm() { doubleleft=primary(); Tokent=ts.get();//getthenexttokenfromtokenstream while(true){ switch(t.kind){ case'*': left*=primary(); t=ts.get(); break; case'/': { doubled=primary(); if(d==0)perror("dividebyzero"); left/=d; t=ts.get(); break; } case'%': { intd=primary(); if(d==0)perror("dividebyzero"); left=int(left)%d;//注意取余时这里进行了强制性转换,可能出现数据截断。 t=ts.get(); break; } default: ts.putback(t);//puttbackintothetokenstream returnleft; } } } //------------------------------------------------------------------------------ //dealwith+and- doubleexpression() { doubleleft=term();//readandevaluateaTerm Tokent=ts.get();//getthenexttokenfromtokenstream while(true){ switch(t.kind){ case'+': left+=term();//evaluateTermandadd t=ts.get(); break; case'-': left-=term();//evaluateTermandsubtract t=ts.get(); break; default: ts.putback(t);//puttbackintothetokenstream returnleft;//finally: nomore+or-: returntheanswer } } } //------------------------------------------------------------------------------ intmain()//8被定义为数字类型,当与数字8有关的运算无法运行,本程序中将数字的类型定义为's'。 {try { cout<<"欢迎使用简易计算器"<<"(*^_^*)"<<": "<<"\n"; cout<<"本计算程序能实现'+','-','*','/','%'以及括弧运算"<<"\n"; cout<<"请您输入一个数学表达式(本程序精确到双精度),以';'结束,以'q'退出"<<"\n"; while(cin){ Tokent=ts.get(); doubleval; if(t.kind=='q')break;//'q'forquit if(t.kind==';')//';'for"printnow". cout<<"="< else ts.putback(t); val=expression(); } keep_window_open(); } catch(exception&e){ cerr<<"error: "< keep_window_open(); return1; } catch(...){ cerr<<"Oops: unknownexception! \n"; keep_window_open(); return2; } return0; } //------------------------------------------------------------------------------ Vc6.0环境下的运行结果如图: 第11题 #include"std_lib_facilities.h" intmain() { cout<<"请输入您的一美分、五美分、十美分、二十五美分、半美元、和一美元硬币的数量: \n"; intA,B,C,D,E,F; cin>>A>>B>>C>>D>>E>>F; intAWS=1,BWS=1,CWS=1,DWS=1,EFWS=1,N=10;//定义初始位数和进位位数。 while(A>=N)//当A>=10时判断为两位数。 {AWS+=1; N=N*10;}//两位数的进位为100. N=10;//一位数的进位仍旧赋值为10. while(B>=N) {BWS+=1; N=N*10;} N=10; while(C>=N) {CWS+=1; N=N*10;} N=10; while(D>=N) {DWS+=1; N=N*10;} N=10; while(F*2+E>=N) {EFWS+=1; N=N*10;} intX=AWS;//将x通过比较赋值为,所有位数最高的那位。 if(X X=BWS; if(X X=CWS; if(X X=DWS; if(X X=EFWS; intZWS=X+1; inta=ZWS-AWS; cout<<"youhave"; while(a>0) {cout<<""; a-=1;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 程序设计 原理 实践 第三 课后 答案