第二次作业——熟悉使用工具 Anthonyzk

| GIT地址|https://github.com/Anthony081105/YZK|
| ------ | ------ | ------ |
| GIT用户名| Anthony081105 |
| 学号后5位 |81105 |
| 作业链接 |https://www.cnblogs.com/pythonzk/p/11564366.html|

项目背景:

阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。作为程序员的阿超心想,做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。 他把老师的话翻译一下,就形成了这个软件的需求:程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。

项目的完成过程

1.配置环境

安装能进行编码,单元测试,效能分析等功能的工具VS2017 安装成功后,首次使用 VS 2017 还需要对其进行简单的配置,包括开发环境的主题风格。这里开发设置选择 C++即可,主题推荐深色主题。 以上是我查阅VS2017安装相关资料得到的结果,给我提供了VS2017的安装途径。

配置环境问题:

由于 VS 本身体积较大,推荐修改存储位置,将其安装在非系统盘目录。 ###2.克隆项目 从班级要求仓库地址Fork到自己GitHub的仓库中

安装将仓库内容拷贝到本地的工具Git

Git-windows版本下载地址:点击此处

下载安装完成后,新建一个文件夹来保存仓库中的文件,打开文件夹,在文件夹空白区域点击右键,选择Git Bash Here,输入git clone + 仓库的地址,可以直接复制下来,只能通过右键然后paste进行粘贴,输入完成后按回车就可以了

在完成上述操作后,可在当前目录下看到一个与仓库同名的文件夹Calculator ,这就是克隆到本地的项目。 注意,默认克隆的分支是 java,请使用 git checkout cplusplus 命令切换到 C++ 项目。 进入项目文件夹,新建一个文件夹,重命名为你的 Github 账号名。

配置过程

据了解,VS下载的节点是在普林斯顿大学,我和室友还开玩笑说,考研出国去普林斯顿大学就可以了,在明理楼用哪里的校园网下载,速度十分的慢,下了一天才下载了15%,随后我回寝室用EDU下载,终于解决了下载速度的问题,1小时就下载好了,但是兼容性的问题也困扰了我良久,东问西问,终于配置好了VS2017,但紧随其后,即使解决掉了代码编写的问题,编译环境出的bug却一环又一环,随后我也不得不放弃用VS2017书写,改为使用DevC++来编译此程序,下面代码运行结果我会详细说明。

代码设计

我使用的语言是C++,其代码思路是通过多个数组传值,同时控制需要生成的题目是否有乘除运算。是否有余数,并确定所有相关值的取值范围,虽然看起来有些繁琐,但是使用者使用的时候会感受到该程序的可操作性较好。当然,所有值的产生都归功于rand函数,虽然是基础库里面的基本函数,但是在随机生成的时候,rand函数功能的强大就体现出来了。再者,在这个程序中,使用者可以直接回答随机生成的四则运算算术题,无论回答正误,都会返回其结果,更进一步提高了其可操作性!程序代码如下:

using namespace std;

