none
If m = 5 Then放在里面外面怎么都一样,谁解释下谢谢 RRS feed

  • 问题

  • Public Class Form1

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim i As Integer, j As Integer, m As Integer, t As Boolean
            For i = 3 To 100
                t = True
                For j = 2 To i - 1
                    If i Mod j = 0 Then t = False
                Next
                If t = True Then


                    RichTextBox1.Text = RichTextBox1.Text & i & " "
                    m = m + 1
                End If
                If m = 5 Then
                    m = 0
                    RichTextBox1.Text = RichTextBox1.Text & vbCr
                End If
            Next
           
        End Sub

    ‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim i As Integer, j As Integer, m As Integer, t As Boolean
            For i = 3 To 100
                t = True
                For j = 2 To i - 1
                    If i Mod j = 0 Then t = False
                Next
                If t = True Then


                    RichTextBox1.Text = RichTextBox1.Text & i & " "
                    m = m + 1
                    If m = 5 Then
                        m = 0
                        RichTextBox1.Text = RichTextBox1.Text & vbCr
                    End If
                End If
               
            Next
           
        End Sub

    是求3-100的素数

    2010年5月14日 6:22

答案

  • 你好!

         从逻辑上来说肯定是不同的,你的第一种写法是两个独立的If测试,无论If t = True是否成立,If m = 5都会测试的!

         而第二种写法是嵌套的测试,只有If t = True成立,才有机会测试If m = 5是否成立!


    周雪峰
    • 已标记为答案 Kira Qian 2010年5月21日 9:59
    2010年5月14日 11:09
    版主
  • t=true 是i为素数的标记,你的代码只将素数打印

    通过下面的流程图你就会发现实际上在i为素数时,都是到一行5个数时换行

    只不过一个是当为素数时,你判断一下是不是一行有5个数了

    另一个逻辑是只要一行打印了5个数就换行,但是你只打印素数,所以结果是一样的,逻辑上其实也是相同的

    http://i783.photobucket.com/albums/yy118/cydirac/FlowChart2.jpg

    http://i783.photobucket.com/albums/yy118/cydirac/FlowChart1.jpg

    • 已标记为答案 Kira Qian 2010年5月21日 9:59
    2010年5月15日 6:22

全部回复

  • 或OR 与 和And 的关系

    If t = True OR  m = 5

    If t = True And m = 5

     

    2010年5月14日 6:27
  • 你是说在里面外面就这样吗?哪为什么两个都对呢?

    2010年5月14日 6:44
  • 你好!

         从逻辑上来说肯定是不同的,你的第一种写法是两个独立的If测试,无论If t = True是否成立,If m = 5都会测试的!

         而第二种写法是嵌套的测试,只有If t = True成立,才有机会测试If m = 5是否成立!


    周雪峰
    • 已标记为答案 Kira Qian 2010年5月21日 9:59
    2010年5月14日 11:09
    版主
  • t=true 是i为素数的标记,你的代码只将素数打印

    通过下面的流程图你就会发现实际上在i为素数时,都是到一行5个数时换行

    只不过一个是当为素数时,你判断一下是不是一行有5个数了

    另一个逻辑是只要一行打印了5个数就换行,但是你只打印素数,所以结果是一样的,逻辑上其实也是相同的

    http://i783.photobucket.com/albums/yy118/cydirac/FlowChart2.jpg

    http://i783.photobucket.com/albums/yy118/cydirac/FlowChart1.jpg

    • 已标记为答案 Kira Qian 2010年5月21日 9:59
    2010年5月15日 6:22
  • 不考虑是否分行输出m=5

    再问下for i=3 to 100是否也不好,因为如i=100时j要判断到50...99能否被整除,

    不知道t怎没随j变化,【t】也要变化好几次,就不只是true还是false,是吧

    2010年5月18日 1:13
  • 因为如i=100时【j】要判断到50...99能否被整除,不知道t怎没随j变化,【t】也要变化好几次,就不知最后到底是true还是false?
    2010年5月19日 10:38