求助,C语言初学者遇到一题不会


rt,自学C语言,遇到书上一道习题没有思路。。

编写程序对表达式求值:
Enter an expression: 1+2.5*3
Value of expression: 10.5

表达式中的操作数是浮点数,运算符是+、-、*、/。表达式从左向右求值(所有运算符的优先级都一样)

p.s.:目前我还没学到数组啊指针一类的东西。。。

一开始的思路:
检测四则运算符,四则运算符之间的为操作数,读取操作数并且转换为数字,然后两两运算。譬如检测到+号,然后用getchar函数提取1和2.5两个char值,'1'-48(ASCII码中数字的字符编码比它本身大48,利用这个特性可以将字符转换为数字),但是2.5就不知道怎么转换了
而且利用getchar函数,如果操作数不是个位数,譬如12,就没有办法提取,只能先提取1再提取2,然后1*10+2,但是这样又很麻烦不知道怎么解决。

谢谢!

c 求助

四叶草场主 10 years, 1 month ago

 scanf("%f",a);

把键盘输入当作浮点数看待,存储到a中


 scanf("%d",b);

把键盘输入的整数整个存储到b中

Leptons answered 10 years, 1 month ago

话说连如果数组啥的都还没学熟的话,这道题目可能不大可做了,可以先去学后面的内容,等水平高一点再回来做这道题目;
在这里可以先剧透一下常用的写法,弄俩栈,一个数值栈存数字,一个符号栈存运算符,遍历一遍即可;
至于如何读取字符串中的数值嘛, sscanf() 函数是你不二的选择~

deone answered 10 years, 1 month ago

这题先跳过问题不大

学了编译原理再回来降维打击就好

PS. 所以说c不是最好的入门语言…

此用户名不可用 answered 10 years, 1 month ago

其实不用那么麻烦,用%d读取就行!(不考虑浮点数除法,都按照整除来)


 #include <cstdio>
#include <cstring>
int main()
{
    printf("请输入表达式:\n");
    int x,ans;
    scanf("%d",&x);
    ans = x;
    char c;
    while(scanf("%c",&c) && c != '\n') {
        scanf("%d",&x);
        if(c == '+') {
            ans += x;
        }
        if(c == '-') {
            ans -= x;
        }
        if(c == '*') {
            ans *= x;
        }
        if(c == '/') {
            ans /= x;
        }
    }
    printf("ans = %d",ans);
    return 0;
}

sodet answered 10 years, 1 month ago

Your Answer