zoukankan      html  css  js  c++  java
  • 四则运算题目生成程序(一)

    一、作业信息

    博客班级

    软件工程

    作业要求 作业要求
    作业目标 写一个能自动生成小学四则运算题目的程序
    学号 3180701218

    二、作业要求

    写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
    1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
    2)程序要求能处理用户的输入,判断对错,累积分数
    3)程序支持可以由用户自行选择加、减、乘、除运算
    4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

    三、代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #include<string.h>
    #include<math.h>
    #define EPSILON 0.000001 //根据精度需要
    int N=0;
    int n=0;//用户输入搜题数目n
    int m=0;//选择搜题种类
    
    
    void huajian(int *p,int *q)//化简为真分数
    {
    	int i;
    	for(i=*p;i>=1;i--)
    	{
    		if(((*p)%i==0)&&((*q)%i==0))
    		{
    			(*p)=(*p)/i;
    			(*q)=(*q)/i;
    		}
    	}
    }
    
    
    void input()//用户输入搜题数目n,选择搜题种类
    {
    	printf("*———————————*
    ");
    	printf("|    四则运算生成器    |
    ");
    	printf("*———————————*
    ");
    	printf("|        1.加法        |
    ");
    	printf("|        2.减法        |
    ");
    	printf("|        3.乘法        |
    ");
    	printf("|        4.除法        |
    ");
    	printf("|        5.结束        |
    ");
    	printf("|  无限小数保留6位小数 |
    ");
    	printf("*———————————*
    ");
    	printf("请输入搜题种类:
    ");
    	scanf("%d",&m);
    }
    
    
    void addtion()//加法
    {
    	int i,j;
    	printf("1.整数运算or2.真分数运算
    ");
    	scanf("%d",&j);
    	srand(time(NULL));
    	if(j==1)
    	{
    		for(i=0;i<n;i++)
    		{
    			int a,b,c,d;
    			a=rand()%N;
    			b=rand()%N;
    			c=a+b;
    			printf("%d+%d=",a,b);
    			scanf("%d",&d);
    			if(d==c)printf("运算正确!
    ");
    			else printf("运算错误!正确答案是%d
    ",c);
    		}
    	}
    	else
    		for(i=0;i<n;i++)
    		{
    			int a,b;
    			int a1,b1;
    			float c,d;
    			while(1)
    			{
    				a=rand()%N;
    				b=rand()%N;
    				a1=rand()%N;
    				b1=rand()%N;
    				if(b1!=0&&b!=0&&a!=0&&a1!=0&&a!=b&&a1!=b1)
    					break;
    			}
    			huajian(&a,&b);
    			huajian(&a1,&b1);
    			c=a/(b*1.0)+a1/(b1*1.0);
    			printf("%d/%d+%d/%d=",a,b,a1,b1);
    			scanf("%f",&d);
    			if(fabs(d-c)<EPSILON)
    				printf("运算正确!
    ");
    			else 
    				printf("运算错误!正确答案是%f
    ",c);
    		}
    };
    void subtract()//减法
    {
    	int i,j;
    	printf("1.整数运算or2.真分数运算
    ");
    	scanf("%d",&j);
    	srand(time(NULL));
    	if(j==1)
    	{
    		for(i=0;i<n;i++)
    		{
    			int a,b,c,d;
    			a=rand()%N;
    			b=rand()%N;
    			c=a-b;
    			printf("%d-%d=",a,b);
    			scanf("%d",&d);
    			if(d==c)printf("运算正确!
    ");
    			else printf("运算错误!正确答案是%d
    ",c);
    		}
    	}
    	else
    		for(i=0;i<n;i++)
    		{
    			int a,b;
    			int a1,b1;
    			float c,d;
    			while(1)
    			{
    				a=rand()%N;
    				b=rand()%N;
    				a1=rand()%N;
    				b1=rand()%N;
    				if(b1!=0&&b!=0&&a!=0&&a1!=0&&a!=b&&a1!=b1)
    					break;
    			}
    			huajian(&a,&b);
    			huajian(&a1,&b1);
    			c=a/(b*1.0)-a1/(b1*1.0);
    			printf("%d/%d-%d/%d=",a,b,a1,b1);
    			scanf("%f",&d);
    			if(fabs(d-c)<EPSILON)
    				printf("运算正确!
    ");
    			else 
    				printf("运算错误!正确答案是%f
    ",c);
    		}
    };
    void multiply()//乘法
    {
    	int i,j;
    	printf("1.整数运算or2.真分数运算
    ");
    	scanf("%d",&j);
    	srand(time(NULL));
    	if(j==1)
    	{
    		for(i=0;i<n;i++)
    		{
    			int a,b,c,d;
    			a=rand()%N;
    			b=rand()%N;
    			c=a*b;
    			printf("%d*%d=",a,b);
    			scanf("%f",&d);
    			if(d==c)printf("运算正确!
    ");
    			else printf("运算错误!正确答案是%d
    ",c);
    		}
    	}
    	else
    		for(i=0;i<n;i++)
    		{
    			int a,b;
    			int a1,b1;
    			float c,d;
    			while(1)
    			{
    				a=rand()%N;
    				b=rand()%N;
    				a1=rand()%N;
    				b1=rand()%N;
    				if(b1!=0&&b!=0&&a!=0&&a1!=0&&a!=b&&a1!=b1)
    					break;
    			}
    			huajian(&a,&b);
    			huajian(&a1,&b1);
    			c=a/(b*1.0)*a1/(b1*1.0);
    			printf("%d/%d*%d/%d=",a,b,a1,b1);
    			scanf("%f",&d);
    			if(fabs(d-c)<EPSILON)
    				printf("运算正确!
    ");
    			else 
    				printf("运算错误!正确答案是%f
    ",c);
    		}
    };
    void divide()//除法【小数大小判断不准确】
    {
    	int i,j;
    	printf("1.整数运算or2.真分数运算
    ");
    	scanf("%d",&j);
    	srand(time(NULL));
    	if(j==1)
    	{
    		for(i=0;i<n;i++)
    		{
    			int a,b,c,d;
    			a=rand()%N;
    			b=rand()%N;
    			c=a/b;
    			printf("%d/%d=",a,b);
    			scanf("%f",&d);
    			if(d==c)printf("运算正确!
    ");
    			else printf("运算错误!正确答案是%d
    ",c);
    		}
    	}
    	else
    		for(i=0;i<n;i++)
    		{
    			int a,b;
    			int a1,b1;
    			float c,d;
    			while(1)
    			{
    				a=rand()%N;
    				b=rand()%N;
    				a1=rand()%N;
    				b1=rand()%N;
    				if(b1!=0&&b!=0&&a!=0&&a1!=0&&a!=b&&a1!=b1)
    					break;
    			}
    			huajian(&a,&b);
    			huajian(&a1,&b1);
    			c=a/(b*1.0)/(a1/(b1*1.0));
    			printf("(%d/%d)/(%d/%d)=",a,b,a1,b1);
    			scanf("%f",&d);
    			if(fabs(d-c)<EPSILON)
    				printf("运算正确!
    ");
    			else 
    				printf("运算错误!正确答案是%f
    ",c);
    		}
    };
    
    int main()
    {
    	printf("想练习多大数以内的运算题目:
    ");
    	scanf("%d",&N);
    	while(1)
    	{
    		input();
    		switch(m)
    		{
    		case 1:
    			printf("请输入搜题数目:
    ");
    			scanf("%d",&n);
    			addtion();
    			break;
    		case 2:
    			printf("请输入搜题数目:
    ");
    			scanf("%d",&n);
    			subtract();
    			break;
    		case 3:
    			printf("请输入搜题数目:
    ");
    			scanf("%d",&n);
    			multiply();
    			break;
    		case 4:
    			printf("请输入搜题数目:
    ");
    			scanf("%d",&n);
    			divide();
    			break;
    		case 5:
    			printf("谢谢使用!:
    ");
    			return 0;
    		default:
    			printf("输入指令有误,请重新输入!
    ");
    			break;
    		}
    	}
    	return 0;
    }; 
    

    四、运行截图

    五、总结

    1.psp表格

    psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 10 8
    Estimate 估计这个任务需要多少时间,
    并规划大致工作步骤
    10 12
    Development 开发 100 150
    Analysis 需求分析(包括学习新技术) 12 5
    Design Spec 生成设计文档 5 5
    Design Review 设计复审 5 5
    Coding Standard 代码规范 3 2
    Design 具体设计 10 12
    Coding 具体编码 36 21
    Code Review 代码复审 5 7
    Test 测试(自我测试,修改代码,提交修改) 10 15
    Reporting 报告 9 6
    Test Report 测试报告 3 2
    Size Measurement 计算工作量 2 1
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 3 3

    2.总结

    刚看到这个题目时,我觉得很简单,只需要利用随机数就可以了,但是实现过程却遇到了很多困难,尤其是实现真分数运算。该系统将分数转化为小数,通过两个分数差的绝对值与一个很小量比较判断大小,因此会产生误判,并且用户只能输入小数才能被系统识别。例如1/3+3/7=?正确答案是16/21。但是用户只能输入小数,且保留小数点后6位。这样,用户输入不方便,而且系统可能会误判。

  • 相关阅读:
    FLASH置于底层
    图片等比缩放
    fedora 系统使用 Broadcom BCM4312 无线网卡(转)
    ubuntu语言问题
    轻松安装、卸载Linux软件
    redhat6.0下使用vnc
    http网络安装centos 5.5系统总结
    如何在windows下搭建python的IDE开发环境
    对做技术的一点思考
    C++继承类和基类之间成员函数和虚函数调用机制
  • 原文地址:https://www.cnblogs.com/Liang-Shan/p/13916156.html
Copyright © 2011-2022 走看看