-2

我的任务是创建一个根据函数值显示 a-或 a的程序。+

为了更清楚一点,几个不同部分的输出应该如下所示;

07.87 |----+---
12.97 |----+----+---
02.79 |---

本质上,每个第 5 个符号应该是+,其他符号是-。可能出现的最大值为 15。

到目前为止,我有这个,但它不起作用;

if (distance(lat_2, long_2, LAT_1, LONG_1) == 5 || 10 || 15){
     printf("+");
 }
 else{
    printf("-");
 }

我究竟做错了什么?如果您需要更多信息,请随时询问。

4

5 回答 5

2

这个条件

distance(lat_2, long_2, LAT_1, LONG_1) == 5 || 10 || 15

相当于

( distance(lat_2, long_2, LAT_1, LONG_1) == 5 ) || ( 10 ) || ( 15 )

因为1015不等于零,那么条件将始终评估为真。

您可以通过以下方式重写它

int value = distance(lat_2, long_2, LAT_1, LONG_1);

if ( value != 0 && value % 5 == 0 ){
     printf("+");
 }
 else{
    printf("-");
 }
于 2019-09-24T11:35:49.950 回答
1

真的不清楚你的distance函数与“每五个符号”有什么联系。但是,您可能正在寻找“模”,这可能是您想要的:

int dist = distance(lat_2, long_2, LAT_1, LONG_1);
if (dist % 5 == 0){
  printf("+");
}
else{
  printf("-");
}

或者,如果不需要 0:

int dist = distance(lat_2, long_2, LAT_1, LONG_1);
if (dist != 0 && dist % 5 == 0){
  printf("+");
}
else{
  printf("-");
}

如果没有,那么您需要向我们提供有关您想要做什么的更多信息。

于 2019-09-24T11:42:01.750 回答
0
int dist=distance(lat_2, long_2, LAT_1, LONG_1); 
for(int i=0; i<dist;i++){ 
printf("%c", (dist % 5 == 0) ? '+' : '-'); 
}
于 2019-09-24T11:56:34.037 回答
0

%使用模 ( ) 和三元运算符将其简化为一行:

 printf("%c", distance(lat_2, long_2, LAT_1, LONG_1)%5 ? '-' : '+');

解释:

printf("%c",...);

将打印参数中的一个字符。这将最终成为'-'or '+'

该表达式distance(lat_2, long_2, LAT_1, LONG_1) % 5false在值为 5、10、15、20 等时出现,并将true用于所有其他值。

于 2019-09-24T11:56:57.453 回答
-1

您实际上无法像以前那样用 5 或 10 或 15 检查距离。

需要的是不断减小距离,直到它变得小于零。并+每 5 次打印一次,否则打印-

示例代码如下。

int count = 0;
double distance;
...
while (distance >= 0)
{
    distance -= 1;
    count++;
    if (count%5 == 0)
        printf ("+");
    else
        printf ("-");
}

您应该注意,因为double使用了浮点运算,所以总是有可能引入错误。对于您的示例中的小值和精度,我认为不应该有任何问题。

于 2019-09-24T11:41:57.847 回答