C语言设计方案小学生数学辅助学习系统.docx

上传人:b****5 文档编号:29107899 上传时间:2023-07-20 格式:DOCX 页数:18 大小:19.86KB
下载 相关 举报
C语言设计方案小学生数学辅助学习系统.docx_第1页
第1页 / 共18页
C语言设计方案小学生数学辅助学习系统.docx_第2页
第2页 / 共18页
C语言设计方案小学生数学辅助学习系统.docx_第3页
第3页 / 共18页
C语言设计方案小学生数学辅助学习系统.docx_第4页
第4页 / 共18页
C语言设计方案小学生数学辅助学习系统.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C语言设计方案小学生数学辅助学习系统.docx

《C语言设计方案小学生数学辅助学习系统.docx》由会员分享,可在线阅读,更多相关《C语言设计方案小学生数学辅助学习系统.docx(18页珍藏版)》请在冰豆网上搜索。

C语言设计方案小学生数学辅助学习系统.docx

C语言设计方案小学生数学辅助学习系统

一、任务书*************************************1

二、总体设计***********************************2

三、模块划分***********************************2

四、算法说明***********************************2

五、函数模块功能*******************************2

六、流程图**************************************3

七、源程序清单**********************************4

八、程序测试***********************************17

九、结论***************************************17

附:

参考文献资料

一.任务书

题目:

小学生数学辅助学习系统

功能:

实现小学生100以内四则运算的学习和测试

基本要求:

1.出现欢迎界面,选择加、减、乘、除或混合运算。

2.系统随机出题,运算数及结果均在100以内,以算式显示。

3.正确打个对勾,播放一段音乐,如果错误,打个红X,播放另一个音乐。

4.能统计正确率及得分。

相关知识:

图形绘制、按键操作等

二.总体设计

本次设计需要使用音乐函数、图形函数以及四则运算函数。

首先使用图形函数,创建出一个欢迎界面。

其次,在100以内,乘、除法应能整除,显示算式,再编写菜单练习,测试和计分及四则运算函数。

最后是打印及退出。

三.模块划分

1.欢迎界面模块。

2.算式模块。

3.菜单模块。

4.四则运算模块。

5.计分模块。

6.音乐模块。

四.算法说明

step1:

先定义音乐函数,包括音符的音长、频率及初始化扬声器,再编写出两段音乐。

Step2:

定义菜单函数,并用printf输出。

Step3:

先定义compute()函数,在其中嵌套switch语句,做随机数的四则运算。

Step4:

定义一个Print()函数,当使用者答对或答错时,调用linerel()函数,做出相应的图像并显示。

同时放出相应的乐曲,并做正确或错误题数的累积。

Step5:

在主函数中,调用图形函数,设置一个欢迎界面。

Step6:

调用菜单函数。

Step7:

调用compute()函数,并用switch语句选择同号运算和混合运算。

Step8:

用printf打印结果。

五.函数模块功能

1.迎界面模块

在此模块中,我首先定义了显示器及模式,然后通过setbkcolor()函数定义了背景颜色,用outtextxy()和settextstyle()函数定义了字符串输出的位置以及大小和字体。

2.声音模块

在此模块中,首先定义了音符的长短和频率。

然后通过初始化扬声器,来得到每个音符。

最后,根据自己的喜好,编写两段音乐。

3.菜单模块

在此模块中,首先用Menu()函数定义菜单。

然后输

入所需要的菜单目录,最后在主函数中调用Menu()

4.四则运算模块

在此函数中,通过调用switch语句,分成四种情况,每种运算符分别代表一种情况,而在这四种情况中,又分别调用switch语句,又分成四种情况,从而形成了三个数的四则运算。

最后在主函数中调用这些情况。

5.显示对错信息模块

在此函数中,通过调用相应的图像和音乐,给使用者提供对错信息,并累加错误题数和正确题数。

六、流程图

初始化图形显示模式

设棕色背景

输出“welcome”

输入菜单选项

读入选项m

m=1

m=2

m=3

m=4

m=5

