1.利用堆栈操作函数pop 和push,编写一个能对包含+,-,*,/的表达式进行求值的程
序。如:输入“2+3*4”,输出14。
2,编程序求某一数的所有分解数,如输入7,则输出:(要求输出不能重复)
7=6+1 7=4+1+1+1 7=5+2 7=3+3+1 7=2+2+2+1
7=5+1+1 7=3+2+2 7=2+2+1+1+1
7=4+3 7=3+2+1+1 7=2+1+1+1+1+1
7=4+2+1 7=3+1+1+1+1 7=1+1+1+1+1+1+1


这个需要改一下才能用
#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#define EOFILE '`'
typedef char SElemType;
#include "stack.h"
Status visit(SElemType * e)
{
printf("%c", *e);
}
char OP[10]={'+','-','*','/','(',')','#'};
int precede[7][7]={
1,1,2,2,2,1,1,
1,1,2,2,2,1,1,
1,1,1,1,2,1,1,
1,1,1,1,2,1,1,
2,2,2,2,2,3,0,
1,1,1,1,0,1,1,
2,2,2,2,2,0,3};
int In(char c,char *op)
{
int i=0;
while(i<7)
if(c==op[i++])
return 1;
return 0;
}
char Precede(char op,char c)
{
int pos_op;
int pos_c;
int i;
for(i=0;i<7;i++)
{
if(op==OP[i]) pos_op=i;
if(c==OP[i]) pos_c=i;
}
switch(precede[pos_op][pos_c])
{
case 1: return '>';
case 2: return '<';
case 3: return '=';
}
}
char Operate(int a,char theta,int b)
{
switch(theta)
{
case '+':return a+b-'0';
case '-':return a-b+'0';
case '*':return (a-'0')*(b-'0')+'0';
case '/':return (a-'0')/(b-'0')+'0';
}
}
char EvaluateExpression()
{
SqStack *OPND,*OPTR;
char c,x,theta;
char a,b;
InitStack(&OPTR); Push(OPTR,'#');
InitStack(&OPND);
c=getchar();
while(c!='#'||GetTop(OPTR)!='#')
{
if(!In(c,OP))
{Push(OPND,c);c=getchar();}
else
switch(Precede(GetTop(OPTR),c))
{
case '<':
Push(OPTR,c);
c=getchar();
break;
case '=':
Pop(OPTR,&x);
c=getchar();
break;
case '>':
Pop(OPTR,&theta);
Pop(OPND,&b); Pop(OPND,&a);
Push(OPND,Operate(a,theta,b));
break;
}
}
c=GetTop(OPND);
DestroyStack(OPTR);
DestroyStack(OPND);
return c;
}
main()
{
char i;
printf("\n\n\n\nOnly within 0..9 evaluation,input a expression end with symbol #:\n");
i=EvaluateExpression();
printf("\nThis expression's result is: ");
printf("%d\n\n\n\n",i-'0');
}
你把这道题复杂化了.
这道题初学C的人都可以做,只要懂得利用循环就行了.
我的思路是这样的:
就拿7做例子
我先写个函数让7去除1-6,比如除3,得2余1,即7=3+3+1(这里要定义三个变量a,b,num,a用来存放商即2,b用来存放余数1,num用来存放被除数即是这里的3,把num循环a次,再加上b就是7=3+3+1)
假如余数大于1(例如7除以4得1余3,即是a=1,b=3,num=4,这里判断b是否大于1,现在这里是大于1的,那么再将3重新像7那样除就行了)
写一个这样的函数可以取得任意一种情况,并且没有重复值.