0
#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 而 int 总返回真值?我正在使用代码块...总共出现的值是真实值,但出现在 etapa 1,2,3 区域上的 de 值始终为 100...

4

2 回答 2

3

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

我也会警惕浮点数和整数的混合,例如将浮点数传递给abs(). 选择一种数据类型并坚持使用它可能会更好。

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

在任何情况下,除非您保留大量的数组,否则由于范围和精度的增加,大多数人倾向于选择双精度数而不是浮点数。

而且,如果您对此深思熟虑:

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

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

于 2013-06-08T06:31:37.393 回答
1

要了解问题出在哪里,首先您必须说明给您带来问题的测试用例是什么。但乍一看,我看到你必须更换 || 与 && 如果您希望“pontos”在输入 beetwen 180 AND 300时返回 80

于 2013-06-08T06:43:19.370 回答