利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式Word文档下载推荐.docx
- 文档编号:18276998
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:20
- 大小:144.69KB
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式Word文档下载推荐.docx
《利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
time.h>
#include<
string.h>
conio.h>
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineERROR0
#defineOK1
//定义表达式
typedefstructshiti
{
chara[20];
longresult;
}xuanti;
typedefstructSqStack1
{//建立数字栈
int*base;
int*top;
intstacksize;
}SqStack1;
typedefstructSqStack2
{//建立运算符栈
char*base;
char*top;
}SqStack2;
voidWriteToFile(xuanti*pstu,intnum);
voidReadFromFile(xuanti*pstu,intnum);
voidpage_title(char*menu_item)
{//建立菜单
printf("
>
数学习题库<
<
\n\n-%s-\n\n"
menu_item);
}
voidreturn_confirm()
\n按任意键返回……\n"
);
getch();
voidIntInitStack(SqStack1*S1)
S1->
base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!
S1->
base)
exit(ERROR);
top=S1->
base;
stacksize=STACK_INIT_SIZE;
}//IntInitStack
voidCharInitStack(SqStack2*S2)
S2->
base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
S2->
top=S2->
}//CharInitStack
longIntGetTop(SqStack1*S1)
{//取栈顶元素
longe1;
if((*S1).top==(*S1).base)
return0;
e1=*((*S1).top-1);
returne1;
}//IntGetTop
charCharGetTop(SqStack2*S2)
chare2;
if((*S2).top==(*S2).base)return0;
e2=*((*S2).top-1);
returne2;
intIntPush(SqStack1*S1,inte1)
{//入栈
*(*S1).top++=e1;
returnOK;
}//IntPush
intCharPush(SqStack2*S2,chare2)
*(*S2).top++=e2;
}//CharPush
intIntPop(SqStack1*S1)
{//出栈
inte1;
if((*S1).top==(*S1).base)
e1=*--(*S1).top;
}//IntPop
intCharPop(SqStack2*S2)
e2=*--(*S2).top;
returne2;
}//CharPop
charPrecede(chara,charb)
inti,j;
charTable[8][8]={'
'
'
+'
-'
*'
/'
('
)'
#'
'
='
};
//优先级表格
for(i=0;
i<
8;
i++)
if(Table[0][i]==a)//纵坐标寻找
break;
for(j=0;
j<
j++)//横坐标寻找
if(Table[j][0]==b)
returnTable[j][i];
}//Precede
intOperate(inta,chartheta,intb)
{//计算表达式值:
主要是将大的表达式转化成小的表达式进行逐步求值
intc;
if(theta=='
)c=a+b;
elseif(theta=='
)c=a-b;
elseif(theta=='
)c=a*b;
elsec=a/b;
returnc;
}//Operate
intIsOptr(charch)
charptr[10]={'
for(inti=0;
7;
if(ch==ptr[i])
returntrue;
returnfalse;
longresult(char*a,SqStack1*OPND,SqStack2*OPTR)
{//求值
chartheta;
intb,d,k=0,i=0,j=0,num2=0;
IntInitStack(OPND);
CharInitStack(OPTR);
CharPush(OPTR,'
while(a[i]!
)
{
IsOptr(a[i]))
{
k++;
if(k<
=j)
num2=(int(a[i])-48);
i++;
}
if(k>
j)
num2=num2*10+(int(a[i])-48);
k=j=0;
if(k==j)
IntPush(OPND,num2);
elseif(IsOptr(a[i]))
switch(Precede(a[i],CharGetTop(OPTR)))
case'
:
CharPush(OPTR,a[i++]);
if(a[i]!
&
a[i]!
j++;
CharPop(OPTR);
i++;
break;
theta=CharPop(OPTR);
d=IntPop(OPND);
b=IntPop(OPND);
IntPush(OPND,Operate(b,theta,d));
}//switch
}//elseif
}//while
表达式的正确结果为:
"
%d\n"
IntGetTop(OPND));
return(IntGetTop(OPND));
}//reslut
voidBuilt_shitiKu()
inti,num;
xuanti*pstu;
输入试题数目:
\n"
scanf("
%d"
&
num);
fflush(stdin);
pstu=(xuanti*)malloc(num*sizeof(xuanti));
//动态分配内存
if(pstu==NULL)
没有足够的内存空间!
return;
num;
{//输入试题
第%d道试题:
i+1);
gets(pstu[i].a);
WriteToFile(pstu,num);
//将pstu所指向的学生信息写入文件中
memset(pstu,0,num*sizeof(xuanti));
//将pstu所指向的内存块清0
ReadFromFile(pstu,num);
//从文件中读取学生信息到pstu所指向的内存块中
试题列表:
%s"
pstu[i].a);
free(pstu);
//释放动态分配的内存
voidWriteToFile(xuanti*pstu,intnum)
{//将pstu所指向的试题息写入文件shitiku.txt中
FILE*fp;
fp=fopen("
shitiku.txt"
"
at"
if(fp==NULL)
不能创建shitiku.txt\n"
exit(0);
fwrite(pstu,sizeof(xuanti),num,fp);
fclose(fp);
voidReadFromFile(xuanti*pstu,intnum)
{//从试题库中提取试题
FILE*fp;
rt"
不能打开shitiku.txt\n"
fread(pstu,sizeof(xuanti),num,fp);
//******************************************
voidRecMark(int*m,intnum)
{//把得分记录到markrec.txt中
FILE*mp;
mp=fopen("
markrec.txt"
if(mp==NULL)
不能创建markrec.txt\n"
free(m);
fwrite(m,sizeof(int),num,mp);
fclose(mp);
}//Recmark
voidLookMark(int*m,intnum)
{//查看得分记录
不能打开markrec.txt\n"
fread(m,sizeof(int),num,mp);
//*************************************
voidRecN(int*m,intnum)
{//把m的值记录到n_rec.txt中
n_rec.txt"
wt"
不能创建n_rec.txt\n"
voidLookN(int*m,intnum)
{//查看m的值
不能打开n_rec.txt\n"
intexcersice_begin()
inti,j,temp,KEY[20];
intmark,count=0;
int*Mark;
charg;
SqStack1s1,*OPND;
SqStack2s2,*OPTR;
xuanti*XT;
OPND=&
s1;
OPTR=&
s2;
Mark=(int*)malloc(20*sizeof(int));
XT=(xuanti*)malloc(20*sizeof(xuanti));
ReadFromFile(XT,20);
do
mark=0;
srand((unsigned)time(NULL));
KEY[0]=rand()%20;
for(i=1;
20;
i++)
{
while
(1)
temp=rand()%20;
i;
j++)
if(KEY[j]==temp)
}
if(j==i)
KEY[i]=temp;
system("
cls"
随机的10个练习题:
10;
第%d个练习题:
%s\n"
XT[KEY[i]].a);
请输入计算结果:
%ld"
XT[KEY[i]].result);
if(XT[KEY[i]].result==result(XT[KEY[i]].a,OPND,OPTR))
mark+=10;
答案正确!
\n\n"
else
答案错误!
****得分情况****\n"
最后的得分为:
mark);
if(mark>
=90)
VeryGood!
elseif(mark>
=60)
成绩不错。
elseprintf("
很遗憾成绩不及格!
RecMark(Mark,count);
Mark[count]=mark;
count++;
//记录次数递增
是否继续做练习?
y'
—是,'
n'
—否):
g=getchar();
if(count>
=20)//超过最大记录次数清0
count=0;
while(g=='
returncount;
return_confirm();
voidLook_Mark(intcount)
{//printf("
是否查看历史得分?
inti;
****查询历史得分情况****\n"
LookMark(Mark,count);
count;
****第%d次得%d分****\n"
i+1,Mark[i]);
if(i>
1)
if(Mark[i-1]>
60||Mark[i-2]>
60)
Mark[i-2])
有进步,还要加油哦。
elseif(Mark[i-1]==Mark[i-2])printf("
成绩还可以,但没有进步,还要多多努力呀!
成绩有点下降,要多多练习,不要气馁!
!
成绩很不好!
要更加努力学习!
else
if(Mark[0]>
elseif(Mark[0]>
voidmain()
intm=0;
int*RN;
charch;
RN=(int*)malloc(1*sizeof(int));
RN[0]=0;
***如果是第一次运行***\n"
**请先建立n_rec.txt**\n"
*****否则会出错!
*****\n"
--创建**'
--不建)\n"
ch=getchar();
if(ch=='
RecN(RN,1);
LookN(RN,1);
RN[0]+=m;
是否向试题库中添加试题:
"
--是,'
--否)?
Built_shitiKu();
menu:
page_title("
操作选单"
请用数字键选择操作\n\n"
1开始练习\n"
2查看得分记录\n"
0退出\n"
******************\n"
m=0;
switch(getch())
1'
:
m=excersice_begin();
2'
Look_Mark(RN[0]);
0'
gotomenu;
3.3程序运行结果(拷屏)
4.课程设计心得、存在问题及解决方法
连续两个星期的课程设计做完了,感觉自己的能力得到了大大的提高。
刚开始看见题目的时候,很不以为然,觉得这么简单。
但当自己开始着手做的时候才发现并不是那么回事。
一个看似简单的问题,有时候却牵扯甚多。
经过两个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,对C语言学习平时只是马马虎虎的过去了,真正自己去解决实际问题的时候才会发现自己学的多么糟糕,通过课程设计对自己的编程能力也有所提高;
再有对C语言的文件操作这一块,真的是难了我好久。
还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注重实践操作能力的培养,无论学习什么,亲自动手去做了才能得到最深刻的体会。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式 利用 表达式 值可供 小学生 作业 给出 分数 数据结构 课程设计 说明书 格式
链接地址:https://www.bdocx.com/doc/18276998.html