C++编写程序实现小学生数学测验功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编写程序实现小学生数学测验功能相关的知识,希望对你有一定的参考价值。

二、功能要求: 1、电脑随机出10道题,每题10分,程序结束时显示学生得分; 2、确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和/差超出0~50的范围,负数更是不允许的;3、每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案; 4、对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分; 5、总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”。的源代码

参考实例源码如下:
//#include <stdlib.h>
#include <iostream>
using namespace std;
int main()

int i,j,k,l=0,n;
cout<<"小学数学测试"<<endl;
cout<<"请选择想测试的题型:1.+ 2.- 3.* 4./:";
cin>>i;

if(i==1)

cout<<"请输入测试题的个数:";
cin>>j;
for(int k1=0;k1<j;k1++)

srand((unsigned)time(NULL));
int x1=rand()%100;
int x2=rand()%100;
cout<<x1<<"+"<<x2<<"=:";
cin>>k;
if(k==x1+x2)
cout<<"回答正确!"<<endl;
l++;

else
cout<<"回答错误!正确答案为:"<<x1+x2<<endl;


else if(i==2)

cout<<"请输入测试题的个数:";
cin>>j;
for(int k1=0;k1<j;k1++)

srand((unsigned)time(NULL));
int x1=rand()%100;
int x2=x1+rand()%50;
cout<<x2<<"-"<<x1<<"=:";
cin>>k;
if(k==x2-x1)
cout<<"回答正确!"<<endl;
l++;

else
cout<<"回答错误!正确答案为:"<<x2-x1<<endl;


else if(i==3)

cout<<"请输入测试题的个数:";
cin>>j;
for(int k1=0;k1<j;k1++)

srand((unsigned)time(NULL));
int x1=rand()%100;
int x2=rand()%100;
cout<<x1<<"*"<<x2<<"=:";
cin>>k;
if(k==x1*x2)
cout<<"回答正确!"<<endl;
l++;

else
cout<<"回答错误!正确答案为:"<<x1*x2<<endl;


else if(i==4)

cout<<"请输入测试题的个数:";
cin>>j;
for(int k1=0;k1<j;k1++)

srand((unsigned)time(NULL));
int x1=rand()%100+1;
int x2=x1*(rand()%10);
cout<<x2<<"/"<<x1<<"=:";
cin>>k;
if(k==x2/x1)
cout<<"回答正确!"<<endl;
l++;

else
cout<<"回答错误!正确答案为:"<<x2/x1<<endl;


cout<<"这次测试你作对的题目的个数为"<<l<<"个"<<endl;
cout<<"是否继续测试:0.退出 1.继续:";
cin>>n;
if(n==1)
return main();
// system("PAUSE");
return 0;
参考技术A    按照你的要求,我已经完成了这个程序,我测试过了,应该没什么问题。不过这只能在C++集成开发环境中运行,如果你是一位小学教师的话,建议做一个带图形界面的测试程序。
//2015/3/12 by LDSD
#include<iostream.h>;
#include<stdlib.h>
#include "windows.h" 
struct node

int num1;
char ope;
int num2;
int res;
node *next;
;
void  generator(node *head)
//用来随机产生10道计算题,并通过链表保存数据

int c;
int count=0;
srand((unsigned)GetCurrentTime());
while(count!=10)

int a=rand()%48+1; //产生随机数
int b=rand()%48+1;
node *data=new node; //申请存储节点
int i=rand()%2;
if(i==0&&b>a)

data->num1=b;data->ope='-';data->num2=a;data->res=b-a;

else if(i==0&&a>b)

data->num1=a;data->ope='-';data->num2=b;data->res=a-b;

else if(i==1&&a<b)

data->num1=a;data->ope='+';data->num2=b-a;data->res=b;

else if(i==1&&a>b)

data->num1=b;data->ope='+';data->num2=a-b;data->res=a;


