阅读下列函数说明、图和C代码,回答问题[说明]在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。函数中使用的预定义符号如下:typedef struct TreeNode{/*二叉排序树节点*/char *word;struct TreeNode *left, *right;}BNODE;[函数]int getWord(FILE *f

题目

阅读下列函数说明、图和C代码,回答问题

[说明]

在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。

程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。

函数中使用的预定义符号如下:

typedef struct TreeNode{/*二叉排序树节点*/

char *word;

struct TreeNode *left, *right;

}BNODE;

[函数]

int getWord(FILE *fpt, char *word)

/*从文件fpt中读取单词到word中,到达文件结束时返回0*/

{

char c;

c = fgetc(fpt);

if(c == EOF)return 0;

/*跳过单词间的非字母字符*/

while(!(tolower(c) >= 'a' && tolower(c) <= 'z')){

c = fgetc(fpt);

if(c == EOF)return 0;

}

/*不区分大小写*/

while(tolower(c) >= 'a' && tolower(c) <= 'z'){

*word++ = c;

c = fqetc(fpt);

}

*word = '\0';

return 1;

}

void BTree(BNODE **t, char *word)

{

BNODE *ptr, *p;

int compres;

p = NITLL;

(1) ;

while(ptr){

compres = strcmp(word, (2) );

if(!compres){

return;

}else{

(3) ;

ptr = compres > 0 ? ptr->right : ptr->left;

}

}

ptr = (BNODE*)malloc(sizeof ptr);

ptr->left = ptr->right = NULL;

ptr->word = (char*)malloc(strlen(word) + 1);

strcpy(ptr->word, word);

if(p == NULL){

(4) ;

}else if(compres > 0){

p->right = ptr;

}else{

p->left = ptr;

}

}

int main()

{

FILE *fpt;

char word[40];

BNODE *root = NULL;

if((fpt = fopen("text.in", "r")) == NULL){

printf("不能打开文件text.in! \n");

return 1;

}

while(getWord(fpt, word) == 1){

BTree (5) ;

}

fclose(fpt);

return 0;

}


相似考题
更多“阅读下列函数说明、图和C代码,回答问题[说明] 在进行文法分析的时候,通常需要检测一个单词是否在 ”相关问题
  • 第1题:

    阅读以下关于嵌入式操作系统软件编码优化的技术说明,根据要求回答问题1至问题5。

    【说明】

    由于嵌入式系统对实时性的要求较高,因此一般要求对代码的性能进行优化,使代码的执行速度越快越好。图6-22给出了两个算术运算的程序段(a)、(b)。

    在嵌入式系统设计过程中,给定一份软件设计规格说明书后,下一步的工作就是编写代码。通常编码工作包含哪些步骤?


    正确答案:①给定源程序的标准格式制定编程规范 ②准备编程环境包括软/硬件平台的选择、操作系统、编程语言、集成开发环境等 ③编写程序源代码 ④进行代码审查以提高编码质量 这是一道要求读者掌握嵌入式系统软件编码步骤的简答题。本题所涉及的知识点如下: 在嵌入式系统设计过程中给定一份软件设计规格说明书后下一步的工作就是编写代码。通常编码工作可分为四个步骤: ①给定源程序的标准格式制定编程规范。 ②准备编程环境包括软/硬件平台的选择、操作系统、编程语言、集成开发环境等。 ③编写程序源代码。 ④进行代码审查以提高编码质量。在审查时检查软件规格说明书与编码内容是否一致代码对硬件和操作系统资源的访问是否正确中断控制模块是否正确执行等。
    ①给定源程序的标准格式,制定编程规范 ②准备编程环境,包括软/硬件平台的选择、操作系统、编程语言、集成开发环境等 ③编写程序源代码 ④进行代码审查,以提高编码质量 这是一道要求读者掌握嵌入式系统软件编码步骤的简答题。本题所涉及的知识点如下: 在嵌入式系统设计过程中,给定一份软件设计规格说明书后,下一步的工作就是编写代码。通常编码工作可分为四个步骤: ①给定源程序的标准格式,制定编程规范。 ②准备编程环境,包括软/硬件平台的选择、操作系统、编程语言、集成开发环境等。 ③编写程序源代码。 ④进行代码审查,以提高编码质量。在审查时,检查软件规格说明书与编码内容是否一致,代码对硬件和操作系统资源的访问是否正确,中断控制模块是否正确执行等。

  • 第2题:

    ●试题二

    对文法G[S]:S→a|∧|(T);T→T,S|S;回答问题1~问题3。

    【问题1】

    对文法G进行改写,然后对每个非终结符写出不带回溯的递归子程序。

    【问题2】

    经改写后的文法是否是LL (1) 的?指出它的预测分析表中 (1) ~ (3) 处的内容。

    【问题3】

    说明输入串(a,a)是否为G的句子。


    正确答案:
    ●试题二[问题1]【答案】改写文法为:(0)S→a;(1)S→∧;(2)S→(T);(3)T→SN;(4)N→,SN;(5)N→ε非终结符FIRST集FOLLOW集S{a,∧,(}{#,,,}}T{a,∧,c}{}}…N{,,ε}.{}}…对左部为N的产生式可知:FIRST(→,SN)={,}FIRST(→ε)={ε}FOLLOW(N)={}}[问题2]【答案】文法是LL(1)的。(1)→SN;(2)→(T);(3)→ε[问题3]【答案】输入串(a,a)#是文法的句子。【解析】对于文法S→a|∧|(T)T→T,S|S由于SELECT(N→,SN)∩SELECT(N→ε)={,}∩{}}=,所以文法是LL(1)的。也可由预测分析表中无多重入口判定文法是LL(1)的。(3)对输入串(a,a)#的分析过程为:可见输入串(a,a)#是文法的句子。

  • 第3题:

    阅读下列说明和代码,回答问题1和问题2,将解答写在答题纸的对应栏内。 ?【说明】 ?某本地口令验证函数(C语言环境,X86 32指令集)包含如下关键代码;某用户的口令保存在字符数组origPassword中,用户输入的口令保存在字符数 组userPassword中,如果两个数组中的内容相同则允许进入系统。



    【问题1】(4分) 用户在调用gets()函数时输入什么样式的字符串,可以在不知道的原始口令“Secret”的情况下绕过该口令验证函数的限制? 【问题2】(4分) 上述代码存在什么类型的安全隐患?请给出消除该安全隐患的思路


    答案:
    解析:
    【问题1】gets(userPassword); 只要输入长度为超过12个字符,会出现缓冲区溢出的问题,导致函数不能正常工作。?因此只要前12个字符和后12个字符一致,则在比较的时候,因为后12个字符覆盖了origpassword,因此会绕过验证。
    【问题2】gets()函数必须保证输入长度不会超过缓冲区,一旦输入大于12个字符的口令就会造成缓冲区溢出。解决方案:改进gets()函数的安全性,或者对用户输入进行检查和校对,可通过if条件语句判断用户输入是否越界。

  • 第4题:

    阅读下列说明和代码,回答问题1和问题2,将解答卸载答题纸的对应栏内。

    【说明】

    某一本地口令验证函数(C语言环境,X86_32指令集)包含如下关键代码:某用户的口令保存在字符数组origPassword中,用户输入的口令保存在字符数组userPassword中,如果两个数组中的内容相同则允许进入系统。

    【问题1】

    用户在调用gets()函数时输入什么样式的字符串,可以在不知道原始口令“Secret”的情况下绕过该口令验证函数的限制?

    【问题2】

    上述代码存在什么类型的安全隐患?请给出消除该安全隐患的思路。


    正确答案:
    【问题一】只要输入长度为24的字符串,其前12个字符和后12个字符一样即可。【问题二】gets()函数必须保证输入长度不会超过缓冲区,一旦输入大于12个字符的口令就会造成缓冲区溢出。解决思路:使用安全函数来代替gets()函数,或者对用户输入进行检查和校对,可通过if条件语句判断用户输入是否越界。

  • 第5题:

    阅读以下说明,回答问题1至问题2,将解答填入答题纸对应的解答栏内。
    【说明】
    某留言系统采用ASP+Access开发,其后台管理登录页面如图4-1所示。

    【问题1】(9分)
    以下是该后台管理登录页面login.asp的部分代码,请仔细阅读该段代码,根据图4-1 将(1)~(9)的空缺代码补齐。



    【问题2】(6分)
    1.在登录页面 login.asp 中通过<!--#include file=“bbb.asp”-->导入了bbb.asp的代码,以下是bbb.asp的部分代码,请仔细阅读该段代码,将空缺代码补齐。



    答案:
    解析: