程序设计基础(第3版)习题4.22

编写程序,以字符形式从终端读入一个带小数点的数和一个回车(假设没有输入错误),把它翻译成计算机内部表示的数。数的形式类似于1234.567。本题要求不能使用scanf函数直接读入,所以只能一个字符一个字符地读入,然后再把它们拼起来,并翻译成计算机内部的数。

 

#include <stdio.h>

int main(void) {
    char ch;
    int n=0,i;
    double f=0,g,h=1;
    printf("请输入一个浮点数:");
    ch=getchar();

    while(ch<'0'||ch>'9'){
        ch=getchar();
    }

    while(ch>='0'&&ch<='9'){
        n=n*10+(ch-'0');
        ch=getchar();
    }

    if(ch=='.')ch=getchar();
    
    while(ch>='0'&&ch<='9'){
        h=h/10;
        g=ch-'0';
        f=f+g*h;
        ch=getchar();
    }
    printf("%f",n+f);
    return 0;
}

chatgpt版:使用一个布尔变量hasDecimal来标记是否已经读取到小数点,以便更好地控制整数部分和小数部分的处理

#include <stdio.h>
#include <stdbool.h>

int main(void) {
    char ch;
    int n = 0;
    double f = 0;
    double decimalPlace = 0.1;
    bool hasDecimal = false;
    
    printf("请输入一个浮点数:");
    ch = getchar();

    while (ch < '0' || ch > '9') {
        ch = getchar();
    }

    while (ch >= '0' && ch <= '9') {
        n = n * 10 + (ch - '0');
        ch = getchar();
    }

    if (ch == '.') {
        hasDecimal = true;
        ch = getchar();
    }
    
    while (ch >= '0' && ch <= '9') {
        f = f + (ch - '0') * decimalPlace;
        decimalPlace /= 10;
        ch = getchar();
    }
    
    if (hasDecimal) {
        printf("%.6f\n", n + f);
    } else {
        printf("%d\n", n);
    }
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱看烟花的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值