c语言abs会把小数部分去掉吗
答案:4 悬赏:20 手机版
解决时间 2021-04-02 08:08
- 提问者网友:刺鸟
- 2021-04-01 16:21
c语言abs会把小数部分去掉吗
最佳答案
- 五星知识达人网友:低音帝王
- 2021-04-01 17:38
会的。
abs为C语言的库函数,位于stdlib.h,其格式为
int abs (int x);
功能为取x的绝对值并返回。
可以看到该函数参数和返回值是整型的,当传入浮点型参数时,会先被强制转换为整型,其表现为小数部分会被去掉。
要想保持小数部分,可以使用用于浮点数的绝对值函数fabs,用法与abs相同。
abs为C语言的库函数,位于stdlib.h,其格式为
int abs (int x);
功能为取x的绝对值并返回。
可以看到该函数参数和返回值是整型的,当传入浮点型参数时,会先被强制转换为整型,其表现为小数部分会被去掉。
要想保持小数部分,可以使用用于浮点数的绝对值函数fabs,用法与abs相同。
全部回答
- 1楼网友:骨子里都是戏
- 2021-04-01 20:19
这要看你用的编译器的帮助中对这个函数的数明. 因为这个函数不是 ANSI-C的函数.
例如: Borlandc 3.1中, abs的原型有 int abs(int x); 因此,如果在这个环境中用abs,就会先吧参数先转换成整数, 再求绝对值. 结果也是整数.
如果要对浮点数求绝对值, 可用fabs, 原型为: double fabs(double x);
例如: Borlandc 3.1中, abs的原型有 int abs(int x); 因此,如果在这个环境中用abs,就会先吧参数先转换成整数, 再求绝对值. 结果也是整数.
如果要对浮点数求绝对值, 可用fabs, 原型为: double fabs(double x);
- 2楼网友:猎心人
- 2021-04-01 19:00
有没有去掉小数部分不在你的abs方法,而在:
x=cos(a)*25; //往整数x中赋值时就已经去尾取整了
y=sin(a)*25; //往整数y中赋值时就已经去尾取整了
是否能取到圆上的每个点只在于半径的大小和取的角度增量
圆周上有 2*PI*R = 2.3.14159*25 = 157个点, 总共360度,每两度取一次也够把所有点取全的
x=cos(a)*25; //往整数x中赋值时就已经去尾取整了
y=sin(a)*25; //往整数y中赋值时就已经去尾取整了
是否能取到圆上的每个点只在于半径的大小和取的角度增量
圆周上有 2*PI*R = 2.3.14159*25 = 157个点, 总共360度,每两度取一次也够把所有点取全的
- 3楼网友:慢性怪人
- 2021-04-01 18:09
是的,截断取整(实际是在实参传给形参时,将实数自动转换为了整数)。
abs函数用于对整数求绝对值,fabs函数用于对实数求绝对值。
以下程序的输出结果为3
#include
#include
main()
{
printf("%d\n",abs(-3.96));
}追问我现在是在写一个液晶显示的石英钟,(63,31)是圆心在液晶屛的中心位置,原点是屏幕最左上角
你帮我看看这段程序是否能取到一个圆上的每一个点
void clock(int a)
{
int x,y,dis_x,dis_y;
x=cos(a)*25;
y=sin(a)*25;
x=abs(x);
y=abs(y);
if(a>90&&a<270)
dis_x=63+x;
else
dis_x=63-x;
if(a>0&&a<180)
dis_y=31-y;
else
dis_y=31+y;
Lcd_12864_drawLine(63,31,dis_x,dis_y,1);
}追答楼下回答得有道理。
此外,由于sin函数和cos函数的参数单位为弧度(不是度),所以clock函数的参数a的类型应改为float或double。
if(a>90&&a<270)和 if(a>0&&a<180)中的度数,也应该化成弧度。
其实,可以不取绝对值。如下所示:
void clock(float a) /*a的单位为弧度*/
{
int x,y,dis_x,dis_y;
x=cos(a)*25;
y=sin(a)*25;
dis_x=63+x;
dis_y=31-y;
Lcd_12864_drawLine(63,31,dis_x,dis_y,1);
}
abs函数用于对整数求绝对值,fabs函数用于对实数求绝对值。
以下程序的输出结果为3
#include
#include
main()
{
printf("%d\n",abs(-3.96));
}追问我现在是在写一个液晶显示的石英钟,(63,31)是圆心在液晶屛的中心位置,原点是屏幕最左上角
你帮我看看这段程序是否能取到一个圆上的每一个点
void clock(int a)
{
int x,y,dis_x,dis_y;
x=cos(a)*25;
y=sin(a)*25;
x=abs(x);
y=abs(y);
if(a>90&&a<270)
dis_x=63+x;
else
dis_x=63-x;
if(a>0&&a<180)
dis_y=31-y;
else
dis_y=31+y;
Lcd_12864_drawLine(63,31,dis_x,dis_y,1);
}追答楼下回答得有道理。
此外,由于sin函数和cos函数的参数单位为弧度(不是度),所以clock函数的参数a的类型应改为float或double。
if(a>90&&a<270)和 if(a>0&&a<180)中的度数,也应该化成弧度。
其实,可以不取绝对值。如下所示:
void clock(float a) /*a的单位为弧度*/
{
int x,y,dis_x,dis_y;
x=cos(a)*25;
y=sin(a)*25;
dis_x=63+x;
dis_y=31-y;
Lcd_12864_drawLine(63,31,dis_x,dis_y,1);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