当前位置:文档之家› 上海市计算机等级考试二级(Java)-程序调试与程序填空

上海市计算机等级考试二级(Java)-程序调试与程序填空

上海市计算机等级考试二级(Java)-程序调试与程序填空
上海市计算机等级考试二级(Java)-程序调试与程序填空

java程序设计二级等级考复习资料(习题集)

程序调试题

下列程序都有三个错误, 按题中的要求,纠正错误并调试程序,程序中语句前的#1、#2、……是附加的行号(用于讲解),不是程序内容。

一、复习题解析

(一)语法错误调试题

1.下面的应用程序用于计算两个整数之和,正确的应用程序执行后输出的结果如下所示:

C:\> java test2_1(能用集成环境调试的尽量用集成环境,此处为书写方便)

The sum is: 75

#1public class test2_1

#2 /* A program to add two numbers together */

#3 public static void pain(String[] args) {

#4 int a = 23;

#5 int b = 52;

#6 int c = sum(a, b);

#7 System.out.println("The sum is: " + c);

#8 }

#9 public int sum(int a, int b) {

#10 return a + b;

#11 }

#12 }

答:#1 public class test2_1{

#3 public static void main(String[] args) {

#9 public static int sum(int a, int b) {

【解析】类的声明中规定,类体必须用一对大括号括起来,因此在第1行类名后加一左大括号;第3行main方法名写错,需纠正;由于main方法是类方法,其中调用的方法也必须是类方法,因此第9行的方法声明中加入static。

2.下面的应用程序执行时会发生错误,正确的应用程序执行后输出的结果如下所示:

运行结果如下:

C:\> java test2_2

4 foods

14 televisions 10 foods

#1 public class test2_2 {

#2 public void main(String[] args) { #3 Item t1 =Item("food"); #4 System.out.println(t1); #5 Item t2 = new Item("television"); #6 System.out.println(t2); #7 t2.setValue(10); #8 System.out.println(t1); #9 } #10 }

#11 class Item { #12 private name; #13 private static int value = 0; #14 public Item(String theName) { #15 name = theName; #16 value = value + theName.length(); #17 } #18 public void setValue(int newValue) { #19 value = newValue; #20 } #21 public String toString() { #22 return value + " " + name + "s"; #23 } #24 }

答:#2 public static void main(String[] args) {

#3 Item t1 = new Item("food"); #12 private String name;

【解析】java 应用程序中main 方法是程序执行的入口,规定该方法必须是static 方法,因此对第2行进行修改;第3行在实例化对象t1时应通过new 运算符来完成;第12行声明成员变量时,应明确变量类型,根据上下文判断应为String 型。

(二)语法错误与逻辑错误调试题

3.下面的应用程序通过近似计算公式

)

