2016-07-03 3 views
3

안녕하세요 여러분, 저는 10 개의 요소 배열에서 평균을 찾는 프로그램을 실행할 때마다 그렇게합니다. 나는 약간 다른 결과를 얻는다. 왜 그런가?C에서 다른 출력을주는 배열?

여기 내 코드입니다 :

#include "stdio.h" 

int main() 
{ 
float array[10]; 

for (int n=0; n<10;n++) 
{ 
    array[n] = n * 4.76; 
    printf("array[%i] = %.4f\n",n,array[n]); 
} 

float total; 
for (int n=0; n<10; n++) 
{ 
    total = total + array[n]; 
} 

printf("Average: %.4f\n", total/10); 
return 0; 
} 

및 일부 샘플 결과는 다음과 같습니다 C에서 변수를 선언 할 때,이 기본값으로 초기화하고 있는지 확인

array[0] = 0.0000 
array[1] = 4.7600 
array[2] = 9.5200 
array[3] = 14.2800 
array[4] = 19.0400 
array[5] = 23.8000 
array[6] = 28.5600 
array[7] = 33.3200 
array[8] = 38.0800 
array[9] = 42.8400 
Average: 21.2598 

array[0] = 0.0000 
array[1] = 4.7600 
array[2] = 9.5200 
array[3] = 14.2800 
array[4] = 19.0400 
array[5] = 23.8000 
array[6] = 28.5600 
array[7] = 33.3200 
array[8] = 38.0800 
array[9] = 42.8400 
Average: 21.2826 
+7

힌트 : 두 번째 for 루프 바로 전에 total에 포함 된 값은 무엇입니까? – immibis

+0

int total = 0; 너는 천재 야. 고맙습니다. 처음 값이 없기 때문에 난수가 생성 되었습니까? – Gregborrelly

+1

int로 만들면 정수 만 저장할 수 있습니다. – immibis

답변

7

. 스택에 할당 된 변수는 일반적으로 기본값으로 초기화되지 않고 오히려 정크로 초기화됩니다.

그래서, 요약을 시작하기 전에,

float total = 0.0f; 

로 변수를 초기화하면 같은 대답을 할 때마다 받아야합니다.

+0

이것이 사실 인 이유를 알고 있습니까? 이 임의의 숫자는 어디서 오는 것입니까? – Gregborrelly

+0

프로그램이 스택을 사용하기 전에 다른 프로그램이있을 가능성이 큽니다. 그리고 그 프로그램은 특히 그 메모리 위치를 사용했을지도 모릅니다. 그리고 일단 그것이 끝나면 스스로 끝내지 않았습니다 (그렇게 할 필요가 없습니다). 그리고 이제 프로그램이 그 목적을 위해 메모리 위치를 차지할 때 C는 기본적으로 값을 0으로 설정하지 않았습니다 (불필요한 오버 헤드입니다). –

+0

@BackSlash 변수에 사용 된 메모리에 남아있는 것은 무엇이든 ... 마지막으로 사용 된 것 (프로그램에 의해서조차 사용되지 않았을 수도 있지만 때로는 프로그램의 다른 부분으로 이미 반환 된 함수 호출과 같이 더 이상 사용하지 않음). – Dmitri