急求:C语言小学生算法练习软件

实现的任务:面向小学生,随机选择两个整数进行加、减、乘、除,要求学生解答。设计内容:1、电脑随机出10道题,每题10分,程序结束时显示学生得分;2、根据相应选项进行不同算... 实现的任务:面向小学生,随机选择两个整数进行加、减、乘、除,要求
学生解答。
设计内容:
1、电脑随机出10 道题,每题10 分,程序结束时显示学生得分;
2、根据相应选项进行不同算法的练习。
3、练习结果保存在文件中。
设计要求:
1、确保算式的合理性。不能小学生的水平,只允许进行100 以内的加
减法,10 以内的乘法,100 以内的整除除法;
2、每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学
生重新输入,如果三次机会结束则输出正确答案;
3、对于每道题,学生第一次输入正确答案得10 分,第二次输入正确
答案得7 分,第三次输入正确答案得5 分,否则不得分;
4、总成绩90 以上显示“SMART”,80-90 显示“GOOD”,70-80 显示
“OK”,60-70 显示“PASS”,60 以下“TRY AGAIN”。(可选要求)
5、将每次练习正确的题目数和得分保存在文件中。
6、不同的功能使用不同的函数实现(模块化),对每个函数的功能和
调用接口要注释清楚。对程序其它部分也进行必要的注释。
7、所有程序需调试通过。
展开
 我来答
xy1990619
2011-04-01
知道答主
回答量:8
采纳率:0%
帮助的人:7.3万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<memory.h>
int sumScore = 0;
int corrN = 0;//全局变量
//总的分数
//写入文件
void writeTo(int corrN, int score)
{
FILE * fp;
if((fp = fopen("c:\score.txt","a+")) == NULL)//a+为读写打开一个文本文件
{
printf("打开文件错误!\n");
return;
}
fprintf(fp,"正确数为:%d , 得分为:%d\n",corrN,score);//fprintf函数,将数据储存在fp指向的文件中

fclose(fp);//关闭文件
}

void addScore(int x,int y, int z ,char op)//获得成绩值,x,y是两个计算的数,z是计算结果,c是运算符号,z是总分
{
int s;

printf("%d %c %d=",x,op,y);
scanf("%d",&s);
if(s==z)
{
sumScore=sumScore+10;
corrN ++;

}
else
{
printf("你的答案错误,请重新输入答案!\n");
printf("%d %c %d=",x,op,y);
scanf("%d",&s);
if(s==z)
{
sumScore=sumScore+7;
corrN ++;

}
else
{
printf("你的答案错误,请重新输入答案!\n");
printf("%d %c %d=",x,op,y);
scanf("%d",&s);
if(s==z)
{
sumScore=sumScore+5;
corrN ++;

}
else
printf("你的三次答案均是错误答案,正确答案是%d\n",z);
}
}
}

