题2:根据输入执行下列不同的三角函数的计算并显示计算结果。编写程序,并设计测试数据进行判定覆盖测试。其 执行算式-sin(( )输出文字“算式 值:" 中变量x,k为正整数。输入数据打印出“输入x值:
时间: 2024-10-28 15:09:36 浏览: 75
题2的要求是编写一个程序,该程序接收用户输入的两个正整数x和k,然后应用反正弦函数sin()对表达式(-x)^k进行计算,并将结果显示为"算式 结果:"的形式。为了完成这个任务,你可以使用Python语言,因为它的数学库math非常方便。
以下是简单的Python代码实现:
```python
import math
def calculate_trig(input_data):
x = int(input("请输入x值: "))
k = int(input("请输入k值: "))
result = (-1) ** k * math.sin(math.radians(x))
print(f"算式 ({-x}^{k}) 值: {result}")
# 测试数据
test_cases = [
(5, 2), # 普通正整数
(0, 1), # x为0的情况
(90, 1), # 对于x接近90度的情况,sin会很接近1
(-5, 2), # x为负数的情况
]
for data in test_cases:
calculate_trig(data)
```
在这个程序中,`calculate_trig`函数首先获取用户的x和
相关问题
根据输入执行下列不同的三角函数的计算并显示计算结果。编写程序,并设计测试数据进行判定覆盖测试。其中变量x、k为正整数。输入数据打印出“输入x值:”、“输入k值:”。执行算式一sin(x)输出文字“算式一值:”和y的值,执行cos(x^k)输出文字“算式二值:”和y的值;执行tan(x/k)输出文字“算式三值:”和y的值。若不在有效范围之内,应提示:“输入不符合要求。” 使用assertThat中equalTo断言判断返回期望结果和实际返回是否一致。
以下是代码实现:
```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()` 方法来进行每个函数返回值的检查。
根据下列流程图编写程序实现相应分析处理并显示结果,并设计最 少的测试数据进行判定覆盖测试。输入数据打印出“输入 x 值:”、“输入 y 值:”、“输入 z 值:”。执行 x=x/y 输出文字“x=x/y 值:”和 x 的值;执行 x=x+1 输出文字“x=x+1 的值:”和 x 的值;执行 y=x+z 输出文字“y=x+z 的值:” 和 y 的值。其中变量 x、y、z 均须为整型。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足判定覆盖测试,每条测试数
据都应该包含输入 x、y、z 的值以及预期输出结果。
程序代码如下:
```java
import java.util.Scanner;
public class Calculation {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("输入 x 值:");
int x = input.nextInt();
System.out.print("输入 y 值:");
int y = input.nextInt();
System.out.print("输入 z 值:");
int z = input.nextInt();
x = x / y;
System.out.println("x=x/y 值:" + x);
x = x + 1;
System.out.println("x=x+1 的值:" + x);
y = x + z;
System.out.println("y=x+z 的值:" + y);
}
}
```
测试类代码如下:
```java
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculationTest {
@Test
public void test1() {
String input = "6\n3\n2\n";
String expectedOutput = "x=x/y 值:2\nx=x+1 的值:3\ny=x+z 的值:5\n";
assertEquals(expectedOutput, getOutput(input));
}
@Test
public void test2() {
String input = "10\n2\n5\n";
String expectedOutput = "x=x/y 值:5\nx=x+1 的值:6\ny=x+z 的值:11\n";
assertEquals(expectedOutput, getOutput(input));
}
private String getOutput(String input) {
java.io.InputStream in = System.in;
try {
System.setIn(new java.io.ByteArrayInputStream(input.getBytes()));
java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();
System.setOut(new java.io.PrintStream(out));
Calculation.main(new String[]{});
return out.toString();
} finally {
System.setIn(in);
}
}
}
```
测试类中的测试数据共两条,分别对应于 x/y 的商为整数和非整数的情况。每条测试数据都包含输入 x、y、z 的值以及预期输出结果。这样设计的测试数据满足了判定覆盖测试的要求,即覆盖程序中每个分支的情况。
阅读全文
相关推荐














