C++练习(一)--简易算数运算答题系统

前言

运行说明:代码在vscode中运行,需添添加c++插件。
程序实现功能:

  1. 自动生成100以内的加减乘除题目。
  2. 题目数量可以1到10设置(这个数字可以随意设置)。
  3. 加减乘除训练可以选择。
  4. 最后输出得分,错误题目和答题所用时间。

1.要点解析

这个问题中最主要的是产生随机数,一般使用rand()指令,但它产生的是伪随机数,需要传入srand()充当随机数种子,才能产生真正的随机数,一般传入系统时间,参考链接
rand()%MOD 会生成0到MOD-1间的整数。
记录时间的方法:

 time_t  start,end; //记录时间变量
 start =  time (NULL);//记录初始化时间
 end =  time (NULL);
 cout<<difftime (end,start)<<endl;

2.程序解析

1.选择运算,加减乘除

    cout<<"1.add" << '\n' <<"2.divide" << '\n' <<"3.multiply" << '\n' <<"4.minus" << '\n' <<"please enture number: ";
    cin >> x; //获取键盘值
    //确保值在1到4,直到输对为止向下执行
    while(x>4 || x<1)  
    {
       cout<< "please enter number rang 1 to 4:"; 
       cin >>x; 
    }
    switch (x)   //打印选择信息
    {
       case 1:
          cout<<"choice add" << '\n';break;
       case 2:
          cout<<"choice divide" << '\n';break;
       case 3:
          cout<<"choice multiply" << '\n';break;
       case 4:
          cout<<"choice minus" << '\n';break;
    }

2.选择题目数量

    cout<< "please enter question number:";
    cin >>y;
    while(y>10 || y<1)   //这里的最大题目是10
    {
       cout<< "please enter question number rang 1 to 10:"; 
       cin >>y; 
    }
    cout<< "question number:"<<y<<endl;

