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

上传人:b****2 文档编号:694910 上传时间:2023-04-29 格式:DOCX 页数:18 大小:19.74KB
下载 相关 举报
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_第6页
第6页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第7页
第7页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第8页
第8页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第9页
第9页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第10页
第10页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第11页
第11页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第12页
第12页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第13页
第13页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第14页
第14页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第15页
第15页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第16页
第16页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第17页
第17页 / 共18页
C语言设计小学生数学辅助学习系统.docx_第18页
第18页 / 共18页
亲,该文档总共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-2023 冰点文库 网站版权所有

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