软件工程第二次作业

GIT地址https://github.com/ppppppig/AchaoCalculator
GIT用户名ppppppig
学号后五位61123
博客地址https://www.cnblogs.com/ppppppig/
作业链接https://edu.cnblogs.com/campus/xnsy/Autumn2019SoftwareEngineeringFoundation/homework/7590

作业正文

 

1.环境的配置

按照part1的具体步骤完成了作业所需的环境的配置

 (1)git的下载

 (2)github的注册以及阿超计算机的复制

 

(3)编译器的下载:根据要求下载了所需要的编译器visual  studio 2017

 

 

 

在第一个作业要求中由于在作业链接中都有详细的步骤就基本没有遇到什么问题。

2.代码的编译及运行

(1)代码的要求

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

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

  • 程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。
  • 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。
  • 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。

 (2)   代码分析:根据第一个要求,我们可以通过生成随机数字和运算符,char getSignal()这个函数是随机生成运算符,int random()这个函数生成随机数字。再通过输入与计算机计算出答案作对比,判断是否回答正确。

(3)我的代码

只有一个运算符的代码
#include"pch.h" #include <stdio.h> #include <ctype.h> #include <time.h> #include <stdlib.h> #include <windows.h> #define IDNO_LENGTH 6 #define CALC_KIND 4 char getSignal(); int getResult(int, int, char); void takeTest(); void falsePrint(int); void correctPrint(int); //main函数 int main() { int n; printf("这次你想做多少题啊:"); scanf_s("%d", &n); while (n) { n--; takeTest(); } } //获取随机运算符 char getSignal() { char signal[CALC_KIND] = { '+','-','*','/' }; srand((unsigned)time(NULL)); return signal[rand() % 4]; } //获取随机数 int random(double start, double end) { return (int)(start + (end - start)*rand() / (RAND_MAX + 1.0)); } //运算 int getResult(int num1, int num2, char signal) { int res; switch (signal) { case '+': res = num1 + num2; break; case '-': res = num1 - num2; break; case '*': res = num1 * num2; break; case '/': res = num1 / num2; break; default: res = 0; printf("运算符不符合规则\n"); } return res; } //列出题目 void takeTest() { int giveRes; int num1; int num2; char signal; srand((unsigned)time(NULL)); signal = getSignal(); num1 = random(0, 100); num2 = random(1, 100); if (signal == '-') { if (num1 < num2) { int temp; temp = num1; num1 = num2; num2 = temp; } } if (signal == '/') { if (num2 == 0) { int temp; temp = num1; num1 = num2; num2 = temp; } } printf("%d%c%d=", num1, signal, num2); scanf_s("%d", &giveRes); fflush(stdin); if (getResult(num1, num2, signal) == giveRes) { ; printf("Correct!\n"); } else { printf("Failure!"); printf("正确答案:%d\n", getResult(num1, num2, signal)); } }


有两个运算符的代码

#include "pch.h"
#include <iostream>

 
  

#include <stdio.h>

 
  

#include <ctype.h>

 
  

#include <time.h>

 
  

#include <stdlib.h>

 
  

#include <windows.h>

 
  

#define IDNO_LENGTH 6

 
  

#define CALC_KIND 4

 
  

 

 
  

char getSignal();

 
  

int getResult(int, int, char);

 
  

void takeTest();

 
  

void falsePrint(int);

 
  

void correctPrint(int);

 
  


//获取随机运算符: '+','-','*','/'从中选择一个;
char getSignal()

 
  

{

 
  

char signal[CALC_KIND] = { '+','-','*','/' };

 
  

srand((unsigned)time(NULL));

 
  

return signal[rand() % 4];

 
  

}

 
  

//获取随机数

 
  

int random(double start, double end)

 
  

{

 
  

return (int)(start + (end - start)*rand() / (RAND_MAX + 1.0));

 
  

}

 
  


//运算

 
  

int getResult(int num1, int num2, char signal)

 
  

{

 
  

int res;

 
  

switch (signal)

 
  

{

 
  

case '+':

 
  

res = num1 + num2; break;

 
  

case '-':

 
  

res = num1 - num2; break;

 
  

case '*':

 
  

res = num1 * num2; break;

 
  

case '/':

 
  

res = num1 / num2; break;

 
  

default:

 
  

res = 0;

 
  

printf("运算符不符合规则\n");

 
  

}

 
  

return res;

 
  

}

 
  

//列出题目只有一个运算符的算术

 
  

void takeTest1()

 
  

{

 
  

int giveRes;

 
  

int num1;

 
  

int num2;

 
  

char signal;

 
  


srand((unsigned)time(NULL));

 
  

signal = getSignal();

 
  

num1 = random(0, 100);

 
  

num2 = random(1, 100);

 
  

 

 
  

if (signal == '-')

 
  

{

 
  

if (num1 < num2)

 
  

{

 
  

int temp;

 
  

temp = num1;

 
  

num1 = num2;

 
  

num2 = temp;

 
  

}

 
  

}

 
  

if (signal == '/')

 
  

{

 
  

if (num2 == 0)

 
  

{

 
  

int temp;

 
  

temp = num1;

 
  

num1 = num2;

 
  

num2 = temp;

 
  

}

 
  

}

 
  

printf("%d%c%d=", num1, signal, num2);

 
  

scanf_s("%d", &giveRes);

 
  

fflush(stdin);

 
  

 

 
  

if (getResult(num1, num2, signal) == giveRes)

 
  

{
printf("Correct!\n");

 
  


}

 
  

else

 
  

{

 
  


printf("Failure!");

 
  

printf("正确答案:%d\n", getResult(num1, num2, signal));

 
  

}

 
  

}

 
  

 

 
  