12)(12()2(75653431222

222+-????????=n n n π

求得圆周率。n的取值由该公式所得到的数值与3.1415926的差值小于0.00001决定。程序执行时发生错误,请修改并调试程序。

#1 public class PI{

#2 public static void main(args[])

#3 {

#4 int n=1;

#5 int pi=2;

#6 double p=3.1415926;

#7 while (Math.abs(p-pi)<0.00001) {

#8 pi=pi*(2*n)/(2*n-1)*(2*n)/(2*n+1);

#9 n++;

#10 }

#11 System.out.println("n="+n);

#12 }

#13 }

答:#2 public static void main(String args[])

#5 double pi=2;

#7 while (Math.abs(p-pi)>=0.00001)

【解析】程序中main方法的参数缺少类型说明,应该是String,因此对第2行进行修改;通过阅读程序可见,变量pi将存放圆周率的运算值,所以应改为double类型;第7行是条件式写错

4.下面的程序执行时会发生错误,正确的程序将逐行读取C盘根目录中的文件sale.txt,并将读入的内容显示在屏幕上,请修改并调试程序。

#1 import java.io.*;

#2 public class FileReadIn{

#3 public static void main(String args[]){

#4 String s="";

#5 try{

#6 FileReader fr=new FileReader("C:\sale.txt");

#7 BufferedReader bfr=new BufferedReader(fr);

#8 String str1;

#9 while((str1=bfr.readLine())=null)

#10 s= str1+"\n";

#11 bfr.close(); }

#12 catch(IOException e) {

#13 System.out.println(e);}

#14 System.out.print(s); }

#15 }

答:#6FileReader fr=new FileReader("C:\\sale.txt");

#9 while((str1=bfr.readLine())!=null)

#10s=s+str1+"\n";

【解析】程序中第6行盘符与文件名之间的分隔符应采用转义符"\\";第9行循环语句中的条件应是只要没有读完就继续读,所以应改为“str1=bfr.readLine())!=null”,意思是读入的内容不为空条件为真,继续循环;程序中第10行的变量s只存放了最后一次从文件中读入的内容,而不是文件的全部内容,因此应改为“s=s+str1+"\n";”。

(三)逻辑错误调试题

5.下面的应用程序执行时会发生错误,正确的应用程序执行后输出的结果如下图所示:

#1 public class Test2_1 {

#2 public static void main(String args[]) {

#3 int i;

#4 for (i=1;i<=8;i+=1)

#5 disp(i);

#6 }

#7 static void disp(int i) {

#8 for (int k=8;k>=i;k++)

#9 System.out.print(" ");

#10 for (int k=1;k<=i;k++)

#11 System.out.print("*");

#12 System.out.print(" ");

#13 }

#14 }

答:#4 for (i=1;i<=8;i+=2)

#8 for (int k=8;k>=i;k--)

#12 System.out.println();

【解析】程序中第4行是用于控制图案行数的,因此步长应改为2;阅读程序可见,disp方法是用来显示行信息的,行信息包括二部分,前一部分为空格,后一部分为“*”,第8行语句中的k++方向错了,应改为k--;第12行语句应该用于换行,而不是加一个空格,因此应改为“System.out.println();”。

6.下面的应用程序执行时会发生错误,正确的应用程序执行后输出的结果如下所示:

C:\> java test2_6

Remove 3 random characters from INTERESTING: INEETING

Remove 6 random characters from INTERESTING: EESTN

C:\> java test2_6

Remove 3 random characters from INTERESTING: ITERETIN

Remove 6 random characters from INTERESTING: IEESG 说明:程序中的方法private static String removeSingChar(String str, int indexNum)的功能是返回删除字符串str中第indexNum个字符后得到的字符串。方法private static String removeRandChar(String str, int howMany)中有二个参数,类型分别是String和int,第二个参数表示从第一个参数指定的字符串中删除字符的个数。删除哪个字符由随机数决定。如果第二个参数比第一个参数指定的字符串长度大,则该方法返回空字符串。

#1 public class test2_6{

#2 public static void main(String[] args) {

#3 String word1 = removeRandChar("INTERESTING", 3);

#4 System.out.println("Remove 3 random characters from INTERESTING: " + word1);

#5 word1 = removeRandChar("INTERESTING", 6);

#6 System.out.println("Remove 6 random characters from INTERESTING: " + word1);

#7 }

#8 private static String removeSingChar(String str, int indexNum) {

#9 return str.substring(0,indexNum) + str.substring(indexNum+1);

#10 }

#11 private static String removeRandChar(String str, int howMany){

#12 if (str.length() > howMany)

#13 return "";

#14 int randNo;

#15 for(int j=0; j

#16 randNo = (int) (Math.random() * 3);

#17 str = removeSingChar(str, randNo);

#18 }

#19 return " ";

#20 }

#21 }

答:#12 if (str.length() <= howMany)

#16 randNo = (int) (Math.random() * str.length());

#19 return str;

【解析】根据题意“如果第二个参数比第一个参数指定的字符串长度大,则该方法返回空字符串。”,第12行条件语句中条件应改为str.length() <= howMany;根据题意“删除哪个字符由随机数决定”,并不是说随机数的范围在3以内,所以第16行语句应改成randNo = (int) (Math.random() * 3);第19行应改成“return str;”,否则,该方法无法返回所需要的结果。

二、习题

1.下面的应用程序执行时会发生错误,正确的应用程序执行后输出的结果会依据变量rand的值而变化,输出Heads或Tails或On its side!中的一种情况:

#1 import java.awt.*;

#2 import java.applet.*;

#3 public class CoinToss extends applet {

#4 public void init () {

#5 int rand == (int)(Math.random ()* 3);

#6 if (rand == 1)

#7 System.out.println("Heads");

#8 else if (rand == 2)

#9 System.out.println("Tails");

#10 else

#11 System.out.println(On its side!);

#12 }

#13 }

答案:

#3 public class CoinToss extends Applet {

#5 int rand = (int)(Math.random ()* 3);

#11 System.out.println("On its side!");

2.下面程序执行时会发生错误,请修改并调试程序。程序的功能是计算10!的值并输出结果。

#1 public class Test2_2 {

#2 public static main(String args[]) {

#3 long n=0;

#4 for (int i=1;i<=10;i++)

#5 n=n*i;

#6 System.out.println("n!= "+n)

#7 }

#8 }

答案:

#2 public static void main(String args[])

#3 long n=1;

#6 System.out.println("n!= "+n);

3.下面程序执行时会发生错误,请修改并调试程序。程序的功能时按一定时间间隔显示任意形状的蓝色三角形。下图是正确程序运行中的一个快照。

#1 import java.awt.*;

#2 import java.applet.*;

#3 public class Test2_3 {

#4 public void paint(Graphics g) {

#5 int x[]=new int[3];

#6 int y[]=new int[3];

#7 for (int i=0;i<=3;i++){

#8 x[i]=(int)(400*Math.random());

#9 y[i]= (int)(300*Math.random());

#10 }

#11 g.setColor(Color blue);

#12 g.fillPolygon(x,y,3);

#13 for (long i=1;i<90000000;i++){} //该循环语句用于时间延迟

#14 repaint();

#15 }

#16 }

答案:

#3 public class Test2_3 extends Applet{

#7 for (int i=0;i<3;i++){

#11 g.setColor(Color.blue);

4.下面程序执行时会发生错误,请修改并调试程序。程序功能说明:程序中randomLetters(String word, int howMany)方法带有两个参数,返回值为字符串,该方法实现从字符串中随机获取所需数量的字符,

并按获取的次序以大写字符串返回。第一个参数代表给定的字符串,第二个参数确定字符个数。(假定调用方法时字符串参数不为空,整型参数不为负)

#1 public class Test2_4 {

#2 public static void main(String []args) {

#3 System.out.println(randomLetters("LOVEL Y",3));

#4 System.out.println(randomLetters("LOVEL Y",3));

#5 System.out.println(randomLetters("LOVEL Y",4));

#6 System.out.println(randomLetters("zhang",1));

#7 System.out.println(randomLetters("zhang",2));

#8 }

#9 private static String randomLetters ( String word, int howMany ){

#10 String outWord = "";

#11 char c;

#12 int random;

#13 word = word.toUpperCase();

#14 for( int i=0; i

#15 random =( Math.random()*word.length() );

#16 c = word.charAt( random );

#17 outWord = c;

#18 }

#19 return outWord;

#20 }

#21 }

执行完整的程序后,其中一种输出如下:

LYO

VLO

OOLE

Z

GH

答案:

#14 for( int i=0; i<=howMany; i++ ) {

#15 random = (int)( Math.random()*word.length() );

#17 outWord = outWord + c;

5.下面程序执行时会发生错误,请修改并调试程序。程序功能说明:将一段30米长的木材,每天锯去其中的一半,计算并输出多少天后,木材的长度开始小于0.05米。

#1 public class Test2_5{

#2 public static void main(args[]){

#3 int d=0;

#4 int m=30;

#5 while (m<0.05) {

#6 m=m/2;

#7 d++;

#8 System.out.print(d+": ");

#9 System.out.println(m);

#10 }

#11 System.out.print("You need "+d+" days");

#12 }

#13 }

执行完整的程序后,运行结果如下:

1: 15.0

2: 7.5

3: 3.75

4: 1.875

5: 0.9375

6: 0.46875

7: 0.234375

8: 0.1171875

9: 0.05859375

10: 0.029296875

You need 10 days

答案:

#2 public static void main(String args[]){

#4 float m=30;

#5 while (m>=0.05) {

6.下面程序执行时会发生错误,请修改并调试程序。程序功能说明:下面程序用于判断命令行中给定的两个字符串是否相等,并输出比较的结果。

#1 import java.io.*;

#2 public class Test2_6{

#3 public static main (String[] args){

#4 if ( args.length() < 1 ) {

#5 System.out.println( "你需要在命令行输入两个字符串。");

#6 System.exit(0); // 结束程序语句

#7 }

#8 if (args[0]==args[1]) // 比较两个字符串是否相等

#9 System.out.println( args[0]+" 与"+args[1]+" 相等");

#10 else

#11 System.out.println( args[0]+" 与"+args[1]+" 不相等");

#12 }

#13 }

答案:

#3 public static void main (String[] args){

#4 if( args.length <= 1 ) { 或者if ( args.length <2 ) {

#8 if(args[0].equals(args[1]))

7.下面程序执行时会发生错误,请修改并调试程序。程序用于从键盘上接收用户输入的十个整数,然

后将它们倒置输出。

例如:若用户输入为:1、2、3、4、5、6、7、8、9、10

则程序输出为:10、9、8、7、6、5、4、3、2、1

#1 import java.io.* ;

#2 public class Test2_7{

#3 public static void main(String args[ ]) {

#4 int i , N =10 ;

#5 int arr[ ] = new int[10];

#6 for ( i = 0 ; i < N ; i ++ )

#7 try {

#8 BufferedReader buf;

#9 buf= new BufferedReader(new InputStreamReader(System.in));

#10 arr[i] = buf.readLine( );

#11 } catch ( IOException e ) { } ;

#12 for ( i = N-1 ; i >= 0 ; i ++ ) // 倒置输出数组内容

#13 System.out.print(arr[i]+" ");

#14 System.out.println;

#15 }

#16 }

答案:

#10 arr[i] = Integer.parseInt(buf.readLine( ));

#12 for ( i = N-1 ; i >= 0 ; i -- )

#14 System.out.println();

8.下面程序执行时会发生错误,请修改并调试程序。程序的功能是通过命令行输入一个三位正整数,判断它是否是一个水仙数。水仙数是其各个位数的立方数之和等于该数。如:153=13+53+33。

#1 public class Shuixianshu{

#2 int i,j,k;

#3 public static boolean sxs(int a ){

#4 if(a<100 || a>999) return false;

#5 i=a%10;

#6 j=(a/10)%10;

#7 k=a%100;

#8 return (i*i*i+j*j*j+k*k*k==a);

#9 }

#10 public static void main(String [] args){

#11 if (args.length()!=1)

#12 System.out.println("请输入一个三位的正整数。");

#13 if (sxs(Integer.parseInt(args[0])) )

#14 System.out.println(args[0]+"是水仙数。");

#15 else

#16 System.out.println(args[0]+"不是水仙数。");

#17 }

#18 }

答案:

#2 static int i,j,k;

#7 k=a/100;

#11 if(args.length!=1)

9.下面程序执行时会发生错误,请修改并调试程序。程序的功能是通过一个以二维整数数组为参数的

private static int[][] addToArray(int[][] nums)方法,返回一个新的二维整数数组。由该方法返回的数组中的

每一个元素按以下方法改变:

数组的最后一行最后一个元素加1,该行倒数第二个元素加2,倒数第三个元素加3,当最后一行的元素处理完毕后,接着处理倒数第二行的最后一个元素,以此类推,数组中每个元素按此方法增量,直到第一行第一个元素。

假设数组至少有一行。

例如:如果参数数组如下:

+4

+3

+2

+1

然后通过该方法返回的数组将是:

#1 public class test4_2 {

#2 public static void main(String[] args) {

#3 int[][] numbers1 = {{4, 2, 5, 6},{3, 7, 7, 9},{8, 8, 9, 9}}; #4 System.out.println("Array1:"); #5 printIntA(numbers1);

#6 int[][] numbers2 = addToArray(numbers1); #7 System.out.println("Array2:"); #8 printIntA(numbers2); #9 }

#10 private static void printIntA(int[][] nums) { #11 System.out.println();

#12 for(int i=0; i

#13 for(int j=0; j

#16 System.out.println(); #17 }

#18 System.out.println(); #19 }

#20 private static int[][] addToArray(int[][] nums){ #21 int count = 1;

#22 int[][] newNums =new int[nums.length][nums.length]; #23 for(int i=nums.length-1; i>=0; i--){

#24 for(int j=nums[i].length-1; j>=0; j--){ #25 nums[i][j] = newNums [i][j] +count; #26 count++; #27 } #28 }

#29 return newNums; #30 } #21 }

+9 +5

答案:

#22 int[][] newNums =new int[nums.length][nums[0].length];

#25 newNums[i][j] = nums[i][j] +count;

#29 return nums;

10.下面程序执行时会发生错误,请修改并调试程序。程序的功能是在屏幕上输出如下图案,图案中每个方格大小是20×20像素。

#1 import java.awt.*;

#2 import java.applet.*;

#3 public class Test2_2 extends Applet {

#4 static final int SIZE = 20;

#5 public void paint(Graphics g){

#6 int startX = 60; //设置图形第一行的初始值

#7 int currentX = startX;

#8 int currentY = 0;

#9 for (int lineNo=1; lineNo < 5; lineNo++){ //lineNo为行数

#10 for (int across=1; across < lineNo; across++){

#11 g.fillRect(currentX, currentY, SIZE, SIZE);

#12 currentX += SIZE;

#13 }

#14 startX+= SIZE; //设置图形下一行的初始值

#15 currentX = startX;

#16 currentY += SIZE;

#17 }

#18 }

#19 }

答案:

#10 for (int across=1; across <= lineNo; across++){

#12 currentX += SIZE * 2;

#14 startX -= SIZE;

程序填空题

一、复习题解析

1.阅读下列问题描述和相应的程序,将程序补充完整并进行调试。

【问题描述】

下面是一个Application程序,接受用户从键盘输入的10个整数,然后将这10个数按从大到小的方式排序并输出,请将程序补充完整。

程序:

import java.io.* ;

public class PaiXu{

public static void main(String args[ ]) {

int arr[]=new ______(1)______, i,j;

for ( i = 0 ; i < 10 ; i ++ ) {

try {

BufferedReader br = new BufferedReader( new InputStreamReader(System.in));

arr[i] = Integer.parseInt(______(2)______);

} catch ( IOException e ) { } ;

}

for ( i = 0 ; i < 10 ; i ++ )

for (______(3)_____;j<10;j++)

if(______(4)_____) {

int t=arr[i]; arr[i]=arr[j]; ______(5)_____;

}

System.out.println("排序结果为:");

for ( i = 0 ; i < 10 ; i ++ )

System.out.print(arr[i]+"\t");

}

}

答案:

(1)int[10]

(2)br.readLine()

(3)j=i或j=i+1

(4)arr[i]arr[i]或arr[i]<=arr[j]或arr[j]>=arr[i]

(5)arr[j]=t

【解析】此类题目的解答需要非常认真地阅读问题描述和相应的程序,同时要了解常用的算法结构,然后可以从位置、语法和逻辑上对需要填空的部分进行推敲。本题是一道关于选择排序的题目,选择排序的基本思想是首先在给定的数组中找一个最大值,将其换到数组的第一个位置,然后在剩下的数据中再找一个最大值(即整个数组中第二大数据),放在数组中的第二个位置,以此类推,直到最后,得到的结果就是从大到小降序的数据序列。本题中填空(1)从位置上看很显然是对数组的定义,因此填上“int[10]”;根据题意及第(2)空的位置,可判断出此空所在的语句是将从键盘读入的数据赋给数组“arr[i]”,因此填上“br.readLine()”;从程序上下文看,第(3)空所在的位置应该对变量j进行赋初值,如果对选择排序法比较熟悉(非常有必要熟悉)的话,可以知道此处应填写“j=i”或“j=i+1”;第(4)空是if语句中的条件,因为是找最大值,所以要比较,当满足条件(当前准备存放数据的元素的值小于其它元素中的值)时交换数组元素中的数据,因此第(4)空的位置填上“arr[i]

arr[j]>arr[i]或arr[i]<=arr[j]或arr[j]>=arr[i]”;

2.阅读下列问题描述和相应的程序,按下面给出的程序运行结果将程序补充完整并进行调试。

【问题描述】

UseComputer类创建两个Computer类的对象并调用相应的方法。Computer类用于定义计算机的硬件性能:CPU速度(speed)、内存大小(memory)、硬盘容量(diskSpace)。

当程序正确完成后,产生的输出如下所示:

C:\>java UseComputer

2.0GHz 1024MB内存 128GB硬盘

3.2GHz 2048MB内存 256GB硬盘

3.2GHz 2048MB内存 128GB硬盘

3.4GHz 3072MB内存 256GB硬盘

较好的是:3.4GHz 3072MB内存 256GB硬盘

程序:

public class UseComputer{

public static void main(String []args){

Computer computer1 = new Computer(2.0, 1024, 128);

Computer computer2 = new Computer(3.2, 2048, 256);

System.out.println(computer1);

System.out.println(computer2);

computer1.upGradeMemory(1024);

computer1.replaceCPU(3.2);

computer2.upGradeMemory(1024);

computer2.replaceCPU(3.4);

System.out.println(computer1);

System.out.println(computer2);

if (https://www.doczj.com/doc/5b7917771.html,pare(computer2))

System.out.println("较好的是:"+computer1);

else

System.out.println("较好的是:"+computer2);

}

}

class Computer {

(1)

private int memory;

private int diskSpace;

public Computer(double initSpeed, int initMemory, int initDiskSpace) {

speed = initSpeed;

memory = initMemory;

diskSpace = initDiskSpace;

}

public String toString() {

(2)

}

public void upGradeMemory(int extraMemory) {

(3)

}

public void replaceCPU(double newSpeed) {

(4)

}

public boolean compare(Computer other){

return (5);

}

}

答案:

(1)private double speed;

(2)return speed + "GHz " + memory + "MB内存" + diskSpace+ "GB硬盘";

(3)memory += extraMemory;

(4)speed = newSpeed;

(5)speed>=other.speed或memory>=other. memory;

【解析】此类题目的解答需要非常认真地阅读问题描述和相应的程序,然后可以从位置、语法和逻辑上对需要填空的部分进行推敲,本题中填空(1)从位置上看很有可能是成员变量的声明,阅读程序后可以发现成员变量speed已用但未加声明,又从语句speed = initSpeed;推得speed应该声明为double类型,因此,该空填上“private double speed;”;从第(2)空的位置可以看出此处应该放的语句与Computer类对象的输出方式有关,根据题目中已给出的运行结果及方法类型,可判断出第(2)空应为“return speed + "GHz " + memory + "MB内存" + diskSpace+ "GB硬盘";”;第(3)空应填的内容可以从main()方法中执行的语句与给出的运行结果找到线索,即public void upGradeMemory(int extraMemory)方法与内存数量的更新相关,从运行结果可见,参数中提供的内存数量是与原内存数量相加的,因此第(3)空应填的内容是“memory += extraMemory;”;同理可判断出第(4)空的内容与CPU速度(speed)的更新有关,但从运行结果看public void replaceCPU(double newSpeed)方法参数中提供的数据是用来直接替代CPU的速度,因此第(4)空应填的内容是“speed = newSpeed;”;从第(5)空的位置和方法返回的类型看,此处应填写逻辑值的表达式,从方法的参数可以初步判断是“本对象”的数据与“other”对象数据的比较,再从运行结果判断第(5)空应填的内容是“speed>=other.speed;”或“memory>=other. memory;”。

3.阅读下列问题描述和相应的程序,按下面给出的程序运行结果将程序补充完整并进行调试。

【问题描述】

该程序的功能是为用户提供一个简单的画图环境,当窗口第一次打开时,程序窗口中只有一个“Clear”按钮。每当在窗体上按下鼠标并拖曳,将以鼠标所在点为圆心画一个半径为8个像素、任意颜色的填充圆;连续地拖曳鼠标将绘制出连续的以这种圆为基本单元的图形。如图所示。单击“Clear”按钮将清除窗体上所有内容。

图 6.1

程序:

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

public class Fdrawing extends Applet implements MouseMotionListener,MouseListener,ActionListener {

Button bcls=new Button("Clear!");

int x1,x2,y1,y2;

public void init() {

setLayout(null);

bcls.setBounds(10,10,80,40);

add(bcls);

addMouseListener(this);

addMouseMotionListener(this);

( 1 )

}

public void actionPerformed(ActionEvent e)

{ (2)}

public void Circle(Graphics g,int x,int y,int rx,int ry) {

int cr,cg,cb;

cr=(int)(Math.random()*256);

cg=(int)(Math.random()*256);

cb=(int)(Math.random()*256);

g.setColor(new Color(cr,cg,cb));

(3)

}

public void mousePressed(MouseEvent e) {

x1=e.getX();

y1=e.getY();

}

public void mouseDragged(MouseEvent e) {

Graphics g=getGraphics();

(4)

y2=e.getY();

Circle (g,x1,y1,8,8);

x1=x2;

(5)

}

public void mouseMoved(MouseEvent e){}

public void mouseReleased(MouseEvent e){}

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mouseClicked(MouseEvent e){}

}

答案:

(1)bcls.addActionListener(this);

(2)repaint();

(3)g.fillOval(x-rx,y-ry,2*rx,2*ry);

(4)x2=e.getX();

(5)y1=y2;

【解析】此类题目的解答需要非常认真地阅读问题描述和相应的程序,然后可以从位置、语法和逻辑上对需要填空的部分进行推敲。本题要求考生对Java中的事件处理机制比较熟悉,从填空(1)的位置及主类Fdrawing实现的接口看,此处应该是设置ActionEvent事件监听者。从上下文看,由小应用程序本身充当事件监听者,而且事件对象为bcls,所以填空(1)的内容应为“bcls.addActionListener(this);”;第(2)空的位置是在public void actionPerformed(ActionEvent e)方法中,显然是用于事件处理的,根据问题描述,要求单击“Clear”按钮将清除窗体上所有内容,此空填“repaint();”以清除显示区域所显示的内容;通过阅读程序和问题描述可知,第(3)空所在的方法是用于“以鼠标所在点为圆心画一个半径为8个像素、任意颜色的填充圆”,因此第(3)空应填“g.fillOval(x-rx,y-ry,2*rx,2*ry);”;从第(4)空所在位置及上下语句功能判断,此处应该是获取下一次画圆的x坐标,因此填写“x2=e.getX();”;同样从第(5)空所在位置及上下语句的功能判断,此处应该是为画下一个圆的y坐标作好准备,因此填写“y1=y2;”。

二、习题

1.阅读下列问题描述和相应的程序,将程序补充完整并进行调试。

【问题描述】

下面程序的功能是:由键盘输入一个小于“100”的数字字符串(例如“38”),将它转换成整数,然后计算并输出从该整数到100之间所有整数的累加和。

程序:

import _________(1)_________ ;

public class NumJa1{

public static void main(String args[]) throws IOException {

int num1,s;

String str;

BufferedReader buf;

buf=new BufferedReader(new InputStreamReader(System.in));

System.out.print("请输入整数:");

str=_________(2)_________;

num1=_________(3)_________;

if (num1>=100)

System.out.print("输入的数已超出范围");

else

{_________(4)_________;

for (_________(5)_________)

s=s+i;

System.out.println("The sum is "+s);

}

}

}

答案:

(1)java.io.*

(2)buf.readLine()

(3)Integer.parseInt(str)

(4)s=0

(5)int i=num1;i<101;i++或int i=num1;i<=100;i++

2.阅读下列问题描述和相应的程序,按下面给出的程序运行结果将程序补充完整并进行调试。

【问题描述】

Test5创建三个Locker类的对象并调用相应的方法,Locker类用来存放银行保管箱租用者的姓名(hirer)、柜号(cabinetNum)、箱号(num)以及是否空闲(isVacant)的信息。当程序正确完成后,产生的输出如下所示:

C:\> java Test5

柜号:3, 箱号: 301 当前由李瑞杰使用

柜号:3, 箱号: 302 当前由张佳利使用

柜号:2, 箱号: 201 当前由张佳利使用

现在空闲柜号: 3, 箱号: 301 当前空闲

同一租用者柜号: 3, 箱号:302 当前由张佳利使用

同一租用者柜号: 2, 箱号: 201 当前由张佳利使用

程序:

public class Test5 {

public static void main(String[] args) {

Locker lock1, lock2, lock3;

lock1 = new Locker("李瑞杰",3,301);

lock2 = new Locker("张佳利",3,302);

lock3 = new Locker("张佳利",2,201);

System.out.println(lock1.toString());

C程序调试步骤to初学者

调试程序一般应经过以下几个步骤: 1、先进行人工检查,即静态检查。 在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多数错误。而这一步骤往往容易被人忽视。有人总希望把一切推给计算机系统去做,但这样就会多占用机器时间,作为一个程序人员应当养成严谨的科学作风,每一步都要严格把关,不把问题留给后面的程序。 为了更有效地进行人工检查,所编的程序应注意力求做到以下几点: (1)应当采用结构化程序方法编程,以增加可读性;(2)尽可能多加注释,以帮助理解每段程序的作用;(3)在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。这样既易于阅读也便于调试,各函数之间除用参数传递数据这一渠道以外,数据间尽量少出现耦合关系,便于分别检查和处理。 2、在人工检查无误后,才可以上机调试。通过上机发现错误称动态检查。在编译时给出语法错误的信息,可以根据提示的信息具体找出程序中出错之处并改正之。 应当注意的是有时提示的出错并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多各种错误互有关联,因止要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。如果系统提示的出错信息多,应当从上到下一一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一二个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;有的是少了“}”或多了“}”有的是书写语句时忘记写“;”或是全角的“;”了,只要加上一个变量定义,或填加“};”就所有错误都消除了。 3、在改正语法错误后,程序经过连接就得到可执行的目标程序。运行程序,输入程序所需数据,就可得到运行结果。应当对运行结果作分析,看它是否符合要求。 有的初学者看到运行结果就认为没问题了,不作认真分析,这是危险的。 有时,数据比较复杂,难以立即判断结果是否正确。可以事先考虑好一批“试验数据”,输入这些数据可以得出容易判断正确与否的结果。可以在计算的输出结果的程序地方加入一段输出到屏幕窗口的程序,利用屏幕窗口可以方便看到结果的,很直观。例如,if语句有两个分支,有可能在流程经过其中一个分支时结果正确,而经过其它一个分支时结果不对等。必须考虑周全。 事实上,当程序复杂时很难把所有的可能方案全部都试到,选择典型的情况作试验即可。 4、运行结果不对,大多属于逻辑错误。对这类错误往往需要仔细检查和分析才能发现。可以采用以下办法: (1)将程序与流程图仔细对照,如果流程图是正确的话,程序写错了,是很容易发现的。例如,复合语句忘记写花括弧,只要一对照流程图就能很快发现。 (2)如果实在找不到错误,可以采用“分段检查”的方法。在程序不同的位置设几个printf 函数语句,输出有关变量的值,往下检查。直到找到在哪一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就可能发现错误所在。 (3)也可以用“条件编译”命令进行程序调试(在程序调试阶段,若干printf函数语句就要进行编译并执行。当调试完毕,这些语句不要再编译了,也不再被执行了)。这种方法可以不必一一去printf函数语句,以提高效率。 5、如果在程序中没有发现问题,就要检查流程图有无错误,即算法有无问题,如有则改正

全国计算机二级考试Java第1章练习题

全国计算机二级考试Java第1章练习题:java语言概论 第一章java语言概论 1、下列说法不正确的是__________。答案:A A)java语言不考虑安全性B)java是跨平台的语言 C)java是面向对象的语言D)java是具有多线各并发机制的语言 2、java对内存的使用跟踪是_________。答案:B A)多线程机制B)垃圾回收机制 C)代码安全检验机制D)异常处理机制 3、符合对象和类的关系的是________。答案:D A)人和猴子B)书和房子 C)狗和猫D)飞机和交通工具 4、下列说法不正确的是________。答案:A A)java源程序文件名与应用程序类名可以不相同。 B)java程序中,public类最多只能有一个。 C)java程序中,package语句可以有0个或1 个,并在源文件之首 D)java程序对字母大小写敏感的 5、下列说法不正确的是________。答案:B A)java应用程序必须有且只有一个main方法。 B)System.out.println()与System.out.print()是相同的标准输出方法 C)java源程序文件的扩展名为java D)java小应用程序Applet没有main方法。 6、jdk在Windows平台的目录下,java程序运行环境的根目录是________。 答案:B A) bin B)jre C)lib D)src.zip 7、java类库中包含swing包的核心包是________。答案:D A)https://www.doczj.com/doc/5b7917771.html,ng B)java C)System D)javax

