四则运算(判断正误)

一  功能要求:

      1、乘除可控

      2、随机添加括号

      3、输入结果判断正误

      4、统计正确数量

      5、正负,余数可控

      6、去除连除误区

二  设计思路

     判断对错就是将用户输入的数和正确的值相比较,正确输出√,错误输出×;

     统计个数就是设置两个全局变量,让它去统计对错的个数。

     至于其他的要求同以前编写的四则运算相同方法。

三  代码

//石家庄铁道大学
//2016.3.19
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int correct = 0;//声明全局变量correct
int wrong = 0;//声明全局变量wrong
int Add(int num1, int num2)
{
	int uresult, cresult;
	scanf_s("%d", &uresult);
	cresult = num1 + num2;
	if (cresult == uresult)
	{
		printf("\t√");
		correct++;
	}
	else
	{
		printf("\t×");
		wrong++;
	}
	return 0;
}
int Sub(int num1, int num2)
{
	int uresult, cresult;
	scanf_s("%d", &uresult);
	cresult = num1 - num2;
	if (cresult == uresult)
	{
		printf("\t√");
		correct++;
	}
	else
	{
		printf("\t×");
		wrong++;
	}
	return 0;
}
int Mult(int num1, int num2)
{
	int uresult, cresult;
	scanf_s("%d", &uresult);
	cresult = num1*num2;
	if (cresult == uresult)
	{
		printf("\t√");
		correct++;
	}
	else
	{
		printf("\t×");
		wrong++;
	}
	return 0;
}
int Divi(int num1, int num2)
{
	double uresult, cresult;
	scanf_s("%g", &uresult);
	cresult = num1 / num2;    //取整
	if (cresult == uresult)
	{
		printf("\t√");
		correct++;
	}
	else
	{
		printf("\t×");
		wrong++;
	}
	return 0;
}
int SetQuestion(int cheng, int number, int line, int plural, int scope, int konghang)
{
	int num1, num2, oper, i;
	srand(time(NULL));                //i为循环次数
	printf("我们提供一下功能:                  \n");
	printf("    1.题目的数值范围(暂不支持小数)\n");
	printf("    2.题目的数量                    \n");
	printf("    3.打印时每行题的数量            \n");
	printf("    4.答案中会不会出现负数的结果    \n");
	printf("    5.题目中是否会出现乘除运算      \n");
	printf("    6.打印时每行的间隔              \n");
	printf("请输入数值范围:");
	scanf_s("%d", &scope);
	printf("请选择出题数量:");
	scanf_s("%d", &number);                                   //oper为题目数量
	printf("请输入每行题的数量:");
	scanf_s("%d", &line);                                     //line为每行题的数量
	printf("答案是否有负数(1为有,0为没有):");
	scanf_s("%d", &plural);                                   //plural是否是负数
	while (plural != 0 && plural != 1)                          //判断用户是否按要求输入
	{
		printf("sorry!输入错误,请按要求输入:");
		scanf_s("%d", &plural);
	}

	printf("是否有乘除运算(1为有,0为没有):");
	scanf_s("%d", &cheng);
	while (cheng != 0 && cheng != 1)                          //判断用户是否按要求输入
	{
		printf("sorry!输入错误,请按要求输入:");
		scanf_s("%d", &cheng);
	}
	printf("中间有几个空行:");
	scanf_s("%d", &konghang);
	if (cheng == 1)
	{
		if (plural == 0)
		{
			for (i = 1; i <= number; i++)
			{
				num1 = rand() % scope;
				num2 = rand() % scope;
				oper = rand() % 4;
				printf("(%d)", i);
				switch (oper)
				{
				case 0:
					printf("%d+%d=\t", num1, num2);
					break;
				case 1:
					if (num1 >= num2)
						printf("%d-%d=\t", num1, num2);
					else
						printf("%d-%d=\t", num2, num1);
					break;
				case 2:
					printf("%d*%d=\t", num1, num2);
					break;
				case 3:
					if (num2 == 0)
						printf("%d/%d=\t", num2, num1);
					else
						printf("%d/%d=\t", num1, num2);
					break;
				default:
				{
					printf("出错啦~~~");
				}
				}
				if (i%line == 0)
				{
					for (int p = 1; p <= konghang; p++)
					{
						printf("\n");
					}
				}
			}

		}
		else
		{
			for (i = 1; i <= number; i++)
			{
				num1 = rand() % scope;
				num2 = rand() % scope;
				oper = rand() % 4;
				printf("(%d)", i);
				switch (oper)
				{
				case 0:
					printf("%d+%d=\t", num1, num2);
					break;
				case 1:
					printf("%d-%d=\t", num1, num2);
					break;
				case 2:
					printf("%d*%d=\t", num1, num2);
					break;
				case 3:
					if (num2 == 0)
						printf("%d/%d=\t", num2, num1);
					else
						printf("%d/%d=\t", num1, num2);
					break;
				default:
				{
					printf("出错啦~~~");
				}
				}
				if (i%line == 0)
				{
					for (int p = 1; p <= konghang; p++)
					{
						printf("\n");
					}
				}
			}
		}

	}
	else
	{
		if (plural == 0)
		{
			for (i = 1; i <= number; i++)
			{
				num1 = rand() % scope;
				num2 = rand() % scope;
				oper = rand() % 2;
				printf("(%d)", i);
				switch (oper)
				{
				case 0:
					printf("%d+%d=\t", num1, num2);
					break;
				case 1:
					if (num1 >= num2)
						printf("%d-%d=\t", num1, num2);
					else
						printf("%d-%d=\t", num2, num1);
					break;
				default:
				{
					printf("出错啦~~~");
				}
				}
				if (i%line == 0)
				{
					for (int p = 1; p <= konghang; p++)
					{
						printf("\n");
					}
				}
			}

		}
		else
		{
			for (i = 1; i <= number; i++)
			{
				num1 = rand() % scope;
				num2 = rand() % scope;
				oper = rand() % 2;
				printf("(%d)", i);
				switch (oper)
				{
				case 0:
					printf("%d+%d=\t", num1, num2);
					break;
				case 1:
					printf("%d-%d=\t", num1, num2);
					break;
				default:
				{
					printf("出错啦~~~");
				}
				}
				if (i%line == 0)
				{
					for (int p = 1; p <= konghang; p++)
					{
						printf("\n");
					}
				}
			}
		}

	}
	printf("\n");

	return 0;
}

