田甜数据结构课程设计报告.docx

上传人:b****4 文档编号:26903911 上传时间:2023-06-23 格式:DOCX 页数:16 大小:132.19KB
下载 相关 举报
田甜数据结构课程设计报告.docx_第1页
第1页 / 共16页
田甜数据结构课程设计报告.docx_第2页
第2页 / 共16页
田甜数据结构课程设计报告.docx_第3页
第3页 / 共16页
田甜数据结构课程设计报告.docx_第4页
第4页 / 共16页
田甜数据结构课程设计报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

田甜数据结构课程设计报告.docx

《田甜数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《田甜数据结构课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。

田甜数据结构课程设计报告.docx

田甜数据结构课程设计报告

 

《数据结构》

课程设计报告

 

课程设计题目:

(计算机运算符的优先级比较)

学生姓名:

田甜

专业:

信息管理与信息系统

班级:

0930602

指导老师:

徐青

2011年6月19

一、课程设计目的:

课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力。

二:

题目简介:

设计一个简单的计算机运算界面,实现计算机的简单的”+”,”-“,”*”,”/”运算,以及运算符(+,-,*,/,())的优先级比较。

三:

流程图或者模块图:

入栈模块流程图:

栈以满

出栈模块流程图:

栈已满

判断优先模块图:

取得元素优先级低

取的元素优先级高

 

四则运算模块流程图:

符号为“*”符号为“+”

符号为“/”符号为“-”

 

四:

程序清单和运行结果:

#include

#include

#include

typedefstruct//建立一个栈

{

chara[100];

inttop;

}sequence_stack;

voidShowsystem()//显示系统主界面

