c语言随机数生成_【编程教程之——对拍】震惊!乐学c语言无法通过时竟然可以这样做…...

835f6891e1a4726006a20ad909f23cef.gif bf824f70574fddc4cd14344506cbbc24.gif 835f6891e1a4726006a20ad909f23cef.gif

导语

1fa7b3fae5163e69b701d2ce750aaf98.png

      26班的童鞋们,经过半个学期的c语言学习,大家与乐学系统相处得如何?是像上图的老哥一样面对满屏的红色而抓狂,还是一路绿灯顺利过关?不过宣委认为最尴尬的情况还是红绿参半,被某个保密项卡住而不知道自己的程序错在哪里。今天在这里给大家分享一个小技巧,希望大家熟练使用,从此告别乐学烦恼,告别头秃!

835f6891e1a4726006a20ad909f23cef.gif d5faaf5acb48cdc325042e9d2f94f1f1.png 835f6891e1a4726006a20ad909f23cef.gif

本篇推送中教程部分来自我们1926班可爱的封蕴籍大佬!

835f6891e1a4726006a20ad909f23cef.gif 8dcaf2b58d10b12aea93738768638bc2.png 835f6891e1a4726006a20ad909f23cef.gif

2019/11/23

      当我们的程序通过了样例,是否意味着它一定能够AC(Accept)呢?根据大量的乐学经验,显然是不行的,这个时候我们怎么来排查自己程序的bug呢?所以我们需要自己设计一些数据,但有的题目数据很大,肉眼无法看出程序结果的正确性,手工计算又耗时耗力,于是,我们想到了对拍。

适用范围:

        1.被乐学的保密数据卡得无法动弹;

        2.(现阶段应该不会遇到)验证根据玄学的数学手段推理出的简便算法与原来的暴力程序结果是否一致。

    材料:Windows系统电脑,Dev-C++,记事本,自己的bug代码和一份正确代码(可在乐学的“报表”的“优秀程序”中寻找自己熟悉的同学)

实例:

A+B Problem

输入数据:a b(a,b均小于100000000)

输出数据:a+b

1. 生成数据

打开Dev-C++,输入下列程序:

d1dacf9e3f94833f1b4b8b3388ed0dda.png

三个头文件包含了我们需要用到的函数:

rand()是随机函数,用以生成随机数;

time(NULL)是用来初始化随机函数,因为我们只能保证每次运行的时间是唯一的,不会重复,如果删掉这句话,你会发现每一次输出的a都是相同的,b也是相同的(所有的随机函数其实并不随机);

freopen用以打开data.in文件,系统会自动生成一个叫data.in的文件(可用记事本打开),w是write的缩写,此处意为“只写”,用来写入数据;

rand()%100000000指生成不大于100000000的随机数。

运行程序就会看到如下界面:

5a6aa18f3f1dfe23ed4d380fff0b11d7.png

并且此程序所在的文件夹中会出现一个叫做“data.in”的IN文件,用记事本打开即可查看随机生成的a和b的值。

2. 编辑正确程序并命名为standard.cpp

8cda2c130319625bea8b3d695d920eba.png

第一个freopen用于scanf函数读取生成的随机数据,第二个freopen用于printf函数输出数据到standard.out这个文件,r是read(只读)的缩写;

3. 编辑带bug的程序并命名为haha.cpp(我强行造了一个bug)

b2ad7aec98caae8c782933b188b9e9f4.png

原理同上,输出数据到haha.out;

4. 写windows对拍文件(对拍.bat)

新建一个记事本,敲入下列代码,然后保存成.bat格式文件,若要修改,则将bat改回txt即可(有相当一部分病毒程序也是bat格式文件,慎点)

89d5682c4de4644204a9e32bedddaeb6.png

第一行作用是关闭回显;

loop指开始循环;

依次生成数据,执行正确程序,执行bug程序;

fc:比较两个文件是否内容相同;

如果相同,继续执行循环;

否则暂停,显示错误的地方;

运行效果:

dc65866a08724613a4502af30ed7f0bd.png

此时打开data.in即可获得自己程序错误的一组数据,也许就是乐学上的某一组保密程序,可以使用-调试功能进一步排查bug。

【下期预告】

利用对拍找出错误的输出结果后,我们如何得知错误是怎样产生的呢?

敬请期待下一期推送:

【编程教程之——调试】

—— E N D ——

编辑:封蕴籍

排版:崔墨迪

 

ID : BIT19信科26er

8946cd916adf7ea500fc1aa319813445.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值