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++编写程序实现小学生数学测验功能的主要内容,如果未能解决你的问题,请参考以下文章