簡體   English   中英

此 C 程序中的意外返回值

[英]Unexpected return value in this C program

我寫了一個 C 程序來查找數組中最大偶數和最小偶數索引的差異(這里 0 被認為是偶數,從測試用例來看,它肯定看起來不應該對數組進行排序) . 如果數組中有一個元素或該數組中沒有偶數,它將返回一個值或 No。

#include <math.h>
#include <stdio.h>



int main() {
  
    int n,small,big,a[50],b1,s1,diff;
    scanf("%d",&n);
    for(int i =0;i<n;i++){
        scanf("%d",&a[i]);
    }
    


    
    small = a[0];
    big = a[0];
    
    for (int i = 1; i < n; i++)
    {
        if (a[i] < small && a[i]%2 == 0)
        {
            small = a[i];
            s1 = i;
        }
        if (a[i] > big && a[i]%2 == 0)
        {
            big = a[i];
            b1 = i;
        }
    }
    diff = b1-s1;
    
    if(diff==0){
      printf("NO");
    }
    else{
      printf("%d",diff);
    }
    
    return 0;
}

當我作為輸入

4
120 0 4 7

它不返回 1。它返回 32657。我在這里不理解什么邏輯? 請幫我。

在此代碼段中

small = a[0];
big = a[0];

您還需要初始化s1b1

s1 = 0;
b1 = 0;

通常,您的方法是不正確的,因為 a[0] 可以是奇數,並且可以是數組中的最大或最小數字。

所以首先你需要在數組中找到第一個偶數,如果存在這樣的數字(例如在索引 i 處)然后寫

small = a[i];
big = a[i];
s1 = i;
b1 = i;

請注意,您實際上可以在程序中的任何位置包含 header <stdio.h> ,因為在第一次包含 header 之后,實際上不會包含所有其他頭文件。 但是不要那樣做,因為它會讓你的程序很奇怪。:)

所以在 main 中刪除這個指令

#include <stdio.h>

還有指令

#include <math.h>

是多余的,因為您的程序中沒有使用來自 header 的聲明。 您也可以刪除它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM