2017-04-13 98 views
-16
#include<stdio.h> 
#include<conio.h> 
# define N 10 
void main() 
{ 
    int i, j, n; 
    float median, a[N], t; 
    printf("Enter the number of items\n"); 
    scanf("%d",&n); 
    for (i=1; i<=n; i++) 
    scanf("%f",a[i]); 
    for (i=1; i<=n-1; i++) 
    { 
    for (j=1; j<n-i; j++) 
    { 
     if(a[j]<=a[j+1]) 
     { 
     t=a[j]; 
     a[j]=a[j+1] ; 
     a[j+1]=t; 
     } 
    } 
    else 
    { 
     continue; 
    } 
    } 

    if (n%2==0) 
    median=(a[n/2]+a[n/2+1])/2; 
    else 
    median=a[n/2+1]; 
    for (i=1; i<=n; i++); 
    printf("%f",a[i]); 
    printf("\n\nMedian is %f\n",median); 
} 

[嘗試得到的東西可用了這樣一個問題:]編譯器抱怨錯位的其他

在我整理上面的代碼我得到一個錯誤約一個錯位的else

[原文:]

是做空我得到錯位其他錯誤 PLC複製此代碼,並嘗試在Turbo C的一次,我希望你會糾正這個錯誤 只有一個ISSE是問題有

+0

我在標題中出現問題,所以我提出了錯誤的標題,所以我請所有朋友忽略標題並嘗試解決錯誤。謝謝 – prashant

+3

**第1點。**縮進。 ***請***。 –

+4

我拒絕相信人們實際上用這種方式編寫代碼,我假裝格式是複製粘貼的東西。沒有其他辦法可以生活。 – DeiDei

回答

-1

以C表示的數組開始於索引0並結束於索引n - 1。您的輸入循環開始在索引1處寫入,並在(可能不存在)索引n處結束。先解決這個問題。

的規範的方式來寫這樣的循環是

for (i = 0; i < n; i++) { /* ... */ } 
4

你的編譯器抱怨一個錯位的else,因爲,沒有不前ifelse

// ... 
for (j=1; j<n-i; j++) 
{ 
    if(a[j]<=a[j+1]) 
    { 
    // ... 
    } // END OF IF 
} // END OF FOR 
else 
{ 
    continue; 
} 
// ... 

中的else您的代碼不會在if之後的{ }塊之後,而是在for之後的那個循環之後。這是一個簡單的語法錯誤。

當代碼正確縮進時,這很簡單。隱藏您的代碼。

除此之外,還有其他一些問題(編者按中的問題的代碼最初是不縮進的。):

  • #include<conio.h>是完全未使用,將其刪除。 (從不考慮的方式使用它)
  • void main()這是不是爲main函數正確的簽名,嘗試int main()int main(int argc, char** argv)
  • for (i=1; i<=n; i++)陣列從0指數高達n - 1
  • scanf("%f",a[i]);這裏的第二個參數必須是一個指針,它指向float應存放:&(a[i])
  • for (i=1; i<=n; i++);結尾處的分號使這個循環什麼也不做是有用的。通常,在forif之後總是使用{ }塊。
0

一些算法的言論:

  • else { continue; }沒用
  • 第二個循環應該是(for j = i + 1 ; j < n ; j++)

一些實施備註:

  • 您應經常檢查scanf函數返回值(到知道有多少有效的輸入已被讀取):man 3 scanf
  • 恕我直言,你應該避免使用scanf,讀一行並通過strtol(man 3 strtol)傳遞它更安全:使用它,你可以控制是否完整的單詞已被轉換爲一個整數。
  • 您應該檢查是否元素(n)的數量不超過數組的長度更大(N
  • 如上面所提到之前,數組索引從0開始
  • 它更傳統的使用for (i = 0 ; i < n ; i++)而非for (i = 0 ; i <= n - 1 ; i++)風格循環。
相關問題