Option  Base  1  
 
Private  Sub  Command1_Click()  
Dim  a()  As  Integer  
Dim  n  As  Integer,  i  As  Integer,  j  As  Integer  
n  =  Val(Text1.Text)  
ReDim  a(n)  
For  i  =  1  To  n  
         a(i)  =  i  
Next  i  
 
 
a(1)  =  0  
For  i  =  2  To  Int(Sqr(n))  
       If  a(i)  <>  0  Then  
             j  =  i  +  1  
             Do  While  j  <=  n  
                   If  a(j)  <>  0  Then  
                         If  a(j)  Mod  a(i)  =  0  Then  
                               a(j)  =  0  
                         End  If  
                   End  If  
             j  =  j  +  1  
             Loop  
       End  If  
Next  i  
For  i  =  1  To  n  
       If  a(i)  <>  0  Then  
     Print  a(i)  
       End  If  
Next  i  
 
 
 
j  =  1  
For  i  =  1  To  n  
       If  a(i)  <>  0  Then  
       a(j)  =  a(i)  
       j  =  j  +  1  
       End  If  
Next  i  
 
 
Text2.Text  =  j  
For  j  =  1  To  j  
       If  j  Mod  6  =  0  Then  
                 Print  
       ElseIf  j  Mod  6  <>  0  Then  
             Print  Tab(8  *  (j  Mod  6));  
       End  If  
       Print  a(j)  
Next  j  
       End  Sub  
最后两段是输出程序,输出时并未按横排每5个输出而后换行。而是先竖行输出在斜行输出。text2中的个数也比实际多一个。郁闷啊!  

解决方案 »

  1.   

    '将Text2.Text = j下面的那段循环改为如下,同时建议你好好看看Print帮助:
    For j = 1 To j
        Print Tab(8 * ((j - 1) Mod 5)); a(j);
    Next j关于Print参看MSDN帮助:
    ——————————————————————————————
     
    Print 方法
             在 Immediate 窗口中显示文本。语法object.Print [outputlist]Print 方法的语法具有下列对象限定符和部分:部分 描述 
    object 必需的。对象表达式,其值为“应用于”列表中的对象。 
    outputlist 可选的。要打印的表达式或表达式的列表。如果省略,则打印一空白行。 
    outputlist 参数具有以下语法和部分:{Spc(n) | Tab(n)} expression charpos部分 描述 
    Spc(n) 可选的。用来在输出中插入空白字符,这里,n 为要插入的空白字符数。 
    Tab(n) 可选的。用来将插入点定位在绝对列号上,这里,n 为列号。使用无参数的 Tab(n) 将插入点定位在下一个打印区的起始位置。 
    expression 可选。要打印的数值表达式或字符串表达式。 
    charpos 可选。指定下个字符的插入点。使用分号 (;) 直接将插入点定位在上一个被显示的字符之后。使用 Tab(n) 将插入点定位在绝对列号上。使用无参数的 Tab 将插入点定位在下一个打印区的起始位置。如果省略 charpos,则在下一行打印下一字符。 
    说明可以用空白或分号来分隔多个表达式。对系统指定的国别设置,用小数点分隔符将所有打印到 Immediate 视窗的数据正确格式化。关键字要用适用于主应用程序的语言输出。对于 Boolean 数据,或者打印 True 或者打印 False。根据主机应用程序的地区设置来翻译 True 和 False 关键字。使用系统能识别的标准短日期格式书写 Date 数据。当日期或时间部件丢失或为零时,只书写已提供的部件。如果 outputlist 数据是 Empty,则无内容可写。但是,如果 outputlist 数据是 Null,则输出 Null。在输出 Null 关键字时,要把关键字正确翻译出来。要把错误数据作为 Error errorcode 输出。在输出 Error 关键字时,要把关键字正确翻译出来。如果在具有缺省显示空间的模块外使用此方法,则需要 object。例如,如果没有指定对象就在标准模块上调用此方法,则将导致错误发生,但是,如果在窗体模块上进行调用,则会在窗体上显示“outputlist”。注意 因为 Print 方法是按照字符比例进行打印,所以字符数与字符所占据的宽度固定的列的数目无关。例如,像 “W” 这样的宽字母占据的宽度超过一固定列宽,而像 "i" 这样的窄字母占据的宽度则较小。考虑到要使用比平均字符更宽的空间,表列一定要留有足够余地。另外,也可以使用固定间距的字体(像 Courier 字体)来确保每一字符均只占一列。