ybcsmile 发表于 2022-3-8 18:25:07

大佬们请教几个问题

学了运算符在做练习的时候遇到了些问题比如再写printf("%f\n",9/5);但输出结果是0.000000,不应该是1.8把小数点后面的.8去掉保留1吗那%f输出的话不应该是1.00000吗为什么是0呢(把%f改成%d就是1了)?没太想明白这会所以想问问大佬

wp231957 发表于 2022-3-8 18:53:31

c语言里9/5是一个整数5/9也是一个整数

jhq999 发表于 2022-3-8 19:40:28

printf("%f\n",9.0f/5);

ybcsmile 发表于 2022-3-8 22:05:41

wp231957 发表于 2022-3-8 18:53
c语言里9/5是一个整数5/9也是一个整数

嗯,这个我知道只是不明白为什么9/5输出结果是0而不是1所以想问一下

ybcsmile 发表于 2022-3-8 22:12:42

jhq999 发表于 2022-3-8 19:40


大佬你这我试了下这个应该和printf("%f\n",(float)9/5);原理一样吧,就是把9/5的输出结果转化成浮点数结果。我想问一下这个计算机不是自动会把9/5输出的整形结果转化为占位更大的浮点数结果吗但为啥实际不是我想的

人造人 发表于 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
$

YingW 发表于 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变成浮点数,那/左右两边一个是浮点一个是整数,编译器才会发生自动转换,把两个数自动转换为精度更大的浮点数,之后左右两边都是浮点数,输出的自然是浮点数。
这个内容在第九课算数运算符里有说的,我刚复习完印象深刻,而且他是当作一个小节《类型转换》强调了的,记得仔细看视频哦

ybcsmile 发表于 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吗为啥还能是小数啊。

ybcsmile 发表于 2022-3-8 22:28:42

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

好的谢谢大佬

人造人 发表于 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
结果还是浮点数

ybcsmile 发表于 2022-3-8 22:52:33

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

我懂了谢谢大佬,之前不太清楚表达式只要有一个浮点数结果就是浮点数这一点,所以之前一直没想通。

人造人 发表于 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


ybcsmile 发表于 2022-3-9 20:01:10

人造人 发表于 2022-3-8 23:16
我不知道我有没有说清楚,这里再补充一下吧

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


可以理解的,谢谢大佬了
页: [1]
查看完整版本: 大佬们请教几个问题