8、java所有类的根是__________。答案:D A)Class B)System C)Thread D)Object 9、支持java垃圾回收类的包是_______。答案:B A)https://www.doczj.com/doc/5b7917771.html,ng B)https://www.doczj.com/doc/5b7917771.html,ng.ref C)https://www.doczj.com/doc/5b7917771.html,ng.reflect D)java.util 10、JDK的bin目录下提供的java编译器是________。答案:A A)javac B)javadoc C)java D)appletviewer 11、在java语言中,能自动导入的包是________。答案:B A)java.awt B)https://www.doczj.com/doc/5b7917771.html,ng C)java.io D)java.applet 12、java程序语句的结束符是_________。答案:B A)“.” B)“;” C)“:” D)“=” 13、方法main(String args[]) 的定义开头是_________。答案:D A)public B) static C)public static D)public static void 14、在java源程序中,正确声明的次序是__________.。答案:A A)包声明à导入声明à类和接口声明 B)导入声明à类和接口声明à包声明 C)类和接口声明à导入声明à包声明 D)包声明à类和接口声明à导入声明 15、在Java程序中,注释的作用是_________。答案:D A)在程序执行时显示其内容B)在程序编译时提示 C)在程序执行时解释D)给程序加说明,提高程序的可读性

微机原理实验 源程序

