非常感谢您的耐心指教!请高手帮忙分析一下这个C++程序?

程序有些长,但并不是很麻烦,只是有个别地方我不是很明白。希望各位高手耐心看一下,指点指点,我对编程接触的不是很多,不胜感激!
该要实现的功能是输入一个小于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();
}

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的情况下是要读零的。
温馨提示:内容为网友见解,仅供参考
无其他回答

一个简单的c++程序,请帮忙分析一下(输入输出格式控制方面)
第7行是按8进制输出的。你可能是希望这一行按10进制输出而非8进制,但由于操作符对流格式的控制是通过修改流的标志位来实现的,所以在你源代码的第10行(包括空行)cout<<"i= "<<oct<<i<<endl; 中,流对象cout中的标志位已经被修改,所以它在下一次输出的时候使用的就是已经被修改后的标志位...

求大虾帮忙分析一段简单的C++程序代码
void main() \/\/ 一般一个源文件, 需要让平台知道从哪个函数开始运行的. 所以c++就规定 需要有个叫main的函数, 而且必须是main. 大小写都得固定. 否则它不知道从哪里开始执行代码, 机器么, 都这样, 比较笨.{ \/\/ 表示, 函数体的开始..int iFirNum,ifirNum,isum;定义3个int类型的, 整形的, ...

...请各位老鸟帮忙分析一下,谢谢! 一共两个问题
一共两个问题 vc++2010 ReadProcessMemory读取基址+多级偏移内存内容问题请各位老鸟帮忙分析一下,谢谢!一共两个问题:第一:c++基址加偏移问题[[[0x4455C8+0x8]+0x8]+0xa0] c++使用ReadProcessMemory经过基址加偏移读取不到正确的数据 byte chessdata[10][18]; ... 展开 匿名 2011-10-01 | 浏览64 次 |举...

C++程序来看看,帮我分析每行的含义,要讲给老师听的,烦ing。帮帮忙啦
其次,printf()语句是打印输出语句。这个就没有什么必要讲的。由于程序中有好多->可以判定这是一个链表程序,具体作用是对链表进行操作。其中的assert(msg);是调用assert()这个函数,应该在程序中找到一行语句为void assert(……)。delete语句是用来删除一个节点的语句。至于判断语句中的!时表示讲条件反向...

请高手看一下我的这个c++程序错在哪!!
friend Comeplex operator +(Comeplex &,int &);friend Comeplex operator +(int &,Comeplex &);const int &或者直接int就可以了(还有一个不好的办法,不改前面那就只能用变量去代替main函数里面的字面值常量1和5)

...特别是solve() 函数,理解不了,帮忙分析一下吧
首先我们知道一条可行方案必定是一条链而不可能是一个环 那么所有可进行变化的数之间连边就是一棵树,我们要求这棵树里最长链.那么就是一个树形dp,每个点记录以他为一端的最长链和次长链。最后枚举每个点,看经过哪个点的连最长即为答案.f1为最长链,f2为次长链 ...

为什么intx=y=1是错的?恳请c++大神帮忙解答一下非常感谢!谢谢!
回答:要这么分析 。 int x=y=1; 这是一条定义变量并初始化语句。 格式应该为 ( 类型 变量名=表达式 ) 看到x=y=1 这一句,这是一条赋值语句, 赋值语句运算是从右到左 。要这么看 x=(y=1) 但是由于y没有定义 ,所以 y=1这条语句就出错了。

帮忙分析一下visual c++软件的利与弊
visual C++很强势的,兼容C和C++,对于入门级的上机实验绰绰有余。要说分析的话,VC++的开发集成环境比TC要好很多,有可视化编程的特点,操作起来非常方便,而且VC++提供了自动排版的功能,让程序的可读话程度大大提高。呃。。其它的说不来了,反正用了几年的VC++ 感觉不错 ...

请高手帮忙解决算法问题 用C++解决 急需 100分追加100分 请详细说明...
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生。。。谢谢大家!!!1) 努力,自己做。2) 放弃, 改行, 学别的。3) 挂科,重修,不放弃,下学期努力。4) 花大钱,雇别人做,欺骗老师,...

C++中关于二义性问题,,请帮忙分析下面的程序...
原因在于继承得到的成员函数没有构成派生类中的重载函数列表,具有相同名称函数只在同一类域 或 全局域中构成重载

相似回答