精华内容
下载资源
问答
  • 2018-09-26 21:48:37

    在下列选项中,没有构成死循环的程序段是_____。

    A. int i=100;
    while(1)
    i=i%100+1;
    if(i>100)
      break;
    
    B.for(;;);
    
    C.int k=1000;
    do  
    ++k;
    while(k>=1000);
    
    D.int s=36:
    while(s);
    --s;

    答案:C

    A 选项i=i%100+1 所以i>100不会成立,就不会break。
    D 因为while(s); 后的这个;使得它成为一个死循环,后面的--s没机会执行。

    更多相关内容
  • 程序死循环

    千次阅读 2016-12-08 16:39:04
      死循环是一个非常让人反感的问题,它 有时候是站在程序正常运行的外面下,进行着错误的行为,有时候很久才能发现这个问题。(而在这个过程中也会造成很大的损失)   容易造成损失的地方,人们就会尝试去解决...

    问题

      编程结束了,我们的程序跑起来了。但是我们不知道其是否能终止,结果是否正确等等。我们面临着一系列的问题。
      死循环是一个非常让人反感的问题,它 有时候是站在程序正常运行的外表下,进行着错误的行为,有时候很久才能发现这个问题。(而在这个过程中也会造成很大的损失)
      容易造成损失的地方,人们就会尝试去解决这些问题。
      为了避免这样的问题,人们开发了一些检测的方法,用来检测程序中可能存在死循环的地方。
    (这里主要指单线程)

    死循环的本质

      一段程序,能够陷入死循环,是因为具备了一定的死循环的条件的。

    • 环的存在】对于一段代码,构造出其语句流程图,那么环如果存在是形成死循环的一个必要的条件。(图1)
    • 关键结点】在一个环中并不是所有的结点对于死循环的形成都是同等重要的。那些处在跳出循环以及进入循环处的结点十分重要。(比如说,while,for循环中的条件判断成分,决定了循环的走向,条件控制的错误将会导致死循环的产生)


      PS:
    • 借鉴意义】当我们去查找一个死循环的问题的时候,要从循环体中的关键结点(控制条件处)入手进行分析。
    • 数据流简化】死循环是循环的一种非正常方式,控制逻辑的错误是导致这种问题的主要原因。(通过分析与条件相关的数据流链,我们能够从数据流角度,进一步缩小分析的范围,筛选出不在这条数据流上的一些东西,简化)

    图1:
    这里写图片描述

    简单举例

    关于下面代码的相关说明:

    • 循环结构的存在】for结构的存在,决定了环路的存在。
    • 关键控制点】关键控制点为 i <data。这句话直接决定了循环能否跳出,是否会进入死循环。
    • 数据流跟踪】在进行数据流跟踪的时候,我们只关注与i,data直接相关 或者 间接相关的语句,所以我们可以在分析时不考虑输出语句System.out.println(“the data is : ” + data);。所以我们定位到了data++这条语句。
        public static void testCycle(){
            int data = 5;
            for(int i=0;i<data;i++){//关键点1
                System.out.println("the data is : " + data);
                data++;//关键点2
            }
        }
    展开全文
  • ) //第一次for循环i=1。第二次循环i=2 { switch(i%3) { case 0:k++; case 1:k++;break; //case2跳出switch循环 case 2:k++;continue; //case2继续switch循环 } i+=1; //i自增为2 } printf("%d\...
    #include<stdio.h>
    main()
    {
    	int i=1,k=0;
    	for(;i<6;)		//第一次for循环i=1。第二次循环i=2
    	{
    		switch(i%3)
    		{
    		case 0:k++;
    		case 1:k++;break;		//case2跳出switch循环
    		case 2:k++;continue;		//case2继续switch循环
    		}
    		i+=1;		//i自增为2
    	}
    	printf("%d\n",k);
    }
    

    如果我们通过修改程序可以显而易见找到进入死循环位于case2

    #include<stdio.h>
    main()
    {
    	int i=1,k=0;
    	for(;i<6;)			//第一次for循环i=1。第二次循环i=2
    	{
    		switch(i%3)		
    		{
    		case 0:k++;printf("k=%d\n",k);
    		case 1:k++;printf("k=%d\n",k);break;		//case2跳出switch循环
    		case 2:k++;printf("k=%d\n",k);if(k<10)continue;		//case2继续switch循环
    		}
    		i+=1;	//i自增为2
    		printf("i=%d\n",i);
    	}
    }
    

    运行结果:
    在这里插入图片描述

    展开全文
  • Python for死循环

    千次阅读 2020-11-24 00:17:02
    编写死循环程序实际上是不对的,一旦写出来一个程序运行后发现是死循环,一定要立即终止程序的运行!用Python实现一个死循环非常简单,while True就可以。for实现死循环步长为0然而我的标题是要求用Python的for实现...

    循环

    循环是指重复执行一段代码若干次,为什么要有循环?因为循环可以避免大量的代码重复。

    死循环

    当一个循环可以执行无限次,也就是没有终止条件,我们称这个循环是死循环。编写死循环程序实际上是不对的,一旦写出来一个程序运行后发现是死循环,一定要立即终止程序的运行!用Python实现一个死循环非常简单,while True就可以。

    for实现死循环

    步长为0

    然而我的标题是要求用Python的for实现死循环,首先我们想到的是for i in range,range我之前的文章提到过,是在两个整数之间按照一定的步长生成一个序列,range是一个可迭代对象,而不是真的序列对象。那么有些人就想到了一个办法,步长为0不就是一直都不会改变值吗?这样不就是死循环了?事实上还是要通过程序运行来检测,简单的编写了一个程序,如图所示。

    程序运行之后并没有执行成功,而是引发了一个异常,如图所示。

    稍微翻译一下,第三个参数(步长)不能为0!这种办法直接宣告失败,还有其他办法!

    终止条件是一个无限大的整数

    Python里面表示无限大的数是使用float('inf')(无限大的小数),我只要再用int去转换一下不就是无限大的整数了吗?继续用代码实现一下,看看是不是真的能行。

    步长没写,默认为1,运行之后还是异常,如图所示。

    稍微翻译一下,不能把无限大的小数转换为整数!依旧是失败。。。。。

    参考其他语言

    Python的for i in range(start, end, step)写到Java里面就是for (int i = start; i < end; i += step)。根据之前的东西,Java实现的for死循环如下。

    同样的逻辑,用到Python上也是非常简单,如图所示。

    但是这样写运行出来并不是一个死循环,结果如图所示。

    为什么会出现这样的结果?可能是因为for i in range的i和i = 0的i不是同一个i,是不是同一个可以通过使用id这个内置函数查看内存地址就行。不要只知其然,还要知其所以然!

    为什么会选择从300开始循环?因为Python把一些常用的数据在运行之前都加到了内存中,这些数据就是从-5到255之间的所有整数,所以我选择避开这一段区域,选一段正常的地方来查看内存地址。运行结果如图所示。

    从结果中我们也非常容易的看出来,因为地址不同,两个i并不是同一个i。

    列表插入值

    Python的for不仅仅可以用在range这里,还可以遍历容器,比如字符串,列表,元组,字典,集合……我们写死循环完全可以通过在for遍历列表的时候不停地插入值,让它一直遍历下去,如图所示。

    这个程序确实是一个死循环,但是只是停留在理论上的死循环,无法让它真的在机器上无休止的运行,因为它在不停地开辟内存空间,总有一刻内存会爆!

    for死循环(不会爆内存)

    自定义可迭代对象

    我之前讲过,要想让一个类实例化出来是一个可迭代对象,必须实现__iter__和__next__两个魔法方法,在这里完全可以对这两个方法动点手脚,实现无限迭代,如图所示。

    itertools模块中的类

    count

    难道一定要自己定义类?难道没有相应的库给一个无限迭代的类吗?实际上无限迭代的东西Python确实有封装,实例化出来一个无穷迭代的对象的类确实有,大部分位于itertools模块,比如count,cycle,repeat……

    count的构造方法有两个默认参数,第一个参数是开始计数(默认为0),第二个参数是步长(默认为1),调用这个构造方法(假设使用默认参数)会实例化出一个无穷迭代的对象,for迭代这个对象就会有如下输出。

    0 1 2 3 4 5 ……它会无穷无尽的迭代下去,但是迭代到后来依旧会爆内存,因为Python没有数据越界,C语言里面都说整数int占用了四个字节,在Python里面就不是这样了,看下面一个例子,两个数同样是int类型,但是在内存中占用的字节数并不是一样的。

    这里使用内置模块sys里面的getsizeof函数来查看对象占用多少个字节,可以发现0和10^50这两个整数占用的字节并不一样,总有一个无限大的整数会把内存给爆掉,具体多少我懒得算了。

    cycle

    cycle就是转圈,其构造方法传入一个可迭代对象,比如字符串"abc",for遍历这个对象,会一直循环输出a b c a b c……一直这样无限循环下去,而且不会爆内存。

    repeat

    repeat类实例化出来的对象也是无穷迭代的,它的构造方法必须传入一个参数,参数类型无限制,第二个参数是表示次数,默认是None,如果第二个参数保持默认,就产生了一个无穷迭代的对象,用for迭代会一直重复第一个参数。

    展开全文
  • python中死循环

    千次阅读 2020-11-24 00:16:58
    广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的... 编写死循环程序实际上是不对的,一旦写出来一个程序运行后发现是死循环,一定要立即终止程序的运行! 用python实现一个...
  • for循环死循环语句

    千次阅读 2021-05-20 01:32:00
    for语句和while语句还有do while语句1:for循环for语句的格式为:for (初始化语句; 条件语句; 控制语句){语句1 ;语句2 ;。.语句n ;}for 语句的执行顺序是:首先执行“初始化语句”;然后测试“条件语句”;若条件...
  • Drools 规则引擎死循环问题解决

    千次阅读 2020-02-22 17:50:07
    在《Drools7 规则引擎视频教程》中已经讲到,使用modify或update的时候在某种程度上会导致死循环。 昨天一同学在使用Drools规则引擎时便遇到了该问题。下面看该同学贴出来的规则代码: 首先我们来分析一下上面的...
  • python循环定时中断执行某一段程序...这样子每隔一时间执行一次中断当然不能用sleep,这样子整个进程就停在这了,而不是接着爬数据解决方法用到threading的Timer,也类似单片机那样子,在中断程序中再重置定时器,...
  • 循环结构程序设计测试

    千次阅读 2021-10-29 00:04:35
    1-1 for语句的一般形式如下,若表达式2的值为“假”,则结束循环。...执行以下程序段,sum的值是55。 int i, sum; for (i = 1; i <= 10; i++){ sum = sum + i; } F 1-4 若变量已正确定义,执行以下whil
  • java while (true) 死循环

    千次阅读 2021-02-12 19:31:24
    true 即表示为真。因此while(true)是一个无限循环,因为表达式的...用exit也可以跳出,此时表示了函数直接返回​1、在java网络通讯的程序里原本有一是这样的:while(in.readLine()!=null){String aa=in.readLine();...
  • python for-Python for死循环

    千次阅读 2020-11-01 12:11:56
    编写死循环程序实际上是不对的,一旦写出来一个程序运行后发现是死循环,一定要立即终止程序的运行!用Python实现一个死循环非常简单,while True就可以。for实现死循环步长为0然而我的标题是要求用Python的for实现...
  • C语言入门系列之5.循环控制结构程序

    千次阅读 多人点赞 2020-04-24 11:19:48
    循环结构在给定条件成立时,反复执行某程序段,包括循环条件和循环体。goto语句是一种无条件转移语句,需要用标号来指定跳转的位置。while语句当循环条件为真时, 执行循环体语句,可能会出现死循环。do-while语句先...
  • Myeclipse/Eclipse 如何停止死循环进程

    千次阅读 2018-12-14 21:59:15
    今天在在练习hibernate 对象导航查询的...在点击执行后,控制台持续高速输出信息,电脑cpu温度逐渐增高,如何让程序停止下来 原来点击控制栏上的红色小方框即可,如果点一下没有用 那就点住不放,知道你的进程结...
  • 死循环警告⚠】i=i++导致的死循环

    千次阅读 多人点赞 2021-07-14 12:16:08
    看到下面的这代码,相信广大CRUD程序猿在亲切不过了吧?有没有发现哪里不对呢? for (int i = 0; i < Num; i = i++) { ...... } 发现错误的同学,没必要再往下看了。。。 ------------------------------...
  • 在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写...
  • 检测Lua脚本中死循环及解决方法

    千次阅读 2018-08-30 17:02:50
    检测Lua脚本中死循环及解决方法是本文要介绍的内容,一般LUA在测试的时候,往往会因为什么原因导致死循环,那么本文将会解决...所以检测用户脚本中的死循环并中止这脚本的运行就显得非常重要了。 可是,一个现...
  • HashMap进行put操作会引起死循环

    千次阅读 多人点赞 2020-07-03 13:22:33
    最近在磕《java并发编程艺术》,在看到第六章的时候出现了下面不是很理解的东西,如下 《java并发编程艺术》截取 为什么要使用ConcurrentHashMap 在并发编程中使用HashMap可能导致程序死循环。而使用线程安全...
  • 【Map】——HashMap死循环

    千次阅读 2018-12-20 10:38:32
    死循环 Hash表数据结构 简单地说一下HashMap这个经典的数据结构。 HashMap通常会用一个指针数组(假设为table[])来做分散所有的key,当一个key被加入时,会通过Hash算法通过key算出这个数组的下标i,...
  • HashMap 中的死循环

    千次阅读 多人点赞 2020-07-06 10:14:29
    笔记摘录自疫苗:JAVA HASHMAP的死循环 1.存在的问题 单线程的程序使用 HashMap 没有问题,但是由于程序性能的需求,程序由单线程变为多线程,这时使用 HashMap 就可能会产生问题。 程序经常占了100%的CPU,查看...
  • hashmap死循环示例及检测方法

    千次阅读 2016-08-13 16:39:27
    hashmap属于线程不安全容器,在并发环境有可能发生死循环。本文将模拟死循环出现的场景,再结合jstack说明如何一步步定位出现死循环的代码。
  • 关于Looper.loop()死循环???

    千次阅读 2018-05-28 15:51:56
    一直以为自己把Android消息机制弄明白了,直到前时间面试,发现还有细节方面没搞清楚,查找相关资料,此篇文章是对Looper对象是怎么获取的,线程里的ThreadLocal,Looper.loop()死循环问题等的理解和总结。...
  • 最近几天由于娱乐(~ ̄▽ ̄)~需要,去网上了解了一些VBS有关的知识,在此做个总结。 VBS中的循环大致分为以下四种: For…Next:指定循环次数,使用计数器重复运行语句 For Each…Next:对于...下面详细介绍 For...
  • while (1) // 死循环 { j=0x01; // j初始化为0x01,左移初始值 for(i=0;i;i++) // for循环语句,完成8个循环 { P1= ~ j; // 对变量j 中的值按位取反后,从P1口输出 delay02s( ); // 延时0.2s j= j; // 左移1...
  • 循环结构又称重复结构,是按照一定的条件重复执行某语句的程序控制结构。 基本的循环结构: 1)goto语句和if语句构成的循环结构; 2)while语句构成的循环结构 3)do-while语句构成的循环结构 4)for语句...
  • 一个For语句导致死循环的例子

    千次阅读 多人点赞 2014-02-26 10:47:44
    在Java开发中常用到For循环,它对简化业务处理,提高效率,非常有...但要防止程序算法中可能导致死循环的情况,而且有的死循环还不好察觉。比如下面这个例子,算法极容易认为是50,实际上其结果是无穷大的一个死循环
  • 面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来。开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 **求职者:**应该...
  • C语言_04 三种程序结构 顺序, 选择(分支), 循环结构

    万次阅读 多人点赞 2018-02-06 18:31:49
    概念 在C语言程序中,一共有三种程序...循环结构,循环结构有一个循环体,循环体里是一代码。对于循环结构来说,关键在于根据判断的结果,来决定循环体执行多少次。C语言循环控制语句是一个基于C语言的编程语句,...
  • A、运行程序段后输出0B、运行程序段后输出1C、程序段中的控制表达式是非法的D、程序段循环无数次[单选题]下面程序段的输出结果是________.x=3;do { y=x--;if (!y) {printf("*");continue;}printf("...
  • 易语言假无响应采用处理事件解决办法处理事件()一个比较简单的理解是:让程序反应过来这个函数一般是用在延时前面或后面,如果不用的话程序很容易形成假,造成程序无响应如下图,虽然这个程序还在运行,但是界面...
  • 顺序结构程序设计练习题_

    千次阅读 2020-12-18 18:02:17
    C 语言练习题总汇一、 单选题:【顺序结构程序设计】1.己知int k,m=1;执行语句k=-m++;后k 的值是( A )。(提示:负号与自加运算符同级,结合方向从右向左)A)-1 B) 0 C)1 D)22.若有定义int x=4;则执行语句 x + = x ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,787
精华内容 40,714
关键字:

下面程序段不是死循环的是