//加法运算
void jiafayunsuan()
{
int x,y,z,i;

for(i=0;i<10; i++)
{
x = rand()%100+1;
y = rand()%100+1;
z = x + y;

addScore(x,y,z,'+');
}
}
//减法运算
void jianfayunsuan()
{
int x,y,z,i;

for(i=0;i<10; i++)

{
x = rand()%100+1;
y = rand()%x+1;//保证 y 恒大于 x

z = x - y;

addScore(x,y,z,'-');
}
}
//乘法运算
void chengfayunsuan()
{
int x,y,z,i;

for(i=0;i<10; i++)
{
x = rand()%10 +1;
y = rand()%10 +1;
z = x * y;

addScore(x,y,z,'*');
}
}
//除法运算
void chufayunsuan()
{
int x,y,z,i;

for(i=0;i<10; i++)
{do {

x = rand()%100+1;
y = rand()%100+1;
}
while( x<y||y==0||x%y!=0);//可以整除的数字里的任意一个数

z = x/y;

addScore(x,y,z,'/');
}
}
//菜单
char menu()
{
char type;

printf("1.加法运算\n");
printf("2.减法运算\n");
printf("3.乘法运算\n");
printf("4.除法运算\n");
printf("5.退出\n");
srand((int)time(0));
printf("\n请选择你要进行的运算:");
do{
type = getch();//显示在屏幕上
if(type >= '1' && type <= '5')
{
printf("%c",type);
getch();
printf("\n");
switch(type)
{
case '1':
jiafayunsuan();
break;
case '2':
jianfayunsuan();
break;
case '3':
chengfayunsuan();
break;
case '4':
chufayunsuan();
break;
}

writeTo(corrN,sumScore);
return type;
}
}while(1);//while语句的原型是while(表达式)语句,当表达式为非0值时,执行while语句中的嵌套语句。
}
int main()
{
char op;

do{
op = menu();

if(op != '5')
{
switch(sumScore/10)
{case 10:
case 9:
printf("\nSMART!\n");
break;
case 8:
printf("\nGOOD!\n");
break;
case 7:
printf("\nOK!\n");
break;
case 6:
printf("\nPASS!\n");
break;
default:
printf("\nTRY AGAIN!\n");
break;
}
getch();
}
}while(op != '5');
return 0;//return 0是正常退出,return 非零 是异常退出,这是返回给控制台的,不在你编的程序的控制范围内,是给操作系统识别的,对你的程序无影响
}
有钱买不起房子
2011-03-23 · TA获得超过4324个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2064万
展开全部
下面是网站上的一个例子,你能看懂就能自己改动

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("********************************************************************************");
printf("^_^_^_^_^_^_^_^_^_^_^_^小朋友,欢迎你们来学习小学算术_^_^_^_^_^_^_^_^_^_^_^_^_^_");
printf(" ");
printf(" 1.加法 ");
printf(" 2.减法 ");
printf(" 3.乘法 ");
printf(" 4.除法 ");
printf(" 0.退出 ");
printf(" ");
printf(" 快选择你要学习的内容吧! ");
printf(" ");
printf("^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_");
printf("********************************************************************************");
}
void plus1()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第一关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
printf("%d",m=rand()%10);
printf("+");
printf("%d",n=rand()%10);
printf("=");
total=m+n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第一关!\n");
}
}
void plus2()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第二关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%10;
n=rand()%100;
}while(n<10);
printf("%d",m);
printf("+");
printf("%d",n);
printf("=");
total=m+n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第二关!\n");
}
}
void plus3()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第三关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%100;
}while(m<10&&n<10);
printf("%d",m);
printf("+");
printf("%d",n);
printf("=");
total=m+n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第三关!\n");
}
}
void sub1()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第一关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%10;
n=rand()%10;
}while(m<=n);
printf("%d",m);
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第一关!\n");
}
}
void sub2()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第二关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%10;
}while(m<10);
printf("%d",m);
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第二关!\n");
}
}
void sub3()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第三关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%100;
}while(m<=n||m<10||n<10);
printf("%d",m);
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第三关!\n");
}
}
void plus()
{
int i;
plus1();
printf("是否继续挑战?Y(1)/N(0):");
scanf("%d",&i);
if(i==1)
plus2();
else
return;
i=NULL;
printf("是否继续挑战?Y(1)/N(0):");
scanf("%d",&i);
if(i==1)
plus3();
else
return;
}
void sub()
{
int i;
sub1();
printf("是否继续挑战?Y(1)/N(0):");
scanf("%d",&i);
if(i==1)
sub2();
else
return;
i=NULL;
printf("是否继续挑战?Y(1)/N(0):");
scanf("%d",&i);
if(i==1)
sub3();
else
return;
}
void mul1()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第一关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
printf("%d",m=rand()%10);
printf("*");
printf("%d",n=rand()%10);
printf("=");
total=m*n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第一关!\n");
}
}
void mul2()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第二关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%10;
}while(m<10);
printf("%d",m);
printf("*");
printf("%d",n);
printf("=");
total=m*n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第二关!\n");
}
}
void mul()
{
int i;
mul1();
printf("是否继续挑战?Y(1)/N(0):");
scanf("%d",&i);
if(i==1)
mul2();
}
void div1()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第一关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%10;
n=rand()%10;
}while(n==0||m%n!=0);
printf("%d",m);
printf("/");
printf("%d",n);
printf("=");
total=m/n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第一关!\n");
}
}
void div2()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第二关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%10;
}while(n==0||m<10||m%n!=0);
printf("%d",m);
printf("/");
printf("%d",n);
printf("=");
total=m/n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第二关!\n");
}
}
void div3()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第三关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%100;
}while(n==0||m<10||n<10||m%n!=0);
printf("%d",m);
printf("/");
printf("%d",n);
printf("=");
total=m/n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
{printf("回答错误,请重新回答!\n");goto loopa;}
printf("恭喜你通过了第三关!\n");
}
}
void div()
{
int i;
div1();
printf("是否继续挑战?Y(1)/N(0):");
scanf("%d",&i);
if(i==1)
div2();
else
return;
i=NULL;
printf("是否继续挑战?Y(1)/N(0):");
scanf("%d",&i);
if(i==1)
div3();
else
return;
}
main()
{
void menu();
int k;
do{
menu();
printf("请选择:");
scanf("%d",&k);
switch(k)
{
case 1:plus();break;
case 2:sub();break;
case 3:mul();break;
case 4:div();break;
case 0:break;
}
printf("\n");
}while(k!=0);
printf("\n");
return 0;
}
追问
这个我星期一就找到了。。能看懂我就不来提问了。。。
追答
-_-!这个比你要实现的还简单
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaosuo623
2011-03-23 · 超过19用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:43.5万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<memory.h>
#define N 10
int iScore[3] = {10,7,5};
int corrN = 0; //正确题的次数
int sumScore = 0; //总的分数
//写入文件
void writeTo(int corrN, int score)
{
FILE * fp;
char str[128];
if((fp = fopen("score.txt","a+")) == NULL)
{
printf("打开文件错误!");
return;
}
sprintf(str,"正确数为:%d , 得分为:%d\n",corrN,score);
fputs(str,fp);

fclose(fp);
}

