#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 ...
答案 0 :(得分:4)
您可能也想提供测试数据,但我看到一个直接的问题。在应该打印p2
的行中,您实际上是在输出p3
。
我也要注意浮点数和整数的混合,例如将浮点数传递给abs()
。选择一个数据类型并坚持使用它会更好。
在调用ts()
时转换为整数时输入浮点似乎没什么意义,这可能是你的问题所在。
在任何情况下,除非你保留大量阵列,否则由于范围和精度的提高,大多数人倾向于选择双倍的浮点数。
而且,如果你认真思考这个问题:
else if (t >= 180 || t <= 300)
你会意识到总是评估为真。您可能打算使用&&
,逻辑AND运算符。
答案 1 :(得分:1)
要了解问题所在,首先必须说明哪些测试用例会给您带来问题。但乍一看,我发现你必须更换||与&amp;&amp;如果您希望“pontos”在输入为beetwen 180 AND 300时返回80