C语言计算器小程序源代码+实习报告.docx
- 文档编号:3907988
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:12
- 大小:84.68KB
C语言计算器小程序源代码+实习报告.docx
《C语言计算器小程序源代码+实习报告.docx》由会员分享,可在线阅读,更多相关《C语言计算器小程序源代码+实习报告.docx(12页珍藏版)》请在冰豆网上搜索。
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));
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 计算器 程序 源代码 实习 报告