问题遇到的现象和发生背景
已知1英尺=0.3048米1码=0.9144米1尺=0.3333米,只用这三个,提示用户在屏幕输入一长度单位(英尺/码/米/尺)允许小数以yc/ma/chi/m结尾将输入长度转为另外三个没输入的长度打印,并保留五位小数,将所有转换过程写成子函数
我的解答思路和尝试过的方法
达到所有的单位互相转换只能用已知1英尺=0.3048米1码=0.9144米1尺=0.3333米这三个,就是不能单纯定一个变量乘一下了
#include <stdio.h>
float arr[4] = {0.3048, 0.9144, 0.3333, 1}; // 单位换算
char danwei[4][6] = {"yc", "ma", "chi", "m"};
int flag = 3;
float strTofloat(char str[]) {
// 从给定字符串中提取小数,并判断输入的单位
float a;
int dotIndex = 0x7f7f7f7f, endNumberFlag = -1;
for (int i = 0; str[i]; i++) {
if (str[i] == '.') {
dotIndex = i;
continue;
}
if (str[i] >= '0' && str[i] <= '9') {
// 提取数值
a = a * 10 + str[i] - '0';
} else if (a) {
endNumberFlag = i - 1; //数据结束的下标
// 判断输入的单位
for (int j = 0; j < 4; j++) {
if (str[i] == danwei[j][0] && str[i + 1] == danwei[j][1]) {
flag = j;
break;
}
}
}
}
// 转化为小数
for (int i = dotIndex; i < endNumberFlag; i++) {
a /= 10;
}
// printf("长度:%.5f, 单位:%s\n", a, danwei[flag]);
return a;
}
void convert(float length, int flag) {
//给定长度和单位,转换为其他的长度单位
length = length * arr[flag]; // 先转化为米,再由米转化为其他的单位
printf("转换结果:");
for (int i = 0; i < 4; i++) {
if (i != flag) {
printf("%.5f%s\t",length/arr[i],danwei[i]);
}
}
}
int main() {
printf("输入一长度单位(英尺/码/米/尺)允许小数以yc/ma/chi/m结尾: ");
char str[100];
scanf("%s", str);
float length = strTofloat(str);
convert(length, flag);
return 0;
}
好象刚写过的
https://ask.csdn.net/questions/7814557
1、以单位“米”作为中间转换单位,也就是说定义3个函数,形参分别代表 英尺、码和尺,返回值为 米,如:
double yc2m(double m); double ma2m(double m); double chi2m(double m);
再定义3个函数,形参均为 米,返回值分别为英尺、码和尺,如:
double m2yc(double yc); double m2ma(double ma); double m2chi(double chi);
2、检测输入小数的结尾字符,如果是米,那么直接调用后面3个函数即可得到其他单位的值;如果不是,则先调用前3个中相应的函数转换为m,再调用后面函数转换为其他单位的值,输出即可