IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++练习(一)--简易算数运算答题系统 -> 正文阅读

[C++知识库]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;
} 
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 11:41:17  更:2021-08-27 11:42:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:29:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计