C语言中两道小问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 04:18:15
1: printf("%g\n",123.56789),为什么输出是123.568而不是123.56789?
怎么回事?
2:int x=3;
do
{printf("%3d",x-=2);}
while(!(--x));
答案是: 1 -2
我不明白此程序的运行过程,请解释下,我总做成死循环.

第一题解: %g输出的是包括整数小数才6位最后一位四舍五入
所以输出的结果是 123.56789(四舍五入) 取6位=>123.568
第二题 do while是先执行do 里面的语句 再执行 while(条件)里面的语句
解:先运行do{printf("%3d",x-=2);} x-=2等价于x=x-2 得到x=x-2 => x=3-2 => x=1
再运行while(!(-x)) (!是非的意思) 这句话是说当X不为负数时 循环执行
因为上面的X=1是正数就再次运行do{printf("%3d,x-=2")} 就得到x=-2

第一题,我也不太明白
第二题,只有0为false其它为真

前面你定义的是float型,改为double就可以了。
x=3时在循环体内得x=1,运行 while时x=0;
在循环体内得x=-2;

第2题,do……while句型,先执行printf("%3d",x-=2);因为x-=2相当于x=x-2;所以输出x=1;由于x=1为真,所以再执行x-=2语句,所以x=-2;而x=-2时为假,所以程序终止