void main()
{
	int a0[1000], b0[1000], c0[1000], a1[1000], b1[1000], c1[1000], a2[1000], b2[1000], c2[1000], a3[1000], b3[1000], c3[1000], C[1000], a, b, c;
	int i, j, A0, A1, A2, A3, B0, B1, B2, B3;
	int num, line, k;
	int min, max, m;
	int CC, FS, YS;

	k = 0;
	A0 = 0; A1 = 0; A2 = 0; A3 = 0;
	B0 = 0; B1 = 0; B2 = 0; B3 = 0;
	cout << "四则运算" << endl;

	cout << "请依次输入输出算式数量和每行显示数量:" << endl;
	cin >> num >> line;

	cout << "请问是否要有乘除法?有请输入\"1\",无请输入\"0\"" << endl;
	cin >> CC;
	while (1)                             //判断输入是否合法
	{
		if (CC != 1 && CC != 0)
		{
			cout << "输入不合法,请重新输入\"1\"或\"0\":";
			cin >> CC;
		}
		else
			break;
	}

	cout << "请问是否要加减结果有负数?有请输入\"1\",无请输入\"0\"" << endl;
	cin >> FS;
	while (1)                             //判断输入是否合法
	{
		if (FS != 1 && FS != 0)
		{
			cout << "输入不合法,请重新输入\"1\"或\"0\":";
			cin >> FS;
		}
		else
			break;
	}

	cout << "请问是否要除法结果有余数?有请输入\"1\",无请输入\"0\"" << endl;
	cin >> YS;
	while (1)                             //判断输入是否合法
	{
		if (YS != 1 && YS != 0)
		{
			cout << "输入不合法,请重新输入\"1\"或\"0\":";
			cin >> YS;
		}
		else
			break;
	}

	cout << "请输入两个值确定算式中a,b的取值范围(请保证前一个值小于后一个值):" << endl;
	cin >> min >> max;
	while (1)                            //判断输入是否合法
	{
		if (min >= max)
		{
			cout << "输入不合法,请重新输入:";
			cin >> min >> max;
		}
		else
			break;
	}

	m = max - min + 1;
	for (i = 0; i < 1000; i++)
	{
		a0[i] = 0; b0[i] = 0;
		a1[i] = 0; b1[i] = 0;
		a2[i] = 0; b2[i] = 0;
		a3[i] = 0; b3[i] = 0;
	}
	for (i = 0;; i++)
	{
		a = min + rand() % m;
		b = min + rand() % m;
		c = rand() % 4;
		if (CC == 0)              //每当CC=0,就会抹去c=2,3的情况
		{
			if (c == 2 || c == 3)
				continue;
		}
		if (FS == 0)              //通过FS去除0和1,其结果小于0的情况
		{
			if (c == 0)
			{
				if (a + b < 0)
					continue;
			}
			else if (c == 1)
			{
				if (a - b < 0)
					continue;
			}
		}
		if (YS == 0)             //如果YS=0,且是除法,去除a,b相除有余数的情况
		{
			if (c == 3)
				if (0 != a % b)
					continue;
		}

		//将算式分为加、减、乘、除四组
		if (c == 0)                       //加法
		{
			for (j = 0; j <= A0; j++)
			{
				if (a == a0[j] && b == b0[j])
				{
					B0++; break;
				}
			}
			if (B0 > 0)
			{
				B0 = 0; continue;
			}
			else
			{
				a0[A0] = a;
				b0[A0] = b;
				c0[A0] = a + b;
				A0++;
			}
		}
		else if (c == 1)                   //减法
		{
			for (j = 0; j <= A1; j++)
			{
				if (a == a1[j] && b == b1[j])
				{
					B1++; break;
				}
			}
			if (B1 > 0)
			{
				B1 = 0; continue;
			}
			else
			{
				a1[A1] = a;
				b1[A1] = b;
				c1[A1] = a + b;
				A1++;
			}
		}
		else if (c == 2)                     //乘法
		{
			for (j = 0; j <= A2; j++)
			{
				if (a == a2[j] && b == b2[j])
				{
					B2++; break;
				}
			}
			if (B2 > 0)
			{
				B2 = 0; continue;
			}
			else
			{
				a2[A2] = a;
				b2[A2] = b;
				c2[A2] = a + b;
				A2++;
			}
		}
		else                               //除法
		{
			if (b == 0)
				continue;
			for (j = 0; j <= A3; j++)
			{
				if (a == a3[j] && b == b3[j])
				{
					B3++; break;
				}
			}
			if (B3 > 0)
			{
				B3 = 0; continue;
			}
			else
			{
				a3[A3] = a;
				b3[A3] = b;
				c3[A3] = a + b;
				A3++;
			}
		}
		if (num == A0 + A1 + A2 + A3)                //限制算式数量
			break;
	}
	//输出
	for (i = 0; i < A0; i++)                        // +
	{
		k++;
		if (a0[i] < 0)
			cout << "(" << a0[i] << ")";
		else
			cout << a0[i] << " ";
		cout << "+";
		if (b0[i] < 0)
			cout << "(" << b0[i] << ")";
		else
			cout << " " << b0[i] << " ";
		cout << "=";
		if (k % line == 0)
			cout << endl;
		else
			cout << "\t";
	}
	for (i = 0; i < A1; i++)                         // -
	{
		k++;
		if (a1[i] < 0)
			cout << "(" << a1[i] << ")";
		else
			cout << a1[i] << " ";
		cout << "-";
		if (b1[i] < 0)
			cout << "(" << b1[i] << ")";
		else
			cout << " " << b1[i] << " ";
		cout << "=";
		if (k % line == 0)
			cout << endl;
		else
			cout << "\t";
	}
	for (i = 0; i < A2; i++)                         // *
	{
		k++;
		if (a2[i] < 0)
			cout << "(" << a2[i] << ")";
		else
			cout << a2[i] << " ";
		cout << "*";
		if (b2[i] < 0)
			cout << "(" << b2[i] << ")";
		else
			cout << " " << b2[i] << " ";
		cout << "=";
		if (k % line == 0)
			cout << endl;
		else
			cout << "\t";
	}
	for (i = 0; i < A3; i++)                          // /
	{
		k++;
		if (a3[i] < 0)
			cout << "(" << a3[i] << ")";
		else
			cout << a3[i] << " ";
		cout << "/";
		if (b3[i] < 0)
			cout << "(" << b3[i] << ")";
		else
			cout << " " << b3[i] << " ";
		cout << "=";
		if (k % line == 0)
			cout << endl;
		else
			cout << "\t";
	}
	cout << "请在此输入各式的结果:" << endl;
	for (i = 0; i < num; i++)
		cin >> C[i];
	int t = 0, corr = 0;
	//判断输入结果的对错
	for (i = 0; i < A0; i++)
	{
		if (c0[i] == C[t])
		{
			t++; corr++;
		}
		else
		{
			t++;
			cout << "第" << t << "题答错!" << endl;
		}
	}
	for (i = 0; i < A1; i++)
	{
		if (c1[i] == C[t])
		{
			t++; corr++;
		}
		else
		{
			t++;
			cout << "第" << t << "题答错!" << endl;
		}
	}
	for (i = 0; i < A2; i++)
	{
		if (c2[i] == C[t])
		{
			t++; corr++;
		}
		else
		{
			t++;
			cout << "第" << t << "题答错!" << endl;
		}
	}
	for (i = 0; i < A3; i++)
	{
		if (c3[i] == C[t])
		{
			t++; corr++;
		}
		else
		{
			t++;
			cout << "第" << t << "题答错!" << endl;
		}
	}
	if (line == corr)
		cout << "恭喜你都答对了!!!!!!" << endl;

运行结果如下图
起初使用VS2017时,编译完成后,出现了这样的提示:提示我库的使用缺失。
再者,虽然解决了这个问题,可能是我配置支持语言的时候选漏了C++,虽然C++程序已经写好,又出现来这个提示:对于语言的不支持,让我觉得心态有点小炸裂。

但是时不我待,救急的使用了DevC++这个编译环境对四则运算程序进行调试运行,运行结果如下:
运行结果1:
这次调试感觉产生的值较大,因此作为随笔的提交,我运行了一次相对简单的结果2如下:

克隆项目及提交代码

克隆项目一知半解,都是按照以上链接做的,能力有限,大二的我还要继续努力,提高自己的知识面和技能值。

posted @ 2019-09-21 19:54  Anthonyzk  阅读(164)  评论(0编辑  收藏  举报