《微机原理及接口技术》 实验指导书 杨霞周林英编 长安大学电子与控制工程学院 2009年9月

前言 本实验指导是为适应各大、中专院校开设微机原理及应用方面的课程需做大量软硬件实验的需要而编写的,供学生编程用。完成本实验指导中的实验,可使学生基本掌握8086/8088的结构原理、接口技术、程序设计技巧。手册中详细叙述了各实验的目的、内容,列出了接线图、程序框图和实验步骤。 主要学习内容为80X86语言实验环境配置、汇编源语言格式、输出字符、循环结构、子程序调用,以及加减乘除等指令操作、通用接口芯片的接口编程与使用。所有实验都是相互独立的,次序上也没有固定的先后关系,在使用本书进行教学时,教师可根据教学要求,选择相应实验。学习结束后,要求学生能够独立编写出综合加减乘除等指令,以及循环结构、子程序调用等程序控制程序、看懂一般接口芯片电路图。

目录 实验一清零程序 (4) 实验二拆字程序 (6) 实验三数据区移动 (8) 实验四多分支程序设计 (10) 实验五多字节减法运算 (13) 实验六显示程序 (16) 实验七 8251串口实验 (20) 实验八步进电机控制 (26) 附录一汇编语言的存储模型 (36) 附录二 8279键值显示程序 (37)

