我对我的作业有疑问
编写一个名为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'的程序
答案 0 :(得分:0)
该函数不应以任何方式更改数组的内容。
使用临时array
执行所有操作。只需将元素从旧的array
复制到新的临时array
。
编写一个名为second的函数,该函数以一个数组作为参数 正整数,也代表整数的大小 数组
情况1:如果数组未排序
您可以sort
个元素(升序)并返回second last
元素。
情况2:如果数组已排序
只需返回second last
元素即可。
有很多排序算法,例如quicksort
和mergesort
,它们可以为您提供更好的运行时间,但如果不受时间复杂度的限制,您也可以使用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;
}