问答题


阅读以下算法说明和C程序,根据要求回答问题1和问题2。
【说明】
【算法4-1】的功能是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者右括号,则给出相应的提示信息,如图1-18所示。


在【算法4-1】中,slack为一整数栈。算法中各函数的说明如表1-11所示。
表1-11 各函数的功能说明表
函 数 名 函数功能
push(int i) 将整数i压入栈stack中
Pop() stack的栈顶元素出栈
Empty() 判断stack栈是否为空。若为空,函数返回1,否则函数返回0
Nextch() 读取文本文件中的下一个字符,并返回该字符的ASCII值,将字符所在的行号及字符在行中的位置分别存储到变量row和col中,若遇到文件结束符,则将变量EOF置为true
Kind(charch) 判断字符ch是左括号还是右括号,若是左括号,函数返回1:若是右括号,函数返回2;若两者都不是,函数返回0

【算法4-1】
将栈stack置空,置EOF为false
Ch<-nextch();
while(not EOF)
  k←kind(ch);
  if (k == (1) ) {
    push( (2) );
    push( (3) );}
  else if( k == (4) )
    if(not empty()){
      pop();
      pop();)
    else{
  显示错误信息(缺少对应左括号或右括号):
  显示行号row:显示列号col:)
    End if
  End if
  Ch<-nextch();
end while
if(not empty())
  显示错误信息(缺少对应左括号或右括号):
  While(not empty()){
  row<-pop();
  col<-pop():
  显示行号row:显示列号col;)
  End while
End if
  为了识别更多种类的括号,对【算法4-1】加以改进后得到【算法4-2】。【算法4-2】能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(charch)的参数及其对应的返回值如表1-12所示。
                                    表1-12 函数kind(charch)的参数及其对应的返回值
ch ( ) { } [ ] 其他
返回值 1 2 3 4 5 6 7
【算法4-2】
将栈stack置空,置EOF为false
Ch<-nextch();
while(not EOF){
k<- kind(ch);
if(k > 0)
if(判断条件1){
push( (5) );
push( (6) );
push( (7) );}
else if(判断条件2 and判断条件3){
pop();
pop();
pop();}
else {
显示错误信息(缺少对应左括号或右括号);
显示行号row;显示列号col;)
end if
end if
ch <- nextch();)
end while
if(not empty()){
显示错误信息(缺少对应左括号或右括号);
While(not empty()){
Pop();
row <- pop():
col <- pop();
显示行号row;显示列号col;))
end while
end if
【问题1】
请将【算法4-1】和【算法4-2】中,(1)~(7)空缺处的内容补充完整。

【参考答案】

(1)1 (2)col (3)row (4)2 (5)col (6)row (7)k
热门 试题

问答题
【说明】用创建Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,打印“是素数”,如果不是,则打印“不是素数”;如果没有参数输入,显示“请输入一个命令行参数”。【Java程序】import java.io.* ;public class TestThread{ Java Application主类public static void main(Sting args[ ]){if (args length<l) { 要求用户输入一个命令行,否则程序不能进行下去system.out.println( 请输入一个命令行参数 );system.exit(0) ;} 创建用户Thread子类的对象实例,使其处于NewBorn状态primeThread getPrimes = new primeThread (Integer.parseInt(args[0]));getPrimes.start () ; 启动用户线程,使其处于Runnable状态while(getPrimes.isAlive()&& getPrimes.ReadyToGoOn() ) {system.out.println( Counting the prime number.. n ); 说明主线程在运行try {Thread. sleep (500); 使主线程挂起指定毫秒数,以便用户线程取得控制权, sleep是static的类方法}Catch(InterruptedException e) { sleep方法可能引起的异常,必须加以处理return ;}} while循环结束System.out.println ( 按任意键继续…… ) ; 保留屏幕,以便观察try {(1) ;}Catch(IOException e) { }} main方法结束}class primeThread extends Thread { 创建用户自己的Thread子类run()中实现程序子线程操作boolean m_bContinue=true; 标志本线程是继续int m_nCircleNum ; 循环的上限prime Thread(int Num){ 构造函数m_nCircleNum =Nam;}boolean ReadyToGoOn () { 判断本线程是否继续执行return ( (2) );}public void run () { 继承并重载父类Thread的run ()方法,在该线程被启动时自动执行int number =3;boolean flag=true;while (true) { 无限循环for( (3) ; i++) 检查number是否为素数if(number %i==0)(4) ;system, out. println (flag);if (flag) 打印该数是否为素数的信息system,out.print in (number+ 是素数 ) ;elsesys rem.out.print In (number+ 是素数 ) ;number++ ; 修改number的数值,为下一轮素数检查做准备if (number> m_nCircleNum) { 到达要求检查数值的上限m_bCont inue= false ; 则准备结束此线程return ; 结束run()方法,结束线程}(5) ;try{ 经过一轮检查之后,暂时休眠一段时间sleep(500); 使主线程挂起指定毫秒数,以便父线程取得控制权}Catch(InterruptedException e) {Return;}} for循环结束} while循环结束} run()方法结束} primeThread类定义结束