算法笔记(4)第二章C、C++快速入门,单点测试,多点测试,黑盒测试
发布日期:2021-05-07 07:13:05 浏览次数:22 分类:精选文章

本文共 2321 字,大约阅读时间需要 7 分钟。

2.10黑盒测试

系统后台会准备若干组输入数据,然后让提交的程序去运行这些数据,如果输出的结果与正确的答案完全相同(字符串意义上的比较),那么就称通过了这道题目的测试,否则会根据错误类型而返回不同的结果,其中,根据黑盒测试是否对每组测试数据进行单独测试,或者是一次性测试所有的数据,又可以分为单点测试和多点测试。
2.10.1单点测试
对于单点测试来说,系统会根据每组数据输出的结果是否正确,如果输出正确,那么对于该组数据来说就是通过了测试,并且获得了这组数据的得分,在这种情况下,题目的总得分等于通过的数据的分支之和。
从代码的编写上来说,单点测试只需要按照正常的逻辑执行一遍程序就可以了。程序只需要对于一组数据能够完整执行即可。

2.10.2多点测试

多点测试要求程序能够一次运行所有的数据,并且要求所有的输出结果都必须是完全正确的,才能算作这道题通过了测试,而且只要有其中一组数据的输出是错误的,那么这道题就是0分。
(1)while…EOF类型
如果题目没有给定输入的结果条件,那么就默认读取到文件的末尾,对于黑盒测试来说,所有的输入的数据都是放在一个文件里面的,系统会让程序去读取这个文件里面的输入数据,然后执行程序输出结果。那么如果题目没有指定什么时候结束输入,一般都是指定输入完所有的数据为止
scanf是有返回值的,scanf函数的返回值为其成功读入的参数的个数
正常的控制台(屏幕黑框)当中的1输入一般是不会失败的,只有在读取文件的时候到达文件的末尾导致无法读取的现象才会产生读入的失败,这个时候,scanf函数会返回-1而不是0,而C语言当中使用EOF(即End of File)来代表-1
这就是给我们一个启发,当题目没有说明由多少数据需要读入的时候,就可以利用scanf的返回值是否为EOF来判断输入是否结束,于是就有了下面的这种写法:while(scanf("%d",&n)!=EOF){
}

#include
#include
int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF){ printf("%d\n",a+b); } return 0;}

另外,当在黑框里面输入数据的时候,并不会触发EOF状态,因此如果想要在黑框里面手动触发EOF,可以按下<Ctrl+Z>组合键,这个时候就会显示^Z,按下键的时候就可以结束while了。

while(scanf(“%s”,str)!=EOF){   }while(gets(str)!=NULL){   }

(2)while–break类型的

这种类型是while…EOF类型的延伸。还有

#include
#include
int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF){ if(a==0&&b==0)break; printf("%d\n",a+b); } return 0;}
另一种更加简洁的写法
#include
#include
int main(){ int a,b; while(scanf("%d%d",&a,&b),a||b){ printf("%d\n",a+b); } return 0;}

(3)while(T–)类型的

在这种类型当中,题目会给出测试数据的组数,然后才给出相应数量的组数的输入数据,

#include
#include
int main(){ int T,a,b; scanf("%d",&T); while(T--){ scanf("%d%d",&a,&b); printf("%d\n",a+b); } return 0;}

三种常见的输出类型

1.正常输出
要求需要每两组输出数据的中间没有额外的空行,即输出的数据是连续的多行
2.每组数据输出以后都额外加一个空行
这个要求非常容易实现的,只需要在每组输出结束以后额外输出一个换行符\n就可以了,

#include
#include
int main(){ int a,b; while(scanf("%a%d",&a,&b)!=EOF){ printf("%d\n",a+b); printf("\n"); } return 0;}

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

这一般是在第三种输入类型while(T–)的情况下,只需要通过判断T是否已经减小到0来判断是否应当输出额外的换行

#include
#include
int main(){ int T,n,a; scanf("%d",&n); while(T--){ int sum=0; for(int i=0;i
0) printf("\n");}}

与这种要求类似的要求的是:输出一行N个整数,每两个整数之间用空格隔开,最后一个整数后面不允许加上空格,做法是类似的。

for(int i=0;i

在多点测试当中,每一次循环都需要重置一下变量和数组,否则在下一组数据来临的时候变量和数组的状态就不是初始状态了,而重置函数一般使用memset函数或者fill函数

上一篇:jQuery 操作方法
下一篇:数据劫持

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年05月08日 07时57分56秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

C语言程序设计梁海英答案,1.5 习题 2023-01-24
c语言编写单片机中断,C语言AVR单片机中断程序写法 2023-01-24
#pragma region、{} 2023-01-24
ddr2的上电顺序_S5PV210 DDR2初始化 28个步骤总结 2023-01-24
deque stack java_「集合系列」- 初探 java 集合框架图 2023-01-24
easyexcel 导出 代码翻译converter_【starter推荐】简单高效Excel 导出工具 2023-01-24
echarts 如何在一条柱形显示两个数字_干货 | 如何快速制作数据地图?让你的可视化逼格再高一级!... 2023-01-24
eclipse设置utf8编码_记住没:永远不要在 MySQL 中使用 UTF8 2023-01-24
eclipse里source的快捷方法_Eclipse快捷键/快捷操作汇总 2023-01-24
elasticsearch 查询_Elasticsearch地理信息存储及查询之Geo_Point 2023-01-24
embedding层_【预估排序】Embedding+MLP: 深度学习预估排序通用框架(一) 2023-01-24
excel中最常用的30个函数_Excel玩转数据分析常用的43个函数! 2023-01-24
flink sql设置并行度_Flink 参数配置和常见参数调优 2023-01-24
go 字符串替换_Go 每日一库之 quicktemplate 2023-01-24
hex editor neo下载_口袋妖怪爆焰黑手机版下载-口袋妖怪爆焰黑手游下载v4.3.0 安卓版... 2023-01-24
hibernate mysql 关联查询_spring-boot hibernate 双向关联查询的坑 2023-01-24
hive 建表_sqoop的使用之导入到hive和mysql 2023-01-24
hp工作站z8装Linux,惠普Z8G4双路最小工作站 2023-01-24
html上传图片直接保存到数据库中,Editor上传图片路径存入数据库中怎么弄? 2023-01-24
html游戏玩不了,WinXP网页游戏玩不了怎么办有哪些解决方法 2023-01-24