3.生成题目

 for (i= 0 ;i< y; i++)  //y是输入的题目数
   {
       item = i +1;
       a = (rand()%101);
       b = (rand()%101);
       if(x == 1)   //x=1对应加法
       {
           cout << item <<"."<<a <<"+"<< b <<"=";
           cin >> answer;
           if ((a+b) != answer)
           {
               //记录错题信息
               use.a.push_back(a);
               use.b.push_back(b);
               use.i.push_back(item);
               count++;
           }
     /*......省略.........*/     
 } 

这里面比较麻烦的是除法,以下代码保证答案为整数:

if(x == 2)
 {
    b = (rand()%26);  //a/b,这里的b不易太大,如果太大再做答案整数化处理是,出现a=b的情况太多
    while(b == 0)   //防止分母为0
    {
       b = (rand()%26);        
    }
    while(a<b)   //保证不出现小于1的数
    {
       a = (rand()%101);
    }
    a = a - a%b;  //答案整数化处理
    cout<< item <<"." << a <<"/"<< b <<"=";
    cin >> answer;
    if ( a/b != answer)
    {
       use.a.push_back(a);
       use.b.push_back(b);
       use.i.push_back(item);
       count++;
    }
}

4.输出结果
打印错误题目,需要与加减乘除对应

 cout << "error item:"<<endl;
 for(j=0; j<use.a.size(); j++)
 {
    cout<<use.i[j]<<"." << use.a[j]<<"+"<<use.b[j]<<"="<<( use.a[j]+ use.b[j])<<endl;
  }        
  score = ((y-count)*100/y);  //计算分数
  cout << "score:" <<score<<" seconds."<< endl;
  cout << "The pause used " << difftime (end,start) <<" seconds."<< endl; //输出用时

3.演示

1.运行,选择计算方式:
在这里插入图片描述
如果输入数字错误,需要重新输入,直到正确:
在这里插入图片描述
2.选择题目数目
在这里插入图片描述
如果输入数字错误,需要重新输入,直到正确
在这里插入图片描述
3.开始答题
在这里插入图片描述
4.答完题后输出错误题目和答题时间
在这里插入图片描述

4.完整代码

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <vector>

using namespace std;

struct record  //记录错题
{
    vector<int> i ;  //题号
    vector<int> a ;  //题目算子 
    vector<int> b ;   
};

int main()
{
    record use;
    int x ;      //模式选择
    int y ;      //选择题目数
    //循环的中间变量
    int i;
    int j;
    int item;//记录题号
    //随机数
    int a;
    int b;
    //输入回答
    int answer;
    //记录错题数
    int count;
    //记录分数
    double score;

    time_t  start,end; //记录时间变量
    start =  time (NULL);//记录初始化时间

    cout<<"1.add" << '\n' <<"2.divide" << '\n' <<"3.multiply" << '\n' <<"4.minus" << '\n' <<"please enture number: ";
    cin >> x;  //获取键盘值
    //确保值在1到4,直到输对为止向下执行
    while(x>4 || x<1)
    {
       cout<< "please enter number rang 1 to 4:"; 
       cin >>x; 
    }
    switch (x)
    {
       case 1:
          cout<<"choice add" << '\n';break;
       case 2:
          cout<<"choice divide" << '\n';break;
       case 3:
          cout<<"choice multiply" << '\n';break;
       case 4:
          cout<<"choice minus" << '\n';break;
    }
      
    cout<< "please enter question number:";
    cin >>y;
    while(y>10 || y<1)  //10为最大题目数
    {
       cout<< "please enter question number rang 1 to 10:"; 
       cin >>y; 
    }
    cout<< "question number:"<<y<<endl;

    srand(time(NULL));
  
   for (i= 0 ;i< y; i++)
   {
       item = i +1;
       a = (rand()%101);
       b = (rand()%101);
       if(x == 1)
       {
           cout << item <<"."<<a <<"+"<< b <<"=";
           cin >> answer;
           if ((a+b) != answer)
           {
               use.a.push_back(a);
               use.b.push_back(b);
               use.i.push_back(item);
               count++;
           }
       }
       if(x == 2)
       {
           b = (rand()%26);
           while(b == 0)
           {
              b = (rand()%26);        
           }
           while(a<b)
           {
              a = (rand()%101);
            }
            a = a - a%b;
           cout<< item <<"." << a <<"/"<< b <<"=";
           cin >> answer;
           if ( a/b != answer)
           {
              use.a.push_back(a);
              use.b.push_back(b);
              use.i.push_back(item);
              count++;
           }
       }
       if(x == 3)
       {
           cout<< item <<"." << a <<"*"<< b <<"=";
           cin >> answer;
           if ((a*b)!= answer)
           {
               use.a.push_back(a);
               use.b.push_back(b);
               use.i.push_back(item);
               count++;
           }
       }
       if(x == 4)
       {
           cout << item <<"."<< a <<"-"<< b <<"=";
           cin >> answer;
           cout<<(a-b)<<endl;
           if ((a-b)!= answer)
           {
               use.a.push_back(a);
               use.b.push_back(b);
               use.i.push_back(item);
               count++;
           }
       }

   }
   end =  time (NULL);
   if (x == 1)
   {
       cout << "error item:"<<endl;
       for(j=0; j<use.a.size(); j++)
       {
           cout<<use.i[j]<<"." << use.a[j]<<"+"<<use.b[j]<<"="<<( use.a[j]+ use.b[j])<<endl;
       }        
   }
   if (x == 2)
   {
       cout << "error item:"<<endl;
       for(j=0; j<use.a.size(); j++)
       {
           cout<<use.i[j]<<"." << use.a[j]<<"/"<<use.b[j]<<"="<<( use.a[j]/use.b[j])<<endl;
       }        
   }
   if (x == 3)
   {
       cout << "error item:"<<endl;
       for(j=0; j<use.a.size(); j++)
       {
           cout<<use.i[j]<<"."  << use.a[j]<<"*"<<use.b[j]<<"="<<( use.a[j]*use.b[j])<<endl;
       }        
   }
   if (x == 4)
   {
       cout << "error item:"<<endl;
       for(j=0; j<use.a.size(); j++)
       {
           cout <<use.i[j]<<"." << use.a[j]<<"-"<<use.b[j]<<"="<<( use.a[j]-use.b[j])<<endl;
       }        
   }
   score = ((y-count)*100/y);
   cout << "score:" <<score<<" seconds."<< endl;
   cout << "The pause used " << difftime (end,start) <<" seconds."<< endl;
} 
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值