小学生做数学题
六级作文预测-厦门教育网
2.5 小学生数学自动测验
【问题描述】
面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。
【功能要求】
1. 开始测验前先让学生输入姓名;
2.
电脑随机出10道题,每题10分,测验结束时显示学生得分;
3. 确保算式没有超出1~2年级的
水平,只允许进行50以内的加减法,不允许两数之和或之差
超出0~50的范围,负数更是不允许的;
4. 每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三
次
机会结束则输出正确答案;
5. 对于每道题,学生第一次输入正确答案得10分,第二次输入正确答
案得7分,第三次输入
正确答案得5分,否则不得分;
6.
总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显
示“PASS”,60以下显示“TRY AGAIN”;
7.
每次测验结束后让学生选择要不要再来一次,若输入“Yes”则重新出题;
8.
将进行过测试的每个学生的最高成绩保存到文件中;
9.
使用菜单让学生选择是要开始测验还是查看进行过测试的学生的成绩。
#include
#include
#include
#include
using namespace std;
typedef struct
student
{
int score;
char name[20];
}stu;
stu s;最多保存一个学生的20次数据
FILE *fp;
首先进行,随机数的生成
int
creat1()产生随机数
{
return rand()%5;
}
char creat2()产生加减法,,1表示 + ,,0表示 - ;
{
int t;
t=rand()%2;
if(t==0)
return '-';
else
return '+';
}
void present1()
{
cout<<
cout<<):从新开始~~~~~~~~~~~~
cout<<):结束~~~~~~~~~~~~~~~~
cout<<
cout<<
}
void present()
{
cout<<
cout<<):开始测试~~~~~~~~~~~~
cout<<):查看~~~~~~~~~~~~~~~~
cout<<):结束~~~~~~~~~~~~~~~~
cout<<
cout<<
}
void operate1(stu &r)
{
srand(time(NULL));
int i;
int a,b;
char c;a
是第一个因数,b是第二个因数,c表示加法还是减法
int sum;运算结果
int answer;学生输入的答案
cout<<这
里有10道题,一道题10分,满分100;n每道题均有3次机会:n一次答
对得10;n二次答对得
7分;n三次答对得5分n否则0分,进入下一道题
cout<<
=0;
for(i=1;;)
{
a=creat1();b=creat1();c=creat2();
if(c=='-')
{
cout<<这是减法
sum=a-b;
}
else
{
cout<<这是加法
sum=a+b;
}
if(sum<=50&&sum>=0)
{
cout<<第题:
cin>>answer;
if(answer!=sum)
{
cout<<答案错误!你还有两次机会
cout<<第题:
cin>>answer;
if(answer!=sum)
{
cout<<答案错误!你还有一次机会
cout<<第题:
cin>>answer;
if(answer!=sum)
{
+=0;
cout<<本题得分:0分
}
else
{
+=5;
cout<<本题得分:5分
}
}
else
{
+=7;
cout<<本题得分:7分
}
}
else
{
+=10;
cout<<本题得分:10分
}
i++;进入第二题;
}
if(i>10)
{
cout<<本轮测试完毕
break;
}
}
if(>=90)
cout<<
else if(>=80&&<90)
cout<<
else if(>=70&&<80)
cout<<
else if(>=60&&<70)
cout<<
else
cout<<
r=s;
}
void
save(stu &s)
{
FILE *fp;
if((fp=fopen(
{
printf(
exit(0);
}
fprintf(fp,
fwrite(&s,sizeof(stu),1,fp);
fclose(fp);
}
*
void read(stu
&read)
{
FILE *fp;
if((fp=fopen(
{
printf(
exit(0);
}
fscanf(fp,
fread(&read,sizeof(stu),1,fp);
fclose(fp);
}
*
*
void operate2()
{
cout<<以下是已经测试过学生的成绩
stu t[20];假设最多有20个
FILE *fp;
if((fp=fopen(
{
printf(
exit(0);
}
if(feof(fp))
{
cout<<这里出错了
fclose(fp);
return;
}
for(int
i=0;;i++)
{
fscanf(fp,
fread(&t[i],sizeof(stu),1,fp);
cout<<姓名:分数:
fseek(fp,-sizeof(stu),1);
if(feof(fp))
break;
}
}
fclose(fp);
}
*
void operate2()
{
int f;
cout<<以下是已经测试过学生的成绩
stu t[20];假设最多有20个
FILE *fp;
if((fp=fopen(
{
printf(
exit(0);
}
for(int i=1;;i++)
{
if(feof(fp))
break;
cout<<文件的位置:
cout<<
fscanf(fp,
fread(&t[i],sizeof(stu),1,fp);
cout<<姓名:分数:
}
fclose(fp);
}
int main()
{
stu shuzhu[20+1];假设有2每个学生最多比较20次
int
count=0;记录一名学生进行测试的次数
stu
temp;临时的,用于比较大小
cout<<请输入姓名
cin>>;
present();
int t;
cin>>t;
while(t!=0)
{
switch(t)
{
case
1:count++;operate1(shuzhu[count]);
break;
case
2:operate2();
break;
}
present1();
cin>>t;
}
找到最高分,并保存
temp=shuzhu[1];
for(int
i=1;i<=count;i++)
{
if(
}
cout<<
cout<<<<'
'<<<
cout<
system(
return 0;
}