设计一个程序,让它能够返回一个整数数组最大子数的和,并能完成几项测试

实验人员:常啸帆,毕文强

实验要求:必须能处理1000个元素;

                  每个元素是int32类型的,出现子数组之和大于显示最大范围会出现什么情况;

                  输入一个整形数组,有正也有负;

                  数组中连续的一个或多个整数组成一个数组,每个子数组都必须有一个和;

                  求所有子数组和的最大值,要求时间复杂度为o(n)。
实验过程:在本次实验中,我们两人通过所学的c++知识来编写程序,在过程中我们发现了一下问题并逐步解决
                  在编写的过程中,首先会发现数组中少了一个元素,那是因为在循环时length写成了length-1,
           而且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("数组元素不能为空,请重新输入!\n");
                                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("请输入数组的个数:\n");
                                   scanf("%d",&n);   
                                      if(n>0)
                                     {
                                                   printf("请输入数组元素:\n");
                                                   for(i=0;i<n;i++)
                                                         {
                                                               scanf("%d",&a[i]);
                                                          }
                                                                 max=Largest(a,n);
                                                             printf("数组元素的最大值是:%d\n",max);
                                      }
                                       else
                                      {
                                                 printf("数组不能为空,请重新输入!\n");
                                                 goto in;       
                                              }
                                                     return 0;
                                     }
 
测试截图:

 

 

 

 
 
 
 
 
posted @ 2018-10-14 17:16  &#128557;&#128557;&#128557;&#128557;&#128557;  阅读(230)  评论(0编辑  收藏  举报