| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 461 人关注过本帖
标题:不知如何思考
只看楼主 加入收藏
yeyeyeyue
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2014-11-26
结帖率:50%
收藏
 问题点数:0 回复次数:8 
不知如何思考
输入一个算式,遇到等号结束,四种运算符优先级相同,怎么去写这个?
搜索更多相关主题的帖子: 优先级 如何 
2015-05-19 14:09
yeyeyeyue
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2014-11-26
收藏
得分:0 
例如:"1+2*10-10/2="后,输出10
2015-05-19 14:11
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
没有括号的话  相对来说  好弄一些

DO IT YOURSELF !
2015-05-19 14:15
yeyeyeyue
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2014-11-26
收藏
得分:0 
以下是引用wp231957在2015-5-19 14:15:13的发言:

没有括号的话  相对来说  好弄一些




就是没有括号啊,从左到右依次算,求指教啊
2015-05-19 14:23
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
从左往右读取字符串,遇到运算符之前的转换成数字存起来,读取运算符,继续读取下一个数,遇到运算符停止。
这样有两个数,一个运算符,用选择语句列出其中运算符应有的运算
得出结果存起来作为第一个数,按前面的规则继续下面的操作,直到出现"=",输出结果
2015-05-19 14:41
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 5楼 我爱吃青菜
要是没空格还好说  有空格的话。。。。。。

比如  

3 5 +                    8             /             4                8=  

这是一个非法的表达式


8             +                   8                     *           5           =

是否是合法的表达式呢

DO IT YOURSELF !
2015-05-19 15:01
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
也不是特别复杂,只是不考虑运算符的优先权实在有点虐心,参考代码如下(自动忽略非法字符):
程序代码:
#include <stdio.h>
int isnumeric(char a){return a>47&&a<58;}  //检测字符是否为数字
int doeval(int b,int j,char f)
{//做四则运算
    if(f=='+')b=b+j;
    if(f=='-')b=b-j;
    if(f=='*')b=b*j;
    if(f=='/')b=b/j;
    return b;
}
void main()
{
    int b=0,j,i;
    char f='+',a[100];
    printf("输入算式:");
    gets(a);
    for(i=0,j=0;a[i];i++)
    {
        if(isnumeric(a[i]))j=j*10+a[i]-'0';
        else
        {
            if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'||a[i]=='=')
            {
                b=doeval(b,j,f);
                if(a[i]=='=')break;
                f=a[i];
                j=0;
            }
        }
    }
    if(!a[i])
    {//如果算式中不存在等于号的处理
        a[i]='=';
        a[i+1]='\0';
        b=doeval(b,j,f);
    }
    printf("%s %d\n",a,b);
}
   



能编个毛线衣吗?
2015-05-19 15:23
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
收藏
得分:0 
#include<stdio.h>
#include <stdlib.h>

int cal(char *p, int n) {
    int i,num = 0, flag = 1;
    char c;
    for(i = n - 1; i > 0; i--){
        c = *(p + i);
        if(c == '+' || c == '-' || c == '*' || c == '/'){
            num = atoi(p + i + 1);
            *(p + i) = '\0';
            flag = 0;
            break;
        }
    }
    if(flag){
        num = atoi(p);
    }
    if(i <= 0){
        return num;
    }
    switch(c){
        case '+' : num = cal(p, i) + num; break;
        case '-' : num = cal(p, i) - num; break;
        case '*' : num = cal(p, i) * num; break;
        case '/' : num = cal(p, i) / num; break;
        default : break;
    }
    return num;
}

void main()
{
    int i, j, sum = 0;
    char c, ch[100];
    for(i = 0; i < 100; i++){
        c = getche();
        if(c == '='){
            break;
        }
        ch[i] = c;
    }
    ch[i] = '\0';
    sum = cal(ch, i);
    printf("%d", sum);
}
2015-05-19 16:34
快速回复:不知如何思考
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017294 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved