A.以最后一个“\0”字符为标准
B.以第一个“\0”字符为标准
C.程序错误
D.不作为字符串
第1题
【题目描述】
试题四(共15分)
阅读以下说明和C函数,填补C函数中的空缺(1)~(5),将解答写在答题纸的对应栏内。
【说明】
假设一个算术表达式中可以包含以下三种括号:“(”和“)”、"[”和“]”、“{”和“}”,并且这三种括号可以按照任意的次序嵌套使用。
下面仅考虑表达式中括号的匹配关系,其他问题暂时忽略。例如,表达式“[a.(b.5)]*c[{}]”中的括号是完全匹配的,而表达式“[a-(b-5]))*c”中的括号不是完全匹配的,因为“(”与“]”不能匹配,而且多了一个“)”,即缺少一个与“)”相匹配的“(”。 函数ifmatched (char expr[])的功能是用栈来判断表达式中的括号是否匹配,表达式以字符串的形式存储在字符数组expr中。若表达式中的括号完全匹配,则该函数的返回值为Matched,否则返回值为Mismatched。
该函数的处理思路如下:
(1)设置一个初始为空的栈,从左至右扫描表达式。
(2)若遇上左括号,则令其入栈;若遇上右括号,则需要与栈顶的左括号进行匹配。
(3)若所遇到的右括号能与栈顶的左括号配对,则令栈顶的左括号出栈,然后继续匹配过程;否则返回Mismatched,结束判断过程。
(4)若表达式扫描结束,同时栈变为空,则说明表达式中的括号能完全匹配,返回Matched。 函数ifMatched中用到了两种用户自定义数据类型BOOL 和STACK,其中,BOOL类型的定义如下:
typedef enum {Mismatched, Matched}BOOL;
STACK(即栈类型)的定义省略,栈的基本操作的函数原型说明如下:
void InitStack(STACK *S):初始化一个空栈。
void Push(STACK *S,char e):将一个字符压栈,栈中元素数目增1。
void Pop(STACK *S):栈顶元素出栈,栈中元素数目减1。
char Top(STACK S):返回非空栈S的栈顶元素值,栈中元素数目不变。
int IsEmpty(STACK S):若S是空栈,则返回1,否则返回0。
【我提交的答案】:(1)cptr++ (2)Push(&S,*cptr) (3)Top(STACK S) (4)Pop(STACK *S) (5)IsEmpty(STACK S)
【参考答案分析】:试题四参考答案(共 15分)
(1) cptr++或++cptr 或cptr +=1 或cptr = cptr+1 (3分)
(2) Push(&S,*cptr) (3 分)
(3) Top(S) (3分)
(4)Pop(&S) (3分)
(5) Is Empty(S) (3分)
【我的疑问】(如下,请求专家帮助解答)
老师,我第二题的答案写成:Push(STACK *S,*cptr),这样写对吗?会给分吗?我第三题写成:Top(STACK S),这样写对吗?会给分吗?
第2题
[流程图说明]
流程图1-1描述了一个算法,该算法将给定的原字符串中的所有前导空白和尾部空白都删除,但保留非空字符之间的空白。例如,原字符串“ File Name ”,处理后变成“File Name”。流程图1-2、流程图1-3、流程图1-4分别详细描述了流程图1-1中的框A,B,C。
假设原字符串中的各个字符依次存放在字符数组ch的各元素ch(1),ch(2),…,ch(n)中,字符常量KB表示空白字符。
流程图1-1的处理过程是:先从头开始找出该字符串中的第一个非空白字符ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j),然后将ch(i),…,ch(j)依次送入 ch(1),ch(2),…中。如果原字符串中没有字符或全是空白字符,则输出相应的说明。在流程图中,strlen是取字符串长度函数。
[问题]在流程图1-1中,判断框P中的条件可表示为:
i>(5)
第5题
更形式化地,浮点二进制数定义如下:
其中,
符号::=表示定义为;
符号[...]表示可选项;
符号alb表示a或b.
假设有这样一个有穷状态机:以一串字符为输入,判断字符串中是否含有合法的浮点二进制数。
试对这个有穷状态机进行规格说明。
第7题
设内存中从SOURCE开始有一用上述方法压缩的字符串,其以OOH结束,解压后长度不超过100。试编程对其解压缩,结果存入RESULT开始的内存单元。
例如:
原串: 41H,1BH,06H,43H,61H,00H
解压缩后:41H,43H,43H,43H,43H,43H,43H,61H,OOH("ACCCCCCa")
部分程序已给出,原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。
请填空BEGIN和END之间已给出的源程序使其完整,空白己用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编写程序片段来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
【试题程序】
EXTRN LOAD:FAR, SAVE:FAR
N EQU 100
ESC_CODE EQU 27
STAC SEGMENT STACK
DB 128 DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N DUP(0)
NAME0 DB 'INPUT.DAT',0
NAME1 DB 'OUTPUT.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS, AX
MOV ES, AX ;置附加段寄存器
LEA DX, SOURCE ;数据区起始地址
LEA SI, NAME0 ;原始数据文件名起始地址
MOV CX, N ;字节
CALL LOAD ;从"INPUT.DAT" 中读取数据
******** BEGIN ********
LEA SI, SOURCE
LEA DI, RESULT
CLD
LO: LODSB
CMP AL, 0
JE QUIT
CMP AL, ESC_CODE
J (1) EXPAND
(2)
JMP L0
EXPAND: (3)
第8题
STR1="中国(ChinA) 是一个伟大的国家(nation)"
C=0
DO WHILE LEN(STR1)>0
IF _________ (LEFT(STR1,1))>127
C=C+1
STR1=SUBSTR(STR1, ________ )
ELSE
STR1=SUBSTR(STR1, _______ )
ENDIF
ENDDO
WAIT WINDOWS"汉字个数为"+STR(C)
第10题
设内存中从SOURCE开始有一用上述方法压缩的字符串,其以00H结束,解压后长度不超过 100。试编程对其解压缩,结果存入RESULT开始的内存单元。
例如:
原串:41H,1BH,06H,43H,61H,00H
解压后:41H,43H,43H,43H,43H,43H,43H,61H,00H("ACCCCCCa")
部分程序已在PROG1.ASM中给出,请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但功能相当的多条指令亦可)或删除BEGIN和 END之间原有的代码并自行编写程序片段来完成要求的功能。
原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
对程序必须进行汇编,并与IO.OBI链接产生PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。
PROG1.ASM文件内容如下:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 100
ESC_CODE EQU 27
STAC SEGMENT STACK
DB 128DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
RESULT DB N DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;置附加段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'input1.DAT'中读取数据
;* * * * BEGIN * * * *
LEA SI,SOURCE
LEA DI,RESULT
CLD
LO: LODSB
CMP AL,0
JE QUIT
CMP AL,ESC_CODE
_____ EXPAND
_____ _____
JMP LO
EXPAND: _____ _____ ;解压
XOR CX,CX
_____ _____
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!