c语言,输入一个最简小数,小数后接e或E与一整数,输出最简小数与10的整数次方,当整数为-0接一整数时,视作该整数的负数,且输出数不被格式化输出
时间: 2024-12-15 11:22:03 浏览: 1
指数表示科学表示法-c语言基础课件ppt
在C语言中,可以使用`scanf`函数获取用户输入的小数及其指数,然后使用`printf`函数输出结果。需要注意的是,当用户输入-0和指数时,我们需要特殊处理。以下是一个实现的例子:
```c
#include <stdio.h>
#include <math.h>
// 函数用于处理小数与指数,返回最简形式的数值和对应的指数
void process_number(double* num, int* exponent) {
*num = 0;
int dot_count = 0, e_count = 0;
while (*scanf("%d%*[.]%n", &num, &dot_count, &e_count) == 1) {
if (e_count > 1) { // 处理异常情况,只接受一次'e'
fprintf(stderr, "Invalid input! Only one 'e' or 'E' is allowed.\n");
return;
}
if (*num == 0 && e_count == 0) { // 如果输入是-0,视为负数
*num = -1;
} else if (*num != 0) { // 正常小数部分
if (dot_count > 1) {
fprintf(stderr, "Invalid input! Only one decimal point is allowed.\n");
return;
}
// 移除多余的零并计算指数
while (*num == 0 && e_count > 0) {
*num /= 10;
e_count--;
}
}
// 计算指数
*exponent = e_count;
}
}
int main() {
double num;
int exponent;
process_number(&num, &exponent);
// 输出结果,注意不使用printf的格式控制,直接显示数值乘以10的相应次方
printf("%.1f x 10^%d\n", num, exponent);
return 0;
}
阅读全文