m0_73645082 2022-10-21 19:00 采纳率: 80%
浏览 80
已结题

关于C语言长度单位转换的题没想明白咋整的问题,如何解决?(语言-c语言)

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

  • 写回答

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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 赞助了问题酬金15元 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题