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

    一、作业信息

    |博客班级| AHPU-软件工程导论-计算机18级 (安徽工程大学 - 计算机与信息学院)
    |----|----|----|
    | 作业要求| 四则运算题目生成程序|
    |作业目标| 练习编译能力,提高编译能力|
    | 学号| 3180701335|

    二.题目要求

    写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
    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"math.h"
    #include"string.h"
    

    主菜单

    void menu()
    {
    	printf("四则运算题目生成程序
    ");
    	printf("输入要生成的题目类型
    ");
    	printf("1.加法算法(整数)
    ");
    	printf("2.减法算法(整数)
    ");
    	printf("3.乘法算法(整数)
    ");
    	printf("4.除法算法(整数)
    ");
    	printf("5.加法算法(真分数)
    ");
    	printf("6.减法算法(真分数)
    ");
    	printf("7.乘法算法(真分数)
    ");
    	printf("8.除法算法(真分数)
    ");
    	printf("0.退出
    ");
    	printf("请输入0——8
    ");
    }
    

    最大公约数

    int func(int m, int n) //求最大公约数
    {
    	int tmp;
    	m = abs(m);
    	n = abs(n);
    	if (m == n)
    		return m;
    	if (m < n)
    	{
    		tmp = m;
    		m = n;
    		n = tmp;
    	}
    	while (m % n != 0)
    	{
    		tmp = m;
    		m = n;
    		n = tmp % n;
    	}
    	return n;
    }
    

    整数加法

    int IAddition(int G=0)//加法算法题目生成与处理
    {
    	int i;//i 生成的题目数量
    	int x, y, z1 = 0, z2;//x,y为生成的数字用于加法计算,z1是输入的结果,z2是答案。
    	printf("请输入要生成的题目数量:");
    	scanf_s("%d", &i);
    	for (int j = 0; j < i; j++)
    	{
    		srand((unsigned)time(NULL));
    		x = rand() % 100;
    		y = rand() % 100;
    		z2 = x + y;
    		printf("%d+%d=?", x, y);
    		printf("请输入答案:");
    		scanf_s("%d", &z1);
    		if (z1 == z2)
    		{
    			printf("答案正确。
    ");
    			G += 1;
    		}
    		else
    			printf("答案错误,正确答案为%d
    ", z2);
    	}
    	return G;
    
    }
    

    整数减法

    int ISubtraction(int G=0)
    {
    	int i;//i 生成的题目数量
    	int x, y, z1 = 0, z2;//x,y为生成的数字用于减法计算,z1是输入的结果,z2是答案。
    	printf("请输入要生成的题目数量:");
    	scanf_s("%d", &i);
    	for (int j = 0; j < i; j++)
    	{
    		srand((unsigned)time(NULL));
    		x = rand() % 100;
    		y = rand() % 100;
    		z2 = x - y;
    		printf("%d-%d=?", x, y);
    		printf("请输入答案:");
    		scanf_s("%d", &z1);
    		if (z1 == z2)
    		{
    			printf("答案正确。
    ");
    			G += 1;
    		}
    		else
    			printf("答案错误,正确答案为%d
    ", z2);
    	}
    	return G;
    }
    

    整数乘法

    int IMultiplication(int G=0)
    {
    	int i;//i 生成的题目数量
    	int x, y, z1 = 0, z2;//x,y为生成的数字用于乘法计算,z1是输入的结果,z2是答案。
    	printf("请输入要生成的题目数量:");
    	scanf_s("%d", &i);
    	for (int j = 0; j < i; j++)
    	{
    		srand((unsigned)time(NULL));
    		x = rand() % 100;
    		y = rand() % 100;
    		z2 = x * y;
    		printf("%d*%d=?", x, y);
    		printf("请输入答案:");
    		scanf_s("%d", &z1);
    		if (z1 == z2)
    		{
    			printf("答案正确。
    ");
    			G += 1;
    		}
    		else
    			printf("答案错误,正确答案为%d
    ", z2);
    	}
    	return G;
    }
    

    整数除法

    int IDivision(int G=0)
    {
    	int i;//i 生成的题目数量
    	int x, y, z1 = 0, z2;//x,y为生成的数字用于除法计算,z1是输入的结果,z2是答案。
    	printf("请输入要生成的题目数量:");
    	scanf_s("%d", &i);
    	for (int j = 0; j < i; j++)
    	{
    		srand((unsigned)time(NULL));
    		x = rand() % 100;
    		y = rand() % 100;
    		z2 = x / y;
    		printf("%d/%d=?", x, y);
    		printf("请输入答案:");
    		scanf_s("%d", &z1);
    		if (z1 == z2)
    		{
    			printf("答案正确。
    ");
    			G += 1;
    		}
    		else
    			printf("答案错误,正确答案为%d
    ", z2);
    	}
    	return G;
    }
    

    分数加法

    int SAddition(int G=0)
    {
    	int flag = 0;
    	int i;//i 生成的题目数量
    	int x1, x2, y1, y2,Mcon,Mcon1;//x1,x2为分子,y1,y2为生成的分母数字用于加法计算.
    	int z1=0, z2=0, z3=0, z4=0;//z1是输入的分子,z2是分母   z3是答案的分子,z4是答案的分母。
    	printf("请输入要生成的题目数量:");
    	scanf_s("%d", &i);
    	for (int j = 0; j < i; j++)
    	{
    		srand((unsigned)time(NULL));
    		x1 = rand() % 10;
    		x2 = rand() % 10;
    		y1 = rand() % 10;
    		y2 = rand() % 10;
    		printf("%d/%d+%d/%d=?", x1,y1,x2,y2);
    		printf("请输入答案的分子:");
    		scanf_s("%d", &z1);
    		printf("请输入答案的分母:");
    		scanf_s("%d",&z2);
    		Mcon1 = func(y1, y2);
    		Mcon = y1 * y2;
    		z4 = Mcon;
    		z3 = Mcon / y1 * x1 + Mcon / y2 * x2;
    		
    		if (z1 == (z3=z3/Mcon1) && z2 == (z4=z4/Mcon1))
    		{
    			printf("答案正确。
    ");
    			G += 1;
    		}
    		else
    			printf("答案错误,正确答案为%d/%d
    ",z1,z4 );
    	}
    	return G;
    }
    

    分数减法

    int SSubtraction(int G=0)
    {
    	int flag = 0;
    	int i;//i 生成的题目数量
    	int x1, x2, y1, y2, Mcon,Mcon1;//x1,x2为分子,y1,y2为生成的分母数字用于加法计算.
    	int z1 = 0, z2 = 0, z3 = 0, z4 = 0;//z1是输入的分子,z2是分母   z3是答案的分子,z4是答案的分母。
    	printf("请输入要生成的题目数量:");
    	scanf_s("%d", &i);
    	for (int j = 0; j < i; j++)
    	{
    		srand((unsigned)time(NULL));
    		x1 = rand() % 10;
    		x2 = rand() % 10;
    		y1 = rand() % 10;
    		y2 = rand() % 10;
    		printf("%d/%d-%d/%d=?", x1, x2, y1, y2);
    		printf("请输入答案的分子:");
    		scanf_s("%d", &z1);
    		printf("请输入答案的分母:");
    		scanf_s("%d", &z2);
    		Mcon1 = func(y1, y2);
    		Mcon = y1 * y2;
    		z4 = Mcon;
    		z3 = Mcon / y1 * x1 - Mcon / y2 * x2;
    		if (z1  == (z3 = z3 / Mcon1) && z2 == (z4 = z4 / Mcon1))
    		{
    			printf("答案正确。
    ");
    			G += 1;
    		}
    		else
    			printf("答案错误,正确答案为%d/%d
    ", z3, z4);
    	}
    	return G;
    }
    

    分数乘法

    int SMultiplication(int G=0)
    {
    	
    	int i;//i 生成的题目数量
    	int x1, x2, y1, y2, Mcon,Mcon1;//x1,x2为分子,y1,y2为生成的分母数字用于加法计算.
    	int z1 = 0, z2 = 0, z3 = 0, z4 = 0;//z1是输入的分子,z2是分母   z3是答案的分子,z4是答案的分母。
    	printf("请输入要生成的题目数量:");
    	scanf_s("%d", &i);
    	for (int j = 0; j < i; j++)
    	{
    		srand((unsigned)time(NULL));
    		x1 = rand() % 10;
    		x2 = rand() % 10;
    		y1 = rand() % 10;
    		y2 = rand() % 10;
    		printf("%d/%d*%d/%d=?", x1, x2, y1, y2);
    		printf("请输入答案的分子:");
    		scanf_s("%d", &z1);
    		printf("请输入答案的分母:");
    		scanf_s("%d", &z2);
    		Mcon1 = func(y1, y2);
    		Mcon = y1 * y2;
    		z4 = Mcon;
    		z3 = (Mcon / y1 * x1) * (Mcon / y2 * x2);
    		if (z1  == (z3 = z3 / Mcon1) && z2 == (z4 = z4 / Mcon1))
    		{
    			printf("答案正确。
    ");
    			G += 1;
    		}
    		else
    			printf("答案错误,正确答案为%d/%d
    ", z3, z4);
    	}
    	return G;
    }
    

    分数除法

    int SDivision(int G=0)
    {
    	
    	int i;//i 生成的题目数量
    	int x1, x2, y1, y2, Mcon,Mcon1;//x1,x2为分子,y1,y2为生成的分母数字用于加法计算.
    	int z1 = 0, z2 = 0, z3 = 0, z4 = 0;//z1是输入的分子,z2是分母   z3是答案的分子,z4是答案的分母。
    	printf("请输入要生成的题目数量:");
    	scanf_s("%d", &i);
    	for (int j = 0; j < i; j++)
    	{
    		srand((unsigned)time(NULL));
    		x1 = rand() % 10;
    		x2 = rand() % 10;
    		y1 = rand() % 10;
    		y2 = rand() % 10;
    		printf("%d/%d / %d/%d=?", x1, x2, y1, y2);
    		printf("请输入答案的分子:");
    		scanf_s("%d", &z1);
    		printf("请输入答案的分母:");
    		scanf_s("%d", &z2);
    		Mcon1 = func(y1, y2);
    		Mcon = y1 * y2;
    		z4 = Mcon;
    		z3 = (Mcon / y1 * x1) /( Mcon / y2 * x2);
    		if (z1  == (z3 = z3 / Mcon1) && z2 == (z4 = z4 / Mcon1))
    		{
    			printf("答案正确。
    ");
    			G += 1;
    		}
    		else
    			printf("答案错误,正确答案为%d/%d
    ", z3, z4);
    	}
    	return G;
    }
    

    主函数

    
    int main()
    {
    
    	int number, grade1 = 0, grade2 = 0;
    	while (1)
    	{
    		menu();
    		scanf_s("%d", &number);
    		switch (number)
    		{
    		case 1: grade2 = IAddition(grade1); break;
    		case 2: grade2 = ISubtraction(grade1); break;
    		case 3: grade2 = IMultiplication(grade1); break;
    		case 4: grade2 = IDivision(grade1); break;
    		case 5: grade2 = SAddition(grade1); break;
    		case 6: grade2 = SSubtraction(grade1); break;
    		case 7: grade2 = SMultiplication(grade1); break;
    		case 8: grade2 = SDivision(grade1); break;
    		case 0: exit(0);
    		default: printf("error"); break;
    		}
    		printf("
    最后得分为:%d
    
    ", grade2);
    	}
    
    }
    

    运行截图





    个人小结

    1.psp表格

    psp2.1 | 任务内容 | 计划完成需要的时间(min)| 实际完成需要的时间(min) |

    • | :-: | :-: | :-: | -:
      Planing |计划 |40 |40 |
      Estimate |估计这个任务需要多少时间,
      并规划大致工作步骤 |500 | 300 |
      Development |开发| 200| 200|
      Analysis |需求分析(包括学习新技能)|120|90|
      Design Spec|生成设计文档|15|25|
      Design Review|设计审核|20|10|
      Coding Standard|代码规范|20|15|
      Design|具体设计|15|14|
      Coding|具体编码|500|400|
      Code Review|代码复核|30|20|
      Test|测试(自我测试,修改代码
      提交修改)|50|50|
      Reporting|报告|30|30|
      Test Report|测试报告|5|15|
      Size Measurement|计算工作量|30|25|
      Postmortem & Process
      Improvement|事后总结,并提出过程修改计划|10|15|

    2、个人小结

    经过这次编程练习,发现了许多的不足之处,编程能力有待提高,改错能力也有待提高。争取在这几次的编程练习中大幅度提高编程能力。
    
  • 相关阅读:
    使用intellij idea搭建spring-springmvc-mybatis整合框架环境
    lij IDEA项目包分层结构显示设置
    SpringMVC---applicationContext.xml
    SpringMVC 常用applicationContext.xml、web.xml、servlet-mvc.xml简单配置
    java web,从零开始,一步一步配置ssm(Spring+SpringMVC+MyBatis)框架
    Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
    SSM后台管理系统(Spring SpringMVC Mybatis Mysql EasyUI)
    SSM 搭建精美实用的管理系统
    SSM搭建一个后台管理系统
    mac下的夜神模拟器链接vscode
  • 原文地址:https://www.cnblogs.com/nidus/p/13943978.html
Copyright © 2011-2022 走看看