• 体验结对开发的乐趣(3)--(一维数组求最大子数组的和溢出问题)


    结对人员:信1201-2班高扬、信1201-1班韩雪东

    一、设计思路

       对于大数溢出问题开始很迷茫,不大懂该干什么,思路匮乏。因为只要溢出这个数就不会被存储被改变,这样导致很难去判断溢出后该怎样做,但后来我们改变了一下思路,采用逆向思维,首先找到能存储的最大数,用它来减去将要运行的数,从而与即将要加的数比较,如果小了咋说明相加后会产生溢出,直接结束程序。

    二、源代码

     1 // ceshi.cpp : Defines the entry point for the console application.
     2 //作者:韩雪东,高扬
     3 //时间:2015/3/28
     4 
     5 //#include "stdafx.h"
     6 #include "stdio.h"
     7 #include "stdlib.h"
     8 #include "time.h"
     9 
    10 int shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件
    11 {
    12     int t,p;
    13     int max,sum;
    14     //缓存数组赋值
    15     int c[10];
    16     int v[10];
    17     for(t=szcdx-xhy-1;t<szcdx;t++)
    18     {
    19         c[t-szcdx+xhy+1]=m[t];
    20     }
    21     //循环
    22     for(t=xhy;t>=0;t--)
    23     {
    24         sum=0;
    25         for(p=0;p<=t;p++)
    26         {
    27             if(2147483647-sum<c[p])
    28             {
    29                 printf(" 数值过大 ");
    30                 system("PAUSE");
    31                 
    32             }
    33             sum=sum+c[p];
    34         }
    35         v[t]=sum;
    36         
    37         
    38         
    39     }
    40     //循环输出最大值
    41     max=v[0];
    42     for(t=0;t<xhy+1;t++)
    43     {
    44         if(max<=v[t])
    45         {
    46             max=v[t];
    47         }
    48         printf(" %d  ",v[t]);
    49     }
    50     
    51     return max;
    52 }
    53 
    54 int main(int argc, char* argv[])
    55 {
    56     srand(time(NULL));
    57     int a[10];
    58     for(int j=0;j<10;j++)
    59     {
    60         a[j]=rand()%100000+20000000;
    61     }
    62 
    63     int maxx[10];
    64     
    65     for(int i=9;i>=0;i--)
    66     {
    67         printf("包含数组中第%d个数在内的所有相邻子数组的和:",10-i);
    68         maxx[i]=shuchu(a,10,i);
    69         printf("
    %d
    
    ",maxx[i]);
    70     
    71     }
    72     int maxxx=maxx[0];
    73     for(i=0;i<10;i++)
    74     {
    75         if(maxxx<=maxx[i])
    76         {
    77             maxxx=maxx[i];
    78 
    79         }
    80     }
    81     printf("
    
    该数组的所有子数组的和的最大值:%d
    
    ",maxxx);
    82     return 0;
    83 }

    三、运行结果截图

    四、心得体会

         以前的测试程序并没有过多的考虑过大数溢出的问题,通过这次练习认识到了大数溢出给程序带来的严重性的问题,在以后的编写程序的时候一定会注意这一个问题。

    五、有图有真相

  • 相关阅读:
    《Linux内核设计与实现》读书笔记(二)- 内核开发的准备
    《Linux内核设计与实现》读书笔记(一)-内核简介
    Redis常用命令
    redis——学习之路五(简单的C#使用redis)
    Redis——学习之路四(初识主从配置)
    Redis——学习之路三(初识redis config配置)
    Redis——学习之路二(初识redis服务器命令)
    Redis——学习之路一(初识redis)
    SQL Server 查询分析器提供的所有快捷方式(快捷键)
    降维中的特征选择(转)
  • 原文地址:https://www.cnblogs.com/hanshidiguo/p/4377697.html
Copyright © 2020-2023  润新知