C语言计算器小程序源代码+实习报告.docx

上传人:b****5 文档编号:12026615 上传时间:2023-04-16 格式:DOCX 页数:14 大小:82.83KB
下载 相关 举报
C语言计算器小程序源代码+实习报告.docx_第1页
第1页 / 共14页
C语言计算器小程序源代码+实习报告.docx_第2页
第2页 / 共14页
C语言计算器小程序源代码+实习报告.docx_第3页
第3页 / 共14页
C语言计算器小程序源代码+实习报告.docx_第4页
第4页 / 共14页
C语言计算器小程序源代码+实习报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言计算器小程序源代码+实习报告.docx

《C语言计算器小程序源代码+实习报告.docx》由会员分享,可在线阅读,更多相关《C语言计算器小程序源代码+实习报告.docx(14页珍藏版)》请在冰豆网上搜索。

C语言计算器小程序源代码+实习报告.docx

C语言计算器小程序源代码+实习报告

 

程序实习报告书

起止日期:

2014年6月23日至2014年7月4日

 

学号:

班级:

姓名:

指导教师:

 

通信与电子工程学院

2014年7月4日

 

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)#;

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

输出的形式:

运算结果,例如Answeris:

14;

1.3测试数据

第一组:

输入3*(9-4)#输出Answeris:

15

第二组:

输入140/(57+13)#输出Answeris:

2

第三组:

输入56*(12-10)#输出Answeris:

112

2.概要设计

 

3.详细设计

主要部分详细流程:

(1)设置两个工作栈,分别存放操作数和运算结果

(2)判断字符的优先级

4.调试分析

错误提示1:

错误原因:

在中文输入法下输入的“;”,导致程序不能识别。

调试方法:

调到英文输入法下输入即可。

错误提示2:

错误原因:

在Init_OPND,Init_OPTR后边都忘加了“&”符号,导致程序不识别。

调试方法:

在Init_OPND,Init_OPTR后边加上“&”即可。

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

全部源代码如下:

#include

#include

#defineMAX100

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

{

inta[MAX];

inttop;

}OPND;

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

{

chara[MAX];

inttop;

}OPTR;

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

{

s->top=0;

}

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

{

s->top=0;

}

voidPush_OPND(OPND*s,intx)/*压入一个运算数*/

{

s->top++;

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

}

voidPush_OPTR(OPTR*s,charx)/*压入一个运算符*/

{

s->top++;

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

}

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

{

intx;

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

s->top--;

returnx;

}

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

{

charx;

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

s->top--;

returnx;

}

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

{

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

}

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

{

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

}

intIsOpr(charc)/*判断输入字符是否为运算符*/

{

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

return1;

else

return0;

}

charPrecede(chars,charc)/*判断字符的优先级*/

{

switch(s)

{

case'+':

case'-':

{

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

return'>';

elseif(c=='*'||c=='/')

return'<';

elseif(c=='(')

return'<';

elseif(c==')')

return'>';

else

return'>';

}

break;

case'*':

case'/':

{

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

return'>';

elseif(c=='*'||c=='/')

return'>';

elseif(c=='(')

return'<';

elseif(c==')')

return'>';

else

return'>';

}

break;

case'(':

{

if(c==')')

return'=';

else

return'<';

}

break;

case')':

{

return'>';

}

break;

case'#':

{

if(c=='#')

return'=';

else

return'<';

}

break;

}

}

intOperate(intx,charopr,inty)/*计算*/

{

intresult;

switch(opr)

{

case'+':

result=x+y;

break;

case'-':

result=x-y;

break;

case'*':

result=x*y;

break;

case'/':

result=x/y;

break;

}

returnresult;

}

voidmain()

{

OPNDsdata;

OPTRsoper;

inta,b,result,i;

charch,theta;

Init_OPND(&sdata);

Init_OPTR(&soper);

Push_OPTR(&soper,'#');

ch=getchar();

while(ch!

='#'||GetTop_OPTR(&soper)!

='#')//当读入的字符和OPTR栈顶的字符均为‘#’时结束运算*/

{

if(!

IsOpr(ch))/*是运算数的情况*/

{

i=atoi(&ch);/*将字符型转为整型*/

ch=getchar();/*使得可以输入几位数*/

while(!

IsOpr(ch))

{

i=i*10+atoi(&ch);

ch=getchar();

}

Push_OPND(&sdata,i);

}

else

{

switch(Precede(GetTop_OPTR(&soper),ch))/*比较栈顶运算符和刚输入运算符的优先级*/

{

case'<':

Push_OPTR(&soper,ch);

ch=getchar();

break;

case'=':

theta=Pop_OPTR(&soper);

ch=getchar();

break;

case'>':

theta=Pop_OPTR(&soper);

b=Pop_OPND(&sdata);

a=Pop_OPND(&sdata);

result=Operate(a,theta,b);

Push_OPND(&sdata,result);

break;

}

}

}

printf("Anwseris:

%d\n",GetTop_OPND(&sdata));

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1