黑盒测试
黑盒测试是指:系统后台会准备若干组输入数据,然后让提交的程序曲去运行这些数据,若输出的结果与正确答案完全相同(字符串意义上的比较),那么就称通过了这道题的黑盒测试,否则会根据错误类型而返回不同的结果。
根据黑盒测试是否对每组数据都单独测试还是一次性测试所有数据,分为单点测试和多点测试。
单点测试
判断每组数据的输入结果是否正确
若正确,该组数据便通过了测试,,并获得了这组数据的分值,也即题目的总得分是这些数据的分值之和
如下列代码就是一个单点测试
#include<cstdio>
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
return 0;
多点测试
要求程序能一次性的运行所有的数据,并要求所有的输出结果都必须完全正确,否则便是0分。
相比起单点测试,多点测试更能考验做题人的代码是否严谨。
因为多点测试要求一次性运行所有数据,所以要求核心代码有办法反复执行,题目中一般会有三种输入格式,所以需要采用不同的输入方式。
1>.while…EOF型题目未指定输入的结束条件
默认读到文件末尾(对于黑盒测试来说,所有输入数据都是放在一个文件里的)
scanf函数虽然是一个输入函数,但是也有返回值类型,其返回值为输入的个数,若输入失败则返回-1,(且C语言中使用EOF来代表-1)
ps: EOF(end of file)
则我们可以使用这种写法
#include<cstdio>
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
printf("%d",a+b);
}
return 0;
}
另外,在控制台输入数据时,不会触发EOF状态,因此可以通过<ctrl + z>(此时会显示一个^z)+来手动触发
若输入的是字符串,
while(scanf("%S",&str))!=EOF{
...
}
while(gets(str)!=NULL){
...
}
2>.while…break型
要求当数据满足某个条件时停止输入,即加一个if判断
#include<cstdio>
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
printf("%d",a+b);
if(a==0&&b==0)break;
}
return 0;
} //在while...EOF内部进行循环
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF,a||b){
printf("%d",a+b);
}
return 0;
} //直接在while中进行条件判断,用逗号隔开
3>.while(T–)型
要求输入多少组数据,可以输入一个T,通过T–来进行控制
int main(){
int T,a,b;
scanf("%d",&T);
while(T--){
scanf("%d%d",&a,&b)
printf("%d",a+b);
}
return 0;
}
同样的也有三种输出方式
①正常输出,即
printf("%d",a+b);
printf("%d\n",a+b);
printf("%d\t",a+b);
②每组数据后额外多加一个空行
printf("%d\n\n",a+b);
③两组数据之间有空行,最后一组数据后无空行
int T;
...
printf("%d",a+b);
if(T>0) printf("\n");