| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 644 人关注过本帖
标题:一个很基本的问题...求助
只看楼主 加入收藏
nhlr2319
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-10-25
收藏
 问题点数:0 回复次数:21 
一个很基本的问题...求助
要用getche()做一个计算器,=结束。。。要用到while的
能不能帮忙做一下?或者给个例子?谢谢!

[此贴子已经被作者于2007-10-26 2:01:51编辑过]

搜索更多相关主题的帖子: 计算器 
2007-10-25 12:59
nhlr2319
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-10-25
收藏
得分:0 
谢谢了!

[此贴子已经被作者于2007-10-26 2:02:31编辑过]


2007-10-25 13:14
petroe
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-10-19
收藏
得分:0 

恩哦,高人来解解吧!!!!

2007-10-25 14:08
penjew
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-10-23
收藏
得分:0 
我也不知道getche()是做什么用的
2007-10-25 15:44
nhlr2319
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-10-25
收藏
得分:0 
没有人会。。。? 给一个例子也行。。。我现在完全不知道怎么下手。。。
2007-10-26 09:34
superplayer0
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-19
收藏
得分:0 
不知道是什么啊
2007-10-26 09:37
编程终结
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-10-24
收藏
得分:0 
getche()是C语言里面的一个输入命令,有待研究
2007-10-26 10:20
编程终结
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-10-24
收藏
得分:0 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxbuf 80

/*------定义结构体-------*/
struct s_node
{
int data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;

/*-----将数据入堆栈-------*/
link push(link stack,int value)
{
link newnode;
/*配置节点内存*/
newnode=(link) malloc (sizeof(s_list));
if(!newnode)
{
printf("\nERROR");
return NULL;
}
newnode->data=value;
newnode->next=stack;
stack=newnode;
return stack;
}

/*------从堆栈中读取数据-------*/
link pop(link stack,int *value)
{
link top;

if (stack!=NULL)
{
top=stack;
stack=stack->next;
*value=top->data;
free(top);
return stack;
}
else
*value=-1;

}

/*------检查堆栈是否为空------*/
int empty(link stack)
{
if (stack==NULL)
{
return 1;
}
else
return 0;
}


/*-----判断是否为运算符---------*/
int is_operator(char operator)
{
switch(operator)
{
case '+': case '-': case '*': case '/': case '(': case ')': return 1;
default: return 0;
}
}

/*-------判断运算符的优先权--------*/
int priority(char operator)
{
switch (operator)
{
case '(': return 1;
case '+': case '-': return 2;
case '*': case '/': return 3;
default: return 0;
}
};

/*-------计算两个操作树的值---------*/
int two_result(int operator, int operand1,int operand2)
{
switch (operator)
{
case '+': return (operand2+operand1);break;
case '-': return (operand2-operand1);break;
case '*': return (operand2*operand1);break;
case '/': return (operand2/operand1);break; /*这里应该做异常处理*/
}

}


/*------------------------------------------主程序------------------------------*/
int main(int argc, char * argv[])
{
char expression[maxbuf]; /*存放表达式*/
int position=0; /*指针的位置*/
int op=0; /*运算符*/
int operand1=0; /*第一个操作数*/
int operand2=0; /*第二个操作数*/
int result=0; /*结果*/
int flag=0; /*判断操作数是否是多位*/

printf("\n please input the inorder expression:\n");
gets(expression);

while (expression[position]!='\0' && expression[position]!='\n')
{
if (is_operator(expression[position])) /*是运算符时做以下操作*/
{
flag=0;

if(expression[position]=='(')
{
operator=push(operator,expression[position]);
position++;
}

else if(expression[position]==')')
{

while(operator->data !='(')
{
operator=pop(operator,&op);
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operand=push(operand,two_result(op,operand1,operand2));
}
if(operator->data =='(')
operator=pop(operator,&op);
position++;
}

else if (!empty(operator)||empty(operator))
{
if (!empty(operator))
while (priority(expression[position])<=priority(operator->data) && !empty(operator))
{
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operator=pop(operator,&op);
operand=push(operand,two_result(op,operand1,operand2));
}
operator=push(operator,expression[position]);
position++;
}

}
else /*是数字时进行如下操作*/
if(flag==1)
{ /*将字符串形式的数字转换成数字*/
operand=pop(operand,&operand1);
operand1=operand1*10+expression[position]-48;
operand=push(operand,operand1);
position++;
}
else
{
operand=push(operand,expression[position]-48);
position++;
flag=1;
}
}

while (!empty(operator))
{
operator=pop(operator,&op);
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operand=push(operand,two_result(op,operand1,operand2));
}

operand=pop(operand,&result);
printf("the expression %s = %d\n",expression,result);
getchar(); /*加个方法可以显示结果*/
return 0;
}


程序学院的,试下吧

2007-10-26 10:26
nhlr2319
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-10-25
收藏
得分:0 
楼上的。。。。。真的十分谢谢你的程序!可我是初学者啊。。。只能说,对不起,你的牛刀用来杀我这只鸡了。。。
2007-10-26 10:38
pjjdudu
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-10-17
收藏
得分:0 
靠,这个完美的回答。这么多语句哈,先自己学习下。
2007-10-26 10:43
快速回复:一个很基本的问题...求助
数据加载中...
 
   



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

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