m=6

else

直到

随机产生a。

b。

c

直到

随机产生a。

b。

c

直到

随机产生a。

b。

c

直到

随机产生a。

b。

c

随机opop2

结束

输出错误提示信息

a+b+c<=2

a+b+c<=2

a+b+c<=2

a+b+c<=2

Op1

Op2

Op3

Op4

读入ANSWER值

OP2=1

OP2=2

OP2=3

OP2=4

OP2=1

OP2=2

OP2=3

OP2=4

OP2=1

OP2=2

OP2=3

OP2=4

OP2=1

OP2=2

OP2=3

OP2=4

result<=a+b+c

result<=a-bc

result<=a*b*c

result<=a/b/c

产生随机a,b,c

计算机应result

读入answer

N

RESULT

Y

ANSWER

画错号,奏哀乐

画对号,奏欢歌

*w++

*r++

Score<=((float)100/all)*r

printf输出对题数,错题数,总题数和分数

七.源程序清单

#include

#include

#include

#include

#include

#include

#include

#defineN164/*定义音长全音符音长*/

#defineN232/*半音符的音长*/

#defineN416/*4分音符的音长*/

#defineN88/*8分音符的音长*/

#defineN164/*16分音符的音长*/

#defineEND0/*结束标志*/

enumNDTES

{

C10=131,D10=147,E10=165,F10=175,G10=196,

A10=220,B10=247,C0=262,D0=296,E0=330,F0=349,G0=392,

A0=440,B0=494,C1=523,D1=587,E1=659,F1=698,

G1=784,A1=880,B1=988,C2=1047,D2=1175,

E2=1319,F2=1397,G2=1568,A2=1760,B2=1976

}。

/*定义音符与频率的对应关系*/

song1[]={C0,N8,C0,N8,G0,N8,G0,N8,A0,N8,A0,N8,G0,N4,

F0,N8,F0,N8,E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,

G0,N8,G0,N8,F0,N4,E0,N8,E0,N8,D0,N4,

G0,N8,G0,N8,F0,N8,F0,N8,E0,N8,E0,N8,D0,N4,

C0,N8,E0,N8,G0,N4,A0,N8,C1,N8,G0,N4,

F0,N8,F0,N8,E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,END,END}。

/*形成乐谱*/

song2[]={C0,N8,D0,N8,E0,N8,F0,N8,G0,N8,A0,N8,B0,N8,

C1,N8,D1,N8,E1,N8,F1,N8,G1,N8,A1,N8,B1,N8,END,END}。

voidMenu(void)

