从键盘中任意输入一个大于0的浮点型数据,请输出这个数据与它最相近、且为5的倍数的数据(如输入4.8则输出5,输入11.2则输出10),若与相邻两个5的倍数距离相等,则输出-1 c语言
时间: 2024-10-05 12:01:09 浏览: 31
S7-200SMART中如何把1个INT整型数据转换成REAL浮点型数据?.docx
5星 · 资源好评率100%
在C语言中,你可以通过以下步骤实现这个功能:首先获取用户输入的浮点数,然后计算它的近似值,如果这个近似值不是5的倍数,那么寻找最近的5的倍数并判断是否需要取较大的那个。下面是具体的代码实现:
```c
#include <stdio.h>
#include <math.h>
int main() {
float num;
printf("请输入一个大于0的浮点数:");
// 读取用户输入
scanf("%f", &num);
// 确保输入的是正数
if (num <= 0) {
printf("输入错误,只能输入正数。\n");
return 1;
}
// 计算最近的5的倍数
float nearest_multiple = floor(num + 0.5); // 向上取整,保证是5的倍数
if (nearest_multiple % 5 != 0) {
nearest_multiple -= 5; // 如果不是5的倍数,减去5直到找到最近的倍数
}
// 检查是否与下一个5的倍数相等,如果是,输出-1
if (fabs(nearest_multiple - num) < fabs((nearest_multiple + 5) - num)) {
printf("-1\n");
} else {
printf("%.0f\n", nearest_multiple); // 输出5的倍数
}
return 0;
}
```
在这个代码中,`floor()` 函数用于向下取整,`fabs()` 函数用于计算数值的绝对值,以便比较接近度。
阅读全文