2010-01-30 4 views
2

현재 내 프로그램에서는 평균 숫자를 만드는 데 사용되는 5 개의 정수를 입력 할 수 있습니다. 5 번째 숫자가 입력 된 후 루프가 깨지면 5로 설정됩니다.동적 배열에 추가하는 동안 루프 숨기기 - C

사용자가 입력 할 수있는 숫자의 양에 제한없이 평균을 만들기 위해 사용할 수있는 배열에 원하는만큼 많은 숫자를 계속 추가 할 수있는 방법을 구현하려고합니다. .

몇 가지 문제가 발생했습니다. 먼저 사용자가 입력 할 수있는 숫자가 얼마나 많은지 알 수 없으므로 역동적 인 배열을 만들 수 없습니다. 즉, 정해진 크기를 지정할 수 없습니다.

내 프로그램이 현재 평균을 만드는 방식은 배열의 요소를 반복하고 평균값이 만들어지는 정수에 연속적으로 추가하는 것입니다. 배열을 결정할 수 없으면 루프를 계속 실행할 수있는 한계를 지정할 수 없습니다.

제 예제는이 점을 더 잘 설명합니다.

#include <stdio.h> 
#include <string.h> 

void main() 
{ 
    int i = 0; 
    int arrayNum[5]; 
    int temp = 1; 
    int anotherTemp = 0; 
    int answer = 0; 


    printf("Enter as many numbers as you like, when finished enter a negative number\n"); 

    for(i = 0; i < 5; i++) 
    { 
     scanf("%d", &temp); 

     arrayNum[i] = temp; 

     anotherTemp = anotherTemp + arrayNum[i]; 
    } 

    answer = anotherTemp/5; 

    printf("Average of %d,%d,%d,%d,%d = %d",arrayNum[0],arrayNum[1],arrayNum[2],arrayNum[3],arrayNum[4],answer); 
} 

구현하는 데 가장 좋은 방법은 아니지만 사전에 숫자를 지정하면 작동합니다.

이 문제를 해결하고 사용자가 필요한만큼 번호를 입력하는 가장 좋은 방법은 무엇입니까?

편집 : 배열을 사용해야했지만 해결책이 제한되지 않고 훨씬 간단하다는 결론을 내 렸습니다.

+0

. 하나는 불특정 길이의 입력을 처리하고, 두 번째는 동적 배열을 처리하고, 세 번째는 평균을 형성하는 가장 좋은 방법입니다 (그리고 대답은 * this * 목적을 위해 데이터를 저장할 필요가 없다는 것입니다). 나는이 모든 점들이 아래의 해답에서 다뤄졌으며 그들은 사이트의 다른 곳에서 확실히 다루어 졌다고 생각한다. – dmckee

+0

평균을 형성하기 위해 배열에 숫자를 저장할 필요가 없다는 것을 알고 있습니다. 단순히 배열을 사용하여 시도하고 지시하도록 지시 받았습니다. –

답변

3

코드 간소화 측면에서 realloc() 기능을 확인하십시오. 당신은 어떤 크기의 초기 배열을 할당 할 수 있고, 사용자가 너무 많은 숫자를 입력하면 realloc()을 호출하여 더 큰 배열을 얻고 그곳에서 계속 진행할 수 있습니다.

당신이하지, 그러나, 실제로는 전혀 진행하면서 최소한 만 신경 경우 평균에 대해, 숫자를 유지하기 필요 :

int input; 
int sum = 0; 
int count = 0; 
int average; 

while (1) { 
    scanf("%d", &input); 
    if (input < 0) { 
     break; 
    } 
    sum += input; 
    count++; 
} 

average = sum/count; 
+0

이것에 대한 가장 쉬운 해결책 인 것 같습니다. 지나치게 복잡하게 만들고 싶지는 않습니다. 감사. –

+0

평균을 계산할 때 카운터에 추가 값이있는 것처럼 보입니다. 정확한 값을 얻기 위해 카운트에서 1을 제거하여이 문제를 해결할 수있었습니다. 더 나은 해결책을 제안 할 수 있습니까? –

+1

하나를 빼면 아무 문제가 없습니다. 아마도 루프의 끝을 테스트하는 명령문의 순서와 변수를 증가시키는 데 사용되는 명령문을 변경할 수 있습니다. –

0

를 사용하여 동적 배열, Java (java.util.Vector)의 Vector와 유사합니다.

당신은 쉽게 동적 배열 자신을 구현할 수 있습니다

  • 당신이 N보다 더 많은 요소를 필요로하는,
  • 빨리 크기 N의 배열을 할당 새로운 더 큰 배열을 할당 (예 : 크기 N과 + 10), 이전 배열의 내용을 새 배열에 복사하고 작업 참조를 새 배열로, 배열 크기 변수 N을 새 크기 (예 : N + 10)로 설정합니다. 이전 배열을 비우십시오.
+1

질문에 태그가 지정되었습니다. C! 그런 사치품은 없습니다. –

+0

@ Mehrdad Afshari : 이것이 바로 "여러분이 직접 그러한 동적 배열을 쉽게 구현할 수 있습니다"라고 설명하고 설명했습니다! – Curd

+0

배열을 사용하여 솔루션을 upvote하지만 Carl과 다른 모든 사람들이 동의하는 것처럼 보이는 것입니다. 가장 간단하고 간단한 방법은 배열을 모두 무시하는 것입니다. –

2

기본적으로 고정 크기로 동적 할당 된 배열로 시작한 다음 더 큰 (예 : 초기 크기의 두 배) 새 배열을 할당하고 이전 배열의 항목을 새 배열로 복사합니다 당신이 우주를 다 쓸 때마다.

문제의 두 번째 부분은 사용자가 입력 한 항목 수의 카운터를 유지하고 평균화 할 때 사용하십시오.

같은 것 this.

3

평균을 계산하려는 경우 숫자를 저장할 필요가 없습니다. 어레이에 대해 걱정할 필요가 없습니다. 각 숫자를 하나의 합계로 누적하고 (더하기), 각 숫자를 세고, 끝나면 나눕니다. 두 가지 변수 만 있으면됩니다. 이 방법

, 당신은 당신의 배열을 범람의 위험에없는, 그래서 동안 당신은 ... while 루프를 사용할 수 있습니다 (온도! = -1) 당신은 정말 여기에 세 가지 문제가

+0

나는 이미 같은 생각을 가지고 있었다. 내 편집을 보라.] –

관련 문제