实验一清零程序 一、实验目的 掌握8088汇编语言程序设计和调试方法。 二、实验设备 STAR系列实验仪一套、PC机一台。 三、实验内容 把RAM区内4000H-40FFH单元的内容清零。 四、程序框图 五、源程序清单 .MODEL TINY .STACK 100 .DATA .CODE ORG 0100H START: MOV BX,4000H MOV AX,0000H MOV CX,80H L1: MOV [BX],AX INC BX INC BX LOOP L1 JMP $ END START 六、实验步骤

数控车床基本操作简单程序调试

数控车床的基本操作与简单程序调试 一、实训目的 < 1 >掌握数控车削加工基本编程指令及其应用 < 2 >熟悉了解数控车床的操作面板和控制软件; < 3 >掌握数控车床的基本操作方法和步骤; < 4 >进一步了解数控车床的结构组成、加工控制原理; < 5 >熟练掌握精车程序的输入调 二、预习要求 认真阅读数控车床组成、位置调整和坐标系设定及基本编程指令与调试的章节内容。 三、实训理论基础 1.基本编程指令功能介绍 1 ). G 功能 ( 格式: G 2 G 后可跟 2 位数 ) 常用 G 功能指令 (1) 、表内 00 组为非模态指令,只在本程序段内有效。其它组为模态指令,一次指定后持续有效,直到被本组其它代码所取代。 (2) 、标有 * 的 G 代码为数控系统通电启动后的默认状态。

