—目录—
1. 需求分析3
2. 概要设计3
3. 详细设计4
4. 测试与分析9
5. 总结9
6. 附录(源程序清单。
1. 需求分析。
以字符列的形式从终端输入语法的正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则运算的求值,并仿照教科书的例子在求值中运算符栈、运算栈、输入字符和主要操作的变化过程。
1. 1问题描述。
设计一个程序,使用栈求解算术表达式。
1.2 基本要求。
1) 输入的形式与输出值范围。
输入需要求解的表达式。
2) 输出的形式。
输出最后的运算结果。
3) 程序所能达到的功能。
输入功能:输入并显示表达式,并对表达式的正确性进行判断。
计算功能:计算正确的表达式,并输出正确结果。
2. 概要设计。
1) 数据结构。
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
typedef int status;
typedef int boolean;
2) 程序模块。
主函数。main()
栈的顺序存储。
#define stack_init_size 10
#define stackincrement 2
typedef struct
建立顺序栈。
status initstack ( sqstack *s)
判断。selemtype precede(selemtype t1,selemtype t2)
3. 详细设计。
栈的顺序存储。
#define stack_init_size 10
#define stackincrement 2
typedef struct
selemtype *base;
selemtype *top;
int stacksize; /
sqstack; /
建立顺序栈。
status initstack ( sqstack *s)
s->base=(selemtype *)malloc(stack_init_size*sizeof(selemtype));
if(!(s->base))
exit(overflow);
s->top=s->base;
s->stacksize=stack_init_size;
return ok;
status destroystack(sqstack *s)
free(s->base);
s->base=null;
s->top=null;
s->stacksize=0;
return ok;
status clearstack(sqstack *s)
s->top=s->base;
return ok;
status stackempty(sqstack *s)
if(s->top==s->base)
return true;
elsereturn false;
int stacklength(sqstack *s)
return s->top - s->base;
status gettop(sqstack s,selemtype *e)
if( >
e = return ok;
elsereturn error;
status push(sqstack *s,selemtype e)
if(s->top-s->base>=s->stacksize)
s->base=(selemtype *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(selemtype));
if(!s->base)
exit(overflow);
s->top=s->base+s->stacksize;
s->stacksize+=stackincrement;
(s->top)++e;
return ok;
status pop(sqstack *s,selemtype *e)
if(s->top==s->base)
return error;
e = s->top;
return ok;
status stacktr**erse(sqstack s,status(*visit)(selemtype))
while( >
visit(*
printf("");
return ok;
判断。selemtype precede(selemtype t1,selemtype t2)
selemtype f;
switch(t2)
case '+
case '-if(t1=='t1=='#
f='<
elsef='>
break;
case '*
case '/if(t1=='t1=='t1=='
f='>
elsef='<
break;
case '(if(t1=='
printf("error1");
exit(error);
elsef='<
break;
case ')switch(t1)
case '(f='=
break;
case '#':printf("error2");
exit(error);
default: f='>
break;
case '#':switch(t1)
case '#':f='=
break;
case '(printf("error3");
exit(error);
default: f='>
return f;
status in(selemtype c)
switch(c)
case'+'
case'-'
case'*'
case'/'
case'('
case')'
case'#':return true;
default:return false;
selemtype operate(selemtype a,selemtype theta,selemtype b)
selemtype c;
a=a-48;
b=b-48;
switch(theta)
case'+'c=a+b+48;
break;
case'-'c=a-b+48;
break;
case'*'c=a*b+48;
break;
case'/'c=a/b+48;
return c;
selemtype evaluateexpression()
sqstack optr,opnd;
selemtype a,b,c,x,theta;
initstack(&optr);
push(&optr,'#
initstack(&opnd);
c=getchar();
gettop(optr,&x);
while(c!='#'||x!='#
if(in(c))
switch(precede(x,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;
else if(c>='0'&&c<='9')
push(&opnd,c);
c=getchar();
else printf("you input is error");
exit(error);
gettop(optr,&x);
gettop(opnd,&x);
return x;
主函数。void main()
4. 测试与分析。
输入表达式“1+2*3-4/2”,然后加#号结束,按确认,结果显示为5.
测试完成,无错误信息。
5. 总结。
课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。
经过了一个星期的课程设计,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高,对于理论知识学习不够扎实的我深感“书到用时方恨少”。于是想起圣人说过“温故而知新”,便重拾教材,对知识系统而全面地进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,而且领悟许多平时学习难以理解掌握的较难知识。学会了如何思考的思维方式,大家很快就找到了设计的灵感。
付出和回报永远成正比关系。还是拿那片林子举例子,满树的果子由你摘,有的人两手往口袋一插,等着落地桃,有的人背着大篓子在树上摘得不亦乐乎。会不会爬树是一码事,不会的话做做接应也好。
但是动不动手就是另一码事了。我知道自己建模计算方面的能力有欠缺,于是担当起广泛收集资料、阅读各类**的角色。以前从没接触过这些,但是现在我可以轻松的搜到想要的**,阅读也很有技巧,知道先从概要开始,筛出哪些有用的信息仔细分析。
后来的结果分析就游刃有余多了, 这些都是从刚开始的茫然不知积累而来的。4
6. 附录(源程序)
typedef char selemtype;
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
typedef int status;
typedef int boolean;
#define stack_init_size 10
#define stackincrement 2
typedef struct
selemtype *base;
selemtype *top;
int stacksize;
sqstack;
status initstack ( sqstack *s)
s->base=(selemtype *)malloc(stack_init_size*sizeof(selemtype));
if(!(s->base))
exit(overflow);
s->top=s->base;
s->stacksize=stack_init_size;
return ok;
status destroystack(sqstack *s)
free(s->base);
s->base=null;
s->top=null;
s->stacksize=0;
return ok;
status clearstack(sqstack *s)
s->top=s->base;
return ok;
status stackempty(sqstack *s)
if(s->top==s->base)
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...
数据结构课程设计
数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...
数据结构课程设计
班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...