| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1010 人关注过本帖
标题:帮帮小弟~求一个简单的C语言程序
只看楼主 加入收藏
anjingjiazu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-4-18
收藏
 问题点数:0 回复次数:11 
帮帮小弟~求一个简单的C语言程序
要求随便输入个加减乘除的式子,不带括号,能的出结果
谢谢各位了~
搜索更多相关主题的帖子: C语言 
2008-04-18 09:21
mythhaha
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-3-17
收藏
得分:0 
#include "stdio.h"
main()
{int a,b;
char c;
float d;
printf("请输入你要计算的计算式子(X+X=):");
scanf("%d%c%d=",&a,&c,&b);
         switch (c)
         {case '+': d=a+b;printf("%d%c%d=%f\n",a,c,b,d);break;
       case '-': d=a-b;printf("%d%c%d=%f\n",a,c,b,d);break;
       case '*': d=a*b;printf("%d%c%d=%f\n",a,c,b,d);break;
       case '/': d=a/(float)b;{if(b==0)
                                     printf("对不起,除数分母不能为零。\n");
                         else
                               printf("%d%c%d=%f\n",a,c,b,d);
                  }
     }

}
不知道你所说的任意输入的加减乘除的式子是不是x+y这种形式的,还是x+y-c/b类似于这种形式的,有很多的变量
2008-04-18 09:40
anjingjiazu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-4-18
收藏
得分:0 
就是x+y-c/b类似于这种形式,不要括号的
谢谢各位,小弟急用的!
2008-04-18 11:08
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
我前几天写的..带括号的...不带括号也能算
#include<stdio.h>
#include<stdlib.h>
#include <ctype.h>
#define Stack_Size 50
typedef struct
{
    char elem[Stack_Size];
    int top;
}OpStack;
typedef struct
{
    int elem[Stack_Size];
    int top;
}NumStack;

void Push(OpStack *s,char x);
void Pop(OpStack *s,char *x);
void Push(NumStack *s,int x);
void Pop(NumStack *s,int *x);
int Execute(int a,char c,int b);
int ExpEvaluation(NumStack *OVS,OpStack *OPTR);
void GetNumber(char p);
int Cint(char mychar);
int num=0;
void main()
{   
    int result;
    OpStack OPTR;
    NumStack OVS;
    OVS.top=-1;OPTR.top=-1;
    result=ExpEvaluation(&OVS,&OPTR);
    printf("The result is %d\n",result);
}

void Push(OpStack *s,char x)
{
    s->top++;
    s->elem[s->top]=x;
}
void Pop(OpStack *s,char *x)
{
    *x=s->elem[s->top];
    s->top--;
}
void Push(NumStack *s,int x)
{
    s->top++;
    s->elem[s->top]=x;
}
void Pop(NumStack *s,int *x)
{
    *x=s->elem[s->top];
    s->top--;
}
int Execute(int a,char c,int b)
{
   
     switch(c)
     {
     case '+':return a+b;break;
     case '-':return a-b;break;
     case '*':;return a*b;break;
     case '/':return a/b;break;
     }
     
}

void GetNumber(char p)
{
    num=num*10+Cint(p);
}
int Cint(char mychar)
{
    return (mychar-48);
}
//栈运算符与读入运算符优先级的比较
char Compare(char x,char y)
{
  char priority='<';  
  switch(x)
  {
   case '+':
   case '-':if(y=='#'||y=='+'||y=='-'||y==')')priority='>';break;
   case '*':
   case '/': priority='>';if(y=='(' )priority='<';break;
   case '(':if(y==')')priority='=';break;
   case '#':if(y=='#') priority='=';break;
   default:priority='E';
  }
  return priority;
}
int ExpEvaluation(NumStack *OVS,OpStack *OPTR)
{
     int v,flag=0,f1=1,f2=1;
    char ch,ch1,c;
    int a,b,flag1=1;
    Push(OPTR,'#');
    printf("\n\nputin a string(stop with #):");
    while(ch!='#'||OPTR->elem[OPTR->top]!='#')
    {   if(f1&&f2)
         ch=getchar();
        if(isdigit(ch))
        {
            GetNumber(ch);
            
        }
        else
        {   
            
            if((ch>='0'&&ch<='9'||ch1>='0'&&ch1<='9')&&!flag)
            {   
                Push(OVS,num);            
                num=0;
            }
            switch(Compare(OPTR->elem[OPTR->top],ch))
            {
                                
            case '<':               
                Push(OPTR,ch);
                flag=0;
                break;
            case '>':
                Pop(OPTR,&c);
                Pop(OVS,&b);
                Pop(OVS,&a);
                v=Execute(a,c,b);
               
                if(OPTR->elem[OPTR->top]=='-')
                {
                      v=-1*v;
                      OPTR->elem[OPTR->top]='+';
                }
                    Push(OVS,v);
                if(ch!='#'&&ch!=')')   
                {   
                    
                        Push(OPTR,ch);
                        flag=0;
                }
                else
                {
                    f1=0;
                    flag=1;
                    
                }
               
                //printf("%d %c %d  %d\n",a,c,b,v);
                break;
            case '=':
                Pop(OPTR,&c);
                if(c=='('&&ch==')')
                {   
                    
                        f1=1;
                        flag=1;
                    
                }
                break;
            default:printf("Wrong Express!");exit(0);
               
            }
        }
         ch1=ch;
         
    }
   
    return(v);
}

学习需要安静。。海盗要重新来过。。
2008-04-18 11:10
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
要考虑优先级别的问题...不是很简单...个人觉得

学习需要安静。。海盗要重新来过。。
2008-04-18 11:11
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
你这要求,对于初学者来说是很不简单的了
请问你要这代码来干什么?

" border="0" />
2008-04-18 11:13
anjingjiazu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-4-18
收藏
得分:0 
哦,我的朋友老师给出的题,要求写出来,不交的要扣分的~
我自己写了很长时间,写了个但是总觉得不对,就来求你们帮忙了~!
谢谢 了~
2008-04-19 11:47
sxn0508
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2008-1-24
收藏
得分:0 
唉~
2008-04-19 17:45
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
无括号的只要一个递归程序就可以出来的
如果有括号的参见sunkaidong的程序,用栈

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-04-19 17:48
anjingjiazu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-4-18
收藏
得分:0 
版主啊~
能不能帮小弟写出来啊~~
谢谢了啊~
还有2天就要交了啊~
2008-04-27 18:32
快速回复:帮帮小弟~求一个简单的C语言程序
数据加载中...
 
   



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

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