[英]C Pointers Array 2nd Max
我正在嘗試從數組中找到第二個最大數。 出於某種原因,我一直將 output 歸零。
int main()
{
int i,j;
int arr[5],max=0,max2=0;
int *(ptr)=arr;
printf("Enter Array Elements: ");
for(i=0;i<5;i++)
{
scanf("%d",ptr+i);
}
for(j=0;j<5;j++){
if(max<*(ptr+j)&&max>max2)
{
max=*(ptr)+j;
}
else if(max2<*(ptr+j)&&max2<max)
{
max2=*(ptr)+j;
}
}
printf("\n2nd Maximum: %d",max2);
}
您的兩個條件都將max
與max2
進行比較。 由於它們都被初始化為0
,因此這些條件都不滿足。 相反,您需要首先將當前值( *(ptr+j)
)與最大數進行比較,如果不滿足該條件,則與第二個最大值進行比較:
for (j = 0; j < 5; j++) {
int curr = *(ptr+j);
if (curr >= max)
{
max2 = max;
max = curr;
}
else if(curr > max2)
{
max2 = curr;
}
}
由於將它們設置為0
,最初max
和max2
彼此相等。
int arr[5],max=0,max2=0;
所以這兩個 if 語句都沒有將它們的條件評估為 true
if(max<*(ptr+j)&&max>max2)
^^^^^^^^
//...
else if(max2<*(ptr+j)&&max2<max)
^^^^^^^^
因為max
不大於max2
。
此外,最初設置max
和max2
是一種錯誤的方法,因為用戶只能向數組元素輸入負值。 在這種情況下,您將得到錯誤的最大值。
如果您想找到兩個彼此不相等的最大值,除非數組包含所有彼此相等的元素,那么該方法並不像您想象的那樣微不足道。
首先,您需要在數組中找到兩個不相等的元素。 例如
int max = arr[0];
int max2 = arr[0];
i = 1;
while ( i < 5 && arr[i-1] == arr[i] ) ++i;
if ( i != 5 )
{
if ( max < arr[i] )
{
max = arr[i];
}
else
{
max2 = arr[i];
}
for ( ; i < 5; i++ )
{
if ( max < arr[i] )
{
max2 = max;
max = arr[i];
}
else if ( max2 < arr[i] )
{
max2 = arr[i];
}
}
}
if ( max != max2 )
{
printf("\n2nd Maximum: %d\n", max2 );
}
else
{
printf("\nAll elements are equal to %d\n", max2 );
}
你把它復雜化了。 在不使用指針的情況下先編寫它可能會有所幫助,這樣您就可以可視化正在發生的事情然后重寫它。
int main()
{
int arr[5],max=0,max2=0;
int *(ptr) = arr;
printf("Enter Array Elements: ");
for (int i=0;i<5;i++){
scanf("%d",ptr+i);
}
/*
max = arr[0];
for (int j=1;j<5;j++){
if(arr[j]>=max){
max2 = max;
max = arr[j];
}
}*/
max = *(ptr);
for(int j = 1;j<5;j++){
if(*(ptr+j)>=max){
max2 = max;
max = *(ptr+j);
}
}
printf("\n2nd Maximum: %d",max2);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.