我的if语句是否写得正确?

Kar*_*ren 1 c if-statement

double soilQuality(int x, int y) {
   double typeA, typeB, soilQual;

   if (((x >= 1) && (x <= 20)) && ((y >= 1) && (y <= 20))) {
      typeA = 1 + (sqrt((pow(x - SOILQUALACONST, 2)) + (pow(y - SOILQUALACONST,          2)) * (1.0)));
      typeB = (1 + ((abs(x - SOILQUALBCONST) + abs(y - SOILQUALBCONST))/(2.0)));

      soilQual = (((x + y) % 2) * typeB) + ((1 - ((x + y) % 2)) * typeA);
   }

   if (((x < 1) || (x >20)) || ((y < 1) || (y > 20))) {
      soilQual = -1.0;
   }

   return soilQual;
Run Code Online (Sandbox Code Playgroud)

}

只是几个简单的问题,如果我创建的变量保护测试x和y是否在区间[1,20],第一个if语句是否正确?如果x和y不在该间隔上,我返回-1; 是我的第二个if语句是否正确?最后一个问题,我的语法是否正确返回值?(更具体地说,我可以像在代码中一样返回最终的值吗?)

因为某些原因,我的输出与我的教师输出不同,我已经仔细检查了我的公式,它看起来很好,所以我觉得我的代码语法有问题.

谢谢!

Gri*_*han 6

x和y是否在区间[1,20]

是,对的.

如果x和y不在该间隔上,我返回-1; 是我的第二个if语句是否正确?

但是你不需要第二个if,首先添加else,如果:

   if (((x >= 1) && (x <= 20)) && ((y >= 1) && (y <= 20))) {
       // both x, and y are in range [1, 20]
   }
   else{
      soilQual = -1.0; 
   }
Run Code Online (Sandbox Code Playgroud)

最后一个问题,我的语法是否正确返回值?

是,对的

因为某些原因,我的输出与我的教师输出不同,我已经仔细检查了我的公式,它看起来很好,所以我觉得我的代码语法有问题.

如果有语法错误,那么代码不会编译!

因为您正在使用读取数字,请阅读: 每个计算机科学家应该知道的关于浮点运算的内容