2 ). M 功能 ( 格式: M2 M 后可跟 2 位数 ) 车削中常用的 M 功能指令有: M00-- 进给暂停 M01-- 条件暂停 M02-- 程序结束 M03-- 主轴正转 M04-- 主轴反转 M05-- 主轴停转 M98-- 子程序调用 M99-- 子程序返回。 M08-- 开切削液 M09-- 关切削液 M30-- 程序结束并返回到开始处 3 ). T 功能 ( 格式: T2 或 T 4 ) 有的机床 T 后只允许跟 2 位数字,即只表示刀具号,刀具补偿则由其它指令。 有的机床 T 后则允许跟 4 位数字,前 2 位表示刀具号,后 2 位表示刀具补偿号。如: T0211 表示用第二把刀具,其刀具偏置及补偿量等数据在第 11 号地址中。 4 ). S 功能 ( 格式: S4 S 后可跟 4 位数 ) 用于控制带动工件旋转的主轴的转速。实际加工时,还受到机床面板上的主轴速度修调倍率开关的影响。按公式: N=1000Vc / p D 可根据某材料查得切削速度 Vc ,然后即可求得 N. 例如:若要求车直径为 60mm 的外圆时切削速度控制到 48mm/min ,则换算得: N=250 rpm ( 转 / 分钟 ) 则在程序中指令 S250; 5 ).车床的编程方式 ( 1 ).绝对编程方式和增量编程方式。 图 2-1 编程方式示例 绝对编程是指程序段中的坐标点值均是相对于坐标原点来计量的,常用 G90 来指定。增量( 相对 ) 编程是指程序段中的坐标点值均是相对于起点来计量的。常用 G91 来指定。如对图 2-1 所示的直线段 AB 编程 绝对编程: G90 G01 X100.0 Z50.0; 增量编程: G91 G01 X60.0 Z-100.0;

全国计算机等级考试二级Java考试大纲

全国计算机等级考试二级Java考试大纲公共基础知识部分30分 70分 Java语言程序设计 1. 掌握Java语言的特点,实现机制和体系结构。 2. 掌握Java语言中面向对象的特性。 3. 掌握Java语言提供的数据类型和结构。 4. 掌握Java语言编程的基本技术。 5. 会编写Java用户界面程序。 6. 会编写Java简单应用程序。 7. 会编写Java小应用程序(Applet)。 8. 了解Java的应用。

Java语言的特点和实现机制 Java体系结构 1. JDK目录结构。 2. Java的API结构。 3. 开发环境设置。 4. Java程序结构。 Java语言中面向对象的特性。 1. 面向对象编程的基本要领和特征。 2. 类的基本组成和使用。 3. 对象的生成、使用和删除。 4. 接口与包。 5. Java类库中常用类和接口。 Java简单数据类型及运算 1. 变量和常量。 2. 基本数据类型及转换。 3. Java类库中对简单数据类型的类包装。 4. 运算符和表达式运算。 5. 数组和字符串。 Java语言的基本语句 1. 表达式语句。 2. 条件语句。

3. 循环语句。 4. 注释语句。 5. 异常处理。 Java编程技术基础 1. 线程的要领和使用。 2. 同步与共享。 3. 串行化要领和目的。 4. 串行化方法。 5. 串行化的举例。 6. 基于文本的应用。 7. 文件和文件I/O。 8. 汇集(collections)接口。 编写用户界面程序 1. 图形用户界面。 2. AWT库简介。 3. SwingF简介。 4. AWT与Swing比较。 编写小应用程序(Applet) 1. 小应用程序概念。 2. 安全机制。 3. Applet执行过程。 4. Applet的图形绘制。

微机原理及应用实验(题目)

微机原理及应用实验 实验一开发环境的使用 一、实验目的 掌握伟福开发环境的使用方法,包括源程序的输入、汇编、修改;工作寄存器内容的查看、修改;内部、外部RAM内容的查看、修改;PSW中个状态位的查看;机器码的查看;程序的各种运行方式,如单步执行、连续执行,断点的设置。二、实验内容 在伟福开发环境中编辑、汇编、执行一段汇编语言程序,把单片机片内的 30H~7FH 单元清零。 三、实验设备 PC机一台。 四、实验步骤 用连续或者单步的方式运行程序,检查30H-7FH 执行前后的内容变化。五、实验思考 1.如果需把30H-7FH 的内容改为55H,如何修改程序? 2.如何把128B的用户RAM全部清零? 六、程序清单 文件名称:CLEAR.ASM ORG 0000H CLEAR: MOV R0,#30H ;30H 送R0寄存器 MOV R6,#50H ;50H 送R6寄存器(用作计数器) CLR1: MOV A,#00H ;00 送累加器A MOV @R0,A ;00 送到30H-7FH 单元 INC R0 ;R0 加1 DJNZ R6,CLR1 ;不到50H个字节,继续 WAIT: LJMP WAIT END 实验二数据传送 一、实验目的 掌握MCS-51指令系统中的数据传送类指令的应用,通过实验,切实掌握数据传送类指令的各种不同的寻址方式的应用。 二、实验内容 1.编制一段程序,要求程序中包含7中不同寻址方式。 2.编制一段程序,将片内RAM30H~32H中的数据传送到片内RAM38H~3AH中。 3.编制一段程序,将片内RAM30H~32H中的数据传送到片外RAM1000H~1002H 中。 4.编制一段程序,将片内RAM40H~42H中的数据与片外RAM2000H~2002H中的数据互换。 三、实验设备 PC机一台。

微机原理实验报告清零程序

竭诚为您提供优质文档/双击可除微机原理实验报告清零程序 篇一:微机原理实验报告 微机原理与应用课程实验报告 实验分工: 报告人 同组人 实验时间:20XX.12.10 课程设计 一、题目要求 (1)在数据段首址为0100h开始的内存区1按从大到小的顺序顺次存入二进制数15~0共16个字节的数据; (2)将上述源区内容传送到目的内存区2(首址为1100h)中; (3)检验上述传送过程是否正确,如有错误,在紧跟内存区2后的第一个字节 开始写入AscII码“eRRoR”,否则写入“oK”。 (4)用冒泡法将上述内存区2的数据,按从小到大的

次序重新排列,排列后存放在内存区3(开始地址为2100h)。 (5)将上述内存区2和内存区3的第100个数据分别乘以2,并转为bcD码,保存在各自存储区的末尾。再将上述两个bcD码相乘,其结果保存在内存区1的末尾处。 二、实验程序框图 三、程序代码 codesegment assumecs:code DATA1db16dup(?) DATA2dbeRRoR DATA3dboK ;在数据段首址为0100h开始的内存区1按从大到小的顺序顺次存入二进制数15~0共16个字节的数据start: movax,0100h;规定目标程序存放单元的偏移量 movds,ax;数据段地址 moves,ax movsi,offsetDATA1;偏移地址 movcx,0010h;循环次数 movbx,0100h moval,ofh s1:

movcs:[si],al mov[bx],cs:[si] incsi incbx decal loops1 nop ;将内存区1数据搬移到内存区2中 movcx,16 movsi,0100h movbx,1100h s2: moval,[si] mov[bx],al incbx loops2 nop ;对比内存区1的数据与内存区2的数据是否相同mov cx,16 movsi,0100h movbx,1100h comp:

实验一-Keil软件的使用及简单程序的调试方法

实验一Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下:

几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示

单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。 (3)将文件添加到工程中 单击“T arget 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。

微机原理实验程序