else if(a==b)
continue;
data->next=head->next;
head->next=data;
count++;


void test(node *head)
//测试程序

int count,que_num=1;
int sum=0;
int result;
node *data=head->next;
while(data!=NULL)

count=3;
cout<<"请计算第"<<que_num++<<"道题目:  "<<data->num1<<data->ope<<data->num2<<endl;
cin>>result;
while(result!=data->res&&count!=1)

count--;
cout<<"请重新计算,你还有"<<count<<"次机会。"<<endl;
cin>>result;

if(count==3)
sum=sum+10;
else if(count==2)
sum=sum+7;
else if(count==1&&result==data->res)
sum=sum+5;
else if(count==1&&result!=data->res)
cout<<"本题的正确答案是:"<<data->num1<<data->ope<<data->num2<<"="<<data->res<<endl;
data=data->next;

cout<<"本次测试你的总分是"<<sum<<endl;
cout<<"—————————"<<endl;
if(sum>=90)
cout<<"SMART!"<<endl;
else if(sum>=80)
cout<<"GOOD!"<<endl;
else if(sum>=70)
cout<<"OK!"<<endl;
else if(sum>=60)
cout<<"PASS!"<<endl;
else
cout<<"TRY AGAIN!"<<endl;
cout<<"—————————"<<endl;

void main()

node *head=new node;
head->next=NULL;
generator(head);
test(head);

中小学数学卷子自动生成程序——结对分析

在上一周的个人项目中队友用的是C++,代码运行正常,且基本实现了需求文档的要求,然后关于她的代码,我觉得有很多可以借鉴的地方,也有一些需要改进的地方。

 

优点:

1、总体结构很清楚,思路清晰。从登录到功能切换,从试卷生成到题目生成,以及重复性检测,每一步都有对应的函数代码,思路清晰,逻辑清楚。

2、代码的编写基本符合规范要求,且注释基本到位,可读性强。例如在前面的主要函数声明中注释很清楚地标明清楚了函数的作用,函数基本命名符合规范,可以根据名字而知其意,变量命名也基本符合规范,这一点我得向她学习。

3、代码整体比较简洁。在代码中利用了很多库函数解决问题,而不是一板一眼地实现,这样极大地简化了代码,比如strftime()、insert(),find()等函数就简化了关于在字符串的一些处理,这一点我认为自己做得没有她好。

4、在用户的交互方面做得很好,一步一步都引导很详细,很好地满足了需求文档里要求的功能。

5、类的封装和题目查重部分做得很好。

 

缺点:

1、代码有需要优化的地方:在生成数学题的函数string Math(string curr_grade)中有多个return语句,出口不止一个。存在函数如string zhuan(int n)命名不清楚。

2、在数学题生成过程中发现sin、cos、tan这些操作符是无法放在第一个数的,这三个操作符可以随机放在第一个操作数后,这是一个限制,我觉得应该要把第一个操作数也算进去。

3、括号的处理感觉不够完善,该代码在添加括号部分选择只添加一个括号,且只在小学里添加括号,我觉得这样出的数学题不够符合要求。

4、文件使用绝对路径,而且需要在代码部分手动生成每个用户文件夹,这样比较麻烦,而且我觉得用户信息可以改为txt文件录入,这样以后可以更加方便地更新用户。

 

总而言之,我觉得队友的代码有许多值得我学习的地方,也让我意识到自己的代码有许多可以优化的地方,我会继续向她学习的。

 

以上是关于C++编写程序实现小学生数学测验功能的主要内容,如果未能解决你的问题,请参考以下文章

中小学数学卷子自动生成程序分析 个人项目

C++学生信息管理系统[2023-05-27]

个人项目复用代码实现结对编程项目

C++学生成绩平均计算器数组问题

1. 内容:学生成绩管理程序 一班有20名学生,一学期有5门课程,编写程序实现如下功能: (1) 录入每名学生

可以实现C++与PHP交互吗