江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2009秋江苏计算机常用算法与上机注意事项

第三次课程:常用算法与上机注意事项
在实际的考试中,笔试中的补充代码与上机中的改错、编程是学生普遍感到畏惧的,也是历年得分率很低的,在此,给大家说明一下关于这方面解答题目的思路:
一:要想取得好成绩,第一要搞清楚题目意思,不能乱猜
例题:(2007年春填空第7题)
              下面程序功能是:将文本框中用逗号分割的数据(文本框中必须要有数据),分别赋值给二维数组B的各个元素,并将B数组各个元素分行显示在文本框中,程序界面参见下图

private sub Command1_click()
   dim b(3,3) as single, I as integer, Pos1 as integer
   dim Pos2 as Integer, S as string, J as integer
   S=text1
   if S=”” then
       Text1=”请输入数据”
       ___________________
   end if
   For I=1 to 3
       For j=1 to 3
           Pos1=_____________________
           pos2=Instr(Pos1,S,”,”)
    
           If _____________________then
                    B(I,J)=Val(Mid(S, Pos1, Pos2-Pos1))
Else
                 B(I,J)=Val(Mid(S,Pos1))
           End If
           Text2=Text2 & Str(B(I,J))
      Next J
      ______________________
   Next i
End Sub
分析:拿到题目后,要分步骤,首先根据题目找出题目中的关键字眼
 (1)逗号分割的数据
 (2)文本框中必须要有数据
(3)赋值给二维数组B
(4) 各个元素分行显示
根据关键字眼找代码中的实现部分
  文本框中必须要有数据实现代码:                     
    if S=”” then
       Text1=”请输入数据”
       ___________________
end if
 逗号分割的数据:实现代码
  pos2=Instr(Pos1,S,”,”)
赋值给二维数组实现代码
If _____________________then
         B(I,J)=Val(Mid(S, Pos1, Pos2-Pos1))
Else
     B(I,J)=Val(Mid(S,Pos1))
 End If
各个元素分行显示实现代码:
Next J
      ______________________
   Next i

(二)一是加深对For循环程序的理解,每一个题目都涉及到了for循环的使用,始终要记住,每一个题目都是有规律可寻的
(1)务必熟悉For循环执行流程(请查书,此处不多说)
(2)循环体中循环变量的改变影响循环次数,而初值、终值和步长的改变不会影响循环次数

(三)常见算法:
(1)穷举法:
基本思想:不重复,不遗漏的列举出所有可能的情况,从中寻找满足条件的结果
适合用穷举法来解决的问题应具有下面两个特点:
1有明显的穷举范围且穷举的数目应该是有限的
2可能按某种规则列举穷举对象
例题: <2004—2007年历年真题>P168页编程题目
(2)素数问题:
素数是指只能被自己与1整除的数,最小的素数是2
例题: <2004—2007年历年真题>P169页改错题目
(3)整数拆分:
整数拆分就是将一个整数的个位、十位、百分位一一分离出来
例题:<2004—2007年历年真题>P172页改错题目
(4)交换
将两个变量的值互相交换,交换时一般采用中间变量的方法:
例题:<2004—2007年历年真题>P173页编程题目
(5)最大公约数
欧几里得算法:辗转相除法(详细可参考书)
例题:<2004—2007年历年真题>P174页编程题目
(6)进制转换
 十进制转换为二进制:除二取余,直到商是0为止,再反转
十进制转换为八进制:除八取余,直到商是0为止,再反转
  十进制转换为十六进制:与取二、八进制是一样的,所不同的是会遇到大于等于10的余数,需要转化成字母:
           10-A   11->B  12->C  13->D  14->E  15->F
  二进制转换成十进制:按位权展开,展开时乘以2的次幂即可,如:(10101)=1*2^4+0*2^3+1*2^2+0*2^1+1*2^0=21
 八、十六进制转换成十进制:按位权展开,展开时乘以8、16的次幂即可
  例题:<2004—2007年历年真题>P147页编程题目
(7)递归调用:
详细见书说明
(8)迭代算法
特点:(1)问题中由一个不断由旧数值推出新值的过程
      (2)迭代过程有终止的条件
例题:2007年春笔试试题填空第六题
(9)冒泡法排序(详细见书)
特点:(1)首先进行第一趟冒泡,从数组的第一个元素开始,每一个元素都与它的下一个元素进行比较,如果小于等于下一个元素则位置不变,否则交换两个位置,这样最大的元素肯定就到了最后一个位置
      (2)然后进行第二趟冒泡,从数组的第一个元素开始,到n-1个元素结束,循环继续上述过程完成冒泡过程
(10)累加与累乘
特点:重复的在一个变量上做相加或相乘运算
do while true
       sum=sum+1
loop
(11)最大最小值问题
  特点:通过比较,确定最大或最小值
        dim a(10) as integer
        max=a(1)
        for i=2 to 10
            if a(i)>max then max=a(i)
        next
(12)矩阵问题
例题:2007年春填空第八题
特点:利用二维数组来解决
上机考试注意事项
上机考试最忌讳紧张,应该沉着。一般首先应该把第1道改错题的代码按原样输入进去,输入时要细心,不要自己制造新错误。输人完毕应先按文件名要求保存;再试着运行看看系统提示什么错误,不要先急于运行,以免遇到死循环的诗崭。一旦出现死循环可能会前功尽弃,可以用Ctrl++[Break】键退出死循环。如果死循环后采用重新启动vb的做法,这样先前还没有保存的文件就丢失了。最后根据报错或试运行结果来判断出错原因,进行修改。记住:发现有实在改不出来的错误,可先搁一搁,接着去做编程题目,,等做完编程题的基本部分后,再回过来改错上机考试的试题及评分标准
    上机题总分占40分,其中改错题占14分,编程题占26分。
    (1)改错题:题目中都是设3个错误点(在历年上机考题中也出现过只有2个错误点的试题),一般分别是语法错误(如数组的声明、重复定义等略有难度的语法错误)、运行锚误、逻辑错误等,这些错误基本上都是平时编程时比较容易犯的错误,错误点不重复。 评分标准:录入原题:2分。改错:4分/个。根据改错点给分,新错误不扣分。
 (2)编程题:按照题目要求的功能,根据参考界面编程,程序中都涉及一定难度的算法。
 评分标准:界面设计:根据界面元素的复杂程度,给5~8分,每个元素得一定的分数。“清除”按钮:2分。“退出”按钮:1分。含算法的按钮:根据代码多少按步骤给分。编程时注意:首先应该进行变量的说明,然后按输入_处理一输出的顺序来设计程序的逻辑结构。写程序时一定要记住采用规范的书写方法,这样既不容易出错,又能轻松地拿到基本分。即根据逻辑关系采用缩进的形式来写,注意层次感,让人一看一目了然。需要用到程序控制结构时,先把前后配套的代码(如For I=…Next I,If…Then…End If)写出来,然后再在其中添加其他代码。 从历年的考试情况看,Visual Basic的上机部分虽然只考两道题,试题类型和知识点也基本固定,但并不容易拿分,很多同学只能拿到基本分。建议考前多做针对性训练,熟练掌握以往上机考试题中涉及的各类算法题目。第1题争取能改对2个错误,第2题除设计出程序界面、清除及退出(或结束)按钮外,争取把含算法按钮的基本代码(如变量的定义、基本算法结构、基本输入/输出语句等)写出来,这样就可以拿到25分以上了,上机考试成绩也就一定合格啦!