实验一两个多位十进制数相减实验 一、实验要求:将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序 存放在以DATAI和DATA2为首的5个内存单元中(低位在前>,结果送回 DATAI处。 二、实验目的:1.学习数据传送和算术运算指令的用法。 2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 三、实验步骤:连好实验箱后接通电源,打开上位机软件88TE进入软件调试界面: 点击“文件\打开”文件路径为C: \88TE\cai\asm\Ruanjian\Rjexp1.asm。具体操作如图所示: b5E2RGbCAP

点击编译连接生成可执行的exe文件。 通过单步运行调试程序,打开寄存器查看其变量变化情况。 四、实验程序框图: 五、实验程序:

文件路径为C:\88TE\cai\asm\Ruanjian\Rjexp1.asm DATA SEGMENT DATA1 DB 33H,39H,31H,37H,38H 。第一个数据<作为被减数)DATA2 DB 36H,35H,30H,38H,32H 。第二个数据<作为减数)MES1 DB '-','$' MES2 DB '=','$'p1EanqFDPw Array DATA ENDS STACK SEGMENT STA DB 20 DUP(?> TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV SI,OFFSET DATA1 MOV BX,05 CALL DISPL MOV AH,09H LEA DX,MES1 INT 21H MOV SI,OFFSET DATA2 MOV BX,05 CALL DISPL MOV AH,09H LEA DX,MES2 INT 21H MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 CALL SUBA 。减法运算 MOV SI,OFFSET DATA1 MOV BX,05 。显示结果 CALL DISPL MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H INT 21H MOV AX,4C00H INT 21H DISPL PROC NEAR 。显示子功能 DSI: MOV AH,02 MOV DL,[SI+BX-1] 。显示字符串中一字符 INT 21H

PLC程序的调试方法及步骤(精)

PLC程序的调试方法及步骤 PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,最好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。 1.程序的模拟调试 将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。 在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。 如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟测试结束后再写入它们的实际设定值。 在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。 2.程序的现场调试 完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,通常只

微机8086实验程序

;A1.asm ;显示程序实验 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DA TA SEGMENT MES1 DB 'Show a as hex:',0AH,0DH,'$' SD DB 'c' DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DA TA MOV DS,AX MOV DX,OFFSET MES1 ;show message MOV AH,09H INT 21 MOV SI,OFFSET SD MOV AL,DS:[SI] AND AL,0F0H ;取高4位 MOV CL,4 SHR AL,CL CMP AL,0AH ;是否是A以上的数 JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL ;show character MOV AH,02H INT 21H MOV AL,DS:[SI] AND AL,0FH ;取低4位 CMP AL,0AH JB C3 ADD AL,07H C3: ADD AL,30H MOV DL,AL ;show character MOV AH,02H INT 21H WAIT1: MOV AH,1 ;判断是否有按键按下 INT 16H JZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00H ;go back to dos INT 21H CODE ENDS

END START ;A2.asm ;数据传送实验 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DDATA SEGMENT MSR DB 'HELLO,WORLD!$' LEN EQU $- MSR DDATA ENDS EXDA SEGMENT MSD DB LEN DUP(?) EXDA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA,ES:EXDA START: MOV AX,DDA TA MOV DS,AX MOV AX,EXDA MOV ES,AX MOV SI,OFFSET MSR MOV DI,OFFSET MSD MOV CX,LEN MOV BX,0 NEXT: MOV AL,MSR[BX] MOV ES:MSD[BX],AL INC BX LOOP NEXT PUSH ES POP DS MOV DX,OFFSET MSD MOV AH,9 INT 21H WAIT1: MOV AH,1 ;判断是否有按键按下 INT 16H JZ W AIT1 ;无按键则跳回继续等待,有则退出 MOV AX,4C00H INT 21H

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (9) 实验5 循环程序实验 (11) 实验6 由1 到100 求和实验 (13) 实验7 求表中正数_负数_0 的个数实验 (14) 实验8 数据排列实验(冒泡排序) (16) 实验9 系统功能调用(大小写转换) (18) 实验10 阶乘(递归运算) (20) 实验11 ProteusIO工程文件的建立 (21) 实验12 IO口读写实验(245、373) (22) 实验13 8255 接口实验 (24) 实验14 声光报警 (25) 实验总结 (28)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序

2019年全国计算机二级考试Java试题及答案(4).doc

2019 年全国计算机二级考试Java 试题及答案(4) 1[ 单选题] 下列方法被调用后,一定使调用线程改变当前状态的是( ) 。 A.notify() B.yield() C.sleep() D.isAlive() 参考答案:C 参考解析:线程调用sleep 函数后,使当前线程进入停滞状态。yield 函数可使线程进入可执行状态,排程器从可执行状态的线程中重新排程,调用了yield 函数的线程有可能被马上执行,也有可能不会马上执行。notify 函数从线程等待池中移走任意一个线程,并把它放到锁标志等待池中,其状态仍旧是等待。所以只有sleep 一定会改变线程状态。 2[ 单选题] 如果应用程序要在Applet 上显示输出,则必须重写的方法是( ) 。 A.Graphics.drawstring() B.repaint() C.paint() D.update() 参考答案:C 3[ 单选题] 下列不属于虚拟机执行过程的特点的是( ) 。 A.多线程

B.动态连接 C.异常处理 D.代码安全检查 参考答案:D 参考解析:本题考查虚拟机执行过程的特点。Java 虚拟机是编译器生成的字节码,不用考虑具体的硬件环境,实现一次编写,随处运行,实现其可移植性。虚拟机执行过程的特点有:多线程、动态连接、异常处理。代码安全检查是Java 语言的一个突出特点,但不属于虚拟机执行过程特点。 4[ 单选题] 软件( 程序) 调试的任务是( ) 。 A.诊断和改正程序中的错误 B.尽可能多地发现程序中的错误 C.发现并改正程序中的所有错误 D.确定程序中错误的性质 参考答案:A 参考解析:调试的目的是发现错误或导致程序失效的错误原因,并修改程序以修正错误。调试是测试之后的活动 5[ 单选题] 下列相关接口的说法,准确的是( ) 。 A.接口与抽象类是相同的概念 B.实现一个接口必须实现接口的所有方法 C.接口之间不能有继承关系 D.一个类不可实现多个接口 参考答案:B

微机原理与接口技术--实验二 屏幕字符显示程序

北京X X大学 实验报告 课程(项目)名称:实验二屏幕字符显示程序学院:专业: 班级:学号: 姓名:成绩: 2013年 12月 10 日 一、任务与目的

1. 实验任务: (1) 熟悉和掌握利用DOS调用进行屏幕显示的方法; (2) 掌握屏幕字符显示程序的编写。 2. 实验目的: (1) 熟悉字符串表示的语法结构; (2) 熟悉利用DOS调用编写字符屏幕显示的基本程序。 二、原理(条件) 1.相关知识: (1) 字符串显示格式; (2) 熟悉DOS调用使用方法。 2.实验条件: MASM汇编程序及TD调试软件。 三、内容步骤 1.编写程序在屏幕上显示“Our Team: 姓名拼音+姓名拼音!”,观察执行情况并分析结果。 参考程序如下,请在参考程序之上改写。 DATA SEGMENT STRING DB 'hello,everybody!.You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.',0DH,0AH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 四、数据处理(现象分析) 实验结果:

实现代码: DATA SEGMENT STRING DB 'Our team:Lingwei zhangzhengqiang caoruanruan',0DH,0AH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 五、结论 通过参照示例程序完成实验时,对实验结果的观察并结合课本对实验现象的分析可得知:DOS系统功能调用是利用软中断指令INT 21来实现的,方法如下, 1.AH←功能号; 2.在指定寄存器中放入该功能所要求的入口参数; 3.执行INT 21H指令; 4.分析出口参数 此外,要将一个字符串送到显示器显示,需要调用DOS功能的9号功能,该功能要求被显示的字符串必须以“$”字符作为结束符,否则会引起屏幕乱码。显示时,如果希望光标

全国计算机等级考试二级Java真题及答案

2009年9月全国计算机等级考试二级笔试试卷 Java 语言程序设计 (考试时间90分钟,满分100分) 一、选择题(每小题2分,共70分) (1)下列数据结构中,属于非线性结构的是 A )循环队列 B )带链队列 C )二叉树 D )带链栈 (2)下列数据结构中,能够按照“先进后出”原则存取数据的是 A )循环队列 B )栈 C )队列 D )二叉树 (3)对于循环队列,下列叙述中正确的是 A)队头指针是固定不变的 B)队头指针一定大于队尾指针 C)队头指针一定小于队尾指针 D)队头指针可以大于队尾指针,也可以小于队尾指针 (4)算法的空间复杂度是指 A)算法在执行过程中所需要的计算机存储空间 B)算法所处理的数据量 C)算法程序中的语句或指令条数 D)算法在执行过程中所需要的临时工作单元数 (5)软件设计中划分模块的一个准则是 A )低内聚低耦合 B )高内聚低耦合 C )低内聚高耦合 D )高内聚高耦合 (6)下列选项中不属于结构化程序设计原则的是 A )可封装 D )自顶向下 C )模块化 D )逐步求精

