2014-03-20 4 views
0

이 코드를 작성했습니다. 버그가 많습니다. 어떻게 입력했는지 순서를 알고 싶습니다. 그런 다음 거품 뽑기로 정렬합니다. 그리고 나서 최소값과 최대 값을 구합니다.이 프로그램은 나에게 항상 같은 최소값과 최대 값을줍니다. 도와주세요. Thx;)최소 및 최대 C 오류

#include<stdio.h> 
#include<stdlib.h> 
#define N 10 
int main() 
{ 
int eingabe[N],mini,maxi,i,temp,j; 
float medium,ds; 
{ 
    printf("Bitte 10 Werte eingeben!"); 
    for(i=0;i<N;i++) 
    { 
     scanf("%i",&eingabe[i]); 
    } 
    printf("Die eingegebenen Werte der Eingabereihenfolge nach:"); 
    for(i=0;i<N;i++) 
    { 
     printf("\n%i",eingabe[i]); 
    } 
    for(j=0;j<N-1;j++) 
     for(i=0;i<N-1-j;i++) 
     { 
      if (eingabe[i]>eingabe[i+1])//Bubblesort 

      { 
       temp=eingabe[i]; 
       eingabe[i]=eingabe[i+1];//Tausch der Variablen 
       eingabe[i+1]=temp; 
      } 



     } 
    printf("Sortierte Werte(min to max):"); 
    for(i=0;i<N;i++) 
    { 
     printf("\n%i",eingabe[i]); 
    } 
    mini=eingabe[0]; 
    maxi=eingabe[0]; 
    for(i=0;i<N;i++) 
    { 
     if(maxi<eingabe[i]) 
     { 
      maxi=eingabe[i]; 
     } 
     if (eingabe[i]<mini) 
     { 
      mini=eingabe[i]; 
     } 
    printf("\nDer Minimalwert ist: %i",mini); 
    printf("\nDer Maximalwert ist: %i",maxi); 
    for(i=0;i<N;i++) 
    { 
     medium=medium+eingabe[i]; 
    } 
    ds=medium/2; 
    printf("\nDer Durchschnitt betraegt: %f",ds); 

    } 



} 

return 0; }

+0

변수'mini'와'에

for(i=0;i<N;i++) { if(maxi<eingabe[i]) { maxi=eingabe[i]; } if (eingabe[i]<mini) { mini=eingabe[i]; } printf("\nDer Minimalwert ist: %i",mini); printf("\nDer Maximalwert ist: %i",maxi); 

변화를 값 maxi'는 초기화되므로 아무 것도 테스트하지 않습니다. 위험 해! – user3018144

+0

* 초기화되지 않았습니까? [i + 1] 대신에 – Oerd

답변

0
if(maxi<eingabe[i]) 
     { 
      maxi=eingabe[i]; 
     } 
     if (eingabe[i]<mini) 
     { 
      mini=eingabe[i]; 
     } 
여기

maximini 그래서 제 1 비교 괜찮을되지 초기화되지 않은 것이다. 그 변수를 초기화하십시오.
minimaxi부터 eingabe[0]까지 bubble sort 코드는 완료되지 않았습니다.

for(i=0;i<N;i++) 
     { 
      if (eingabe[i]>eingabe[i+1]) 

      { 
       temp=eingabe[i]; 
       eingabe[i]=eingabe[i+1]; 
       eingabe[i+1]=temp; 
      } 

     } 

루프 용으로 2 개가 있어야합니다. for 루프는 배열을 통해 하나만 실행한다는 것을 의미합니다. 배열을 정렬하지 않습니다. 루프는 코드의이 부분에

for(j=0;j<N-1;j++) 
for(i=0;i<N-1-j;i++) 
{ 
    //write the if statement 

} 

난 당신이 분 점점 생각해야하며, 최대는

mini=eingabe[0]; 
maxi=eingabe[0]; 
for(i=0;i<N;i++) 
    { 
     if(maxi<eingabe[i]) 
     { 
      maxi=eingabe[i]; 
     } 
     if (eingabe[i]<mini) 
     { 
      mini=eingabe[i]; 
     } 
    } 
    printf("\nDer Minimalwert ist: %i",mini); 
    printf("\nDer Maximalwert ist: %i",maxi); 
+0

상단의 int 라인에서 초기화됩니다. 내가 어디에서 그들을 활성화해야합니까? – user3336852

+0

@ user3336852 첫 줄에는 * 정의되어 있지만 어떤 값으로도 초기화되지 않았습니다. 'int i;'는 어떤 특정한 값으로'i'를 초기화하지 않습니다. –

+0

@ user3336852 eingabe [0] – LearningC

1
eingabe[i]=eingabe[i+1]; 
        ↑ 

eingable 크기 N이다. 그리고 C의 배열은 0 기반의이므로 인덱스는 0에서 N - 1까지 실행됩니다.
마지막 반복에서 프로그램은 사용할 수없는 n eingabe[N] 값을 얻으려고 시도하므로 충돌합니다.

또한 minimaxi초기화되지이며 쓰레기 값, 프로그램이 보증되지 동작을 포함하고 있습니다.

1
for(i=0;i<N;i++) 
{ 
    if (eingabe[i]>eingabe[i+1]) 
    { 
     temp=eingabe[i]; 
     eingabe[i]=eingabe[i+1]; 
     eingabe[i+1]=temp; 
    } 
} 

이 단편에서는 배열의 범위를 벗어나 액세스하고 있습니다. N = 10, 즉 난 9 내가 1 10 + 될 때, 배열 크기이지만, 10 인덱스를 액세스하여 정의되지 않은 동작을

+0

[i-1]? – user3336852

+0

@ user3336852 아니요, 'for> 루프가'N> 0 '이라는 것을 확인한 후에 for (i = 0; i