用c++求二维数组的最大子数组,进行单元测试
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用c++求二维数组的最大子数组,进行单元测试,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2509字,纯文字阅读大概需要4分钟。
内容图文
一.实验目的
1,以指定格式的文本文件形式输入数组。
2,数组由一维变为二维。
3,熟练使用git常用命令将作业签入代码版本控制平台。
4,给出单元测试/代码覆盖率的最终覆盖率的报告。
二.实验过程
实验主要分为两大部分,第一,解决算法问题,编写程序代码。第二,复审代码和完成代码测试计划。
1.编写代码
1)以文本文件的形式输入数组
首先,在D盘建一个txt文本文件,里面存放了目标二维数组,
然后,将文本文件内容读取出来,存到二维数组中,
再显示处理后的二维数组,
最后关闭文件。
实现代码如下:
#include <iostream>
#include <cstring>
#include <io.h>
#include <fstream>
using namespace std;
//txt文本必须是Row行,Col列存储的文本数据
#define readDataPath "D:\\1.txt"//txt文本的路径
#define Row 2
#define Col 3
int findmax(){
float a[Row][Col];
int i, j;
FILE* fp = fopen(readDataPath, "r"); //打开文件
if (fp == NULL)
{
printf("文件读取错误...");
return -1;
}
for (i = 0; i < Row; i++)
{
for (j = 0; j < Col; j++)
{
fscanf(fp, "%f", &a[i][j]);/*每次读取一个数,fscanf函数遇到空格或者换行结束*/
}
fscanf(fp, "\n");
}
cout<<"二维数组为:"<<endl;
for (i = 0; i < Row; i++)
{
for (j = 0; j < Col; j++)
{
cout<<a[i][j]<<'\0';
}
cout<<endl;
}
txt文件内容如下:
运行结果如下:
2)求二维数组的最大子数组
原理:
每列数据中第i行到第j行进行相加,这样得到一个列矩阵,a[1......n],这样就转化成一个一维整数数组中最大子数组的和,
通过求得循环不同第i行到第j行之间的值之和,最后找到最大值。
实现代码如下:
int sum[100]={0},max=0,result=a[0][0],m=0;
for(i=0;i<Row;i++)//确定子数组的最大上界(为第i行)
{
while(m+i<Row)//确定子数组有m+i行
{
//把子数组当成一维数组一样,求最大子数组的和
for(j=0;j<Col;j++)
{
sum[j]=sum[j]+a[m+i][j];
}
max=0;
for(j=0;j<Col;j++)
{
if(max+sum[j]>sum[j])
{
max=max+sum[j];
}
else
{
max=sum[j];
}
if(max>result)
{
result=max;
}
}
m++;//子数组的行数+1
}
m=0;
for(j=0;j<Col;j++)
{
sum[j]=0;
}
}
cout<<"最大子数组和为:"<<result<<endl;
fclose(fp);
return 0;
}
运行结果如图:
2.单元测试
1)先配置测试环境
过程如图:
2)测试
1.txt的内容:
1 2
4 6
期望结果:13
运行结果:
1.txt的内容:
2 -3 -5
8 6 -7
9 0 -8
期望结果:23
运行结果:
1.txt的内容:
-1 -2 -3
-4 -5 -6
-7 -8 -9
期望结果:-1
运行结果:
三.实验总结
本次实验收获颇多。
第一,通过查资料,了解并掌握了如何以指定格式的文本文件形式输入数组。
第二,明白了求二维数组的最大子数组的和的算法,及代码实现。
第三,学会了在vs2010上为单元测试安装环境,并进行单元测试。
第四,提升了变成能力和解决问题的能力。
内容总结
以上是互联网集市为您收集整理的用c++求二维数组的最大子数组,进行单元测试全部内容,希望文章能够帮你解决用c++求二维数组的最大子数组,进行单元测试所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。