2014-04-22 1 views
1

저는 2 개의 루프를 가지고 있습니다. 첫 번째 루프에서 나는 필드 (나누기)를 나눈다. 두 번째 루프에서 새 필드 값을 printf 싶습니다. 0 개만 있습니다. 루프에 무슨 문제가 있는지 알고 싶습니다. 실수를 찾지 못했습니다.내 for-loop에는 어떤 문제가 있습니까?

purverbrauch[i] = wertmverbrauch[i]/summe; 

I 프로그램 비주얼 스튜디오 2013과 윈도우에서) (올바른 7

#include "stdafx.h" 
#include <stdlib.h> 
#include <stdio.h> 
#include <conio.h> 
#define N 7 

int main() 
{ 
int wertmverbrauch[N], summe=0, tmp, purverbrauch[N]; 
int i, j, y; 
printf("Programm zur Ermittlung des kumulierten wertmaeßigen  Verbrauchs\n-----------------------------------------\n"); 
printf("Bitte geben Sie den wertm. Verbrauch ein!(%i Werte)",N); 
for (i = 0; i < N; i++) 
{ 
    scanf_s("%i", &wertmverbrauch[i]);//Einlesen der Werte 
} 
for (j = 0; j < N - 1; j++) 
{ 
    for (y = 0; y < N - 1 - j; y++) 
    { 
     if (wertmverbrauch[y]>wertmverbrauch[y + 1])//Bubblesort sortieren 
     { 
      tmp = wertmverbrauch[y]; 
      wertmverbrauch[y] = wertmverbrauch[y + 1]; 
      wertmverbrauch[y + 1] = tmp; 
     } 
    } 
} 

printf("Sortierte Reihenfolge(nach wert absteigend)"); 
for (i = 0; i < N; i++) 
{ 
    printf("\n%i", wertmverbrauch[i]);//Sortierte Ganzzahlen-Werte ausgeben 
} 
for (i = 0; i < N; i++) 
{ 
    summe += wertmverbrauch[i];//Ermittlung der Summe in Ganzzahlen 
} 
printf("\nDie Werte ergeben zusammen %i\n\n", summe); 
for (i = 0; i < N; i++) 
{ 
    purverbrauch[i] = wertmverbrauch[i]/summe; 
} 
for (i = 0; i < N; i++) 
{ 
    printf("%i\n", purverbrauch[i]); 
} 
system("pause"); 
return 0; 
} 

%의 LF 출력 :

Programm zur Ermittlung des kumulierten wertmae▀igen Verbrauchs 
----------------------------------------- 
Bitte geben Sie den wertm. Verbrauch ein!(4 Werte)5 
4 
1 
4 
Sortierte Reihenfolge(nach wert absteigend) 
1.000000 

4.000000 

4.000000 

5.000000 

Die Werte ergeben zusammen 14.000000 

0.071429 
0.285714 
0.285714 
0.357143 
Drücken Sie eine beliebige Taste . . . 
:)) 나는 문제는이 라인에 생각

% f 출력 (올바르지 않음) :

Programm zur Ermittlung des kumulierten wertmae▀igen Verbrauchs 
----------------------------------------- 
Bitte geben Sie den wertm. Verbrauch ein!(4 Werte)5 
4 
1 
4 
Sortierte Reihenfolge(nach wert absteigend) 
-92559604497122535000000000000000000000000000000000000000000000.000000 

-92559604473177292000000000000000000000000000000000000000000000.000000 

-92559604473177292000000000000000000000000000000000000000000000.000000 

-92559604281615349000000000000000000000000000000000000000000000.000000 

Die Werte ergeben zusammen -3702384177250924700000000000000000000000000000000000 
00000000000.000000 

0.250000 
0.250000 
0.250000 
0.250000 
Drücken Sie eine beliebige Taste . . . 
+0

'summe'의 값은 무엇입니까? – haccks

+1

더 많은 코드, 특히 배열 유형을 표시하십시오. –

+0

@haccks int가 값 0으로 초기화되었습니다. – user3337177

답변

2

정수 만 선언했습니다. 정수 연산에서

10/3하지 (예상대로) 3.3333이다; 3 (정수)입니다.

나는 용의자 값 당신은 더 적은 1 이상의 값을 초래할 것이다 분할, 그 결과, 결과는 정수 0

예 :

당신은 기대할 수 있습니다

3/5 = 0.60 

하지만 실제로 :

3/5 = 0 

올바른 해결책은 데이터를 검사하고 int 대신 적절한 유형을 double으로 변경하는 것입니다. 그런 다음 소수 자리를 캡처 할 수 있습니다.

+0

입니다. 배열을 double로 선언 할 수 있습니까? (% f로 포맷 됨)? – user3337177

+0

바로 지금 모두 0이 될거야? 코드가 귀하의 대답에'int' – Kraken

5

배열의 유형이 int 유형이므로 기본적으로 0과 1 사이의 결과를 얻지 만 정수가 1보다 작은 경우 정수가 0이라고 생각합니다.

int N = 4 
double purverbrauch[N]; 
double wertmverbrauch[N] = {2,3,4,5}; 
int summe = 2; 

for (int i = 0; i < N; i++) 
{ 
purverbrauch[i] = wertmverbrauch[i]/summe; 
} 
for (int i = 0; i < N; i++) 
{ 
    printf("%f\n", purverbrauch[i]); 
} 
+0

thx를 사용한다면. 하지만 왜 2,3,4,5로 wertemverbrauch 어레이를 초기화 했습니까? : D – user3337177

+0

내가 위에서 한 것처럼 배열을 선언한다면, 괜찮을 것이다. 그러나 계산을위한 정밀도가 필요 없다면'float'도 사용할 수 있습니다. '% f'는 float를 출력하므로 double은 float에 캐스트됩니다. – Theolodis

+1

@ user3337177 Theolodis는 wertemverbrauch 어레이를 scanf하고 싶지 않았습니다. 따라서 임의의 값 '2,3,4,5'가 사용됩니다. – Kraken

0

정수 계산이 아닌 정수 값 계산이 필요합니다.

double wertmverbrauch[N], summe=0, tmp, purverbrauch[N]; 

에 의해

int wertmverbrauch[N], summe=0, tmp, purverbrauch[N]; 

를 교체하고 %lf에 의해 %i의 모든 발행 수를 교체하십시오.

관련 문제