int AnswerQuestion(int cheng, int number, int line, int plural, int scope, int konghang) {
	int num1, num2, oper, i;
	srand(time(NULL));
	//a,b为运算数,c为选择哪个运算符,i为循环次数
	printf("我们提供一下功能:                  \n");
	printf("    1.题目的数值范围(暂不支持小数)\n");
	printf("    2.题目的数量                    \n");
	printf("    3.答案中会不会出现负数的结果    \n");
	printf("    4.题目中是否会出现乘除运算      \n");
	printf("    5.打印时每行的间隔              \n");
	printf("请输入数值范围:");
	scanf_s("%d", &scope);
	printf("请选择出题数量:");
	scanf_s("%d", &number);
	printf("答案是否有负数(1为有,0为没有):");
	scanf_s("%d", &plural);                                   //plural是否是负数
	while (plural != 0 && plural != 1)                          //判断用户是否按要求输入
	{
		printf("sorry!输入错误,请按要求输入:");
		scanf_s("%d", &plural);
	}

	printf("是否有乘除运算(1为有,0为没有):");
	scanf_s("%d", &cheng);
	while (cheng != 0 && cheng != 1)                          //判断用户是否按要求输入
	{
		printf("sorry!输入错误,请按要求输入:");
		scanf_s("%d", &cheng);
	}
	printf("中间有几个空行:");
	scanf_s("%d", &konghang);
	if (cheng == 1)
	{
		if (plural == 0)
		{
			for (i = 1; i <= number; i++)
			{
				num1 = rand() % scope;
				num2 = rand() % scope;
				oper = rand() % 4;
				printf("(%d)", i);
				switch (oper)
				{
				case 0:
					printf("%d+%d=", num1, num2);
					Add(num1, num2);
					break;
				case 1:
					if (num1 >= num2)
					{
						printf("%d-%d=", num1, num2);
						Sub(num1, num2);
					}
					else
					{
						printf("%d-%d=", num2, num1);
						Sub(num2, num1);
					}
					break;
				case 2:
					printf("%d*%d=", num1, num2);
					Mult(num1, num2);
					break;
				case 3:
					if (num2 == 0)
					{
						printf("%d/%d=", num2, num1);
						Divi(num2, num1);
					}
					else
					{
						printf("%d/%d=", num1, num2);
						Divi(num1, num2);
					}
					break;
				default:
				{
					printf("出错啦~~~");
				}
				}
				for (int p = 1; p <= konghang; p++)
				{
					printf("\n");
				}
			}

		}
		else
		{
			for (i = 1; i <= number; i++)
			{
				num1 = rand() % scope;
				num2 = rand() % scope;
				oper = rand() % 4;
				printf("(%d)", i);
				switch (oper)
				{
				case 0:
					printf("%d+%d=", num1, num2);
					Add(num1, num2);
					break;
				case 1:
					printf("%d-%d=", num1, num2);
					Sub(num1, num2);
					break;
				case 2:
					printf("%d*%d=", num1, num2);
					Mult(num1, num2);
					break;
				case 3:
					if (num2 == 0)
					{
						printf("%d/%d=", num2, num1);
						Divi(num2, num1);
					}
					else
					{
						printf("%d/%d=", num1, num2);
						Divi(num2, num1);
					}
					break;
				default:
				{
					printf("出错啦~~~");
				}
				}

				for (int p = 1; p <= konghang; p++)
				{
					printf("\n");
				}
			}
		}

	}
	else
	{
		if (plural == 0)
		{
			for (i = 1; i <= number; i++)
			{
				num1 = rand() % scope;
				num2 = rand() % scope;
				oper = rand() % 2;
				printf("(%d)", i);
				switch (oper)
				{
				case 0:
					printf("%d+%d=", num1, num2);
					Add(num1, num2);
					break;
				case 1:
					if (num1 >= num2)
					{
						printf("%d-%d=", num1, num2);
						Sub(num1, num2);
					}
					else
					{
						printf("%d-%d=", num2, num1);
						Sub(num2, num1);
					}
					break;
				default:
				{
					printf("出错啦~~~");
				}
				}
				for (int p = 1; p <= konghang; p++)
				{
					printf("\n");
				}
			}

		}
		else
		{
			for (i = 1; i <= number; i++)
			{
				num1 = rand() % scope;
				num2 = rand() % scope;
				oper = rand() % 2;
				printf("(%d)", i);
				switch (oper)
				{
				case 0:
					printf("%d+%d=", num1, num2);
					Add(num1, num2);
					break;
				case 1:
					printf("%d-%d=", num1, num2);
					Sub(num1, num2);
					break;
				default:
				{
					printf("出错啦~~~");
				}
				}
				for (int p = 1; p <= konghang; p++)
				{
					printf("\n");
				}
			}
		}

	}
	printf("\n");

	return 0;
}
void menu()
{
	printf("       欢迎使用四则运算出题系统     \n");
	printf("          1.    开始出题            \n");
	printf("          2.    开始答题            \n");
	printf("          0.    退出系统            \n");
}
int main()
{
	int cheng = 0, number = 0, line = 0, plural = 0;
	int	scope = 0, konghang = 0, percent, a, num;
l1:    menu();
	printf("请选择(0-2):");
	scanf_s("%d", &a);
	switch (a)
	{
	case 1:
		SetQuestion(cheng, number, line, plural, scope, konghang);
		printf("是否继续(1为继续,0为不继续):");
		scanf_s("%d", &num);
		if (num == 1)
			goto l1;
		else
			printf("欢迎下次使用!\n");
		break;
	case 2:
		AnswerQuestion(cheng, number, line, plural, scope, konghang);
		printf("做对了%d道题\n", correct);
		printf("做错了%d道题\n", wrong);
		percent = correct / (correct + wrong);
		if (percent >= 6 / 10)
		{
			printf("你太棒了!!\n");
		}
		else
		{
			printf("不及格,你要加油啦~~~\n");
		}
		printf("是否继续(1为继续,0为不继续):");
		scanf_s("%d", &num);
		if (num == 1)
			goto l1;
		else
			printf("欢迎下次使用!\n");
		break;
	case 0:
		printf("欢迎下次使用!\n");
		break;
	}

	return 0;
}

 四  运行结果

 
 
