非常感谢您的耐心指教!请高手帮忙分析一下这个C++程序?
程序有些长,但并不是很麻烦,只是有个别地方我不是很明白。希望各位高手耐心看一下,指点指点,我对编程接触的不是很多,不胜感激!该要实现的功能是输入一个小于1亿的数转换为大写...
程序有些长,但并不是很麻烦,只是有个别地方我不是很明白。希望各位高手耐心看一下,指点指点,我对编程接触的不是很多,不胜感激!
该要实现的功能是输入一个小于1亿的数转换为大写的数字,保留两位小数(后两位四舍五入)
我不明白的地方是:
1.zeroflag的作用是什么?
2.quotient=(unsigned int)floor(x/i);这个语句没问题吧,为什么运行后没有小数位了?
3.if(remainder!=0)
beginflag=1;
if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)
cout<<"零";
这条语句的作用是什么?为什么要满足i>1000?
4.if(remainder>0)
zeroflag=0;
else if(beginflag==1)
zeroflag=1;
它的作用又是什么?(3)中的if(remainder!=0) beginflag=1;加上(4)的语句那zeroflag=1恒成立了吗?与if(remainder>0) zeroflag=0;还能构成if…else关系吗?
源程序如下:
#include<iostream.h>
#include<math.h>
void main()
{
double x,i=10000000;
int j=0;
unsigned int quotient,remainder;
bool beginflag=0,zeroflag=0;
cout<<"请输入一个金额(小于1亿):";
cin>>x;
while (x>=100000000)
{
if(j>=2)
{ cout<<"您输入已经达3次,你无权再输入!"<<endl;
break;
}
cout<<"你输入的金额已超出范围,请重新输入!";
cout<<"请输入转换金额(小于1亿):";
cin>>x;
j++;
}
if(x<=0)
{
cout<<"零元整"<<endl;
return ;
}
x=floor(x*100+0.5)/100;
while(i>0.001)
{
if(i>0.9)
quotient=(unsigned int)floor(x/i);
else
{
if(i<=0.099)
quotient=(unsigned int)floor(x/i)*10;
else
quotient=(unsigned int)floor(x/i)*100;
}
remainder=quotient%10;
if(remainder!=0)
beginflag=1;
if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)
cout<<"零";
switch (remainder)
{
case 0:
break;
case 1:
cout<<"壹";
break;
……………………………………//因百度嫌程序过长,省略
case 9:
cout<<"玖";
break;
}
if(remainder>0)
zeroflag=0;
else if(beginflag==1)
zeroflag=1;
if(beginflag==1)
{
if((i==10000000)&&(remainder>0))
cout<<"仟";
if((i==1000000)&&(remainder>0))
cout<<"百";
if((i==100000)&&(remainder>0))
cout<<"十";
if((i==10000)&&(remainder>0))
cout<<"万";
if((i==1000)&&(remainder>0))
cout<<"仟";
if((i==100)&&(remainder>0))
cout<<"百";
if((i==10)&&(remainder>0))
cout<<"十";
if((i==1)&&(remainder>0))
cout<<"元";
if((i>=0.09)&&(i<1)&&(remainder>0))
cout<<"角";
if((i>=0.009)&&(i<0.1)&&(remainder>0))
cout<<"分";
}
i=i/10;
}
cout<<"整"<<endl;
getchar(); getchar();
} 展开
该要实现的功能是输入一个小于1亿的数转换为大写的数字,保留两位小数(后两位四舍五入)
我不明白的地方是:
1.zeroflag的作用是什么?
2.quotient=(unsigned int)floor(x/i);这个语句没问题吧,为什么运行后没有小数位了?
3.if(remainder!=0)
beginflag=1;
if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)
cout<<"零";
这条语句的作用是什么?为什么要满足i>1000?
4.if(remainder>0)
zeroflag=0;
else if(beginflag==1)
zeroflag=1;
它的作用又是什么?(3)中的if(remainder!=0) beginflag=1;加上(4)的语句那zeroflag=1恒成立了吗?与if(remainder>0) zeroflag=0;还能构成if…else关系吗?
源程序如下:
#include<iostream.h>
#include<math.h>
void main()
{
double x,i=10000000;
int j=0;
unsigned int quotient,remainder;
bool beginflag=0,zeroflag=0;
cout<<"请输入一个金额(小于1亿):";
cin>>x;
while (x>=100000000)
{
if(j>=2)
{ cout<<"您输入已经达3次,你无权再输入!"<<endl;
break;
}
cout<<"你输入的金额已超出范围,请重新输入!";
cout<<"请输入转换金额(小于1亿):";
cin>>x;
j++;
}
if(x<=0)
{
cout<<"零元整"<<endl;
return ;
}
x=floor(x*100+0.5)/100;
while(i>0.001)
{
if(i>0.9)
quotient=(unsigned int)floor(x/i);
else
{
if(i<=0.099)
quotient=(unsigned int)floor(x/i)*10;
else
quotient=(unsigned int)floor(x/i)*100;
}
remainder=quotient%10;
if(remainder!=0)
beginflag=1;
if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)
cout<<"零";
switch (remainder)
{
case 0:
break;
case 1:
cout<<"壹";
break;
……………………………………//因百度嫌程序过长,省略
case 9:
cout<<"玖";
break;
}
if(remainder>0)
zeroflag=0;
else if(beginflag==1)
zeroflag=1;
if(beginflag==1)
{
if((i==10000000)&&(remainder>0))
cout<<"仟";
if((i==1000000)&&(remainder>0))
cout<<"百";
if((i==100000)&&(remainder>0))
cout<<"十";
if((i==10000)&&(remainder>0))
cout<<"万";
if((i==1000)&&(remainder>0))
cout<<"仟";
if((i==100)&&(remainder>0))
cout<<"百";
if((i==10)&&(remainder>0))
cout<<"十";
if((i==1)&&(remainder>0))
cout<<"元";
if((i>=0.09)&&(i<1)&&(remainder>0))
cout<<"角";
if((i>=0.009)&&(i<0.1)&&(remainder>0))
cout<<"分";
}
i=i/10;
}
cout<<"整"<<endl;
getchar(); getchar();
} 展开
1个回答
展开全部
2.quotient=(unsigned int)floor(x/i);这个语句没问题吧,为什么运行后没有小数位了?
floor返回不大与x/i的最大整数然后强制转换成无符号整型数赋给quotient
1.zeroflag的作用是什么?
zeroflag和beginflag是两个自己设定的标志位,当满足这两个条件时候运行下面代码,如:if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)。if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)
这段就包含对标志位进行检查。
3.if(remainder!=0)
beginflag=1;
remainder=quotient%10; 钱模10以后如果不等于0的话标志位设置1,代表需要进行后面程序,如果模10以后等于0就没有进行后续程序的需要了。
3.if(remainder!=0)
beginflag=1;
if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)
cout<<"零";
这条语句的作用是什么?
这是一段判断是不是读零的代码,比如我们把1001读成1千零元。
if(remainder>0)
zeroflag=0;
else if(beginflag==1)
zeroflag=1;
它的作用又是什么?
这段是用来设置标志为,当remainder>0读零标志位=0就是不读零的意思。else的情况就是当remainder==0的情况下是要读零的。
floor返回不大与x/i的最大整数然后强制转换成无符号整型数赋给quotient
1.zeroflag的作用是什么?
zeroflag和beginflag是两个自己设定的标志位,当满足这两个条件时候运行下面代码,如:if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)。if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)
这段就包含对标志位进行检查。
3.if(remainder!=0)
beginflag=1;
remainder=quotient%10; 钱模10以后如果不等于0的话标志位设置1,代表需要进行后面程序,如果模10以后等于0就没有进行后续程序的需要了。
3.if(remainder!=0)
beginflag=1;
if((zeroflag==1)&&(beginflag==1)&&(i>1000)&&remainder>0)
cout<<"零";
这条语句的作用是什么?
这是一段判断是不是读零的代码,比如我们把1001读成1千零元。
if(remainder>0)
zeroflag=0;
else if(beginflag==1)
zeroflag=1;
它的作用又是什么?
这段是用来设置标志为,当remainder>0读零标志位=0就是不读零的意思。else的情况就是当remainder==0的情况下是要读零的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询