黑盒测试

对黑盒测试来说,所有输入数据都放在一个文件里


单点测试

PAT试题基本为单点测试(即一次运行一组数据,一组数据通过测试则获得这组数据的分值)。


多点测试

多点测试要求程序一次运行所有数据,并要求输出结果都正确,只要存在错误,即不得分
大部分 在线判题系统(Online Judge) 都采用了多点测试
由于要求程序能运行所有数据,因此必须保证程序能反复执行代码的核心部分,这就要用到循环

输入类型

题目一般有3中输入的格式,需要采用不同输入方式。

  1. while··· EOF

题目没有给定输入的结束条件,则默认读取到文件末尾

EOF(End Of File)

可以通过printf("%d", EOF);读取EOF的数值,一般的设备上值是-1。
EOF操作:

  • windows:Ctrl + Z
  • unix:Ctrl + D

scanf 若成功读入一个值,返回1;若成功读入2个值,返回2;若读入失败,返回 -1,C/C++中,EOF即为 -1。

正常情况下,控制台中的输入不会失败,只有读取文件时到达文件末尾,导致无法读取时,才会产生读入失败

1
2
3
4
5
6
7
8
9
//读取数字、字符、字符串
while (scanf("%d", &n) != EOF) {
···
}

//读取字符串
while (gets(str) != NULL) {
···
}

  1. while··· break

题目要求,当输入的数据满足某个条件时,停止输入

1
2
3
4
5
6
7
8
9
10
11
while (scanf("%d%d", &a, &b) != EOF) {
if (a == 0 && b == 0) {
break;
}
printf("%d\n", a + b);
}

//更简洁的写法
while (scanf("%d%d", &a, &b), a || b) {// scanf()恒不为0
printf("%d\n", a + b);
}

  1. while (T--)

题目给出测试数据的组数,然后才给出相应数量数组的输入数据。

1
2
3
4
5
int T;
scanf("%d", &T);
while (T--) {
···
}

输出

  1. 正常输出

  2. 每组数据输出之后,额外加一个空行

  3. 两组输出数据之间有一个空行,最后一组数据后面没有空行

    一般在第三种输入类型while (T--)情况下出现,只需通过判断T是否为0选择是否输出额外的换行。


重置变量

在多点测试中,每一次循环都要重置变量和数组,否则在下一组数据来临时,变量和数组不是初始状态,将出错。重置数组一般使用memset函数或fill函数