(7)软件详细设计产生的图如下: 该图是 A)N-S图 B)PAD图 C)程序流程图 D)E-R图 (8)数据库管理系统是 A)操作系统的一部分 B)在操作系统支持下的系统软件 C)一种编译系统 D)一种操作系统 (9)在E-R图中,用来表示实体联系的图形是 A)椭圆图 B)矩形 C)菱形 D)三角形 (10)有三个关系R,S和T如下: 其中关系T由关系R和S通过某种操作得到,该操作为A)选择 B)投影 C)交 D)并

(11)用于设置组件大小的方法是 A)paint( ) B)setSize( ) C)getSize( ) D)repaint( ) (12)点击窗口内的按钮时,产生的事件是 A)MouseEvent B)WindowEvent C)ActionEvent D)KeyEvent (13)AWT中用来表示对话框的类是 A)Font B)Color C)Panel D)Dialog (14)下列运算符中,优先级最高的是 A)+= B)= = C)&& D)++ (15)下列运算结果为1的是 A)8>>1 B)4>>>2 C)8<<1 D)4<<<2 (16)下列语句中,可以作为无限循环语句的是A)for(;;) {} B)for(int i=0; i<10000;i++) {} C)while(false) {} D)do {} while(false) (17)下列表达式中,类型可以作为int型的是A)“abc”+”efg” B)“abc”+?efg? C)…a?+?b? D)3+”4”

微机原理实验程序

硬件实验七 D/A转换实验 (2 锯齿波 --------------- ; 注意:进行本实验前, 请先装载运行 D/A 0V输出 (调基准电压程序Asm88\da_0v.asm ; 使 D/A输出端“ AOUT ” 输出电压为 0V , 再进行本实验。 CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ORG 33F0H DAPORT EQU 0FFE0H H7: MOV DX,DAPORT MOV AL,00H P7: OUT DX,AL INC AL JMP P7 CODE ENDS END H7 串行通信 CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ORG 35C0H ;TX=RX

H11: JMP START Z8251 EQU 0FFE1H D8251 EQU 0FFE0H COM_MOD EQU 04EH COM_COM EQU 25H ZXK EQU 0FFDCH ZWK EQU 0FFDDH LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H BUF DB ?,?,?,?,?,? START: MOV BX,4000H MOV AL,[BX] CMP AL,00H JNZ SR0 SR8251: MOV DX,Z8251 MOV AL,COM_MOD OUT DX,AL MOV AL,COM_COM OUT DX,AL MOV AL,10

微机原理实验程序-中国石油大学(华东)

实验3 循环程序设计 实验内容: 1.数组X,Y,Z,。X=32,-43,76,95,-1;Y=-78,127,-128,-125,88。计算两数之和,送入数组S。 DATA SEGMENT X DB 32,-43,76,95,-1 Y DB -78,127,-128,-125,88 S DB 5 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX ,DATA MOV DS,AX MOV CX,5 MOV SI,0 FOR:MOV AL,X[SI] ADD AL,Y[SI] MOV S[SI],AL INC SI LOOP FOR CODE ENDS END START

2.两个多位十进制数,X=1357902468,Y=5790123467。计算两数之和(BCD码)。DATA SEGMENT X DB 68H,24H,90H,57H,13H Y DB 67H,34H,12H,90H,57H S DB 5 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX ,DATA MOV DS,AX MOV CX,5 MOV SI,0 CLC FOR:MOV AL,X[SI] ADD AL,Y[SI] DAA MOV S[SI],AL INC SI LOOP FOR CODE ENDS END START

实验4 子程序调用变成设计 实验内容: 用子程序调用方法,现有数组X=32,-43,76,95,-1,-78,127,-128,-125,88 编程按递增顺序排序输出。 DATA SEGMENT X DB 32,-43,76,95,-1,-78,127,-128,-125,88 ENDS SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX ,DATA MOV DS,AX CALL SUB1 MOV AH,4CH INT 21H SUB1 PROC NEAR MOV CX,9 LP1:MOV BX,0 MOV DX,CX LP2;MOV AL,X[BX] CMP AL,X[BX+1] JLE NEXT

2020年全国计算机等级考试二级JAVA重点内容

全国计算机等级考试二级Java 重点内容学习是要持之以恒的一件事,坚持就是胜利! 以下的全国计算机等级考试二级Java 重点内容,希望对大家有所帮助,更多信息请关注! 1. AOP 的概念及优点 AspectOrientedProgramming 面向方面编程. 面对象编程的关注点是对象, 面向方面编程以面向对象编程为基础, 关注点是切面, 切面组件可以作用在若干目标对象的方法上, 封装了具有通用性的一些处理.例如日志记录,事务处理,异常处理等等. 面向方面编程优点: 将共通处理封装成了一个独立组件,利用配 置形式作用在了某一批目标对象上,实现组件的重复利用, 将切面和目标对象解耦, 实现了低耦合应用. *a. 切面(Aspect) 封装了共通处理的组件, 可用于切入到目标对象的处理方法中 *b. 切入点(Pointcut) 用于指定目标对象和方法的一个表达式. 是连接点的集合. 连接点是切面组件与某一个目标对象方法的作用点, 例如方法调用和异常发生 *c. 通知(Advice) 用于指定切面功能切入目标对象方法的位置. 例如切入到目标方法调用之前, 目标方法调用之后等. 通知类型:前置通知,后置通知,环绕通知,最终通知,异常通知try{ // 执行前置通知 // 执行环绕通知-- 前置

执行目标对象方法 // 执行环绕通知-- 后置 // 执行后置通知 }catch(Exceptionex){ // 执行异常通知 }finally{ // 执行最终通知 } d. 目标对象(Target) 需要使用切面功能的,被切入的Bean对象.使用切入点表达式指定 e. 动态代理(AutoProxy) 在Spring采用了AOP之后,从容器取出的目标对象是一个动态代理类型,调用代理对象方法时,代理对象会调用切面功能和目标对象功能. 动态代理类生成技术: 有接口的目标对象采用JDKProxy技术. 没有接口的目标对象采用CGLIB技术. 2. 切入点表达式的定义 1) 方法限定execution execution( 修饰符?返回类型方法名(参数类型)throws 异常?)

相关主题
文本预览
相关文档 最新文档