100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > c语言计算器程序代码有优先级 C语言计算器小程序(源代码+实习报告).doc

c语言计算器程序代码有优先级 C语言计算器小程序(源代码+实习报告).doc

时间:2023-10-04 15:29:51

相关推荐

c语言计算器程序代码有优先级 C语言计算器小程序(源代码+实习报告).doc

程序实习报告书

起止日期: 年 6月 23 日 至 年 7月 4日

学 号:

班 级:

姓 名:

指导教师:

通信与电子工程学院

7月 4日

5

目 录

1. 需求分析……………………………………………2

1.1 程序的功能…………………………………………2

1.2 输入输出的要求……………………………………2

1.3 测试数据……………………………………………2

2. 概要设计……………………………………………3

3. 详细设计……………………………………………4

3.1 模块功能说明………………………………………4

4. 调试分析……………………………………………6

5. 核心源程序清单和执行结果………………………6

1.需求分析

1.1 程序的功能

本程序是一个计算器小程序,利用算符优先关系,实现对算术四则混合运算表达式的求值并输出结果。

1.2 输入输出的要求

输入的形式:算术表达式,以井号“#”结束。例如2*(3+4)#;

包含的运算符只能有+ 、- 、* 、/ 、(、 );

输出的形式:运算结果,例如Answer is:14;

1.3 测试数据

第一组: 输入 3*(9-4)# 输出 Answer is:15

第二组: 输入140/(57+13)# 输出 Answer is:2

第三组: 输入 56*(12-10)# 输出 Answer is:112

2. 概要设计

向SIGN中压入“#”

用c=getchar()读字符

c!=’#’||SIGNgettop!=’#’

N

c是否为操作符

Y

N

将字符数转换成整形数

将c压入DATE

用c=getchar()读字符c

Y

结束运算

比较SIGNgettop和c的优先级

#include #define MAX 100

typedef struct /*定义一个栈存放运算数*/

{

int a[MAX];

int top;

}OPND;

typedef struct /*定义一个栈存放运算符*/

{

char a[MAX];

int top;

}OPTR;

void Init_OPND(OPND *s) /*初始化运算数栈*/

{

s->top =0;

}

void Init_OPTR(OPTR *s) /*初始化运算符栈*/

{

s->top =0;

}

void Push_OPND(OPND *s,int x) /*压入一个运算数*/

{

s->top ++;

s->a [s->top ]=x;

}

void Push_OPTR(OPTR *s,char x) /*压入一个运算符*/

{

s->top ++;

s->a [s->top ]=x;

}

int Pop_OPND(OPND *s) /*取出一个运算数*/

{

int x;

x=s->a [s->top];

s->top --;

return x;

}

char Pop_OPTR(OPTR *s) /*取出一个运算符*/

{

char x;

x=s->a [s->top];

s->top --;

return x;

}

int GetTop_OPND(OPND *s) /*取栈顶运算数*/

{

return (s->a[s->top]);

}

char GetTop_OPTR(OPTR *s) /*取栈顶运算符*/

{

return (s->a[s->top]);

}

int IsOpr(char c) /*判断输入字符是否为运算符*/

{

if (c==+||c==-||c==*||c==/||c==(||c==)||c==#)

return 1;

else

return 0;

}

char Precede(char s,char c) /*判断字符的优先级*/

{

switch(s)

{

case +:

case -:

{

if(c==+||c==-)

return >;

else if (c==*||c==/)

return ;

else

return >;

}

break;

case *:

case /:

{

if(c==+||c==-)

return >;

else if (c==*||c==/)

return >;

else if(c==()

return ;

else

return >;

}

break;

case (:

{

if(c==))

return =;

else

return ;

}

break;

case #:

{

if(c==#)

return =;

else

return :

theta=Pop_OPTR(&soper);

b=Pop_OPND(&sdata);

a=Pop_OPND(&sdata);

result=Operate(a,theta,b);

Push_OPND(&sdata,result);

break;

}

}

}

printf("Anwser is: %d\n",GetTop_OPND(&sdata));

}

第 10 页 共 12 页

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。