利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx

上传人:b****2 文档编号:3464334 上传时间:2023-05-01 格式:DOCX 页数:21 大小:20.55KB
下载 相关 举报
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第1页
第1页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第2页
第2页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第3页
第3页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第4页
第4页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第5页
第5页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第6页
第6页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第7页
第7页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第8页
第8页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第9页
第9页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第10页
第10页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第11页
第11页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第12页
第12页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第13页
第13页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第14页
第14页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第15页
第15页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第16页
第16页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第17页
第17页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第18页
第18页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第19页
第19页 / 共21页
利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx

《利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx(21页珍藏版)》请在冰点文库上搜索。

利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式之欧阳学创编Word文档下载推荐.docx

学生要进行测试,首先要有试题。

那么我们就要先建立试题库。

这个试题库的试题是我们在程序运行过程中手动输入,存放在一个shujuku.txt的文件中。

首先在主函数中调用创建试题库函数,将试题存入到试题库文件shitiku.txt中,然后将该调用从主函数中删除。

创建试题库函数:

创建指向xuanti类型的指针,利用循环将输入的测试题该指针的xuanti单元中,最后将该指针中的测试题写入试题库文件shitiku.txt中。

3.2核心代码

(正文宋体小四号字,1.5倍行距)

#include<

stdio.h>

stdlib.h>

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;

intstacksize;

}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)

if((*S2).top==(*S2).base)return0;

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]!

{

if(!

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

printf("

表达式的正确结果为:

"

%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语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注重实践操作能力的培养,无论学习什么,亲自动手去做了才能得到最深刻的体会。

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2