我的c程序没有计算十进制值,只是打印整个数值

我的c程序没有计算十进制值,只是打印整个数值,c,structure,C,Structure,此程序计算整数的平均值,而不打印小数。它将结果打印为整数:N.000000。为什么? 因为所有的标记都是整数,4也是整数,除法将遵循整数规则-不会有任何小数开始 尝试将其中一个标记转换为double或float,或者可以在4之后添加.0 因为所有的标记都是整数,4也是整数,除法将遵循整数规则-不会有任何小数开始 尝试将其中一个标记转换为double或float,或者可以在4之后添加.0 表示每个标记都是一个整数。然后求和,这也是一个整数。然后你将它们除以4,这也是一个整数,所以这个操作将是一个整

此程序计算整数的平均值,而不打印小数。它将结果打印为整数:N.000000。为什么?

因为所有的标记都是整数,4也是整数,除法将遵循整数规则-不会有任何小数开始

尝试将其中一个标记转换为double或float,或者可以在4之后添加.0

因为所有的标记都是整数,4也是整数,除法将遵循整数规则-不会有任何小数开始

尝试将其中一个标记转换为double或float,或者可以在4之后添加.0

表示每个标记都是一个整数。然后求和,这也是一个整数。然后你将它们除以4,这也是一个整数,所以这个操作将是一个整数除法-一个丢弃结果的小数部分的操作。把它除以4.0就可以了


表示每个标记都是一个整数。然后求和,这也是一个整数。然后你将它们除以4,这也是一个整数,所以这个操作将是一个整数除法-一个丢弃结果的小数部分的操作。将它除以4.0就可以了。

计算中的所有操作数都是int,因此结果是int

在计算中引入浮点数,以保留平均值的小数部分:

avg = (s1. marks + s2. marks + s3. marks + s4. marks) / 4.0;

计算中的所有操作数都是int,因此结果是int

在计算中引入浮点数,以保留平均值的小数部分:

avg = (s1. marks + s2. marks + s3. marks + s4. marks) / 4.0;

把总和除以4.0就行了

代码如下:

avg = (s1. marks + s2. marks + s3. marks + s4. marks) / 4.0;
这会解决你的问题


这是因为你把分数作为一个int值,并用int值除以它,即4。所以,当你除以两个int值,结果就是一个int值。但是,当我们除以一个双精度值,即4.0时,结果将以双精度格式计算,然后在分配给平均值时转换为浮点值。

只需将总和除以4.0即可

代码如下:

avg = (s1. marks + s2. marks + s3. marks + s4. marks) / 4.0;
这会解决你的问题

这是因为你把分数作为一个int值,并用int值除以它,即4。所以,当你除以两个int值,结果就是一个int值。但是,当我们除以一个双精度值,即4.0时,结果将以双精度格式计算,然后在分配给平均值时转换为浮点值。

您有两个问题

你的学生成绩是整数类型的,这意味着当你对它们进行除法、加法或大多数运算时,它将是整数除法、加法等,返回整数

输出语句使用%d作为格式化指令,将传递的值格式化为int

解决第一个问题

((float)s1.marks) + ...
将您的整数转换为浮点数,未来添加到浮点数的整数将产生浮点数

解决第二个问题

printf("... %f ...", value);
将设置值的格式,就像它应该是一个浮点值一样

还有其他解决方案,例如,许多金融系统不希望处理一分钱的分数,因此将值存储为考虑的最小分数的计数,并适当地格式化为分数美元$11.03,但存储值为1103。

您有两个问题

你的学生成绩是整数类型的,这意味着当你对它们进行除法、加法或大多数运算时,它将是整数除法、加法等,返回整数

输出语句使用%d作为格式化指令,将传递的值格式化为int

解决第一个问题

((float)s1.marks) + ...
将您的整数转换为浮点数,未来添加到浮点数的整数将产生浮点数

解决第二个问题

printf("... %f ...", value);
将设置值的格式,就像它应该是一个浮点值一样


还有其他解决方案,例如,许多金融系统不希望处理一分钱的分数,因此将值存储为考虑的最小分数的计数,并适当地格式化为分数美元$11.03,但存储值为1103。

它将“去掉小数”?当然,整个计算是在整数运算中完成的,最终的整数结果被转换成浮点。@JonathanLeffler我是怎么想的:-?它将“去掉小数”?当然,整个计算都是用整数运算完成的,最终的整数结果被转换成浮点。@JonathanLeffler我是怎么想的:-?欢迎来到堆栈溢出。你是对的;这将解决问题。但是解释一下为什么它能解决这个问题会更有帮助。这是一个很好的评论,但应该在答案中。您可以编辑自己的答案和问题,而不必考虑您的代表。这次我已经为您转移了答案和问题;以后请自己做。你应该删除你的评论,尽管我已经将其标记为“过时”;我会尽量记住删除此评论。欢迎使用Stack O
弗罗夫。你是对的;这将解决问题。但是解释一下为什么它能解决这个问题会更有帮助。这是一个很好的评论,但应该在答案中。您可以编辑自己的答案和问题,而不必考虑您的代表。这次我已经为您转移了答案和问题;以后请自己做。你应该删除你的评论,尽管我已经将其标记为“过时”;我会尽量记住删除这条评论。