第2题
[说明]
一般的树结构常采用孩子—兄弟表示法表示,即用二叉链表做树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩子节点和下一个兄弟节点。例如,如图1-15(a)所示树的孩子—兄弟表示如图1-15(b)所示。
函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对如图1-15所示的树进行层序遍历时,节点的访问次序为D B A E F P C。
对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如表1-11所示。
Bool、Status类型定义如下:
树的二叉链表节点定义如下:
[C函数程序]
第3题
void strinit(HString s); //置s为空串
int strlen(HString s); //求串s的长度
void strcpy(HString to,HString from); //将串from复制到串to
void streat(HString to,HString from); //将串from联接到串to的末尾
int strcmp(HString s1,HString s2);
//比较串s1和s2的大小,当s1<s2,s1=s2或s1>s2时,
//返回值小于0,等于0或大于0
HString substr(HString s,int i,int m);
//返回串S中从第i(0≤i≤strlen(s)-m)个字符起长度为m的子串阅读下列算法f32,并回答问题:
(1)设串S="abcdabcd",T="bcd",V="bcda",写出执行f32(S,T,V)之后的S;
(2)简述算法f32的功能。
void f 32(HString S,HString T,HString V){
int m,n,pos,i;
HString news;
strinit(news);
n=strlen(S);
m=strlen(T);
pos=i=0;
while(i<=n-m){
if(strcmp(substr(S,i,m),T)!=0)i++;
else{
strcat(news,substr(S,pos,i-pos));
strcat(news,V);
pos=i=i+m;
}
}
strcat(news,substr(S,pos,n—pos));
strcpy(S,news);
}
第4题
[说明]
在多道程序系统中,进程是并发执行的。这些进程间存在着不同的相互制约关系,主要表现为同步和互斥两个方面。信号量机制是解决进程间同步与互斥的有效方法。下面是信号量应用实例。
下图所示代码是在μC/OS-II操作系统上运行的一个应用的主函数。该函数创建了任务Task1和Task2,其中Task1实现从键盘读入一个字符的功能,Task2将该字符输出到屏幕,它们使用信号量和一个公共变量buffer来传递该字符。
主函数、Task1和Task2中所调用的函数原型说明如下:
a.创建一个信号量:OS EVENT*OSSemCreate(INT16Uvalue);
b.创建一个任务:INT8U OSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK *ptos,INT8U prio);
c.开始执行多任务:void OSStart(void);
d.从键盘读入一个字符:char scanc();
e.输出一个字符至屏幕:void printc(char ch);
f.发出一个信号量:INT8U OSSemPost(OS EVENT*pevent);
g.等待一个信号量:void OSSemPend(OS_EVENT*pevent,INT16U timeout,INT8U *err)
请简述什么是临界资源?什么是临界区?访问临界资源应遵循哪些原则?
第5题
阅读以下说明和c语言函数。
[说明]
函数bool Del_elem(STACK*s,char para_ch)的功能是:删除栈*s中与para ch之值相等且最接近栈顶的元素(字符),若栈中不存在该元素,则函数返回 FALSE,否则返回 TRUE。其中,STACK是栈的类型名。
函数Del_elem实现上述功能的方法是:利用栈的基本操作,先将栈*s中所有比 para_ch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与Para ch之值相等的元素,最后再将s bak中的元素依次存回栈*s。
在函数Del_elem中必须使用栈的基本操作进行栈上的运算,实现栈的基本操作的函数原型说明如下:
void InkStack(STACK*S):初始化栈。
void Push(STACK*S,char e):将一个字符压栈,栈中元素数目增1。
void Pop(STACK*S):栈顶元素出栈,栈中元素数目减1。
char Top(STACKS):返回非空栈的栈顶元素值,栈中元素数目不变。
bool IsEmpty(STACK S):若S是空栈,则返回TRUE;否则返回FALSE。
bool类型定义如下:
typedef enum{FALSE=0,TRUE=1)bool;
[C语言函数]
bool Del_elem(STACK*s,char para_ch)
{
STACK s_bgk; /*定义临时工作栈s_bak,*/
char ch;
bool tag=FALSE;
(1) /*初始化临时工作栈s_bak*/
/*,将栈*s中所有比para_ch更接近栈顶的元素暂时存放在临时工作栈s bak中*/
while(!IsEmpty(*s)){
ch=(2); /*取栈顶元素*/
Pop(s);
if(ch=para_ch){
tag=TRUE;
break;
}
(3);
}
/*将暂存于临时工作栈s_bak中的元素存回栈*s*/
while((4))
ch=Top(s_bak);
(5)
Push(s,ch)
}
return tag;
}
【我提交的答案】:
【参考答案分析】:
(1)InitStack(&s_bak)(2)Top(*s)(3)Push(&s_bak,ch)(4)!IsEmpty(s_bak),或IsEmpty(s_ak)==FALSE(5)Pop(&s_bak) 解析:本题考查的是C语言的函数调用和参数传递问题。
C语言采用传值调用方式,即将实际参数的值传递给形式参数,因此,实际参数一般是与形式参数类型相同的变量或表达式。但是,若形式参数为指针,则调用语句中的实参应将一个变量的地址传递给形参。
函数bool Del_elem(STACK*s,char para_ch)的功能是删除栈*s中与para_ch之值相等且最接近栈顶的元素(字符)。因此,利用栈的基本操作,先将栈*s中所有比para ch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与para_ch之值相等的元素,最后再将s bak中的元素依次存回栈*s。
从初始化栈的函数原型“void lnitStack(STACK*S)”可知,形参是一个指针变量,那么实参应该是对STACK类型的变量取地址,因此空(1)处应填入“initStack(&s bak)”。
根据出栈操作的函数原型“void Pop(STACK*S)”,出栈时栈中元素数目减1但调用环境不能获得栈顶元素,因此需要首先调用函数Top()获取栈顶元素的值,然后调用Pop()从栈中删除栈顶元素。因此空(2)应填入“Top(*s)”。临时工作栈需要保存从栈*s弹出的元素,因此,参考压栈操作的函数原型“void Push(STACK*S,chare)”,空(3)应填入“Push(&s bak,ch)”。
从栈中取元素时,应首先判断是否为空栈,这是使用栈结构的一项基本常识。参考函数原型“bool IsEmpty(STACK S)”和bool类型的定义,空(4)应填入“!IsEmpty(s_bak)”。同时,通过Top和Pop操作从临时工作栈s bak中取出元素,再用Push操作将该元素压入栈*s中,来实现将暂存于临时工作栈s bak中的元素存回栈*s,因此,空(5)填入“Pop(&s_bak)”。
为什么答案中有&符号?
第6题
硬件连接: 按键S1->P0_1(下降沿识别) 按键S2->P0_2(下降沿识别) D1->P1_0 D2->P1_1 …… D8->P1_7(高电平点亮,低电平熄灭) 完善下列CC2530单片机代码,采用中断方式,实现功能: 1、初始状态,D1-D8全部熄灭; 2、按键S1,S2控制8个LED灯D1 -> D8双向循环流水显示。 #include <iocc2530.h> void io_init(void) { //P1口线的普通I/O功能配置 _________________________________ //配置P1SEL ① _________________________________ //配置P1DIR ② _________________________________ //配置P1端口初始电平③ //P0口线输入功能配置 P0SEL &= XXXXX; P0DIR &= XXXXX; P0INP |= XXXXX; //P0中断的相关寄存器配置 __________________________________//配置P0输入中断触发条件④ __________________________________//配置P0中断屏蔽寄存器 ⑤ EA = 1; __________________________________//配置P0中断使能位⑥ P0IFG &= XXXX; P0IF = XXX; } /******************************************************************* ** 中断服务函数 ******************************************************************/ ____________________________________//P0中断服务函数⑦ { if(________ ) //识别按键S1 ⑧ XXXXXXXXXX; if(_________) //识别按键S2 ⑨ XXXXXXXXXX; P0IF=0; ___________________________________//配置P0中断状态标志位寄存器⑩ } /**************************************************************** **** main function ****************************************************************/ void main(void) { io_init(); while(1); } /***************************THE END****************************/
第7题
A.系统的整体可靠性原则,从人机系统的整体可靠性出发,合理确定人与机器的功能分配,从而设计出经济可靠的人机系统。一般情况下,机器的可靠性高于人的可靠性,实现生产的机械化和自动化,就可以将人从机器的危险点解脱出来,从根本上提高了人机系统的可靠性
B.高可靠性组成单元要素原则,系统要采用经过检验的、高可靠性单元要素来进行设计,由于负荷条件和环境因素随时间而变化,所以可靠性也是随时间变化的函数,并且随时间的增加,可靠性降低。因此,设计的可靠性和有关参数应具有一定的安全系数,保证了可靠性
C.高可靠性方式原则,为提高可靠性,宜采用冗余设计、故障安全装置、自动保险装置等高可靠度结构组合方式。系统安全常是以正常的准确的完成规定功能为前提。多达到功能准确性,采用保险结构方法可保证系统的可靠性
D.高维修度原则,为便于检修故障,且在发生故障时易于快速修复,同时为考虑经济性和备用方便,应采用零件标准化、部件通用化、设备系列化的产品
E.预测和预防的原则,要事先对系统及其组成要素的可靠性和安全性进行预测。对已发现的问题加以必要的改善,对易于发生故障或事故的薄弱环节和部位也要事先制定预防措施等
第8题
第10题
A.将一个字符串首尾颠倒
B.计算字符串的长度
C.统计字符串中的空格个数
D.将字符串中的小写字母变成大写字母
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!