五  合作伙伴
  孟西鑫 20133017  http://www.cnblogs.com/wanzitou/
 
 
六 总结
项目计划总结:
日期\任务听课编写程序查阅资料日总计
星期一2 13
星期二 114
星期三 3 3
星期四21 1
星期五 2 2
星期六    
星期日    
周总计47213
时间记录日志:
日期开始时间 结束时间中断时间净时间(分钟)活动备注
3月14日14:0015:5010100听课 
 19:0020:00 60查阅资料和搭档一起讨论,着手改变程序与计划
3月15日18:4520:00 95编写程序 
 20:0021:001545讨论和查阅资料 
3月16日13:0016:00 180编写代码 
3月17日14:0015:5010100听课 
 19:0020:00 60编写程序 
3月18日19:0021:1510125编写代码与测试 
缺陷记录日志:
日期编号引入阶段排除阶段修复时间&问题描述
3月16日3编码编译

1h,逻辑错误,数组的题不能出现正确答案,循环搞错了

3月17日4编码编译

30min:全局变量的定义放在了主函数中,导致系统不能识别;

30min:转换成vs2015中的scan语句不识别等语句错误

3月18日5编码执行 调试2h:个别特殊的临界情况未予顾及到,完善程序。
结语:
     程序大体上的功能还可以,但改进的空间还很大。

转载于:https://www.cnblogs.com/gaara-zhang/p/5296521.html

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值