C语言设计小学生数学辅助学习系统.docx
- 文档编号:7629294
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:16
- 大小:19.79KB
C语言设计小学生数学辅助学习系统.docx
《C语言设计小学生数学辅助学习系统.docx》由会员分享,可在线阅读,更多相关《C语言设计小学生数学辅助学习系统.docx(16页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 设计 小学生 数学 辅助 学习 系统