根据输入执行下列不同的三角函数的计算并显示计算结果。编写程序,并设计测试数据进行判定覆盖测试。其中变量x、k为正整数。输入数据打印出“输入x值:”、“输入k值:”。执行算式一sin(x)输出文字“算式一值:”和y的值,执行cos(x^k)输出文字“算式二值:”和y的值;执行tan(x/k)输出文字“算式三值:”和y的值。若不在有效范围之内,应提示:“输入不符合要求。” 使用assertThat中equalTo断言判断返回期望结果和实际返回是否一致。
时间: 2024-02-15 11:03:43 浏览: 296
以下是代码实现:
```java
import java.util.Scanner;
import org.junit.Test;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
public class TrigonometricFunctionTest {
private static final double DELTA = 1e-6; // 浮点数比较时的误差范围
/**
* 计算sin(x)
* @param x 角度值,单位为度
* @return sin(x) 的值
*/
public static double sin(double x) {
return Math.sin(Math.toRadians(x));
}
/**
* 计算cos(x^k)
* @param x 角度值,单位为度
* @param k 幂值
* @return cos(x^k) 的值
*/
public static double cos(double x, int k) {
return Math.cos(Math.toRadians(Math.pow(x, k)));
}
/**
* 计算tan(x/k)
* @param x 角度值,单位为度
* @param k 分母
* @return tan(x/k) 的值
*/
public static double tan(double x, int k) {
return Math.tan(Math.toRadians(x / k));
}
@Test
public void testTrigonometricFunction() {
// 测试sin函数
assertThat(sin(0), closeTo(0, DELTA));
assertThat(sin(30), closeTo(0.5, DELTA));
assertThat(sin(45), closeTo(Math.sqrt(2) / 2, DELTA));
assertThat(sin(60), closeTo(Math.sqrt(3) / 2, DELTA));
assertThat(sin(90), closeTo(1, DELTA));
// 测试cos函数
assertThat(cos(0, 2), closeTo(1, DELTA));
assertThat(cos(30, 2), closeTo(0.866025, DELTA));
assertThat(cos(45, 2), closeTo(0.5, DELTA));
assertThat(cos(60, 2), closeTo(0.25, DELTA));
assertThat(cos(90, 2), closeTo(0, DELTA));
// 测试tan函数
assertThat(tan(0, 1), closeTo(0, DELTA));
assertThat(tan(30, 2), closeTo(0.577350, DELTA));
assertThat(tan(45, 3), closeTo(1, DELTA));
assertThat(tan(60, 4), closeTo(1.732051, DELTA));
assertThat(tan(90, 5), closeTo(-1.995200, DELTA));
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("输入x值:");
double x = input.nextDouble();
if (x < 0 || x > 90) {
System.out.println("输入不符合要求。");
return;
}
System.out.print("输入k值:");
int k = input.nextInt();
if (k <= 0) {
System.out.println("输入不符合要求。");
return;
}
double y;
// 计算sin(x)
y = sin(x);
System.out.println("算式一值:" + y);
assertThat(y, closeTo(sin(x), DELTA));
// 计算cos(x^k)
y = cos(Math.pow(x, k), k);
System.out.println("算式二值:" + y);
assertThat(y, closeTo(cos(Math.pow(x, k), k), DELTA));
// 计算tan(x/k)
y = tan(x, k);
System.out.println("算式三值:" + y);
assertThat(y, closeTo(tan(x, k), DELTA));
}
}
```
在以上代码中,我们首先使用 JUnit 对三角函数进行了单元测试,使用 `closeTo()` 方法来比较浮点数的相等性。然后在 `main()` 方法中,读入输入的 `x` 和 `k`,并进行输入的有效性检查。最后,分别计算三个三角函数的值,并输出结果,同时使用 `assertThat()` 和 `closeTo()` 方法来进行每个函数返回值的检查。
阅读全文