作业-四则运算题目生成程序

博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11376
作业目标 写一个能自动生成小学四则运算题目的程序
学号 3190704134

题目要求

写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24

2)程序要求能处理用户的输入,判断对错,累积分数

3)程序支持可以由用户自行选择加、减、乘、除运算

4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

完成要求1(C)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main()
{
    int i=0;
    int n=0;
    int x=0;
    int type;
    char flag;
    int left, right;
    float result;
    
    printf("请输入要出的题目数量\n");
    scanf("%d",&n);
    
    srand(unsigned(time(NULL)));
    
    while(x<n)
    {
        type = rand() % 4;
        left = rand() % 100;
        right = rand() % 100;
        switch(type)
        {
        case 0:
            printf("%d + %d = ?\n", left, right);
            break;
        case 1:
            printf("%d - %d = ?\n", left, right);
            break;
        case 2:
            printf("%d * %d = ?\n", left, right);
            break;
        case 3:
            printf("%d / %d = ?\n", left, right);
            break;
        }

        i++;
        while(i>=n)
        {
            printf("一共 %d 题\n",i);
            printf("继续?[Y/N]\n");
            fflush(stdin);
            scanf("%c",&flag);
            if(flag=='Y'||flag=='y')
            {
                printf("请输入要出的题目数量\n");
                scanf("%d",&n);
                i=0;
                break;
             }
            printf("谢谢使用!\n");
            fflush(stdin);
            getchar();
            return 0;
        }
    }
}

完成所有要求(Java)

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Main{

    public static void main(String[] args) throws  IOException {
        // TODO Auto-generated method stub
        
    	File file = new File("result.txt");  //生成保存结果的文件
    	                                                                   
    	FileOutputStream fop = new FileOutputStream(file);

             if (!file.exists()) {
                 file.createNewFile();
             }
        
    	
    	int x;//题目数量
    	System.out.println("请输入题目的数量:");
		Scanner scan2 = new Scanner(System.in);
		x = scan2.nextInt();
		String serialNo = "201571030306";
		
	    fop.write(serialNo.getBytes());   //写入学号 
	    fop.write("\r\n".getBytes());     //换行
	    
        for(int i=0;i<x;i++){
            int a=(int)(Math.random()*100);
            int b=(int)(Math.random()*100);
            int c=(int)(Math.random()*100);
            
            String q="";    //保存运算式
            int ans=0;
            int[] flag=new int[2];
            for(int j=0;j<2;j++){      
                int f=(int)(Math.random()*4);
                switch(f){
                case 0:
                    if(j==0){
                        q=a+"+"+b;
                    }
                    else{
                        q=q+"+"+c;
                    }
                    flag[j]=0;
                    break;
                case 1:
                    if(j==0){
                        q=a+"-"+b;
                    }
                    else{
                        q=q+"-"+c;
                    }
                    flag[j]=1;
                    break;
                case 2:
                    if(j==0){
                        q=a+"*"+b;
                    }
                    else{
                        q=q+"*"+c;
                    }
                    flag[j]=2;
                    break;
                case 3:
                    if(j==0){
                        q=a+"/"+b;
                    }
                    else{
                        q=q+"/"+c;
                    }
                    flag[j]=3;
                    break;
                }
            }
            if(flag[0]<2){
                if(flag[1]<2){
                    if(flag[0]==0){
                        ans=a+b;
                    }
                    else{
                        ans=a-b;
                    }
                    if(flag[1]==0){
                        ans+=c;
                    }
                    else{
                        ans-=c;
                    }
                }
                else{
                    if(flag[1]==2){
                        ans=b*c;
                    }
                    else{
                        if(c==0){
                            continue;
                        }
                        if(b<c || b%c!=0) {
                        	i=i-1;       //如果出现重新循环
                        	continue;   //判断结果不能为负数和非整数
                        }
                        ans=b/c;
                    }
                    if(flag[0]==0){
                        ans+=a;
                    }
                    else{
                        ans=a-ans;
                    }
                }
            }
            else{
                if(flag[0]==2){
                    ans=a*b;
                }
                else{
                    if(b==0){
                        continue;
                    }
                    if(a<b || a%b!=0) {
                    	i=i-1;       //如果出现重新循环
                    	continue;   //判断结果不能为负数和非整数
                    }
                    ans=a/b;
                }
                if(flag[1]==0){
                    ans+=c;
                }
                else if(flag[1]==1){
                    ans-=c;
                }
                else if(flag[1]==2){
                    ans*=c;
                }
                else{
                    if(c==0){
                        continue;
                    }
                    if(ans<c || ans%c!=0) {
                    	i=i-1;       //如果出现重新循环
                    	continue;   //判断结果不能为负数和非整数
                    }
                    ans/=c;
                }
            }
            
            if(ans<0) //判断结果不能为负数
            {
            	i=i-1; continue;
            }   
            
            q=q+"="+ans;           //用字符串将算式和答案连在一起
            System.out.println(q);
            fop.write(q.getBytes());    //写入表达式
            fop.write("\r\n".getBytes());   //换行
        }
	    fop.close();
    }
         
}
任务内容 计划完成所需时间(min) 实际完成所需时间(min)
计划 10 10
完成任务所需时间,并规划工作步骤 10 10
开发 60 70
需求分析 0 0
生成设计文档 0 0
设计复审 0 0
代码规范 0 0
具体设计 10 10
具体编码 5 5
代码复审 5 5
测试 20 20
报告 0 0
测试报告 0 0
计算工作量 0 0
事后总结,并提出过程改进计划 10 10

posted on 2020-10-26 20:35  GClock  阅读(162)  评论(0编辑  收藏  举报

导航