四则运算题出题程序代码及分析

题目:

1、题目避免重复

2、可定制(数量/打印方式)

3、可以控制下列参数

是否有乘除法

是否有括号(最多可以支持十个参数参与计算)

数值范围

加减有无分数

除法有无余数

分析:

1、题目避免分析

保证首个参数不同

2、可定制

  根据用户选择进行输出方式

3、是否有括号

保证右括号始终在最后一个数的后面

左括号可以在前面任意位置插入

4、有无负数

减号前一个数小于后一个则前后交换

5、有无余数

若有余数,则除数重新生成,直到无余数为止

源代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace siz
{
    class Program
    {
        static Random rnd = new Random();
        static void Main(string[] args)
        {
            String filepath;
            String path;
            int num_min,num_max;//数据范围的上限和下限
            int num_topic;//题目个数
            int num_number;//表达式所含数字个数
            int num_milde;
            int num_output;
            String word_ch;//判断乘除
            String word_ys="N";//判断余数
            String word_k="N";//判断括号
            String word_fs="N";//判断有无负数

            Console.WriteLine("请输入题目个数:");
            num_topic = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("请输入表达式所含数字个数:");
            num_number = Convert.ToInt32(Console.ReadLine());

             Console.WriteLine("请输入范围下限:");
            num_min = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("请输入范围上限:");
            num_max=Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("是否有乘除(Y/N):");
            word_ch=Console.ReadLine();

            if(num_number==2)
            {
                if(word_ch=="Y")
                {
                    Console.WriteLine("是否有余数(Y/N):");
                    word_ys=Console.ReadLine();
                }
                if(num_min>=0)
                {
                    Console.WriteLine("是否有负数(Y/N):");
                    word_fs=Console.ReadLine();
                }

            }
            else
            {
                Console.WriteLine("是否有括号(Y/N):");
                word_k=Console.ReadLine();
            }

            int[,] Data = new int[num_topic,num_number];//保存数据

            int[,] Operator=new int[num_topic,num_number];//保存运算符

            int[] Data_first = new int[num_topic];//保存每个表达式的首个字符

            int[,] kuohao=new int[num_topic,num_number];
            if (word_ch == "Y")
            {
                for (int ii = 0; ii < num_topic; ii++)
                {
                    for (int jj = 0; jj < num_number - 1; jj++)
                    {
                        Operator[ii, jj] = rnd.Next(1, 5);
                    }
                    Operator[ii, num_number - 1] = 5;
                }

            }
            else
            {
                for (int i = 0; i < num_topic; i++)
                {
                    for (int j = 0; j < num_number - 1; j++)
                    {
                            Operator[i, j] = rnd.Next(1, 3);
                    }
                    Operator[i, num_number - 1] = 5;
                }

            }

            Data_first[0] = rnd.Next(num_min, num_max);//以第一个操作数的不同来使表达式不会重复

            for (int s = 1; s < num_topic;s++ )
            {
                Data_first[s] = rnd.Next(num_min, num_max);
                for (int h = 0; h < s-1; h++)
                {
                    if (Data_first[s] == Data_first[h])
                    {
                        s--;
                    }
                }
            }
            for (int x = 0; x < num_topic; x++)
            {
                Data[x, 0] = Data_first[x];
                for (int y = 1; y < num_number; y++)
                {
                    if (Operator[x,y-1] == 4)
                    {
                        for (; ; )
                        {
                            Data[x,y] = rnd.Next(num_min, num_max);
                            if (Data[x,y] != 0)
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        Data[x, y] = rnd.Next(num_min, num_max);
                    }
                }
            }
            if (word_fs == "N")
            {
                for (int i1 = 0; i1 < num_topic; i1++)
                {
                    if (Operator[i1, 0] == 2&&Data[i1,0]<Data[i1,1])
                    {
                        num_milde = Data[i1, 1];
                        Data[i1, 1] = Data[i1, 0];
                        Data[i1, 0] = num_milde;

                    }
                }
            }

            if (word_ch == "Y")
            {

                if (word_ys == "N")
                {

                    for (int i2 = 0; i2 < num_topic; i2++)
                    {

                        if (Operator[i2, 0] == 4)
                        {

                            num_milde = Data[i2, 0] % Data[i2, 1];
                            while (num_milde != 0)
                            {
                                Data[i2, 1] = rnd.Next(1, Data[i2, 0]);
                                num_milde = Data[i2, 0] % Data[i2, 1];
                            }
                        }
                    }
                }

            }

            if (word_k == "Y")
            {
                for (int j1 = 0; j1 < num_topic; j1++)
                {
                    for (int j2 = 0; j2 < num_number-2; j2++)
                    {
                        kuohao[j1,j2] = rnd.Next(0, 2);
                    }
                    kuohao[j1,num_number-2]=0;
                    kuohao[j1,num_number-1]=0;
                }
            }
            Console.WriteLine("请输入输出方式:\n1、控制台输出。2、输出到文本");
            num_output = Convert.ToInt32(Console.ReadLine());
            if (num_output == 1)
            {
                for (int x1 = 0; x1 < num_topic; x1++)
                {
                    for (int x2 = 0; x2 < num_number; x2++)
                    {
                        if (kuohao[x1,x2] == 1)
                        {
                            Console.Write("(");
                            Console.Write(Data[x1, x2]);
                            if (Operator[x1, x2] != 5)
                            {
                                if (Operator[x1, x2] == 1)
                                {
                                    Console.Write("+");
                                }
                                if (Operator[x1, x2] == 2)
                                {
                                    Console.Write("-");
                                }
                                if (Operator[x1, x2] == 3)
                                {
                                    Console.Write("*");
                                }
                                if (Operator[x1, x2] == 4)
                                {
                                    Console.Write("/");
                                }

                            }

                        }
                        else
                        {
                            Console.Write(Data[x1, x2]);
                            if (Operator[x1, x2] != 5)
                            {
                                if (Operator[x1, x2] == 1)
                                {
                                    Console.Write("+");
                                }
                                if (Operator[x1, x2] == 2)
                                {
                                    Console.Write("-");
                                }
                                if (Operator[x1, x2] == 3)
                                {
                                    Console.Write("*");
                                }
                                if (Operator[x1, x2] == 4)
                                {
                                    Console.Write("/");
                                }

                            }
                            else
                            {
                                for (int x3 = 0; x3 < num_number; x3++)
                                {
                                    if (kuohao[x1, x3] == 1)
                                    {
                                        Console.Write(")");
                                    }
                                }
                                Console.Write("=");

                            }
                        }
                    }
                    Console.WriteLine();
                }
            }
            else
            {
                Console.WriteLine("请输入文件路径(G:\\1.txt):");
                filepath=Console.ReadLine();
                path = @filepath;
                StreamWriter strm1 = File.CreateText(path);
                for (int x1 = 0; x1 < num_topic; x1++)
                {
                    for (int x2 = 0; x2 < num_number; x2++)
                    {
                        if (kuohao[x1, x2] == 1)
                        {
                            strm1.Write("(");
                            strm1.Write(Data[x1, x2]);
                            if (Operator[x1, x2] != 5)
                            {
                                if (Operator[x1, x2] == 1)
                                {
                                    strm1.Write("+");
                                }
                                if (Operator[x1, x2] == 2)
                                {
                                    strm1.Write("-");
                                }
                                if (Operator[x1, x2] == 3)
                                {
                                    strm1.Write("*");
                                }
                                if (Operator[x1, x2] == 4)
                                {
                                    strm1.Write("/");
                                }

                            }

                        }
                        else
                        {
                            strm1.Write(Data[x1, x2]);
                            if (Operator[x1, x2] != 5)
                            {
                                if (Operator[x1, x2] == 1)
                                {
                                    strm1.Write("+");
                                }
                                if (Operator[x1, x2] == 2)
                                {
                                    strm1.Write("-");
                                }
                                if (Operator[x1, x2] == 3)
                                {
                                    strm1.Write("*");
                                }
                                if (Operator[x1, x2] == 4)
                                {
                                    strm1.Write("/");
                                }

                            }
                            else
                            {
                                for (int x3 = 0; x3 < num_number; x3++)
                                {
                                    if (kuohao[x1, x3] == 1)
                                    {
                                        strm1.Write(")");
                                    }
                                }
                                strm1.Write("=");

                            }
                        }
                    }
                    strm1.WriteLine();
                }
                strm1.Close();

            }

        }
    }
}

结果:

时间: 2024-07-28 12:35:48

四则运算题出题程序代码及分析的相关文章

软件工程第一次作业,小学生四则运算的出题程序

一.背景 阿超有个儿子上小学二年级,老师每天让家长给孩子出30道加减法题,虽然不多,但是每天都做也算是个负担,阿超作为一个老牌程序员当然想用计算机来解决这个小问题,目前对于这个问题对于任何语言都不是问题,比如: C/C++.C#.Java.Python.VB.JavaScript.Perl…… 具体要求如下: 能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!) 除了整数外,还要支持真分数的四则运算 请大家用任何一种自己擅长的语言来编写这段程序,并把程序的介绍和自

第一次课上作业——编写程序,输出30道四则运算题

一.设计思路 1.首先完成一个四则运算的出题程序,其次运用循环的方式完成30道题2.首先使用随机函数生成四则运算中的第一个数的随机数,随机数要求是整数和真分数,其他的数不支持 2.1.首先生成一个随机数,取值为1或2,以此来确定四则运算中第一个随机数应该是整数还是真分数.若随机数为1则为整数,若随机数为2则为真分数.. 2.2.若为四则运算中的数为真分数,则随机生成两个数,作为分子和分母,并使得分母大于分子. 3.使用随机函数生成四则运算中的第二个数的随机数,此随机数的要求以及操作同第二步 4.

用程序实现用户要求的若干道2年级四则运算题

一.题目 按用户编写若干道2年级四则运算题 1题目避免重复 2可定制(数量/打印方式) 3可以控制下列参数:是否有乘除法.是否有括号.数值范围.加减有无负数.除法有无余数.是否支持分数(真分数,假分数,…).是否支持小数(精确到多少位).打印中每行的间隔可调整. 二.设计思想 上次的设计思想是先生成三个随机数,两个数是操作数,第三个控制乘除加减的选择. 这次同样是生成几个随机数,但需要设置一些判断条件,来满足用户出题要求,写一个出题函数,根据用户要求改变其中的变量,循环调用这个函数出题. 一.题

对随机产生分数或整数的四则运算题的代码实现

一设计思想: 一.完成如何实现随机调取两个数和一个四则运算符号 二.如何实现以四则运算题的形式输出 三.如何实现选择性输出多少题 四.如何补加输出分数的功能 二.代码实现 package com.minirisoft; import java.util.*; public class Yunsuan { public static void main(String[] args){ Scanner input=new Scanner(System.in); System.out.println(

小程序商城开发小程序系统代码编程分析

小程序商城开发小程序系统代码编程分析:151.1222.4001(微/电)微信小程序开发,小程序商城开发,小程序模式开发,小程序源码开发,小程序软件开发,小程序应用开发,小程序微商城搭建,小程序分销返利系统开发,小程序购物商城开发. 微信小程序1月9日发布以来,其实就是一个基于微信运行一个程序,腾讯未来就会把微信作为一个移动端OS,在微信基础上运营一个企业的小程序,这样方便用户使用程序,不需要下载和安装,这样方便了用户使用,从而我个人认为会对一些功能比较小的APP造成很大的冲击,但是对功能相对比

软工第一个程序:像二柱子那样,花二十分钟写一个能自动生成小学四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算。

程序设计思想 本程序的设计主要基于对C/C++中产生随机数的应用,在产生算数符号部分主要采用了switch语句,通过随机产生0-3的数值来随机产生"+-*/"字符,并进行相应的处理:在处理整数操作部分时,使用try/throw语句,避免除法分母为0,语句采用一维数组,记录答案结果:在处理真分数部分,采用while语句产生合理的真分数,采用二维数组记录答案结果. 程序源代码 #include<iostream.h> #include<stdlib.h> #incl

随机产生三十道四则运算题程序

#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){ int x,y,z,t,i; srand(time(NULL)); printf("三十道四则运算题\n"); for(i=0;i<30;i++) { x=rand()%100; y=rand()%100; z=rand()%4; switch(z) { case 0: printf("%d+%d=\n&quo

20194582自动生成四则运算题第一版报告

一 需求分析 利用C语言或者JAVA来编写代码 通过此代码自动生成四则运算,利用自动生成四则运算题程序可以进一步培养小学生计算能力,提高运算能力,并且减少老师和家长出题工作量. 二功能设计 (1)自动生成10道100以内的2个操作数的四则运算算式(+ - *  /),要求运算结果也在100以内 (2)剔除重复算式.  2 + 3 =    和  2 + 3 =     是重复算式      2 + 3 =   和   3 + 2 =  不属于重复算式 (3)题目数量可定制 (4)相关参数可控制

软件工程第一周作业----小学生四则运算题

实现功能: 1.整数和真分数的四则运算, 运算数和运算结果都可以是整数或分数: 2.能生成任意个运算数的算式(不超过100): 3.算式的个数.数的范围.运算数的个数由命令行输入: 4.不支持括号. 实现思路: 1.定义算式类,数据成员包含两个数组,分别存储运算数和算符:以及算式的结果: 方法成员包括一个初始化函数,随机生成算式并计算结果:一个输出函数,用来打印算式:以及其他辅助函数. 2.定义运算数类,数据成员包含两个整数,即分子和分母. 3.在主类里调用算式类的方法,来生成和输出算式:接受用