主题:高手帮哥讲解一下
GLD2010
[专家分:0] 发布于 2010-04-17 15:30:00
#include<stdio.h>
#include<math.h>
void main()
{
int a,b,t;
a=2,b=2;
printf("%d\n",t=pow(a,b));
}
#include<stdio.h>
#include<math.h>
void main()
{
int a,b;
a=2,b=2;
printf("%d",pow(a,b));
}
为什么第一个运行的结果是:4;
而第二个运行的结果却是:0;
两个不是就差多一个t 嘛...怎么结果不一样??
回复列表 (共6个回复)
沙发
happy_water [专家分:10] 发布于 2010-04-17 16:46:00
#include<stdio.h>
#include<math.h>
int main()
{
int a,b;
a=2,b=2;
printf("%f",pow(a,b));//问题%f这里
return 0;
}
就可以 pow函数原型返回的是一个float类型的
这里%f是咱们要输出的是个double型的数据,而double占空间很长,后边放的都是0,前边放的才是计算过的数字(因为要输出的值其实是整数),当用%d去输出的时候,由于int型数据占空间短,就只输出double数据后边的那部分了,也就是只有0~
有个t情况就不一样了 赋值给t来个类型转换了
自己再看看吧
板凳
cxxcomp [专家分:2370] 发布于 2010-04-17 18:53:00
printf("%d",pow(a,b));改为printf("%f", pow(a, b)); 就是4.000000
至于为什么,因为printf("%d\n",t=pow(a,b));进行了隐式的类型转换。:)
3 楼
GLD2010 [专家分:0] 发布于 2010-04-18 09:47:00
那第一个中不也是用%d的么???是不是因为t ??
4 楼
GLD2010 [专家分:0] 发布于 2010-04-18 09:48:00
额......什么是‘隐式的类型转换’???
5 楼
sxm227 [专家分:10] 发布于 2010-04-19 09:11:00
深圳市华信群英科技有限公司与知名通信软件公司正式签订定向输送人才的合作协议
针对想进入IT软件行业的有志人士提供专业的企业内训
实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段
实训前就签订就业安置协议,岗前实训后入职
不仅学费优惠而且是企业定向培训定向招聘,百分百保证就业
有意向请登录www.szctt.com,或加QQ:1179397962做详细咨询
6 楼
雪光风剑 [专家分:27190] 发布于 2010-04-19 19:28:00
隐式类型转换:
就是在没有指定类型转换的情况下由编译器完成的类型转换
t=pow(a,b)中,赋值号左边是整形右边是双精度,编译器自动截取双精度类型变量使之满足整形
我来回复