鱼C论坛

 找回密码
 立即注册
查看: 1134|回复: 12

[已解决]大佬们请教几个问题

[复制链接]
发表于 2022-3-8 18:25:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学了运算符在做练习的时候遇到了些问题比如再写printf("%f\n",9/5);但输出结果是0.000000,不应该是1.8把小数点后面的.8去掉保留1吗那%f输出的话不应该是1.00000吗为什么是0呢(把%f改成%d就是1了)?没太想明白这会所以想问问大佬
最佳答案
2022-3-8 22:45:32
ybcsmile 发表于 2022-3-8 22:27
这个我之前发现了,谢谢大佬指出,不过想再问一下比如一个式子是b=(a-32)*5/9   //a随意取正数//这个
pr ...

没有代码上下文不知道a的类型是什么,要猜的话,a应该是浮点数类型
就像 9.0 / 5 的结果是浮点数一样
只要表达式中有一个是浮点数,最终的结果就是浮点数

(a-32)*5/9
先算 a - 32
结果是浮点数
这个数乘以 5
结果是浮点数
然后再除以 9
结果还是浮点数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 18:53:31 From FishC Mobile | 显示全部楼层
c语言里9/5是一个整数  5/9也是一个整数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 19:40:28 | 显示全部楼层
printf("%f\n",9.0f/5);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 22:05:41 | 显示全部楼层
wp231957 发表于 2022-3-8 18:53
c语言里9/5是一个整数  5/9也是一个整数

嗯,这个我知道只是不明白为什么9/5输出结果是0而不是1所以想问一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 22:12:42 | 显示全部楼层

大佬你这我试了下这个应该和printf("%f\n",(float)9/5);原理一样吧,就是把9/5的输出结果转化成浮点数结果。我想问一下这个计算机不是自动会把9/5输出的整形结果转化为占位更大的浮点数结果吗但为啥实际不是我想的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 22:14:12 | 显示全部楼层
ybcsmile 发表于 2022-3-8 22:05
嗯,这个我知道只是不明白为什么9/5输出结果是0而不是1所以想问一下

9 / 5 的结果是一个整数,整数用 %f 输出?
$ cat main.c
#include <stdio.h>

int main(void) {
    printf("%d\n", 9 / 5);
    return 0;
}
$ gcc-debug -o main main.c
$ ./main
1
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 22:20:21 | 显示全部楼层
本帖最后由 YingW 于 2022-3-8 22:22 编辑
ybcsmile 发表于 2022-3-8 22:12
大佬你这我试了下这个应该和printf("%f\n",(float)9/5);原理一样吧,就是把9/5的输出结果转化成浮点数结 ...


9/5左右两边都是整数的时候默认输出是整数,你输出的是%f所以结果错误
9f/5输出结果正确了因为强行把9变成浮点数,那/左右两边一个是浮点一个是整数,编译器才会发生自动转换,把两个数自动转换为精度更大的浮点数,之后左右两边都是浮点数,输出的自然是浮点数。
这个内容在第九课算数运算符里有说的,我刚复习完印象深刻,而且他是当作一个小节《类型转换》强调了的,记得仔细看视频哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 22:27:13 | 显示全部楼层
人造人 发表于 2022-3-8 22:14
9 / 5 的结果是一个整数,整数用 %f 输出?

这个我之前发现了,谢谢大佬指出,不过想再问一下比如一个式子是b=(a-32)*5/9   //a随意取正数//这个
printf("%.2f\n",b);输出出来就是小数,这里面5/9输出不应该是整数吗?那结果不应该是0吗为啥还能是小数啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 22:28:42 | 显示全部楼层
YingW 发表于 2022-3-8 22:20
9/5左右两边都是整数的时候默认输出是整数,你输出的是%f所以结果错误
9f/5输出结果正确了因为强行把9 ...

好的谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 22:45:32 | 显示全部楼层    本楼为最佳答案   
ybcsmile 发表于 2022-3-8 22:27
这个我之前发现了,谢谢大佬指出,不过想再问一下比如一个式子是b=(a-32)*5/9   //a随意取正数//这个
pr ...

没有代码上下文不知道a的类型是什么,要猜的话,a应该是浮点数类型
就像 9.0 / 5 的结果是浮点数一样
只要表达式中有一个是浮点数,最终的结果就是浮点数

(a-32)*5/9
先算 a - 32
结果是浮点数
这个数乘以 5
结果是浮点数
然后再除以 9
结果还是浮点数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 22:52:33 | 显示全部楼层
人造人 发表于 2022-3-8 22:45
没有代码上下文不知道a的类型是什么,要猜的话,a应该是浮点数类型
就像 9.0 / 5 的结果是浮点数一样
...

我懂了谢谢大佬,之前不太清楚表达式只要有一个浮点数结果就是浮点数这一点,所以之前一直没想通。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 23:16:00 | 显示全部楼层
ybcsmile 发表于 2022-3-8 22:52
我懂了谢谢大佬,之前不太清楚表达式只要有一个浮点数结果就是浮点数这一点,所以之前一直没想通。
$ cat main.c
#include <stdio.h>

int main(void) {
    printf("%lf\n", 10 / 4 * 0.1 * 0.3);
    return 0;
}
$ gcc-debug -o main main.c
$ ./main
0.060000
$

我不知道我有没有说清楚,这里再补充一下吧

只要表达式中有一个是浮点数,最终的结果就是浮点数
这没错,但是要注意运算顺序

这里先算 10 / 4
10 是整数
4 也是整数
结果是整数
10 / 4 = 2
2 * 0.1
2 是整数
0.1 是浮点数
结果是浮点数
2 * 0.1 = 0.2
0.2 * 0.3
0.2 是浮点数
0.3 是浮点数
0.2 * 0.3 = 0.06


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-9 20:01:10 From FishC Mobile | 显示全部楼层
人造人 发表于 2022-3-8 23:16
我不知道我有没有说清楚,这里再补充一下吧

只要表达式中有一个是浮点数,最终的结果就是浮点数

可以理解的,谢谢大佬了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表