程序运行功能

时间:2018-11-07 03:59:31

标签: c

我对我的作业有疑问

  

编写一个名为second的函数,该函数以一个数组作为参数   正整数,也代表整数的大小   数组。该函数返回第二个最大整数的值   数组。如果数组中的最大整数重复,则   第二大整数也是最大的。例如,如果我们有   {1,2,3,4,5,5},第二大整数是   5.函数不应以任何方式更改数组的内容。您可以假定数组的大小至少为两个。

我所做的:

int second(const int arr[], int size)
{
    int num1,num2;
    int i;

    if(arr[0]>arr[1])
    {
        num1=arr[0];num2=arr[1];

    }
    else 
    {
        num1=arr[1];num2=arr[0];
    }

    for (i=2; i<size; i++)
    {
        if (arr[i]>num1)
        {
            num2=num1;
            num1=arr[i];
        }
        else if (arr[i] > num2)
        {
            num2=arr[i];
        }
    }

   return num2;
}

我不知道如何键入可以运行上述功能并显示整数'5'的程序

3 个答案:

答案 0 :(得分:0)

  

该函数不应以任何方式更改数组的内容。

使用临时array执行所有操作。只需将元素从旧的array复制到新的临时array

  

编写一个名为second的函数,该函数以一个数组作为参数   正整数,也代表整数的大小   数组

情况1:如果数组未排序
您可以sort个元素(升序)并返回second last元素。

情况2:如果数组已排序 只需返回second last元素即可。

有很多排序算法,例如quicksortmergesort,它们可以为您提供更好的运行时间,但如果不受时间复杂度的限制,您也可以使用bubble排序。

其他提示:

int second(const int arr[], int size)
{
  int temp[size]; //<-----use a temporary array as you're not allowed to modify the original array
   int i;
   for(i=0;i<size;i++)
         {
              //copy the elements
          }

       //sort the temp array in ascending order  

    return temp[size-2];  //<----return the second last elements       


}

答案 1 :(得分:0)

我不是在看您的功能second。我将把它留给您作为练习。

要运行此功能,您需要制作一个主程序,该程序将创建此数组并调用此函数。

#include <stdio.h>

int second(const int arr[], int size);

int main(void)
{
    int arr[] = {1,2,3,4,6,7};
    int N = sizeof(arr)/sizeof(arr[0]);

    printf ("%d ", second(arr, N));
}    

您可以在此处的代码下方添加您的代码并进行编译。

答案 2 :(得分:0)

您可以先遍历控件以找到第一个最高编号,然后再寻找第二个..如果遍历的结果找到与第二个最高编号相同的编号,则应打印该编号。.

int second(int array[],int n)
{
int num1,num2;
int pos=0;   //for  storing the position of first highest number
num1=array[0];
num2=array[1];
for(int i=0;i<n;i++)
{
if(num1<array[i])
num1=array[i]; pos=i;
}

for(i=0;i<n;i++)
{
if(num2<>array[i]&&i!=pos)
num2=array[i]
} 
return num2;
}