Tcl脚本编程测试题 下载本文

内容发布更新时间 : 2024/7/9 4:57:22星期一 下面是文章的全部内容请认真阅读。

Tcl/Tk Quiz Sheet Time: 2 hours

Part I. Fill Out. (10%)

Tcl is for __________________________________, it’s a ___________ language. 生成pkg_Index.tcl文件的命令是________________________。

在执行package require命令的时候,该命令会根据变量_________查找相关package所在路径。

Tcl命令出错时错误信息一般存放在全局变量___________中。 用命令_____________________可以列出数组中元素名称。

可将一个字符串中的每个字符分开来的list命令是______;如果字符串是“HappyDay”,则完整的命令为______________________。如果要在这个字符串中每个字符之间插入一个“/”,则可以使用上面的命令和另一个list命令______来共同完成,完整命令为____________________________________________________________________________。 名字空间输出过程/函数的命令是 namespace _________________。而从名字空间输入过程的命令则是_____________________。

在读取文件时,判断已到文件结尾的命令是_____________。

获取过程的脚本的命令是info______;而获取过程的参数的命令是____________。判断一个变量是否存在的命令是__________。

可以用来装载并执行脚本文件的Tcl命令是____________。 环境变量被存放在一个特殊数组中,即________________。 根据模式说明来格式化字符串的命令是________________,而根据模式来解析字符串的命令是_______________。

Part II. Choice correct answer(s) for the following review questions .(24%) To open a file for reading and writing, which command is right? [ ] (1%) open $file rw open $file r+ open $file w open $file w+

In which sentence(s) the variable after (first) “$” can be replaced by it’s actual value? * + (3%) catch { puts {My name is $name} } err

regexp {my name is $name- “I’m a girl, my name is QQ” match set str {My name is $name} eval ,puts “My name is $name”-

set var name; puts “My name is $$var”

if ,$name >= “QQ”- ,puts “$name is bigger than QQ”- subst {a={{$name}},b=[expr 3*10]} switch $X , “$name” ,puts ok- …-

To find out commands which can be used to destroy an array “arrParams”.* + unset arrParams array unset arrParams destroy arrParams forget arrParams

Which character is logical and?[ ] || & | &&

Pick out the correct command(s) whose result is an integer ? [ ] expr 10 / 2.0 expr 10/2

expr int(10/2.0)

expr int([expr 10/2.0])

Which command can be used to convert hex value “0x23” into a ten digital length integer with all zero filled out at left side?哪个命令可以用来将十六进制数“0x23”转换为10位长度的十进制整数,且右对齐,不足十位则左侧补零,即0000000035? [ ] format “d” 0x23 format “%-10d” 0x23 format “0d” 0x23 format “%-010d” 0x23

对于“array names arrParams lif*”正确的说法是[ ] “lif*”是通配符形式而非正则表达式 与A相反

既是通配符,又是正则表达式 以上描述都不对

以下那些命令也可以用正则表达式形式?[ ] lsearch

string match array names switch

一个脚本文件中定义了若干个过程(函数),形式为 proc funcName ,…- , # Procedure body }

以下哪个正则表达式可以从脚本文件中将过程名提取出来?

regexp {^[\\t ]*?proc[\\t ]+([a-zA-Z0-9\\-_]+)[\\t ]+\\{.*?\\}[\\t ]\\{} $str match func regexp {proc[\\t ]+([a-zA-Z0-9\\-_]+)[\\t ]+\\{.?\\}[\\t ]\\{} $str match func regexp {proc[ ]+?[a-zA-Z0-9\\-_]+?[ ]+\\{*\\}[ ]\\{} $str match func 代表标准错误输出的是[ ] stdin stdout stderr

代表命令行参数个数的变量是:[ ] argv argv0 argc args

下面那些命令会对变量直接操作而更改其值:[ ] append concat lappend linsert

Part III. True or False.(10%)

uplevel 1是global即最上一级的下一级,而uplevel #1则是本级的上一级。[ ]

upvar中如果level不指定则默认为1,即本级的上一级;而0则表示全局变量。[ ] lappend a {a b c}和 set a [concat $a {a b c}]的结果是一样的。[ ] 环境变量数组env在子解释器中可以直接使用。[ ] 子解释器就是一个单独线程。[ ]

正则表达式中*、+和?具有贪婪性,它们会尽可能多的匹配字符,为了让它们进行非贪婪匹配,可以通过在其后加一个问号“?”的方法来实现。但此非唯一方法。[ ] 列表也是字符串,所以可用字符串命令来操作和处理。[ ] 数组是特殊的字符串,可以用字符串命令来处理。[ ]

用variable而非global定义的名字空间的全局变量只能在本名字空间内可见。[ ]

在多重循环控制语句中,最内层循环的break命令只会中断该重循环,而不会中断外层循环.[ ]

Part IV. Answer the following questions (21%)

试列举两种可用来比较字符串大小的方法或命令。(5%) “string compare”,“string equal”和“string match”的输出结果有什么异同?(5%) 解释一下正则表达式中关于“?”、“+”与“*”的“贪婪”和“非贪婪”性,并举例说明和比较。(6%)

论述对Tcl中的“命令解释器”和“子命令解释器”的理解。(5%) Part V. Writing Lab. (40%)

用after命令和嵌套函数设计一个时钟函数。要求:每隔1秒在终端打印出当时时间,格式为“日期/时:分:秒”。输出结果如下:[10%] 2006-6-21/12:10:02 2006-6-21/12:10:03 ??

在设计测试脚本过程中,经常需要对一定范围内的IP地址按照一定步长进行遍历。试设计这样一个函数,将给定的IP地址增加一个步长并返回新的IP地址。输入参数为初始IP地址和步长。初始IP地址,步长和新IP地址都是点分十进制IP地址。(提示:每段IP地址可视为255进制,即范围是0到255。注意进位的判断) [15%] 2.1 用伪语言或者流程图描述处理流程。[5%] 2.2 完成代码。[10%]

proc incr_ip_addr {ip_addr step} { set new_ip_addr “” # fill your scripts here return $new_ip_addr } #Examples

set new_ip_addr [incr_ip_addr 10.8.9.1 0.0.0.3] ; # new_ip_addr should be 10.8.9.4 set new_ip_addr [incr_ip_addr 10.8.9.254 0.0.0.5]; # new_ip_addr should be 10.8.10.3, #because 254 plus 5 is bigger than 255 指出下面脚本中的错误并改正。[5%] 3.1 switch 语句 [1%] switch -exact -- $result { # To check the result \ # This is true. puts \ } \ puts \ } \ default { puts \ }

3.2 在字符串中搜索出IP地址。IP地址的每部分可能为1到3位数字 [2%] if {[regexp {[0-9]{3,1}.[0-9]{3,1}.[0-9]{3,1}.[0-9]{3,1}} $str match]} { puts “the IP address is $match” }

3.3 [2%]

catch {exec ls } errStr

puts “Execut “exec” command error. The reason is errStr”

在unix系统中,独立Tcl/Tk脚本的开始头如何编写?(假设unix shell为 /bin/sh)(5%) # !/bin/sh

_____________________________________

(Optional) 试用expect语言编写一段telnet登录脚本: 登录成功的prompt是Hello>

用户名出错信息是: Unknown User Name