问题遇到的现象和发生背景
已知1英尺=0.3048米1码=0.9144米1尺=0.3333米,只用这三个,提示用户在屏幕输入一长度单位(英尺/码/米/尺)允许小数以yc/ma/chi/m结尾将输入长度转为另外三个没输入的长度打印,并保留五位小数,将所有转换过程写成子函数
我的解答思路和尝试过的方法
达到所有的单位互相转换只能用已知1英尺=0.3048米1码=0.9144米1尺=0.3333米这三个,就是不能单纯定一个变量乘一下了

关于C语言长度单位转换的题没想明白咋整的问题,如何解决?(语言-c语言)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 这一次没糖 2022-10-21 21:02关注
#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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录