• 第五篇——C++实现四则运算


    写一个能自动生成小学四则运算题目的命令行 “软件”, 分别满足下面的各种需求。下面这些需求都可以用命令行参数的形式来指定: a) 除了整数以外,还要支持真分数的四则运算。 (例如: 1/6 + 1/8 = 7/24) b) 让程序能接受用户输入答案,并判定对错。 最后给出总共 对/错 的数量。 c) 逐步扩展功能和可以支持的表达式类型,最后希望能支持下面类型的题目 (最多 10 个运算符,括号的数量不限制): 25 - 3 * 4 - 2 / 2 + 89 = ? 1/2 + 1/3 - 1/4 = ? (5 - 4 ) * (3 +28) =?d) 一次可以批量出 100 道以上的题目,保存在文本文件中, 并且保证题目不能重复,(1+2) 和 (2+1) 是重复的题目。 怎么保证题目不重复呢,请看详细题目要求。

    #include<iostream.h>
    #include<stdlib.h>
    #include<conio.h>

    void DealFenshu(int m, int a[][2])
    {
    for(int p=0;p<m;p++)
    {
    int i=(int)rand()%10;
    int j=(int)rand()%10;
    while(j==0||i>=j)
    {
    i=(int)rand()%10;
    j=(int)rand()%10;
    }
    int x=(int)rand()%10;
    int y=(int)rand()%10;
    while(y==0||x>=y)
    {
    x=(int)rand()%10;
    y=(int)rand()%10;
    }
    int k=(int)rand()%100/25;
    switch(k)
    {
    case 0:
    cout<<"("<<i<<"/"<<j<<")"<<"+"<<"("<<x<<"/"<<y<<")"<<"=";
    a[p][0]=i*y+x*j;
    a[p][1]=j*y;
    break;
    case 1:
    cout<<"("<<i<<"/"<<j<<")"<<"-"<<"("<<x<<"/"<<y<<")"<<"=";
    a[p][0]=i*y-x*j;
    a[p][1]=j*y;
    break;
    case 2:
    cout<<"("<<i<<"/"<<j<<")"<<"*"<<"("<<x<<"/"<<y<<")"<<"=";
    a[p][0]=i*x;
    a[p][1]=j*y;
    break;
    case 3:
    a[p][0]=i*y;
    a[p][1]=j*x;
    cout<<"("<<i<<"/"<<j<<")"<<"/"<<"("<<x<<"/"<<y<<")"<<"=";
    }

    if(p%5==4)
    {
    cout<<endl;
    }
    else
    {
    cout<<‘ ‘;
    }
    }

    }
    void DisplayFenshu(int a[][2],int w,int m)
    {
    if(w==1)
    {
    for(int q=0;q<m;q++)
    {
    if(a[q][0]==0)
    cout<<"0"<<‘ ‘;
    else
    cout<<a[q][0]<<"/"<<a[q][1]<<‘ ‘;
    if(q%5==4)
    {
    cout<<endl;
    }
    }
    }
    else
    {};
    }
    void DealInt(int m,int a[])
    {

    for(int p=0;p<m;p++)
    {
    int i=(int)rand()%10;
    int j=(int)rand()%10;
    int k=(int)rand()%100/25;
    switch(k)
    {
    case 0:
    cout<<i<<"+"<<j<<"=";
    a[p]=i+j;
    break;
    case 1:
    cout<<i<<"-"<<j<<"=";
    a[p]=i-j;
    break;
    case 2:
    cout<<i<<"*"<<j<<"=";
    a[p]=i*j;
    break;
    case 3:
    try
    {
    a[p]=i/j;
    cout<<i<<"/"<<j<<"=";
    }
    catch(...)
    {
    p--;
    }

    }

    if(p%5==4)
    {
    cout<<endl;
    }
    else
    {
    cout<<‘ ‘;
    }
    }
    }
    void DisplayInt(int a[],int w,int m)
    {
    if(w==1)
    {
    for(int q=0;q<m;q++)
    {
    cout<<a[q]<<‘ ‘;
    if(q%5==4)
    {
    cout<<endl;
    }
    }
    }
    else
    {};
    }
    void main()
    {
    int p;
    do
    {
    system("cls");
    int a[1000],b[1000][2];
    int m,n,w;
    cout<<"请输入生成的四则运算题个数:";
    cin>>m;
    cout<<endl;
    cout<<"请输入要生成的四则运算种类(输入1为整数,否则为真分数):";
    cin>>n;
    cout<<endl;
    if(n==1)
    {
    DealInt(m,a);
    cout<<endl;
    }
    else
    {
    DealFenshu(m,b);
    cout<<endl;
    }
    cout<<"是否输出答案(输入1则输出答案否则不输出答案)"<<endl;
    cin>>w;
    if(n==1)
    {
    DisplayInt(a,w,m);
    }
    else
    {
    DisplayFenshu(b,w,m);
    }
    cout<<endl;
    cout<<"是否继续生成运算题(输入1则生成否则不生成)"<<endl;
    cin>>p;
    cout<<endl;
    }while(1==p);

    }

    若题目要求100道自动生成,即可输入100.

  • 相关阅读:
    [bzoj3694]最短路
    [bzoj3172][Tjoi2013]单词
    [bzoj2243][SDOI2011]染色
    [bzoj1036][ZJOI2008]树的统计Count
    [学习笔记]树链剖分
    [bzoj4552][Tjoi2016][Heoi2016]排序
    [51nod1515]明辨是非
    [51nod1685]第k大区间
    [日常训练]training
    BZOJ3811: 玛里苟斯
  • 原文地址:https://www.cnblogs.com/fesoon/p/5388209.html
Copyright © 2020-2023  润新知