2009-05-09 2 views
1

메모리를 낭비하지 않고 어떻게 10 개의 부동 소수점을 배열에 저장할 수 있습니까?배열로 플로팅 읽기

+0

조숙 한 최적화는 모든 악의 뿌리입니다. – Juliet

+2

냄새가 나는 숙제 태그가 있습니까? 나는 아직 그것을 보지 못했습니다 :) –

+2

이것은 숙제와 비슷해 보입니다. 1. 교재를주의 깊게 읽으십시오. 2. 질문을 할 때 입력을 읽고 결과를 저장하는 과정에서 지금까지 노출 된 바른 기능을 선택하십시오. 여기서 대답을 얻으면 배우는 데 도움이되지 않습니다. 스스로 주어진 도구로 올바른 솔루션을 찾는 사고 과정을 거쳐야합니다. – lothar

답변

0

문제에 대해 좀 더 구체적으로 설명해야합니다.

이 번호로 수행해야 할 다른 작업이 없으면 메모리를 저장하는 가장 쉬운 방법은 배열에 배열을 저장하는 것이 아닙니다.

원하는 것처럼 들리는군요.

합계 = 0;
(아직 10 수를 읽지 않은)
    현재
    합계 + = 현재
동안 읽을 할; 이 질문에

+0

OP는 그가 * add *를 쓸 때 상점 *을 의미한다고 생각합니다. – Jens

2
int size = 10; 
float vet[size]; 
    for(i = 0; i < size; i++){ 
     scanf("%f", &vet[i]); 
    } 

으로 간단한.

+0

키보드 10에서 읽은 수의 수는 단지 예제 일뿐입니다 – user104108

+0

scanf에서 오류를 확인하지 않았습니까? 나쁜 프로그래머, 아니 쿠키! :-) – Jens

+0

'scanf '를 전혀 사용하지 않습니까? 나쁜 프로그래머, 아니 쿠키! :-) – Emmet

0

대답은 당신이 배열에 일을 추가하고 배열이 메모리를 사용할 것으로 예상 할 수 없다는 것입니다 :)이 될 수 있기

+0

float 값 [100]을 가정 해 봅시다. int n; int index; 는 scanf ("%의 D"(인덱스 = 0 &n); n은 지수 <; 인덱스 ++) 는 scanf ("%의 F", 값 [인덱스]); n은 95 다른 일어나는 예 5의 경우 \t 유동 온도; \t는 scanf ("%의 D"&n); \t 플로트 *의 pValues ​​= (플로트 *)은 calloc (? 해전 것이 여전히 문제 INT 않음 인덱스처럼 위치 – user104108

0
float arr[10]; 
for(i = 0; i < 10; i++){ 
    scanf("%f", &arr[i]); 
} 

나는 위와 비슷하지만 최적화되지 않은 경우 여분의 int를 사용하지 않습니다. hehe

더 적은 메모리를 사용하려면 아래 코드를 사용하십시오. 그것들은 모두 배열로 읽히지 만, 마지막으로 읽어 올 것은 배열에 있습니다 :

float arr[1]; 
for(i = 0; i < 10; i++){ 
    scanf("%f", &arr[0]); 
} 
2

아하. 그것은 문제의 수레를 읽지 않습니다. 그것은 기억입니다. i을 읽고 정확하게 수하물이있는 배열이 필요합니다.

이것은 실제로 숙제와 같이 냄새가 좋지만 괜찮습니다.하지만 전 답변을 전할 선생님이 너무 많습니다. 이제부터는 malloc()이라는 C 함수와 C 연산자 (함수처럼 보입니다. 실제로는 언어에 내장되어 있음)가 크기이라는 이름으로 알려 드리겠습니다.

this tutorial을 살펴보십시오.


그래, 거기있어. 다음은 형식화 된 주석의 코드입니다.

int n,index; 
float temp; 
scanf("%d",&n); 
float *pValues=(float *)calloc(n,sizeof(float)); 
for(index=0;index<n;index++) { 
    scanf("%f",&temp); 
    *(pValues+index)=temp; 
} 

나는 두 가지 변화와 함께 할 것 :

  1. 그 문자 외에 아무것도 malloc을 사용하는 것이 더 관용적
  2. C에서, 배열과 포인터는 매우 밀접한 관계를 가지고; 사실 *(pValues+index)은 정확히 pValues[index]과 같습니다.

    int n,index; 
    float temp; 
    scanf("%d",&n); 
    float *pValues=(float *)malloc(n*sizeof(float)); 
    for(index=0;index<n;index++) { 
        scanf("%f",&temp); 
        pValues[index]=temp; 
    } 
    

    의 코드의 또 하나의 변화를 살펴 보자 :

그래서이 같이 다시 쓸 것입니다. pValues이 있으며 float에 대한 포인터입니다. &temp이 있는데 float에 대한 포인터입니다. &은 주소 연산자이며 tempfloat입니다. 그리고, 여러분은 여러분의 인덱스로 포인터 연산만을하고있는 것입니다.

int n,index; // Don't need temp 
scanf("%d",&n); 
float *pValues=(float *)malloc(n*sizeof(float)); 
for(index=0;index<n;index++) { 
    scanf("%f",pValues+index); 
} 

자, 퀴즈 질문 : 당신은 루프

for(index=0;index<n;index++) { 
    scanf("%f",pValues++); 
} 
+0

는 그것을 냈 (인덱스 = 0, 인덱스 user104108

+0

내 나쁜. 내가 전에 게시 된 것처럼 괜찮습니다 :) 그냥 잘 작동합니다. – user104108

+1

scanf에서 오류를 확인하지 않습니까? 나쁜 프로그래머, 아니 쿠키! :-) – Jens

0

한 경우 무슨 일이 일어날 지 숙제 같은 소리 그래서, 우리는이 한 번 더 다시 작성할 수 있습니다.

입력에서 부동 소수점 수를 읽습니다. 개별 플로트의 크기로 해당 값을 곱하십시오. float에 대한 포인터에 주소를 저장하는 정확한 바이트 수를 할당하십시오. 입력에서 float으로 루프를 읽습니다. 배열의 모든 float를 더하는 루프가 있습니다.

내 숙제 레슨은 용어 포인터와 배열 사이의 연결을 실현하는 것입니다. 배열 인덱싱없이이 작업을 수행 할 수 있지만 질문은 배열을 사용해야 함을 의미합니다.