我的for-loop出了什么问题?

时间:2014-04-22 11:45:10

标签: c arrays

我有两个for循环。在第一个循环中,我分割了字段(除法)。 在第二个循环中,我想打印新的字段值。 只有0。 我想知道循环有什么问题。 我没有发现错误。 :)) 我认为问题出在这一行:

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

我使用Windows 7中的Visual Studio 2013进行编程。

#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 . . .

3 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分:2)

您只声明了整数。

在整数数学中,10 / 3 3.3333(正如您所料);它只有3(整数)。

我怀疑你划分的值会导致小于1的值,因此结果是整数0。

示例:

你可能期望:

3 / 5 = 0.60

但是真的:

3 / 5 = 0

正确的解决方案是检查您的数据,并将相应的类型更改为double,而不是int。然后你可以捕获小数位。

答案 2 :(得分:0)

这里需要浮点计算而不是整数计算。

替换

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

通过

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

并将所有%i替换为%lf