• 返回整型数组子数组和的最大值


             结对组员:刘静(20092532)

                           解凤娇(20112878)

                           王洪叶(20112886)

            项目:定义一个整型数组,返回该数组中子数组和的最大值!

            从键盘接收到数组的数据之后,调用最大值函数 maxSum(int arr[],int length),求子函数的最大值。

            下面是我们的分析过程:

                                     

            要想获得子函数最大值,首先进行数组的遍历,在遍历起初,对最大值进行初始化为数组的第一个元素,每次遍历,求得该子数组的和,并将此和与最大值进行比较,若小于

    最大值,则进行下一次的遍历,直到结束。此处用到三个for循环,来进行次数的控制。第一个 for(i = 0; i <length; i++),用来完成所有数组的循环,第二个for(j = i; j

    <length; j++)用来表示从第几个元素开始,寻找子数组,第三个 for( k = i; k <= j; k++) ,用来获取每个子数组的和,等到遍历完全结束,返回最大值输出。

           测试数据:

           (1)、输入数组元素:3 6 2 8 6

                     应得结果:25

           (2)、输入数组元素:-2 7 9 6 3

                     应得结果:25

           (3)、输入数组元素:-4 -5 -9 -5 -3

                     应得结果:-3

           (4)、输入数组元素:1 -2 3 10 -4 7 2 -5

                     应得结果:18

    //对于一个整型数组,求其最大子数组和
    //解凤娇、王洪叶、刘静共同完成
    //2014.03.10
    #include<stdio.h>
    #include<stdlib.h>
    #define N 1000
    /******获取最大值子函数********/
    int maxSum(int arr[],int length)
    { 
        
        int i;
        int j;
        int k;
        int max= arr[0]; //最大值初始化
        int sum=0; //每次遍历的和初始化为0    
        if(arr==NULL||length<=0)//异常捕捉,数组为空的错误
        {
            printf("没有可执行数据!");
        }
        for(i = 0; i <length; i++)//循环遍历数组元素
        {  
            for(j = i; j <length; j++)//判断从第几个元素开始遍历
            {  
                for( k = i; k <= j; k++) 
                {  
                    sum += arr[k]; //求和
                }  
                if(sum > max)//与最大值进行比较
                {
                    max = sum;
                }
                sum=0; 
            }  
        }  
        return max; 
    }   
    void main()
    {
        int a[N];
        int num;
        int i;
        int k=1;
        do
        {
            printf("输入数组个数:
    ");//初始化数组个数
            scanf("%d",&num);
            printf("输入%d个数,以空格区分:
    ",num);//数组元素初始化
            for(i=0;i<num;i++)
            {
                scanf("%d",&a[i]);
            }
            printf("最大子数组的和为:%d",maxSum(a,num));//调用子函数,返回最大值
            printf("
    
    ");
            printf(" 1、继续   0、退出
    ");
            scanf("%d",&k);
        }while(k!=0);  
    }

    实验结果截图:

  • 相关阅读:
    《深入浅出MFC》第八章 Document-View深入探讨
    《深入浅出MFC》第九章 消息映射与命令传递
    C++ Primer 第十五章 面向对象程序设计
    《深入浅出MFC》第十四章 多线程程序设计
    《C++ Primer》第十八章 用于大型程序的工具
    liunx 配置ftp
    Linux中apche配置
    liunx 安装mysql
    liunx 安装jdk
    mysql
  • 原文地址:https://www.cnblogs.com/xiefengjiao/p/3592032.html
Copyright © 2020-2023  润新知