ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

四则运算题目生成程序

2020-11-08 17:33:11  阅读:384  来源: 互联网

标签:题目 int 四则运算 生成 printf y1 y2 z1 z2


目录

一、作业信息

博客班级 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("四则运算题目生成程序\n");
	printf("输入要生成的题目类型\n");
	printf("1.加法算法(整数)\n");
	printf("2.减法算法(整数)\n");
	printf("3.乘法算法(整数)\n");
	printf("4.除法算法(整数)\n");
	printf("5.加法算法(真分数)\n");
	printf("6.减法算法(真分数)\n");
	printf("7.乘法算法(真分数)\n");
	printf("8.除法算法(真分数)\n");
	printf("0.退出\n");
	printf("请输入0——8\n");
}

最大公约数

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("答案正确。\n");
			G += 1;
		}
		else
			printf("答案错误,正确答案为%d\n", 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("答案正确。\n");
			G += 1;
		}
		else
			printf("答案错误,正确答案为%d\n", 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("答案正确。\n");
			G += 1;
		}
		else
			printf("答案错误,正确答案为%d\n", 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("答案正确。\n");
			G += 1;
		}
		else
			printf("答案错误,正确答案为%d\n", 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("答案正确。\n");
			G += 1;
		}
		else
			printf("答案错误,正确答案为%d/%d\n",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("答案正确。\n");
			G += 1;
		}
		else
			printf("答案错误,正确答案为%d/%d\n", 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("答案正确。\n");
			G += 1;
		}
		else
			printf("答案错误,正确答案为%d/%d\n", 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("答案正确。\n");
			G += 1;
		}
		else
			printf("答案错误,正确答案为%d/%d\n", 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("\n最后得分为:%d\n\n", 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、个人小结

经过这次编程练习,发现了许多的不足之处,编程能力有待提高,改错能力也有待提高。争取在这几次的编程练习中大幅度提高编程能力。

标签:题目,int,四则运算,生成,printf,y1,y2,z1,z2
来源: https://www.cnblogs.com/nidus/p/13943978.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有