| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1718 人关注过本帖
标题:用递归实现 计算器代码,进来看看!
只看楼主 加入收藏
flysky2011++
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-11-30
收藏
 问题点数:0 回复次数:8 
用递归实现 计算器代码,进来看看!
#include <stdio.h>
#include <conio.h>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include <conio.h>
char gain[100];
int n=0;
void information(void) /*报告错误*/
{
  printf("=============================================================================\n\n");
  printf("*******************************简单计算器************************************\n\n");
  printf("**使用说明:输入表达式如, 2*7-5+(2.2/8)=[回车],即按回车结束运算************\n\n");
  printf("*******************************祝您计算成功!*********************************\n\n");
  printf("=============================================================================\n\n");
}
void error(void)/*报告错误*/
{
    printf("ERROR!\n");
    exit(1);
}
void match(char wanted)/*标识符匹配*/
{
    if(gain[n]==wanted)
         gain[++n]=getchar();/*成功则获取下一个标识符 */
    else error();
}
double term(void);
double factor(void);
double exp(void)
{
    double num=term(); /*计算比加减更高级的运算*/
    while((gain[n]=='+')||(gain[n]=='-'))
    switch(gain[n])
    {
        case'+':match('+');
        num+=term();
        break;
    case'-':match('-');
            num-=term();
            break;
    }
    return num;
}
double term(void)
{
    double div;
    double num=factor();/*计算比乘除更高级的运算*/
    while((gain[n]=='*')||(gain[n]=='/'))
    switch(gain[n])
    {
       case'*':match('*');
               num*=factor();
               break;
       case'/':match('/');
               div=factor();
               if(div==0)
               {
                 printf("The divisor is zero!\n");
                 exit(1);
                }
                num/=div;
                break;
    }
    return num;
}
double factor(void)
{
  double num;
  char number[61];
  int i=0;
  if(gain[n]=='(')
  {
     match('(');
     num=exp();
     match(')');
   }
   else if(isdigit(gain[n])||gain[n]=='.')/*判断字符串是否为浮点数*/
   {
      while(isdigit(gain[n])||gain[n]=='.')
      {
       number[i++]=gain[n++];
       gain[n]=getchar();
       }
       number[i]='\0';
       num=atof(number); /*把字符串转化为浮点数*/
   }
       else error();
   return num;
}
main()
{
  double result;
  char t;
  information();
  do{
  printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t请输入表达式:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t  ");
  gain[n]=getchar();
   result=exp();
  if(gain[n]=='=')
   {
     gain[n]='\0';
     printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t%s=%f\n",gain,result);
     printf("\t\t\t\t\t\t\t\t\t\t\t\tDo you want to go on calculating?(y/n):  ");/*询问是否继续*/
     getchar(); /*去掉空格*/
     scanf("%c",&t);
     getchar(); /*去掉空格*/
     n=0;
    }
  else error();
  }while(t=='y');
  if(t=='n')
   printf("\n\t\t\t\t\t\t\t\t\t\t\t\t press any key to stop the progrming"); /*按任意键结束程序*/
  getch();
}
搜索更多相关主题的帖子: 递归 include 代码 gain 
2008-06-25 12:44
z415541242
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-6-25
收藏
得分:0 
回复 1# flysky2011++ 的帖子
高人,好强大!
2008-06-25 15:31
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
顶下

—>〉Sun〈<—
2008-06-25 17:38
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
收藏
得分:0 
>> 本主题由 静夜思 于 2008-6-25 15:23 拒绝承认原创

为什么这不能算原创?


[color=white]<" border="0" />>
2008-06-25 18:46
bianchengfeng
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2008-3-1
收藏
得分:0 
很好,很强大
2008-06-30 19:50
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
估计基本思路问题。。好像写过很多了。。。还是不错的

学习需要安静。。海盗要重新来过。。
2008-06-30 20:01
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LZ的程序,怎么输入负数???
比如-2-3=或者2+(-2)=都是ERROR啊……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-30 20:15
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
[bo][un]爱喝牛奶的猫咪[/un] 在 2008-6-25 18:46 的发言:[/bo]

>> 本主题由 静夜思 于 2008-6-25 15:23 拒绝承认原创

为什么这不能算原创?


 



因为是通过网上划词搜索来确定原创的。而这帖子都是关键字,所以……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-30 20:16
flysky2011++
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-11-30
收藏
得分:0 
哎,我三晚上的劳动成果。。。。

天空没有翅膀的痕迹,但我已飞过!
2008-07-10 01:37
快速回复:用递归实现 计算器代码,进来看看!
数据加载中...
 
   



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

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