死亡循环天下霸唱
天下霸唱,南派三叔,大袖遮天等牛人全集,都给你吧,里面有你要的
死亡循环的内容简介
《死亡循环》讲述几个朋友驾车出行,深夜里遇到大雨迷路被困。出于无聊,各自讲述了一些奇闻异事,然而谁也没有想到,真正使人窒息的冒险,从此时此刻才刚刚开始——诡秘不祥的征兆、通往地底深渊的隧道、空无一人的古老村庄、没有尽头的高速公路,无不隐匿着惊世骇俗的秘密,这永无休止的噩梦根源,究竟是吞噬时间的黑洞?还是生死交界的狭间?
死亡循环怎么样
死循环的举例
以下是一些死循环的例子。
C++的例子
#include<iostream.h>
int main()
{
for(int i=0;;i++)
{
cout<<char(i);
}
return 0;
}
C语言的死循环:
#include <stdio.h>
main()
{
int a = 0;
while (a < 10)
{
printf(%d\n, a);
if (a = 5) {
printf(a equals 5!\n);
}
a++;
}
return 0;
}
上述程序会一直显示Infinite Loop字符串。
BASIC语言的死循环:
10 PRINTInfinite Loop
20 GOTO10'跳到行号=10的位置
X86汇编语言的例子:
loop:
; Code to loop here
jmploop
Python的例子:
whileTrue:
print(Infinite Loop) 以下是一个Visual Basic死循环的例子:
dimxasintegerdountilx > 5'根本不会有x>5的情形x = 1 x = x + 1loop
每一次运行循环时x会先设置为1,然后变为2,因为数值未大于5,所以永远不会退出。若将x = 1由循环内部移到循环之前即可以改善此一情形。
有些程序员可能因为不熟悉特定编程语言的语法而造成死循环,例如以下是一段C语言的程序:
#include <stdio.h>
main()
{
int a=0;
while(a<10)
{
printf(%d\n,a);
if(a=5){//a设定为5,进入无穷回圈printf(a equals 5!\n);}
a++;
}
return0;
}
其预期输出是数字0至9,其中5和6中间会显示a equals 5!,但程序员在编写程序时将设置用的=运算符及判断相同的==运算符弄混了,因此程序会在每次运行循环时都会将a设置为5,因此变量a永远无法到达10,此循环就变成了死循环。 有时不适当的循环退出条件也可能会造成无预期的死循环,例如以下C语言的例子:
float x=0.1;
while(x!=1.1)
{
//可能会因为浮点运算的误差而出现问题
printf(x = %f\n,x);
x=x+0.1;
}
在有些操作系统中,上述程序会运行10次循环然后退出,但有些系统中,上述程序却可能会一直运行,无法退出,问题主要在循环的退出条件(x != 1.1)要在二个浮点数相等时才退出,结果会依系统处理浮点数的方式而定,只要系统运行10次循环后的结果和1.1差一点点,上述程序就会变成死循环。
若将退出条件改为(x < 1.1)就没有这个问题,程序可能会多运行一次循环,但不会变成死循环。另一种解决方式则是用一个整数变量作为循环变量,再依此变量判断是否要退出循环。
在数值分析程序中也可能会出现无预期的死循环,例如程序需一直迭代到误差小于某特定值为止,但若因为运算中的舍去误差,使得误差一直无法小于该特定值,就会产生死循环。 奥尔德森循环(Alderson loop)是指一个循环有设置退出条件,但因为程序的写法(多半是编程错误),造成永远无法满足退出条件,在针对用户界面程序调试时最容易出现这类的问题。
以下C的伪代码中有一个奥尔德森循环,程序是要计算用户输入一串数字的和,用户输入0时退出循环,但程序中用了不正确的运算符:
sum=0;while(true){printf(Input a number to add to the sum or 0 to quit);i=getUserInput();if(i*0){// 若i乘0为真,则使sum加上i的值sum+=i;// 但这不可能发生,因为不论i为何值(i * 0)都是0。如果条件中用的是!=而非*,代码就能正常运行}if(sum>100){break;// 终止循环。结束条件存在,但从来没有达到过,因为sum永远不会增加}}
“奥尔德森循环”是来自一个Microsoft Access的程序员,他编写的程序产生一个有模式的对话框,用户需要回应,程序才能继续运作,但对话框没有OK键或取消键,因此只要此对话窗出现,Access程序就无法继续运作。 无穷递归是一种由递归造成的死循环。例如以下计算阶乘的C语言程序
unsigned int fac(unsigned int a){
//n!=n*(n-1)!
return(fac(a-1)*a);
}
一般递归的程序会有一特定条件,此条件成立时直接计算结果,而不是通过递归来计算结果,若程序中未定义此条件,就会出现无穷递归。
无穷递归会造成堆栈溢出,而无穷递归不会退出,因此也是死循环的一种。不过若递归程序是使用尾部递归的处理方式,在有些编程语言(如Scheme)中会优化成循环,因此不会造成堆栈溢出。
上述的程序可以修改成没有无穷递归的程序。
unsigned int fac(unsigned int a){
if(a==0)
{//定义0!=1
return1;
}
else
{
return(fac(a-1)*a);
}
}
死亡循环的分卷简介
《死亡循环卷一:雨夜谈鬼事》叙述了我、阿豪、臭鱼三人驾车出行,深夜偶遇暴雨,在路边寻到一家药材铺住宿。药铺中有一姓陈老人和一个小孩子,三人开始在药铺中说起怪谈来。过了一会,又见了两名女生藤明月和陆雅楠进来避雨,他们继续说起怪谈。陆雅楠出去车里拿食物却一去不返,众人去寻她,只见到陆雅楠的断肢。他们又在那里连续碰到怪事,阿豪、藤明月、臭鱼陆续死去,陈老向我提到了此地“门”的传说,一条能吞噬时间的怪虫。我从阴间走出时间的漩涡,等我再醒来时,四个人正在屋子里围成一圈讲故事,我似乎做了个噩梦,似乎忘了刚才发生什么事情,看看周围,问:陆雅楠怎么还没回来?
《卷2:时失高速公路》:我和臭鱼、阿豪、藤明月正在屋里躲雨讲故事,陆雅楠失踪,四人即开车出去寻找。但是这公路永远走不完,我正要下车给路牌做标记,臭鱼在后视镜里看到了鬼车,车子翻进了山谷。一等人在山谷中寻到一个山村,名殛神村。在一番的怪事之后,众人回忆起在被时间扭曲之前发生的事情,其实巨虫“门”就在凌晨两点钟吞噬时空,而那一刻,时间凝固。众人在“门”的吞噬里死去。当我跌进门的漩涡中时,我猛地被臭鱼摇醒,发现自己坐在车的后排,他说:雨下的太大了,必须得找个地方借宿才行。然后我说:“这场暴雨来得好急,看来今天晚上肯定是回不去了。”