프로그램은 처음 버릇이 상당히 중요하다고 생각됩니다.
똑같은 결과가 나오더라도 나중에 수정이나 디버깅에 애를 먹을 수 있으므로
코딩을 할 때 신경을 좀 써야 합니다.
1. 먼저 함수를 만들때는 아무리 귀찮아도 정확하게 표현해야 합니다.
avr() ; --> void avr(void) 이렇게 해야만 이 함수의 특징을 정확하게 알 수가 있겠죠...
그렇지 않으면 이 함수가 리턴이 있는지 없는지 구분도 안가죠...
2. 가능한 전역 변수 보다는 포인터를 사용해서 프로그램을 하도록 버릇을 들이세요..
씨에서는 포인터가 뭐니 뭐니 해도 상당이 중요한 부분을 차지하고 틀리기 쉽기 때문에....
3. 함수를 만들때는 함수내에서 printf 문의 사용을 자제 하세요...(함수의 재 사용성이 떨어짐)
함수는 한번만 달랑 호출될 수도 있지만 여러 곳에서 지속적으로 호출 될 수 도 있습니다.
avr()
{
int i,sum=0;
for(i=0;i<5;i++)
{
sum+=temp[i];
}
printf("avr=%d\n",sum/5);
return 0;
}
이 함수의 경우 호출 될때 마다 화면에 결과를 프린트 하게 되어 있습니다.
만일 결과 값만 알고 싶고 화면에 출력을 원하지 않을 경우 별도로 함수를
또 만들어야 하죠...
float avr(int *temp, int size)
{
int i , sum ;
float result ;
for(i=0 ; i<size ; i++) sum = sum + temp[i] ;
result = (float)(sum / size) ;
return result ;
}
main 에서 printf("%f", avr(temp, 5)) ; 이런 식으로 사용하면 더 범용성이 커지겠죠...
4. mom 함수 로직은 아래처럼...
min = max = temp[0] ;
for(i=1; i<5 ; i++)
{
if(min>temp[i]) min=temp[i];
if(max<temp[i]) max=temp[i];
}
5. 최대, 최소를 제외한 평균값
float avr(int *temp, int size)
{
int i , sum , min, max ;
float result ;
for(i=0 ; i<size ; i++) sum = sum + temp[i] ;
for(i=1; i<5 ; i++)
{
if(min>temp[i]) min=temp[i];
if(max<temp[i]) max=temp[i];
}
result = (float) ((sum-(min+max)) / (size-2)) ;
return result ;
}
|