帮忙看看这个简单c语言程序错在哪了。

来源:百度知道 编辑:UC知道 时间:2024/06/10 03:13:50
#include <stdio.h>
void main ()
{float a,b,c,d;
unsigned u;
a=12.135465231321;b=-24;u=10;
c=a+u;d=b+u;
printf("a+u=%d,b+u=%d\n",c,d);
}

但结果是 a+u=-536870912 b+u=1077289654

float型和unsigned型虽然都是32位,但float型的小数点是浮动的(完全可以顾名思义,呵呵。因为你拿起一本《微机原理》或《数字电路》类的书,还真是有固定小数点位置的表示方法)。你用%d进行十进制整型打印时编译器不知无法解释你那位小数点,结果自然是未定义的。
改成
#include "stdafx.h"

int main(int argc, char* argv[])
{
float a,b,c,d;
unsigned u;
a=12.135465231321;
b=-24;u=10;
c=a+u;d=b+u;
printf("a+u=%f,b+u=%f\n",c,d);
printf("Hello World!\n");
return 0;
}
结果为
a+u=22.135466,b+u=-14.000000
Hello World!
Press any key to continue
正确!
至于结果为什么是浮点数,是因为计算机在计算时,为保证运算进度,均转换成double型来处理了。

a=12.135465231321
这里定义a变量的时候 应该为double.不能用float 来定义.
因为他己经超过了8位小数了

定义时很多类型的使用都不对称。
printf("a+u=%f,b+u=%f\n",c,d)
兄弟建议你多巩固下基础知识。

请把float a,b,c,d; 改为DOUBLEa,b,c,d;
%d改为f%