问题出在 `scanf` 函数的格式说明符上。您应该使用 `%lf` 而不是 `%f` 来读取 `double` 类型的变量。同时,您的输入格式应该保持一致。在第一个示例中,您使用的是空格分隔,而在第二个示例中,您使用的是逗号分隔。我建议您选择一个格式并保持一致。以下是修复后的两个示例:
**示例1:**
#include<stdio.h>
#include <math.h>
int main(void)
{
int s;
double p, w, d, f;
scanf("%lf%lf%d", &p, &w, &s);
if(s<250)
{
d=0;
}
else if(s>=250&&s<500)
{
d=2;
}
else if(s>=500&&s<1000)
{
d=5;
}
else if(s>=1000&&s<2000)
{
d=8;
}
else if(s>=2000&&s<3000)
{
d=10;
}
else if(s>=3000)
{
d=15;
}
f=p*w*s*(1-d/100.0);
printf("freight=%f\n",f);
}
**示例2:**
#include<stdio.h>
#include <math.h>
int main(void)
{
int c, s;
double p, w, d, f;
scanf("%lf,%lf,%d", &p, &w, &s);
if(s >= 3000)
{
c = 12;
}
else
{
c = s/250;
}
switch(c)
{
case 0:
d=0;
break;
case 1:
d=2;
break;
case 2:
case 3:
d=5;
break;
case 4:
case 5:
case 6:
case 7:
d=8;
break;
case 8:
case 9:
case 10:
case 11:
d=10;
break;
case 12:
d=15;
break;
}
f = p*w*s*(1-d/100.0);
printf("freight = %f\n",f);
}
关于您提到的 `c` 的计算问题,您是对的。`c` 应该表示运输距离范围的索引,而不是具体的范围值。因此,`c` 的计算应该是 `s/250+1` 而不是 `s/250`。以下是修复后的示例2:
#include<stdio.h>
#include <math.h>
int main(void)
{
int c, s;
double p, w, d, f;
scanf("%lf,%lf,%d", &p, &w, &s);
if(s >= 3000)
{
c = 12;
}
else
{
c = s/250 + 1;
}
switch(c)
{
case 0:
d=0;
break;
case 1:
d=2;
break;
case 2:
case 3:
d=5;
break;
case 4:
case 5:
case 6:
case 7:
d=8;
break;
case 8:
case 9:
case 10:
case 11:
d=10;
break;
case 12:
d=15;
break;
}
f = p*w*s*(1-d/100.0);
printf("freight = %f\n",f);
}
|