| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 913 人关注过本帖
标题:急求助C,11号截止
只看楼主 加入收藏
austavo
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-11-9
收藏
 问题点数:0 回复次数:6 
急求助C,11号截止
小弟有两道题不太明白,向高手求助.编译系统为TC2.0
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
搜索更多相关主题的帖子: 表达式 
2005-11-09 07:25
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 
顶上去!
高手来看看,等结果呢

其实我也很无聊!
2005-11-11 12:25
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
收藏
得分:0 

这个需要改一下才能用
#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');

}



2005-11-11 16:11
ShiNgo7
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-11-9
收藏
得分:0 
朋友,你这个答案明显不行咧~
你是默认是7这个值,
要求是任意输入一个数值,
伙计,重来
或者加我QQ6425318,我有思路,只是懒得打.

2005-11-11 20:53
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
收藏
得分:0 
汗,是7个运算符,不是7个值

2005-11-11 20:55
ShiNgo7
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-11-9
收藏
得分: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那样除就行了)

写一个这样的函数可以取得任意一种情况,并且没有重复值.


2005-11-11 21:16
xcz0016
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-11
收藏
得分:0 
2005-11-11 23:01
快速回复:急求助C,11号截止
数据加载中...
 
   



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

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