用C语言实现输入一个不小于 100 且小于 1000同时包括小数点后一位的一个浮点数,例如 123.4要求把这个数字翻转过来,变成 4.321 4.321 并输出。
时间: 2024-11-25 15:19:51 浏览: 7
2013计算机二级考试C语言试题及答案第一套.doc
在C语言中,你可以通过以下几个步骤来实现这个功能:
1. 首先,你需要从用户那里获取输入的浮点数,并检查它是否满足条件(即大于等于100且小于1000)。可以使用`scanf`函数读取输入。
```c
double num;
printf("请输入一个小于1000且包含一位小数的浮点数:");
scanf("%lf", &num);
```
2. 确认输入有效后,接下来需要将该数值转换成字符串,因为C语言本身并不支持直接操作浮点数的小数部分。你可以使用`snprintf`或`itoa`函数配合`sprintf`完成这一步,然后处理小数点位置。
```c
char str[10]; // 假设我们只需要保留一位小数
int intPart = (int)num; // 整数部分
double fracPart = num - intPart; // 小数部分
// 使用 sprintf 和指定位移计算小数点位置
sprintf(str, "%.1f", num); // %.1f 表示保留一位小数
size_t decimalPos = strlen(str) - 2; // 字符串长度减去小数点后的两位字符,得到小数点的位置
```
3. 然后对整数部分和小数部分分别处理。对于整数部分,反转整个字符串;对于小数部分,单独处理小数点前的数字。
```c
for (int i = 0, j = decimalPos; i < j; ++i, --j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
// 反转整数部分
str[decimalPos + 1] = '\0'; // 添加结束标志
for (int i = 0, j = decimalPos; i < j; ++i, --j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
```
4. 最后,将处理过的字符串转换回浮点数并输出。
```c
double reversedNum = atof(str);
printf("翻转后的数是:%.1f\n", reversedNum);
```
完整的代码如下:
```c
#include <stdio.h>
#include <string.h>
double reverseFloat(double num) {
char str[10];
int intPart = (int)num;
double fracPart = num - intPart;
// 反转整数部分
sprintf(str, "%d.", intPart);
size_t decimalPos = strlen(str) - 2;
for (int i = 0, j = decimalPos; i < j; ++i, --j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
// 添加小数部分
if (fracPart > 0) {
str[decimalPos + 1] = '.';
sprintf(&str[decimalPos + 2], "%.1f", fracPart);
for (int i = 2, j = decimalPos + 2; i < j; ++i, --j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
return atof(str);
}
int main() {
double num;
printf("请输入一个小于1000且包含一位小数的浮点数:");
scanf("%lf", &num);
if (num >= 100 && num < 1000) {
double reversed = reverseFloat(num);
printf("翻转后的数是:%.1f\n", reversed);
} else {
printf("输入值不符合要求!\n");
}
return 0;
}
```
阅读全文