|
发表于 2023-10-7 18:13:43
|
显示全部楼层
问题出在 `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);
- }
复制代码 |
|