功能打印错误值,但正在计算正确的值

时间:2013-06-08 06:28:05

标签: c function

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


float ts (int a) {
    float tp;
    tp=a*60;
    return tp;
}


int ponto (float t) {
    if (t < 180)
    return 100;
    else if (t >= 180 || t <= 300)
    return 80;
    else
    return ((80-(t-5))/5);
}

int main()
{
    int quantidade,c=0, p1, p2,p3,insc;
    float tp1, tp2, tp3,t1,t2,t3;

    puts ("Informe quantidade de equipes");
    scanf ("%d", &quantidade);
    puts ("Informe tempo padrao das tres etapas respectivamente em minutos");
    scanf ("%f%f%f", &tp1, &tp2, &tp3);
    tp1 = ts (tp1);
    tp2 = ts (tp2);
    tp3 = ts (tp3);
    do {
            puts ("Informe número de inscricao da equipe");
            scanf ("%d", &insc);
            puts ("Informe tempo das tres etapas respectivamente em minutos");
            scanf ("%f%f%f", &t1, &t2, &t2);
             t1 = ts (t1);
             t2 = ts (t2);
             t3 = ts (t3);
             printf ("\nNº de inscricao: %d", insc);
             t1 = abs (tp1-t1);
             p1 = ponto (t1);
             t2 = abs (tp2-t2);
             p2 = ponto (t2);
             t3 = abs (tp3-t3);
             p3 = ponto (t3);
             printf ("\nPontos obtidos na etapa 1: %d", p1);
             printf ("\nPontos obtidos na etapa 2: %d", p3);
             printf ("\nPontos obtidos na etapa 3: %d", p3);
             printf ("\nTotal de pontos: %d",p1+p2+p3);
             c++;
    } while ( c < quantidade);
    return 1;
}

为什么函数ponto总是返回100但是总返回值是真值?我正在使用代码块...总计中显示的值是真值,但是在etapa 1,2,3区域上出现的de值总是100 ...

2 个答案:

答案 0 :(得分:4)

您可能也想提供测试数据,但我看到一个直接的问题。在应该打印p2的行中,您实际上是在输出p3

我也要注意浮点数和整数的混合,例如将浮点数传递给abs()。选择一个数据类型并坚持使用它会更好。

在调用ts()时转换为整数时输入浮点似乎没什么意义,这可能是你的问题所在。

在任何情况下,除非你保留大量阵列,否则由于范围和精度的提高,大多数人倾向于选择双倍的浮点数。

而且,如果你认真思考这个问题:

else if (t >= 180 || t <= 300)

你会意识到总是评估为真。您可能打算使用&&,逻辑AND运算符。

答案 1 :(得分:1)

要了解问题所在,首先必须说明哪些测试用例会给您带来问题。但乍一看,我发现你必须更换||与&amp;&amp;如果您希望“pontos”在输入为beetwen 180 AND 300时返回80