{

printf("\n\n\n\n\n\n");

printf("\t\t#************************************************#\n");

printf("\t\t#^0^^0^^0^^#\n");

printf("\t\t#计算器的简单运算!

#\n");

printf("\t\t#------------------------------------------------#\n");

printf("\t\t#加减乘除#\n");

printf("\t\t#************************************************#\n");

printf("\t\t##\n");

printf("\t\t##\n");

printf("\t\t##\n");

printf("\t\t#************************************************#\n");

printf("\t\t#请按回车键进入菜单");

getchar();

}

voidinit(sequence_stack*st)//初始化栈

{

st->top=0;

}

intis_operation(charop)//判断是否为运算符号

{

switch(op)

{

case'+':

case'-':

case'*':

case'/':

return1;

default:

return0;

}

}

intpriority(charop)//要压入栈的优先级

{

switch(op)

{

case'#':

return-1;

case'(':

return0;

case'+':

case'-':

return1;

case'*':

case'/':

return2;

default:

return-1;

}

}

voidpostfix(chare[],charf[])//将字符串变为后缀表达式

{

charopst[100];

intt,i=0,j=0,top=0;

opst[top]='#';top++;

while(e[i]!

='#')

{

if((e[i]>='0'&&e[i]<='9')||e[i]=='.')

f[j++]=e[i];//遇到数字和小数点直接写入后缀表达式//

else

if(e[i]=='(')//遇到左括号进入操作符栈//

{opst[top]=e[i];top++;}

else

if(e[i]==')')//遇到右括号将其对应的左括号的操作符全部写入后缀表达式//

{

t=top-1;

while(opst[t]!

='(')

{

f[j++]=opst[--top];

t=top-1;

}

top--;

}

else

if(is_operation(e[i]))

{

f[j++]='';//用空格分开两个操作符//

while(priority(e[i])<=priority(opst[top-1]))

f[j++]=opst[--top];

opst[top]=e[i];top++;//当前元素进栈//

}

i++;//处理下一个元素//

}

while(top)f[j++]=opst[--top];

}

doublereadnumber(charf[],int*i)//将字符后缀表达式转化为数值

{

doublex=0.0;

intk=0;

while(f[*i]>='0'&&f[*i]<='9')

{

x=x*10+(f[*i]-'0');

(*i)++;

}

if(f[*i]=='.')

{

(*i)++;

while(f[*i]>='0'&&f[*i]<='9')

{

x=x*10+(f[*i]-'0');

(*i)++;

k++;

}

}

while(k!

=0)

{

x=x/10.0;

k=k-1;

}

return(x);

}

doubleevalpost(charf[])//后缀表达式求值

{

doubleobst[100],x1,x2;

inttop=0,i=0;

while(f[i]!

='#')

{

if(f[i]>='0'&&f[i]<='9')

{

obst[top]=readnumber(f,&i);top++;

}

else

if(f[i]=='')i++;

else

if(f[i]=='+')

{

x2=obst[--top];

x1=obst[--top];

obst[top]=x1+x2;

top++;

i++;

}

else

if(f[i]=='-')

{

x2=obst[--top];

x1=obst[--top];

obst[top]=x1-x2;

top++;

i++;

}

else

if(f[i]=='*')

{

x2=obst[--top];

x1=obst[--top];

obst[top]=x1*x2;

top++;

i++;

}

else

if(f[i]=='/')

{

x2=obst[--top];

x1=obst[--top];

obst[top]=x1/x2;

top++;

i++;

}

}

returnobst[0];

}

voidmenu(chare[],charf[])

{

system("cls");//输入一组字符串

e[strlen(e)]='#';

postfix(e,f);//将字符串转化为后缀表达式

printf("\n\n\n");

 

printf("\t\t|-------------计算器-------------|\n");

printf("\t\t#********************************#\n");

printf("\t\t##\n");

printf("\t\t#您要求的的结果:

%.2f\n",evalpost(f));

printf("\t\t##\n");

printf("\t\t#********************************#\n");

printf("\t\t|-------|--------|-------|-------|\n");

printf("\t\t|1|2|3|+|\n");

printf("\t\t|-------|--------|-------|-------|\n");

printf("\t\t|4|5|6|-|\n");

printf("\t\t|-------|--------|-------|-------|\n");

printf("\t\t|7|8|9|*|\n");

printf("\t\t|-------|--------|-------|-------|\n");

printf("\t\t|.|0|=|/|\n");

printf("\t\t|-------|--------|-------|-------|\n");

printf("\t\t");

}

voidfinish()//打印系统主界面

{system("cls");

printf("\n\n\n\n\n\n");

printf("\t\t#**************************************************#\n");

printf("\t\t#==================================================#\n");

printf("\t\t#^0^谢使用计算器!

^0^#\n");

printf("\t\t#-------------------------------------------------#\n");

printf("\t\t#………结束…………#\n");

printf("\t\t#**************************************************#\n\t\t");

}

voidmain()

{

inti=0,n=1;

charf[100],e[100];

Showsystem();

while(n)

{

switch(n)

{

case0:

break;

case1:

{

system("cls");

printf("\n\n\n");

printf("\t\t请输入你要计算的算式:

");

gets(e);

menu(e,f);

}

}

printf("0->结束1->继续\n");

printf("\t\t请输入<0-1>:

");

scanf("%d",&n);

getchar();

}

finish();

}

 

运行结果:

Enter键进入:

计算结果:

按1继续:

按0结束:

 

五:

小结(收获和体会);

在这次的课程设计当中遇到了很多的麻烦,刚开始的时候是什么都不会,在寻求同学的帮助下了解了一些代码的意思,但是有些还是不太明白,指导老师问的问题第一次也回答不上来,觉得自己把数据结构的相关知识都忘记了,后来查看书才了解了一些运算符的优先级比较,以及一些算法的计算,课程设计当中指导老师把相关的知识点都会问及我们,只有回答出来了才可以过,在自己以及同学的帮助下,认真仔细的查看源代码的意思,以及源代码的相关知识终于了解了通过栈来表达运算符的优先级,以及四则基本运算符的运算方法,在指导老师的询问当中自己会很紧张,看到同学们都回答的那么好觉得自己有那么点不如人家,在最后指导老师的帮助下最后通过了这次课程设计,还是很开心的最起码自己已经看懂了这些代码,还有指导了之前自己不会的知识,还是很愉快的。

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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