设计一个程序,让它能够返回一个整数数组最大子数的和,并能完成几项测试
Posted supremex
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计一个程序,让它能够返回一个整数数组最大子数的和,并能完成几项测试相关的知识,希望对你有一定的参考价值。
实验人员:常啸帆,毕文强
实验要求:必须能处理1000个元素;
每个元素是int32类型的,出现子数组之和大于显示最大范围会出现什么情况;
输入一个整形数组,有正也有负;
数组中连续的一个或多个整数组成一个数组,每个子数组都必须有一个和;
求所有子数组和的最大值,要求时间复杂度为o(n)。
实验过程:在本次实验中,我们两人通过所学的c++知识来编写程序,在过程中我们发现了一下问题并逐步解决
每个元素是int32类型的,出现子数组之和大于显示最大范围会出现什么情况;
输入一个整形数组,有正也有负;
数组中连续的一个或多个整数组成一个数组,每个子数组都必须有一个和;
求所有子数组和的最大值,要求时间复杂度为o(n)。
实验过程:在本次实验中,我们两人通过所学的c++知识来编写程序,在过程中我们发现了一下问题并逐步解决
在编写的过程中,首先会发现数组中少了一个元素,那是因为在循环时length写成了length-1,
而且max没有初始化,如果初始化为0,那么都是负数时结果为0,这个结果是错误的,原因在于负数都比0小,
解决方法就是max初始化为数组第一个元素的值。并且在测试时,针对数组为空抛出异常,进行处理。
而且max没有初始化,如果初始化为0,那么都是负数时结果为0,这个结果是错误的,原因在于负数都比0小,
解决方法就是max初始化为数组第一个元素的值。并且在测试时,针对数组为空抛出异常,进行处理。
实验代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Largest(int list[],int length)
{
int i;
int max;
max=list[0];
if(list==NULL||length==0)
{
printf("数组元素不能为空,请重新输入! ");
return 0;
}
else
{
for(i=0;i<length;i++)
{
if(list[i]>max)
{
max=list[i];
}
}
return max;
}
}
int main()
{
int max;
int i;
int n;
int *a;
char ch;
a=(int*)malloc(n*sizeof(int));
in: printf("请输入数组的个数: ");
scanf("%d",&n);
if(n>0)
{
printf("请输入数组元素: ");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
max=Largest(a,n);
printf("数组元素的最大值是:%d ",max);
}
else
{
printf("数组不能为空,请重新输入! ");
goto in;
}
return 0;
}
#include<stdlib.h>
#include<string.h>
int Largest(int list[],int length)
{
int i;
int max;
max=list[0];
if(list==NULL||length==0)
{
printf("数组元素不能为空,请重新输入! ");
return 0;
}
else
{
for(i=0;i<length;i++)
{
if(list[i]>max)
{
max=list[i];
}
}
return max;
}
}
int main()
{
int max;
int i;
int n;
int *a;
char ch;
a=(int*)malloc(n*sizeof(int));
in: printf("请输入数组的个数: ");
scanf("%d",&n);
if(n>0)
{
printf("请输入数组元素: ");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
max=Largest(a,n);
printf("数组元素的最大值是:%d ",max);
}
else
{
printf("数组不能为空,请重新输入! ");
goto in;
}
return 0;
}
测试截图:
以上是关于设计一个程序,让它能够返回一个整数数组最大子数的和,并能完成几项测试的主要内容,如果未能解决你的问题,请参考以下文章