超简单的C语言问题!求助高手

来源:百度知道 编辑:UC知道 时间:2024/06/08 04:06:30
小弟有几道C语言程序题不会请大家帮帮小弟看看!
1.
main()
{ double d=3.2;
int x,y;
x=1.2;
y=(x+3.8)/5.0;
printf("%d\n",d*y);
}
结果是多少?y=什么?
2.
main()
{ int a=177;
printf("%o\n",a);/*o为字母*/
}
结果是261,这道题的意思是不是先把十进制的177转化为八进制然后输出?那么转化为八进制数应该是61呀,
177/8=22....1
22/8=2....6
第一道题的结果是0,并不是3.2
y也是等于0
请大家教教我怎么算出0的

第一题:
main()
{ double d=3.2;
int x,y;
x=1.2;
//这里的X虽然赋值为小数,但是会自动转化成INT结果为1
y=(x+3.8)/5.0;
//这里的计算是这样的(1+3.8)=4.8然后是4.8/5.0因为这里储存的Y也是INT且计算除法的结果没有达到1,所以Y获得的是0
printf("%d\n",d*y);
//到这里就算D是任何值,因为Y是0所以乘法结果都是0 。
}
这道题注意在类型被强制转换是只会留下数字的整数部分,小数部分被省略(而非被四舍五入)
第二题:
您的算法:
177/8=22....1
22/8=2....6
看到了么,到了最后一步也并没有整除,“22/8=2....6”等号后面的数字无法再被8整除,所以您少写了这么一行:“2/8=0....2”所以正确结果是261没错。

1、输出0,y值为0。
x,y均为整型变量,所以x=1.2实际上,x被赋值为1
x+3.8就是4.8,所以(x+3.8)/5.0的值为0.96,因此y取整数部分0
所以d*y也等于0
2、你的计算有错误,结果确为261,你少了一部计算,应该是这样:
177/8=22....1
22/8=2....6
2/8=0....2

我来答!
第一个应该输出0,x为int型,赋值语句x=1.2将1.2强制转换成int型,即x=1,x+3.8=4.8,再是4.8/5.0,结果是0.96,而y也为int型,强制转换后y=0;
于是最终的d*y=0;

第二题将177转换为8进制输出,十进制177对应的8进制正好是261,绝不是楼主说的61,想想也不可能,若按楼主所说,怎么八进制数比十进制数还要小了
177/8=22....1
22/8=2.....6
2/8=0.....2
倒数回去便是261,楼主