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(XX=BWS;
if(XX=CWS;
if(XX=DWS;
if(XX=EFWS;
intZWS=X+1;
inta=ZWS-AWS;
cout<<"youhave";
while(a>0)
{cout<<"";
a-=1;}
if(A==1)cout<if(A>1)cout<cout<<"youhave";
a=ZWS-BWS;
while(a>0)
{cout<<"";
a-=1;}
if(B==1)cout<
if(B>1)cout<
cout<<"youhave";
a=ZWS-CWS;
while(a>0)
{cout<<"";
a-=1;}
if(C==1)cout<if(C>1)cout<cout<<"youhave";
a=ZWS-DWS;
while(a>0)
{cout<<"";
a-=1;}
if(D==1)cout<if(D>1)cout<cout<<"youhave";
a=ZWS-EFWS;
while(a>0)
{cout<<"";
a-=1;}
if(F*2+E==1)cout<if(F*2+E>1)cout<cout<<"合计值:
"<<"$:
"<cout<keep_window_open();
}
Vc6.0下运行结果如下: