表达式计算程序设计报告Word下载.docx
- 文档编号:18325491
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:16
- 大小:212.31KB
表达式计算程序设计报告Word下载.docx
《表达式计算程序设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《表达式计算程序设计报告Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
4.2.3输入字符串的判断………………………………………………………………4
4.2.4输入字符串优先级的比较………………………………………………………5
4.3调试与测试…………………………………………………………………………7
5、设计心得与总结……………………………………………………………………………………11
6、建议…………………………………………………………………………………………12
7、评阅意见…………………………………………………………………………………13
参考文献………………………………………………………………..13
1、课程设计目的
本课程设计是重要的实践性环节之一,是在学生学习完《高级程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:
1.巩固和加深学生对C语言课程的基本知识的理解和掌握。
2.掌握C语言编程和程序调试的基本技能。
3.利用C语言进行基本的软件设计。
4.掌握书写程序设计说明文档的能力。
5.提高运用C语言解决实际问题的能力。
2、课程设计要求
1.分析课程设计题目的要求。
2.写出详细设计说明。
3.编写程序代码,调试程序使其能正确运行。
4.设计完成的软件要便于操作和使用。
5.设计完成后提交课程设计报告。
3、设计题目分析
3.1题目简介
表达式计算
简单的四则运算,包含“+、-、*、/、(、)”。
例如,输入3*(8.0+(4/3)),输出28。
提示:
错误的表达式提示错误。
例如:
2+*3输出:
表达式输入错误。
3.2设计要求
输入一个表达式,输出其结果。
表达式由数字+-*/()组成。
4、课程设计内容
4.1总体设计
4.1.1设计框架:
第一步:
建立栈运算。
包含符号栈和数字栈:
InitStack(&
fuhao);
InitStack(&
num);
/*符号栈和数字栈*/。
第二步:
获得连接空间:
head=s1=input();
第三步:
释放连接空间:
freelist(head);
第四步:
销毁栈运算:
DestroyStack(&
4.1.2系统功能模块图:
4.2详细设计:
4.2.1主函数以及包含的信息:
intmain(){
intn,a,b;
stackfuhao,num;
/*符号栈和数字栈*/
structsvalue*head,*s1;
/*存放数字符号链表的头地址*/
/*获得链表头*/
Push(&
fuhao,0);
/*将0存入符号栈*/
/*计算处理部分*/
while(s1){
if(s1->
flag==1){Push(&
num,s1->
value);
s1=s1->
next;
}
else{
switch(compare(GetTop(&
fuhao),s1->
value)){
case'
<
'
:
fuhao,s1->
break;
='
Pop(&
fuhao,&
n);
>
num,&
b);
a);
num,operate(a,n,b));
}
printf("
\n结果=%d\n"
a);
完成!
"
);
getch();
此模块实现的是符号栈和数字栈的建立几销毁以及链接的获得和释放,是整个程序中最为关键的一部分,同时也是主函数中最为核心的一部分。
其中包含了head=s1=input();
/*获得链表头*/、ush(&
/*将0存入符号栈*/。
其中input()函数为刺程序中一重要函数。
4.2.2栈的建立与销毁:
typedefstruct{/*栈结构体*/
hatype*base;
hatype*top;
intstacksize;
}stack;
栈的建立以efstruct{/*栈结构体*/为开始,栈的内容有hatype*base,hatype*top,intstacksize三部分组成。
intDestroyStack(stack*s){/*销毁栈,释放内存*/
free(s->
base);
returnSTACK_OK;
栈的销毁以intDestroyStack(stack*s){/*销毁栈,释放内存*/为开始。
从建立栈到释放栈经历了空栈的设置intClearStack(stack*s)、是否为空栈的判断intStackEmpty(stack*s)、加入栈的值intPush(stack*s,hatypen)、栈中值的移出intPop(stack*s,hatype*p)、栈顶值intGetTop(stack*s)、栈底值intGetBase(stack*s,hatype*p)。
4.2.3输入字符串的判断:
输入的字符串有两种一种是程序能够识别的也就是正确的,一种是程序不能识别的也就是错误的。
能够识别的进入下一环节进行优先级的判断,在这里先讨论不能识别的一种情况。
输入的字符串程序无法识别系统会弹出“表达式书写错误”的字样。
如下图所示
图2
此功能在程序中实现在
voidhaerror(inti){/*出错提示*/
switch(i){
case1:
puts("
\n数字符号链表无法申请储存空间!
!
case2:
\n表达式书写错误!
exit(0);
若输入的字符串能够识别系统则进行更为细致的判断,既数字与符号的判断。
if((str[i]<
0'
||str[i]>
9'
)&
&
str[i]!
+'
&
str[i]!
-'
*'
/'
('
)'
)
haerror
(2);
++i;
数字的判断:
while(n=str[i]){
if(n>
n<
){/*判断为数字*/
sum=sum*10+n-'
;
if(str[i+1]<
||str[i+1]>
){
s1=(structsvalue*)malloc(sizeof(structsvalue));
if(!
f){
head=s1;
++f;
elses2->
next=s1;
s1->
flag=1;
value=sum;
sum=0;
s2=s1;
符号的判断:
else{/*为符号*/
flag=0;
value=n;
next=s2;
i++;
4.2.4输入字符串优先级的比较:
intcompare(inta,intb){/*符号优先性比较*/
if(a=='
||a=='
switch(b){
case0:
return'
}
/*表达式出错*/
if(a==0){
intoperate(inta,intn,intb){/*两个数计算*/
switch(n){
returna+b;
returna-b;
returna*b;
returna/b;
4.3调试与测试:
程序的调试与测试是一个复杂而漫长的过程,在此过程中要做到一丝不苟,慎之又慎有一点的差错都有可能带来很多不必要的麻烦,甚者使整个程序崩溃。
下面就此程序在调试与测试过程中得到的结果和遇到的麻烦简单总结与解决。
一,在仔细的改正与调试下进行编译、链接、运行后得到的是如下图所示的DOS界面框图。
图3
二,错误的输入导致的错误而使程序不能正常运行。
如下图所示。
避免此问题的出现应该做到有整洁适宜的操作环境,仔细检查输入时的语言状态栏。
图4
图5
三,下面演示几组正确的输入与输出结果图,其中包含了加法、减法、乘法、除法和简单的混合运算。
图6加法运算
图7减法运算
图8乘法运算
图9除法运算
图10简单混合运算
5、设计心得与总结:
从开学看到这份课程设计要求到确定自己的设计题目总共用了两周多一点的时间,在上一学期中学习了《C程序设计》这门课程,此次作业是对C语言熟练掌握和运用的一次集中考察和锻炼。
说实话在刚拿到作业时一头雾水,更本不知道怎样做,就连基本的选题都是问题。
最后在老师的讲解和说明后才对这次的设计作业有了一个比较彻底的认识,在再三斟酌之下确定了自己的设计题目——表达式计算。
确定自己的题目之后就开始着手去做。
首先,对自己的题目进行一个总体的分析,确定自己该从何下手、程序最后会成什么样子、在这个过程中最应该注意的是什么问题,当这些问题在老师和同学的帮助下得到解决后根据老师的提示在网上找到原代码进行修改和填充。
万事开头难,良好的开始是成功的一半。
这是开始也同时是最繁琐的一步,要阅读有关表达式计算的书籍和到网上浏览、筛选大量的有关程序原代码。
等到确定自己的源代码和初步的修改之后已是期中。
原代码中有些自己没有见过的函数,开始以为知道函数的名字的简单的用途就可以了,等到把所有的程序连接在一起分析的时候才发现这还远远不够,得自己弄得明明白白才能看懂整个程序。
然后就是查阅书籍、上网、求助同学来完成自己的程序修改,这个过程大概用去了三到四周。
接着就到了最后阶段,完善和美化自己的程序。
这也是完成此次课题的最后一关,这个阶段相对来说比较轻松,每天抽出一个小时的时间来对自己的程序做最后的完善。
现在终于有了一个全新的面貌,有刚开始的一盘沙到现在的井井有条。
通过这次的实践我享受了自己带来的这份快乐和成就感。
更使使我加深了对C语言的认识同时也掌握了对C语言的运用,同时,在这里向给我提供题目和指定我前进的方向的马老师深表感谢,没有你的指导和帮助是不会成功的,同时也非常感谢给我提供了帮助的我可爱的同学,在程序的设计和修改过程中我还参考了有关书籍的网络程序在这里一并表示感谢!
6、建议:
这门课程是理论与实践紧密结合的操作性课程,下面我就一学生的角度对这门课程提几点意见。
1、选择利用好已有C编译软件进行辅助教学。
2、搜集素材,自己整理并制作课件进行辅助教学。
3、要充分利用多媒体辅助教学手段和上机操作这一优势,并注重与其他学科的整合,培养学生良好的信息素养。
7、评阅意见:
教师签名:
年月日
参考书目:
[1]谭浩强,《c程序设计题解与上机指导》,清华大学出版社,北京,1992年出版
[2]谭浩强,《c程序设计》,清华大学出版社,北京,1991年出版
[3]李春葆,《c语言习题与解析》,清华大学出版社,北京,2006年出版
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 表达式 计算 程序设计 报告