//获的成绩值
void addScore(int addFir,int addSec, int iCorAns ,char op)
{
int faultN = 0;
int iAnswer;

do{
if(faultN != 0)
printf("答案错误!请重新计算\n");
printf("%d%c%d = ",addFir,op,addSec);
scanf("%d",&iAnswer);
faultN++;
}while(iCorAns != iAnswer && faultN<3);

if(iCorAns != iAnswer)
{
printf("三次错误,正确答案为:%d\n",iCorAns);
}
else
{
sumScore += iScore[faultN-1];
corrN ++;
}
}
//加法运算
void plusMethod()
{
int count=0;
int addFir,addSec;
int iCorAns;

for(;count<N; count++)
{
addFir = rand()%100+1;
addSec = rand()%100+1;
iCorAns = addFir + addSec;

addScore(addFir,addSec,iCorAns,'+');
}
}

//减法运算
void minusMethod()
{
int count = 0;
int addFir,addSec;
int iCorAns;

for(;count<N; count++)
{

addFir = rand()%100+1;
addSec = rand()%100+1;
iCorAns = addFir - addSec;

addScore(addFir,addSec,iCorAns,'-');
}
}

//乘法运算
void mulMethod()
{
int count = 0;
int addFir,addSec;
int iCorAns;

for(;count<N;count++)
{
addFir = rand()%10 +1;
addSec = rand()%10 +1;
iCorAns = addFir * addSec;

addScore(addFir,addSec,iCorAns,'*');
}
}

//除法运算
void divMethod()
{
int count = 0,num,iDivNum;
int addFir,addSec;
int iCorAns,iDiv[N]={0};

for(;count<N;count++)
{
num = 1;
iDivNum = 0;
addFir = rand()%100 +1;

memset(iDiv,0,sizeof(iDiv));
for(;num <= sqrt(addFir); num++)
{
if(addFir%num == 0)
{
iDiv[iDivNum++] = num;
iDiv[iDivNum++] = addFir/num;
}
}
addSec = iDiv[rand()%iDivNum]; //可以整除的数字里的任意一个数
iCorAns = addFir/addSec;

addScore(addFir,addSec,iCorAns,'/');
}
}
//菜单
char menu()
{
char type;

system("cls");
printf("----------数学计算-----------\n");
printf("1.加法运算\n");
printf("2.减法运算\n");
printf("3.乘法运算\n");
printf("4.除法运算\n");
printf("5.退出\n");

printf("\n请选择你要进行的运算:");
do{
type = getch();
if(type >= '1' && type <= '5')
{
printf("%c",type);
getch();
printf("\n");
switch(type)
{
case '1':
plusMethod();
break;
case '2':
minusMethod();
break;
case '3':
mulMethod();
break;
case '4':
divMethod();
break;
}

writeTo(corrN,sumScore);
return type;
}
}while(1);
}

int main()
{
char op;

do{
op = menu();

if(op != '5')
{
switch(sumScore/10)
{
case 9:
printf("\nSMART!\n");
break;
case 8:
printf("\nGOOD!\n");
break;
case 7:
printf("\nOK!\n");
break;
case 6:
printf("\nPASS!\n");
break;
default:
printf("\nTRY AGAIN!\n");
break;
}
getch();
}
}while(op != '5');
return 0;
}
追问
呃,问一下额,为什么题目不是随机题哈、、。。而且减法有负值唉。。
追答
1. 随机数问题:在menu函数里的 printf("\n请选择你要进行的运算:");这句话前加入 srand((int)time(0)); 播种随机数种子。
2. 减法问题: 改 addSec = rand()%addFir +1; 就可以保证是正数了。
3. 除法问题: 如果不想要除数为1和为自己的情况,就改 num = 2;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
olive1986717
2011-03-23 · TA获得超过693个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:368万
展开全部
我倒是真的给做了一个,但是我发现对于乘法和除法的要求太严格,出来的算式基本上都是加减法,而且以减法居多,感觉很郁闷!
更多追问追答
追问
不是分开的么??
追答
什么分开的呀?你的意思是加、减、乘、除分别十道题是嘛?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
master3939
2011-03-22 · TA获得超过286个赞
知道答主
回答量:310
采纳率:0%
帮助的人:131万
展开全部
程序倒是不难,但是大家都不怎么爱动手编吧,推荐你百度一个现有类似功能的程序,或者求一下你身边会编程的朋友。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sftxlin
2011-03-22 · 超过13用户采纳过TA的回答
知道答主
回答量:62
采纳率:100%
帮助的人:22.9万
展开全部
大哥,这个小程序不错呀,自己想的吗?不过,这东西,写出来的话,都可以收费了,你却才给了20分,嗯,可能给你答案的周期会比较长哦。。。。
追问
就这么多分了。。。我再去赚赚分,兄弟有可能的话帮帮忙吧。。
学校太贱,搞这个东东。。。
追答
你的空间被下面的那个回答的人给挤占了,我的代码传不上来,我给你留个联系方式吧,你可以发送邮件到我的邮箱里面,我把代码给你发过去,我的代码绝对可以让你满意。我也看了另外一个人的代码,感觉,我的功能比他的更合理,规格更正式一些。然后代码的面向对象特性更好,更具有可阅读性。嘿嘿。
我的邮箱:985100724@qq.com
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式