发布网友 发布时间:2022-05-15 06:44
共1个回答
热心网友 时间:2023-10-12 06:35
用自然语言描述算法:(1)输入N;(2)将1送入I(I←1);(3)重复执行下面的操作,直至I=N;(4)将2送入K(K←2);(5)重复执行下面操作,直到K=I-1;A.将I除以K的商送入J(J←I/K);B.若J是整数,I增加1并转向(3);C.否则将K增加1并转向(5);(6)输出I,I增加1并转向(3);(7)结束。根据以上算法,用QBASIC语言可编写如下程序:10 INPUT N20 FOR I=1 TO N30 FOR K=2 TO I-140 J=I/K50 IF J=INT(J) THEN GOTO 8060 NEXT K70 PRINT I,80 NEXT I90 END程序中使用了GOTO无条件转移语句,破坏了程序的结构。寻找另一思路:判断一个自然数M是不是素数,可用2、3、4……去除M,如果这些数都不能整除M,则M是素数。用结构化流程图N-S图描述该算法。INPUT NFOR M=1 TO N STEP 2 K=INT(SQR(M)) I=2 FLAG=1 DO WHILE (I<=K) AND (FLAG=1) IF M MOD I=0 THEN FLAG=0 I=I+1 LOOP IF FLAG=1 THEN PRINT M,NEXT MEND程序中FLAG是一个“标志变量”,FLAG=1表示M未被任何一个整数整除过。如果在某一次循环中,M能被一个整数I整除,则FLAG就置成0。设置FLAG变量的目的主要是为了避免转移语句的出现。因为如果没有设置FLAG变量,在循环执行中,某一次M能被I整除,则要么继续执行循环,直到内循环全部执行完毕,要么用转移语句直接跳出内循环。显然,前者是毫无效率地浪费时间,而后者又不符合结构化程序设计的要求。