2020软件工程作业03

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494
这个作业的目标 实现一个命令行程序,不妨称之为Sudoku
作业正文 如下
其他参考文献 百度

 

 

 

 

 

 

 

 

1、Github项目地址

 https://github.com/qqxy799/20177602

2、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划  20  60
Estimate 估计这个任务需要多少时间  600  1000
Development 开发 360 540
Analysis 需求分析 (包括学习新技术) 60 240
Design Spec 生成设计文档 30 40 
Design Review 设计复审 20 30 
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 20 
Design 具体设计 40 60 
Coding 具体编码 60 150 
Code Review 代码复审 30 30 
Test 测试(自我测试,修改代码,提交修改) 30 30 
Reporting 报告 20 20 
Test Repor 测试报告 20 20 
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 30 
合计   1350 2290

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 3、思路描述

1、了解数独的规则,完成数独的算法

2、用cmd命令行的形式来读出写入文件

3、进行性能改进以及单元测试

4、代码说明

#define _CRT_SECURE_NO_DEPRECATE
#include <fstream>
#include<iostream>
#include<stdio.h>
using namespace std;
int main(int argc, char* argv[])
{
int m, n;
FILE* fp1;
FILE* fp2;
m = atoi(argv[2]);//命令行输入的第三个参数:宫格阶级
n = atoi(argv[4]);//命令行输入的第五个参数:待解答盘面数目
//以文本只读方式打开intput.txt
fp1 = fopen("input.txt", "r");
if (fp1 == NULL) //打开文件失败
return -1;
//打开output.txt,并立即关闭
fp2 = fopen("output.txt", "w");
if (fp2 == NULL) //打开文件失败
return -1;
fclose(fp2);//关闭文件
int i, j, k, num, w, p, q;
int sudoku[10][10];
int sign[4] = { 0 };//存放行列中已经出现的数
fp2 = fopen("output.txt", "a");
for (num = 0; num < n; num++)
{
//输入表盘的二维数组
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
fscanf(fp1, "%d", &sudoku[i][j]);
}
}
while (1)
{
w = 0;
//判断表盘中是否还有未填数的空格
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
if (sudoku[i][j] == 0)
{
w++;
}
}
}
if (w == 0)//表示表盘已经填完
{
break;
}
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
if (sudoku[i][j] != 0)
continue;
//若该空格为填入,则进行行列遍历,找到已出现的数
if (sudoku[i][j] == 0)
{
//行遍历
for (q = 0; q < 3; q++)
{
if (sudoku[i][q] != 0)
{
sign[sudoku[i][q]] = 1;
}
}
//列遍历
for (q = 0; q < 3; q++)
{
if (sudoku[q][j] != 0)
{
sign[sudoku[q][j]] = 1;
}
}
p = 0;//p用于记录该空格的候选数数量
for (q = 1; q < 4; q++)
{
if (sign[q] == 0)//表示该空格所在行列中均没有q
{
p++;
k = q;
}
}
}
if (p == 1)
{
sudoku[i][j] = k;
}
//初始化sign[]
for (q = 0; q < 4; q++)
{
sign[q] = 0;
}
}
}
}
//输出完整表盘
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
fprintf(fp2, "%d ", sudoku[i][j]);
if (j == 2)
fprintf(fp2, "\n");
}
}
fprintf(fp2, "\n");
}
return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5、调试以及输入输出

 

 

 

 6、总结

在众多大佬以及网络上的各种搜索资料的帮助下,终于是完成了这次作业。通过这次的作业,更是学到了不少东西,典型的就是github。希望能够在以后的学习中,更上一层楼。

<iframe src="https://free.modao.cc/app/9b2570508a478d7ab4dfa65e447133fc2010d7e9/embed/v2" width="500" height="1000" allowTransparency="true" frameborder="0"></iframe>

 

posted @ 2020-04-02 18:23  qqxy  阅读(146)  评论(1编辑  收藏  举报