{

printf("1.+\n")。

printf("2.-\n")。

printf("3.*\n")。

printf("4./\n")。

printf("5.Mixed\n")。

printf("6.Exit\n")。

printf("Pleaseenteryourchoice:

")。

}

SONG1()

{

intnote=0,fre,dur,control。

clock_tgoal。

while(song1[note]!

=0)

{

fre=song1[note]。

/*取出乐谱数组中的频率*/

dur=song1[note+1]。

/*取出乐谱数组中的音长*/

if(kbhit())break。

/*如果有按键,则推出音乐播放*/

if(fre)

{

outportb(0x43,0xb6)。

/*初始化扬声器端口*/

fre=(unsigned)(1193180L/fre)。

outportb(0x42,(char)(fre>>8))。

/*往扬声器端口送出声音频率值*/

outportb(0x42,(char)(fre>>8))。

control=inportb(0x61)。

outportb(0x61,(control)|0x3)。

/*开始发音*/

}

goal=(clock_t)dur+clock()。

/*设定延迟时间*/

while(goal>clock())。

/*如果时间未到,等待;时间超出则退出*/

if(fre)

outportb(0x61,control)。

/*停止发音*/

goal=(clock_t)0。

note=note+2。

/*移到下一个音符*/

}

}

SONG2()

{

intnote=0,fre,dur,control。

clock_tgoal。

while(song2[note]!

=0)

{

fre=song2[note]。

dur=song2[note+1]。

if(kbhit())break。

if(fre)

{

outportb(0x43,0xb6)。

fre=(unsigned)(1193180L/fre)。

outportb(0x42,(char)(fre>>8))。

outportb(0x42,(char)(fre>>8))。

control=inportb(0x61)。

outportb(0x61,(control)|0x3)。

}

goal=(clock_t)dur+clock()。

while(goal>clock())。

if(fre)

outportb(0x61,control)。

goal=(clock_t)0。

note=note+2。

}

}

intCompute2(inta,intb,intc,intop,intop2)/*定义一个新的运算符*/

{

intanswer,result。

switch(op)

{

case1:

switch(op2)/*当OP为加号时,OP2为四种运算符*/

{

case1:

printf("%d+%d+%d=",a,b,c)。

result=a+b+c。

break。

case2:

printf("%d+%d-%d=",a,b,c)。

result=a+b-c。

break。

case3:

printf("%d+%d*%d=",a,b,c)。

result=a+b*c。

break。

case4:

printf("%d+%d/%d=",a,b,c)。

result=a+b/c。

break。

}

break。

case2:

switch(op2)/*当OP为减号时,OP2为四种运算符*/

{

case1:

printf("%d-%d+%d=",a,b,c)。

result=a-b+c。

break。

case2:

printf("%d-%d-%d=",a,b,c)。

result=a-b-c。

break。

case3:

printf("%d-%d*%d=",a,b,c)。

result=a-b*c。

break。

case4:

printf("%d-%d/%d=",a,b,c)。

result=a-b/c。

break。

}

break。

case3:

/*当OP为乘号时,OP2为四种运算符*/

switch(op2)

{

case1:

printf("%d*%d+%d=",a,b,c)。

result=a*b+c。

break。

case2:

printf("%d*%d-%d=",a,b,c)。

result=a*b-c。

break。

case3:

printf("%d*%d*%d=",a,b,c)。

result=a*b*c。

break。

case4:

printf("%d+%d/%d=",a,b,c)。

result=a*b/c。

break。

}

break。

case4:

/*当OP为除号时,OP2为四种运算符*/

switch(op2)

{

case1:

printf("%d+%d+%d=",a,b,c)。

result=a+b+c。

break。

case2:

printf("%d+%d-%d=",a,b,c)。

result=a+b-c。

break。

case3:

printf("%d+%d*%d=",a,b,c)。

result=a+b*c。

break。

case4:

printf("%d+%d/%d=",a,b,c)。

result=a+b/c。

break。

}

break。

}

scanf("%d",&answer)。

if(result==answer)

return1。

/*如果正确,返回值为1*/

else

return0。

/*如果错误,返回值为0*/

}

voidPrint(intflag,int*r,int*w,int*all)

{

if(flag)

{

setcolor(RED)。

/*定义颜色*/

linerel(10,20)。

/*从当前点到相对增量点画一条线段*/

linerel(20,-20)。

++(*r)。

/*正确题数加1*/

SONG1()。

/*放第一首歌*/

}

else

{

setcolor(RED)。

linerel(30,20)。

moverel(-30,0)。

/*光标从当前位置移动到指定位置处,移动过程中不画点*/

linerel(30,-20)。

++(*w)。

/*错误题数加1*/

SONG2()。

}

moverel(-30,16)。

++(*all)。

/*总数加1*/

}

main()

{

floatscore。

charm。

inta,b,c,op,d,r=0,w=0,all=0,i。

intresult,answer。

intgdriver=VGA。

/*选择VGA显示器*/

intgmode=VGAHI。

/*选择VGAHI显示模式*/

intheight,width。

intexit_flag=0。

unsignedchar*temp1="WELCOME\n"。

initgraph(&gdriver,&gmode,"")。

/*初始化显示适配器*/

cleardevice()。

/*清屏*/

setcolor(10)。

setbkcolor(BROWN)。

/*设置背景颜色*/

settextstyle(3,0,4)。

width=textwidth(temp1)。

width=textwidth(temp2)。

height=textheight(temp1)。

height=textheight(temp2)。

outtextxy((639-width)/2,150-height/2,temp1)。

/*设置字符串输出的位置*/

settextstyle(3,0,2)。

/*设置输出字符的字型,输出方向和字符大小*/

outtextxy((800-width)/2,400-height/2,temp2)。

getch()。

/*获得一个字符*/

cleardevice()。

Menu()。

/*调用菜单函数*/

m=getchar()。

/*获得一个字符并赋值给C*/

srand(time(NULL))。

/*设置一个随机数*/

moveto(108,112)。

/*设置光标起始位置*/

switch(m)

{

case'1':

for(i=0。

i<10。

i++)/*设置问题数小于等于10*/

{

do

{

a=rand()%100+1。

/*随机产生一个小于100的数*/

b=rand()%100+1。

c=rand()%100+1。

}while(a+b+c>100)。

/*当结果在100之外,再次进入循环*/

printf("%d+%d+%d=",a,b,c)。

scanf("%d",&answer)。

result=a+b+c。

if(result==answer)

d=1。

/*如果正确,返回值为1*/

else

d=0。

/*如果错误,返回值为0*/

Print(d,&r,&w,&all)。

}

break。

case'2':

for(i=0。

i<10。

i++)

{do

{

a=rand()%100+1。

/*系统随机产生一个小于100的数*/

b=rand()%100+1。

c=rand()%100+1。

}while(a-b-c>100||a-b-c<0)。

/*当结果在100之外,0以下,再次进入循环*/

printf("%d-%d-%d=",a,b,c)。

scanf("%d",&answer)。

result=a-b-c。

if(result==answer)

d=1。

/*如果正确,返回值为1*/

else

d=0。

/*如果错误,返回值为0*/

Print(d,&r,&w,&all)。

}

break。

case'3':

for(i=0。

i<10。

i++)

{do

{

a=rand()%30+1。

/*系统随机产生一个小于30的数*/

b=rand()%30+1。

c=rand()%30+1。

}while(a*b*c>100)。

printf("%d*%d*%d=",a,b,c)。

scanf("%d",&answer)。

result=a*b*c。

if(result==answer)

d=1。

/*如果正确,返回值为1*/

else

d=0。

/*如果错误,返回值为0*/

Print(d,&r,&w,&all)。

}

break。

case'4':

for(i=0。

i<10。

i++)

{

a=rand()%100+1。

b=rand()%100+1。

c=rand()%100+1。

printf("%d/%d/%d=",a,b,c)。

scanf("%d",&answer)。

result=a/b/c。

if(result==answer)

d=1。

/*如果正确,返回值为1*/

else

d=0。

Print(d,&r,&w,&all)。

}

break。

case'5':

for(i=0。

i<10。

i++)

{

charop2。

/*进入混合运算*/

a=rand()%100+1。

b=rand()%100+1。

c=rand()%100+1。

op=rand()%4+1。

/*产生第一个随机运算符*/

op2=rand()%4+1。

/*产生第二个随机运算符*/

d=Compute2(a,b,c,op,op2)。

Print(d,&r,&w,&all)。

}

break。

case'6':

exit_flag=1。

break。

default:

printf("Inputerror!

\n")。

break。

}

if(exit_flag==0)

{

score=((float)100/all)*r。

/*计算所的所得分数*/

printf("Therightnumber:

%d\n",r)。

printf("Thewrongnumbre:

%d\n",w)。

printf("Theallnumber:

%d\n",all)。

printf("Thescoreis:

%f\n",score)。

}

getch()。

}_

八.程序测试

1.已完成出现欢迎界面,可以选择加、减、乘、除或混合运算

2.系统可以随机出题,以算式显示。

但满足不了运算数及结果均在100以内。

3.已完成正确打个对勾,播放一段音乐,错误,打个红X,播放另一个音乐。

4.已完成能统计正确率及得分

参考文献

苏小红等.C语言大学实用教程习题与实验指导.电子工业出版社.2004

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

当前位置:首页 > 教学研究 > 教学反思汇报

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

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