第二次软件工程基础作业

熟悉使用工具

git地址  https://github.com/npcccc1/achaodnm.git
git用户名  npcccc1
博客链接  https://www.cnblogs.com/npc1158947015/
学号后5位  92324
作业链接  https://edu.cnblogs.com/campus/xnsy/Autumn2019SoftwareEngineeringFoundation/homework/7590

 

 

 

 

一、环境配置过程

之前就用过github注册挺容易,之前也下好了visual stdio2017,选好了c++组件不过都没留截图,git的安装也没遇到太大的问题。

克隆项目: 在文件类型转化的尝试上花了大量时间还没啥用

因为对于git了解太少的原因,在网上搜了几天也没看懂分支的知识,用git指令解决一个错又出来一个,所以把克隆过来的项目总是转化不成c++项目,一直停在默认的master分支,打开它的文件也是Java的。

二、代码思路

要求:

阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。

作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:

程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号 + -* 来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。

由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5 + 2 = 2.6 这样的算式。

练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。

当程序接收的参数为4时,以下为一个输出文件示例。

13 + 17 - 1 = 29
11 * 15 - 5 = 160
3 + 10 + 4 - 16 = 1
15÷5 + 3 - 2 = 4

思路:

#include "pch.h"                    //头文件
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <time.h>   
using namespace std;

  


char Operator() { int i; srand(time(NULL)); //需要生成随机的运算符与随机数 i = rand() % 4 + 1; //就先设出这两个函数 switch (i) { case 1: return '+'; case 2: return '-'; case 3: return '*'; case 4: return '/'; } } int Random() { int x; srand(time(NULL)); //看看是否为伪随机数 x = rand() % 100 + 1; return x; }

  

  先把主函数列上,方便之后的函数解说

int main()
{
	int a,b,c,d,judge,n,x;
	char op1,op2,op3;
	cout << "enter the number of calculations that you want to produce:"<<endl;
	cin >> n;                    //问要几个四则运算
	for (x = 1; x <= n; x++)
	{
		judge = rand() % 3 + 1;
		if (judge = 1)            //judge为运算符个数,1时再加1或2
		{
			judge = judge + rand() % 2 + 1;
		}
		if (judge == 2)           
		{
			a = Random();
			b = Random();
			c = Random();
			op1 = Operator();
			op2 = Operator();
			Calculation(op1, a, b);     //把两随机数与符号输出
			Calculation(op2, c);       //用到函数重载
			cout << endl;
		}
		if (judge == 3)
		{                                   //三个运算符需要四个随机数构成式子
			a = Random();
			b = Random();
			c = Random();
			d = Random();
			op1 = Operator();
			op2 = Operator();
			op3 = Operator();
			Calculation(op1, a, b);
			Calculation(op2, c);
			Calculation(op3, d);
			cout << endl;
		}
	}
}

  函数Calculation与Realmark(判断除法运算结果是否为小数)与全局变量int temporary:

  一开始想的是只写一个Calculation(op1, a, b)函数,在txt文件中把相邻的两个相同的数删去一个,后来发现还是重载加全局变量传递相同的数更为简单,便于实现

 

bool Realmark(int x,int y)             //两数相除余数为零则符合条件
{
	if (x%y || y % x != 0)
	{
		return 0;
	}
	else return 1;
} 
void Calculation(char a, int x, int y)
{
	if (a == '*'&&a == '+'&&a == '-')
	{                                          //加减乘直接输出
		cout << x << a << y;
	}
	if (a == '/')
	{
		do
		{
			if (Realmark(x, y))
			{
				cout << x << a << y;
				break;
			}
			else
			{
				x = Random();
				y = Random();
			}
		} while (Realmark(x, y));
	}
	temporary = y;              //每个式子开始的数+符+数可以调用次函数,并且把y赋值给全局变量
}                                   //方便下一个函数只输出符+数,与判断y与新的x若是除法会不会有余数

int temporary; //全局变量,写主函数之前即可


void Calculation(char a, int x) { if(a == '*'&&a=='+'&&a=='-') { cout << a << x; //加减乘即可直接输出 } if (a == '/') { do { if (Realmark(x, temporary)) { cout << a << x ; break; } else { x = Random(); //Realmark为0则要重新生成x,再比较新的x与tempoary } } while (Realmark(x, temporary)); } }

 

一个跑代码时特别坑的就是用了它步骤中的控制台项目,不知道是不是我没转化成c++项目,没拷贝src文件的原因,总是在第一行就开始报错:

符号符号已多次定义。The symbol symbol was defined more than once.

此错误后跟错误LNK1169

一个或多个多重定义的符号找到one or more multiply defined symbols found

生成失败,因为多个定义的一个或多个符号。The build failed due to multiple definitions of one or more symbols. 此错误之前错误LNK2005

实验多次,重新开一个空项目才不再报错。

三、 使用github克隆项目、提交代码

github真是慢的要死还全是英文看不懂

还是git简直日了 还是依旧不知道哪里出错

为啥照着教程做会给我出来warning出来找不到文件  解决了这个(自己没仔细看)又出来其他的,人都傻了。手动传的代码最后

四、感想

无聊好无聊一直找错误找到心态爆炸,完全没有什么成就感信了教程的邪一直在一些点打圈圈,啥都不会的感觉太不爽了。

猜你喜欢

转载自www.cnblogs.com/npc1158947015/p/11563408.html