找素数: 给定一个整数m(50<m<20000),找出小于m的最大的10个素数。 输入格式: 输入在一行中给出一个正整数m(50<m<20000)。 输出格式: 在一行中按递减顺序输出10个满足条件的素数,每个素数输出占6列。没有其它任何附加格式和字符。 输入样例: 229 输出样例: 227 223 211 199 197 193 191 181 179 173 代码如下:#include <cmath> #include <iomanip> #include <iostream> using namespace std; bool is_ prime(int a) { if((a % 2) == 0) { //偶数单判,以后只检查奇数。 return false; for(int i = 3, e = std::sqrt(a); i<= e;i+=2) { |if((a%i) == 0) { return false; |} } return true; } int main() { intm=0; cin >> m; for(intk=m-1,n=0;k>=2;--k){ if(is_ prime(k)) { cout << setw(6) << k; ++n; if(n >= 10) { break; } } } },对给出的一段代码,使用两种合适的白盒测试方法展开测试。
时间: 2024-01-23 16:01:35 浏览: 135
C语言上机练习
好的,让我们来展开测试这段代码。
1. 采用逻辑覆盖技术
首先,我们来看一下判定条件覆盖。根据代码中的判定条件,可以列出以下测试用例:
输入m为51,期望输出:47 43 41 37 31 29 23 19 17 13
输入m为59,期望输出:53 47 43 41 37 31 29 23 19 17
输入m为73,期望输出:71 67 61 59 53 47 43 41 37 31
接下来,我们来看一下条件组合覆盖。根据代码中的判定条件,可以列出以下测试用例:
输入m为51,期望输出:47 43 41 37 31 29 23 19 17 13
输入m为59,期望输出:53 47 43 41 37 31 29 23 19 17
输入m为73,期望输出:71 67 61 59 53 47 43 41 37 31
通过以上测试用例,我们可以保证判定条件和条件组合都得到了覆盖。
2. 利用基本路径测试技术
接下来,我们使用基本路径测试技术。首先,我们需要找出程序中的基本路径。可以画出程序的流程图,如下所示:
![程序流程图](https://img-blog.csdn.net/20180418150846694)
根据流程图,可以找出以下3条基本路径:
1. 1-2-3-14
2. 1-2-4-5-12-13-14
3. 1-2-4-6-9-11-12-13-14
对于每条基本路径,可以列出测试用例,以保证每条路径都能够被测试到:
1. 输入m为100,期望输出:97
2. 输入m为97,期望输出:89 83 79 73 71 67 61 59 53 47
3. 输入m为61,期望输出:59 53 47 43 41 37 31 29 23 19
通过以上测试用例,我们可以保证每条基本路径都得到了覆盖。
3. 从不同方面对循环节点展开测试
接下来,我们来对循环节点进行展开测试。根据代码,循环节点为for循环。我们可以从以下几个方面进行测试:
- 测试循环次数为0的情况,即输入m小于2的情况。
- 测试循环次数为1的情况,即输入m等于2的情况。
- 测试循环次数为10的情况,即输入m足够大,可以输出10个素数的情况。
- 测试循环次数小于10的情况,即输入m足够大,但是小于20的情况。
测试用例如下:
- 输入m为1,期望输出:空
- 输入m为2,期望输出:空
- 输入m为20000,期望输出:19997 19993 19991 19979 19961 19943 19937 19927 19913 19909
- 输入m为100,期望输出:97 89 83 79 73 71 67 61 59 53
通过以上测试用例,我们可以保证对循环节点的所有情况都进行了测试。
4. 综合使用不同的白盒测试方法
最后,我们来综合使用不同的白盒测试方法,进行全面的测试。我们可以选择一些典型的测试用例,如:
- 输入m为51,期望输出:47 43 41 37 31 29 23 19 17 13
- 输入m为97,期望输出:89 83 79 73 71 67 61 59 53 47
- 输入m为20000,期望输出:19997 19993 19991 19979 19961 19943 19937 19927 19913 19909
通过以上测试用例,我们可以保证程序的正确性和鲁棒性。
阅读全文