//列出题目有两个运算符的算术
int getResult2(int num1, int num2, int num3, char signal1, char signal2)

 
  

{

 
  

int res1, res2, k;
if (signal1 == '+'&&signal2 == '+')
k = 1;
if (signal1 == '+'&&signal2 == '-')
k = 2;
if (signal1 == '+'&&signal2 == '*')
k = 3;
if (signal1 == '+'&&signal2 == '/')
k = 4;
if (signal1 == '-'&&signal2 == '+')
k = 5;
if (signal1 == '-'&&signal2 == '-')
k = 6;
if (signal1 == '-'&&signal2 == '*') k = 7;
if (signal1 == '-'&&signal2 == '/') k = 8;
if (signal1 == '*'&&signal2 == '+') k = 9;
if (signal1 == '*'&&signal2 == '-')k = 10;
if (signal1 == '*'&&signal2 == '*')k = 11;
if (signal1 == '*'&&signal2 == '/')k = 12;
if (signal1 == '/'&&signal2 == '+')k = 13;
if (signal1 == '/'&&signal2 == '-')k = 14;
if (signal1 == '/'&&signal2 == '*')k = 15;
if (signal1 == '/'&&signal2 == '/')k = 16;

 
  

switch (k)

 
  

{

 
  

case 1:
{
res1 = num1 + num2;
res2 = res1 + num3;
break;
}
case 2:
{
res1 = num1 + num2;
res2 = res1 - num3;
break;
}
case 3:
{
res1 = num2 * num3;
res2 = res1 + num1;
break;
}
case 4:
{
res1 = num2 / num3;
res2 = res1 + num1;
break;
}
case 5:
{
res1 = num1 - num2;
res2 = res1 + num3;
break;
}
case 6:
{
res1 = num1 - num2;
res2 = res1 - num3;
break;
}
case 7:
{
res1 = num2 * num3;
res2 = num1 - res1;
break;
}
case 8:
{
res1 = num2 / num3;
res2 = num1 - res1;
break;
}
case 9:
{
res1 = num1 * num2;
res2 = res1 + num3;
break;
}
case 10:
{
res1 = num1 * num2;
res2 = res1 - num3;
break;
}
case 11:
{
res1 = num1 * num2;
res2 = res1 * num3;
break;
}
case 12:
{
res1 = num1 * num2;
res2 = res1 / num3;
break;
}
case 13:
{
res1 = num1 / num2;
res2 = res1 + num3;
break;
}
case 14:
{
res1 = num1 / num2;
res2 = res1 - num3;
break;
}
case 15:
{
res1 = num1 / num2;
res2 = res1 * num3;
break;
}
case 16:
{
res1 = num1 / num2;
res2 = res1 / num3;
break;
}

 
  

default:

 
  

res2 = 0;

 
  

printf("运算符不符合规则\n");

 
  

}

 
  

return res2;

 
  

}

 
  

void takeTest2()

 
  

{

 
  

int giveRes2;
int num1;

 
  

int num2;

 
  

int num3;

 
  

char signal1, signal2;

 
  


srand((unsigned)time(NULL));

 
  

signal1 = getSignal();
signal2 = getSignal();

 
  

num1 = random(0, 100);
num2 = random(0, 100);
num3 = random(0, 100);
int a = getResult(num1, num2, signal1);

 
  

 

 
  


if (signal1 == '-')

 
  

{

 
  

if (num1 < num2)

 
  

{

 
  

int temp;

 
  

temp = num1;

 
  

num1 = num2;

 
  

num2 = temp;

 
  

}

 
  

}
if (signal2 == '-')

 
  

{
a = getResult(num1, num2, signal1);
if (a < num3)

 
  

{

 
  

num3 = random(0, 100);
}

 
  

}

 
  

if (signal1 == '/')

 
  

{

 
  

if (num2 == 0)

 
  

{

 
  

int temp;

 
  

temp = num1;

 
  

num1 = num2;

 
  

num2 = temp;

 
  

}

 
  

}
if (signal2 == '/')

 
  

{

 
  

if (num3 == 0)

 
  

{

 
  

num3 = random(0, 100);

 
  

}

 
  

}

 
  

printf("%d%c%d%c%d=", num1, signal1, num2, signal2, num2);

 
  

scanf_s("%d", &giveRes2);

 
  

fflush(stdin);

 
  


if (getResult2(num1, num2, num3, signal1, signal2) == giveRes2)

 
  

{
printf("Correct!\n");

 
  


}

 
  

else

 
  

{

 
  


printf("Failure!");

 
  

printf("正确答案:%d\n", getResult2(num1, num2, num3, signal1, signal2));

 
  

}

 
  

}

 
  

 

 
  

int main()
{
int n, i, m;
printf ("这次你想做多少道题目:");
scanf_s("%d ",&n);
for (i = 0; i++; i <= n)
{
m = random(1, 2);
switch (m)
{
case 1:takeTest1(); break;
case 2:takeTest2(); break;
}

 
  


}

 

 

 (4)

 

 

 

 

 

 3.感想

 在这次作业中虽然对于github的使用非常吃力,但是通过和同学的共同学习,克服了很多难点。通过Git的安装和使用,我了解到很多关于Git命令行的知识,通过简易的命令,就可将我们所写的代码放到Github平台上。GitHub记录了我们所有改动后的代码。感觉github的作用还是非常大,非常实用。

 

转载于:https://www.cnblogs.com/ppppppig/p/11565588.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值