精华内容
下载资源
问答
  • 1、质数定义为在大于1的自然数中,除了1它本身以外不再有其他因数。 2、nn能被mm整除,则m≤n2m≤\frac{n}{2},所以只需要穷举m∈[2,n2]m∈[2, \frac{n}{2}]即可,若在穷举过程中出现了nn%m == 0的情况则n是质数...

    程序分析:
    1、质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
    2、n能被m整除,则mn2,所以只需要穷举m[2,n2]即可,若在穷举过程中出现了n的情况则n是质数,若m能自加到m=n2则n不是质数。

    #include "stdio.h"
    
    int main(void)
    {
        int n = 0;
    
        while (1)
        {
            printf("请输入一个数(质数是大于1的自然数):");
            scanf_s("%d", &n);
    
            if (n == 2 || n == 3)
                printf("%d是质数!\n", n);
    
            for (int m = 2; m <= n / 2; m++)
            {
                if (n%m == 0)
                {
                    printf("%d不是质数!\n", n);
                    break;
                }
                if(m == n/2)
                    printf("%d是质数!\n", n);
            }
        }
    
        return 0;
    }
    展开全文
  • nodejs事件事件循环简介

    万次阅读 2020-12-06 21:37:03
    我们在javascript中监听这些事件,从而触发相应的...同样的nodejs中也有事件,并且还有一个专门的events模块来进行专门的处理。 同时事件事件循环也是nodejs构建异步IO的非常重要的概念。 今天我们来详细了解一下。

    简介

    熟悉javascript的朋友应该都使用过事件,比如鼠标的移动,鼠标的点击,键盘的输入等等。我们在javascript中监听这些事件,从而触发相应的处理。

    同样的nodejs中也有事件,并且还有一个专门的events模块来进行专门的处理。

    同时事件和事件循环也是nodejs构建异步IO的非常重要的概念。

    今天我们来详细了解一下。

    事件

    nodejs为事件提供了一个专门的模块:lib/events.js。

    还记得我们在讲使用nodejs构建web服务器吗?

    const server = http.createServer((req, res) => {
      res.statusCode = 200
      res.setHeader('Content-Type', 'text/plain')
      res.end('welcome to www.flydean.com\n')
    })
    

    这里,每个请求都会触发request事件。

    nodejs的核心API是基于异步事件驱动来进行架构的,所以nodejs中有非常多的事件。

    比如:net.Server 会在每次有新连接时触发事件,fs.ReadStream 会在打开文件时触发事件,stream会在数据可读时触发事件。

    我们看一下怎么来构建一个nodejs的事件:

    const EventEmitter = require('events')
    const eventEmitter = new EventEmitter()
    

    events常用的方法有两个,分别是on和emit。

    on用来监听事件,emit用来触发事件。

    eventEmitter.on('fire', () => {
      console.log('开火')
    })
    
    eventEmitter.emit('fire')
    

    emit还可以带参数,我们看下一个参数的情况:

    eventEmitter.on('fire', who => {
      console.log(`开火 ${who}`)
    })
    
    eventEmitter.emit('fire', '美帝')
    

    再看看两个参数的情况:

    eventEmitter.on('fire', (who, when) => {
      console.log(`开火 ${who} ${when}`)
    })
    
    eventEmitter.emit('fire', '川建国''now')
    

    默认情况下,EventEmitter以注册的顺序同步地调用所有监听器。这样可以确保事件的正确排序,并有助于避免竞态条件和逻辑错误。

    如果需要异步执行,则可以使用setImmediate() 或者 process.nextTick()来切换到异步执行模式。

    eventEmitter.on('fire', (who, when) => {
        setImmediate(() => {
          console.log(`开火 ${who} ${when}`);
      });
    })
    
    eventEmitter.emit('fire', '川建国''now')
    

    除此之外,events还支持其他几个方法:

    once(): 添加单次监听器

    removeListener() / off(): 从事件中移除事件监听器

    removeAllListeners(): 移除事件的所有监听器

    事件循环

    我们知道nodejs的代码是运行在单线程环境中的,每次只会去处理一件事情。

    这一种处理方式,避免了多线程环境的数据同步的问题,大大的提升了处理效率。

    所谓事件循环,就是指处理器在一个程序周期中,处理完这个周期的事件之后,会进入下一个事件周期,处理下一个事件周期的事情,这样一个周期一个周期的循环。

    事件循环的阻塞

    如果我们在事件处理过程中,某个事件的处理发生了阻塞,则会影响其他的事件的执行,所以我们可以看到在JS中,几乎所有的IO都是非阻塞的。这也是为什么javascript中有这么多回调的原因。

    事件循环举例

    我们看一个简单的事件循环的例子:

    const action2 = () => console.log('action2')
    
    const action3 = () => console.log('action3')
    
    const action1 = () => {
        console.log('action1')
        action2()
        action3()
    }
    
    action1()
    

    上面的代码输出:

    action1
    action2
    action3
    

    栈和消息队列

    我们知道函数间的调用是通过栈来实现的,上面的例子中,我们的调用顺序也是通过栈来实现的。

    但并不是函数中所有的方法都会入栈,还有一些方法会被放入消息队列。

    我们再举一个例子:

    const action2 = () => console.log('action2')
    
    const action3 = () => console.log('action3')
    
    const action1 = () => {
        console.log('action1')
        setTimeout(action2, 0)
        action3()
    }
    
    action1()
    

    上面的代码运行结果:

    action1
    action3
    action2
    

    结果不一样了。这是因为settimeout触发了定时器,当定时器到期的时候,回调函数会被放入消息队列中等待被处理,而不是放入栈中。

    事件循环会优先处理栈中的事件,只有栈中没有任何数据的时候,才会去转而消费消息队列中的事件。

    虽然上面例子中setTimeout的timeout时间是0,但是还是要等到action3执行完毕才能执行。

    注意,setTimeout中的timeout并不是在当前线程进行等待的,它是由浏览器或者其他JS执行环境来调用的。

    作业队列和promise

    ES6中的Promise引入了作业队列的概念,使用作业队列将会尽快地执行异步函数的结果,而不是放在调用堆栈的末尾。

    举个例子:

    const action2 = () => console.log('action2')
    
    const action3 = () => console.log('action3')
    
    const action1 = () => {
        console.log('action1')
        setTimeout(action2, 0)
        new Promise((resolve, reject) =>
            resolve('应该在action3之后、action2之前')
        ).then(resolve => console.log(resolve))
        action3()
    }
    
    action1()
    

    输出结果:

    action1
    action3
    应该在action3之后、action2之前
    action2
    

    这是因为,在当前函数结束之前 resolve 的 Promise 会在当前函数之后被立即执行。

    也就是说先执行栈,再执行作业队列,最后执行消息队列。

    process.nextTick()

    先给大家一个定义叫做tick,一个tick就是指一个事件周期。而process.nextTick()就是指在下一个事件循环tick开始之前,调用这个函数:

    process.nextTick(() => {
      console.log('i am the next tick');
    })
    

    所以nextTick一定要比消息队列的setTimeout要快。

    setImmediate()

    nodejs提供了一个setImmediate方法,来尽快的执行代码。

    setImmediate(() => {
      console.log('I am immediate!');
    })
    

    setImmediate中的函数会在事件循环的下一个迭代中执行。

    setImmediate() 和 setTimeout(() => {}, 0)的功能基本上是类似的。它们都会在事件循环的下一个迭代中运行。

    setInterval()

    如果想要定时执行某些回调函数,则需要用到setInterval。

    setInterval(() => {
      console.log('每隔2秒执行一次');
    }, 2000)
    

    要清除上面的定时任务,可以使用clearInterval:

    const id = setInterval(() => {
      console.log('每隔2秒执行一次');
    }, 2000)
    
    clearInterval(id)
    

    注意,setInterval是每隔n毫秒启动一个函数,不管该函数是否执行完毕。

    如果一个函数执行时间太长,就会导致下一个函数同时执行的情况,怎么解决这个问题呢?

    我们可以考虑在回调函数内部再次调用setTimeout,这样形成递归的setTimeout调用:

    const myFunction = () => {
      console.log('做完后,隔2s再次执行!');
    
      setTimeout(myFunction, 2000)
    }
    
    setTimeout(myFunction, 2000)
    

    本文作者:flydean程序那些事

    本文链接:http://www.flydean.com/nodejs-event/

    本文来源:flydean的博客

    欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    展开全文
  • 完全数:所有因子之等于这数。如28=1+2+4+7+14 https://baike.baidu.com/item/完全数/370913?fr=aladdin 注意:1.for语句执行过程:for(表达式1; 表达式2; 表达式3),先执行循环体,再执行表达式3 2.循环...

    完全数:所有因子之和等于这个数。如28=1+2+4+7+14

    https://baike.baidu.com/item/完全数/370913?fr=aladdin

    注意:1.for语句执行过程:for (表达式1; 表达式2; 表达式3),先执行循环体,再执行表达式3

    2.内层循环中表达式1每次循环都会执行!(*´艸`) 吼吼吼

    3.C++中的system("pause");给个链接,不懂的可以去看看

    https://blog.csdn.net/avrmcu1/article/details/38943055

    4.编程时循环控制变量命名原则:

    ①并列关系循环控制变量可以重名

    ②嵌套关系循环控制变量尽量避免重名

     

    #include <iostream>
    #include <iomanip>
    using namespace std;
    void main()
    {
    int n,k,i,sum;
    cout<<"请输入一个正整数n:";
    cin>>n;
    cout<<"1~"<<n<<"的全部完全数为:"<<endl;
    for(i=1;i<=n;i++)
     {sum=0;
      for(k=1;k<i;k++)
    	if(i%k==0)
    		sum+=k;//sum=sum+k
    		if(sum==i)
    			cout<<setw(5)<<i;
      }
    cout<<endl;
    system("pause");
    }

     

    展开全文
  • 用两独立的for循环来实现用户输入的倒序 –IDE:VS2019 –author:爱上太阳的麦芽糖 –14/6/2019 –这是第次写博客啦,要是写的不好要原谅哦 ┭┮﹏┭┮ –QQ:1192273194 要用到的知识点: (1)一元数组 ...

    用两个独立的for循环来实现用户输入的倒序

    –IDE:VS2019
    –author:爱上太阳的麦芽糖
    –14/6/2019
    –这是第一次写博客啦,要是写的不好要原谅哦 ┭┮﹏┭┮
    –QQ:1192273194

    要用到的知识点:

    (1)一元数组
    语法:数据类型 变量名[整数];
    整数是多少,那么这个一元数组内的元素就是多少。比如要用户输入5个数,就写5;要用户输入8个数,就写8;
    (2)for循环(这个就不介绍了)

    步骤

    1:首先我们要定义两个整数变量 a 和 b ;
    设a是一个”一元数组“,可以用来接受元素个数,这里假设让用户输入五个"整数";
    b则用来对a进行控制(当然这里如果看不懂没有关系);

    	int a;
    	int b[5];
    	printf("请输入五个数:\n");
    

    2:第一个for循环来接受用户的输入啦

    for (a = 0; a < 5;a++)
    	{
    		printf("b[%d]:", a);
    		scanf_s("%d", &b[a]);
    	}
    

    首先呢,用a执行5次for循环,因为要接受五个用户输入嘛;
    然后使用printf()给出提示信息,再用scanf_s接受用户的输入;
    注意这里面的a是一个动态的,比如用户第一次输入,a是0,所以会将元素存入到b[0]中;第二次输入的时候,a自增了1,所以将元素存入到b[1]中(这就像python中索引,从0开始到N结束);
    -----PS:如果你用的是VC C++6.0,将scanf_s改成scanf,因为VS2019认为scanf是不安全的;

    3:使用第二个for循环来进行倒序

    for (a = 4;a >= 0;a--)
    	{
    		printf("%d ", b[a]);
    	}
    

    经过第一个循环会有如下结果 :
    -----b[0] = 第一次输入
    -----b[1] = 第二次输入

    -----b[4] = 第五次输入

    那么如何将它们倒过来呢?
    当然只要把中括号倒过来输入一遍就可以啦 ^ o ^,就像下面这样:
    -----b[4] = 第五次输入

    -----b[1] = 第二次输入
    -----b[0] = 第一次输入
    当然你可以b[4],b[3],b[2],b[1],b[0]一个一个输出,但用户如果想输入很多很多的数据,那就太麻烦了,这个时候还是要借助循环来实现偷懒…
    在这里插入图片描述

    展开全文
  • 嵌套循环连接算法一个简单的嵌套循环连接(NLJ)算法从一个循环中的第一个表中读取一行中的行,将每行传递给嵌套循环,以处理连接中的下一个表。该过程重复多次,因为还有待连接的表。 假设三个表之间的连接 t1,t2...
  • 要如何做到 随时按下一个键中断循环,这种操作呢? 已知,每一次循环需要10秒,如果把条件判断放在循环条件,那么即使下一次循环跳出,也会完整执行完上一次10秒的循环。 如果在循环体内部添加条件,使用break...
  • Qt事件事件循环

    千次阅读 2017-11-14 11:48:14
    Qt事件事件循环 在处理QT循环事件的时候遇到了问题,查了半天资料都没弄明白问题出在哪,后来找大牛同事问了一下,同事就给我写了QCoreApplication::processEvent()这个函数,...作为一个事件驱动的工具包,
  • 参看:... 在windows中一个线程只有一个消息队列(PostMessage消息队列),非...
  • 编写一个从 1 加到 end 的当型循环

    千次阅读 2018-06-08 10:26:08
    编写一个从 1 加到 end 的当型循环。变量 end 的值由键盘输入。假如输入 end的值为 6,则代码输出的结果应该是 21,也就是 1+2+3+4+5+6 的结果(不要用sum 作为变量,因为它是内置函数)。a = input() b=int(a) for ...
  • php基础教程 第八步循环补充

    千次阅读 多人点赞 2020-07-14 12:16:24
    While循环和for循环类似,但是在它的圆括号中只填写循环执行的条件。 语法格式如下: while (条件) { 要循环的代码; } 查看以下代码示例: <?php $a=array("1","hello",12,"LiLei",13); $i=0; while ($i<...
  • 怎样在FOR循环内立即终止FOR循环

    千次阅读 2014-12-16 12:21:31
    break终止循环执行循环体下面的代码 return终止循环并且退出循环所在的方法 continue终止当前循环,进行下循环
  • today,我们接触种全新的程序结构——循环结构,它能让代码更加有趣儿~ so,什么是循环结构?当某个条件成立时,周而复始地做某些事 比如: 人的一生如果还活着(条件),就应该不断学习(某些事) 只有循环...
  • C语言入门(九)循环语句和循环控制

    千次阅读 多人点赞 2016-07-12 10:07:42
    循环语句和循环控制  ...初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用;分
  • 问题很简单。 我的代码中有一个foreach循环: foreach($array as $element) { //code } 在这个循环中,我想在第一次或最后一次迭代时做出不
  • C++循环体中实现按esc退出程序

    千次阅读 2019-10-11 13:22:32
    头文件包含:#include <conio.h> 代码实现: #include <iostream> #include <conio.h> int main(int argc, const char** argv) { while (1) { if (_kbhit() &&......
  • 2.第三单元任务一实训:有一个数列:8、4、2、1、23、344、12,编辑实现以下功能。循环输出数列的值;求数列中所有数值的;猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含该数。 import java.util....
  • postman for循环获取Body的JSON数据

    千次阅读 2019-04-28 14:09:38
    在Postman中获取到的JSON是数组格式,想要获取到符合数据的另外一个键对应的值。 如下图: 需要获取 “statusId”: 1 的这一组数据licenseId的值(获取的数据是无序的且变化,Licenses数据会更新增加。) ...
  • #include#include typedef struct node{ int data; struct node *next;... void CreatLinkList(LinkList &L){//建立一个循环链表L,数据为整数,数据由键盘随机输入。 int i; LinkList head; L
  • 1.6 Python循环结构

    万次阅读 2019-05-18 12:48:26
    in 循环1.6.3 range()函数:1.6.4 breakcontinue语句及循环中的else子句: 1.6 Python循环结构 循环结构就是为了将相似或者相同的代码操作变得更见简洁,使得代码可以重复利用 循环结构分为2类:while...
  • 还有种是数据结构是这样的 list = [ { audio : "111.mp3" , audiolist : [ { audio : "111-1.mp3" } , { audio : "111-2.mp3" } , ... ... ] } , { ...
  • 一个大于1的自然数,除了1它自身,不能被其他自然数整除的数叫做质数) 思路: 定义一个for循环和辅助变量i,并给i赋初始值2,i的边界小于z,并且增量为1。第一步先在for循环中判断输入的整数z对i取余数,如果...
  • let params = {id:1,keyWord:'2019',name:'1014'} for in方法 for(let key in params){ console.log(params[key]) // key 是 }
  • c语言学习零碎整理(11):怎样通过判断按键退出循环 -----温铭 blog.csdn.net/wayne92前几天在c#版中看到一个帖子:“如何用c#实现,在while (true)循环中,按Esc退出循环?" 那时候以为只能用hook来监视...
  •  在程序循环比较多的时候,可以在一些关键分支处用上disp语句,可以帮助在命令窗口中观察程序的运行情况,当发现程序被困在循环中时,就可以直接按下暂停,此时程序会暂停且所有变量值都会保留,按下暂停后相应...
  • for循环 重复执行语句。在循环次数已知的情况下使用for循环,且所有for循环均可用while循环实现。 ...while循环 ...在给定的条件为true时执行循环体,否则退出循环体。...、for循环 for循环可以 ...
  • 理解MiniGUI消息循环和窗口过程

    千次阅读 2015-06-13 23:04:59
    1.2 消息消息循环 在Windows系列操作系统中,广泛使用了消息驱动的概念。在MiniGUI中,我们也使用了消息驱动作为应用程序的创建构架。 在消息驱动的应用程序中,计算机...应用程序可以建立一个循环,在这个循
  • 文章目录流程控制一、接收用户输入二、执行结构概述三、if分支四、switch五、循环_while六、do...Java所提供的一个工具,其中封装了许多方法,每个方法都有不同的功能可供我们使用。 语法格式:类型 变量 = new 类(参
  • autohotkey循环

    千次阅读 2018-10-20 10:06:51
    由于没有指定数字, 所以这是无限循环, 直到遇到内部的 "break" 或 "return". { if not GetKeyState("F1", "P") ; 如果此状态为 true, 那么用户实际已经释放了 F1 . ...
  • python:while循环、for循环

    千次阅读 多人点赞 2018-03-17 22:59:56
    循环: 在python编程中,python提供了for循环和while循环 ...2、while循环用于多次判断同一个条件,if 语句只能判断一个条件一次 3、执行语句可以是单个语句或语句块。判断条件可以是任何表达式(参考if...
  • 如图 ,程序运行后发现内部while循环内的停止按钮点击不动,内部循环无法结束。 解决方法:完全可以在事件结构里嵌套while结构,原因在于没有将事件窗口下面的选项“锁定前面板直到分支结构事件结束”的对号去掉,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 270,561
精华内容 108,224
关键字:

内循环和外循环是一个键