数据结构第6天

1、有一个变量unsigned char data;

请写出将data第6位置1的表达式

data = data | 1 << 5

请写出将data第6位清0的表达式

data = data & ~(1 << 5)

请写出将data第6位取反的表达式:

data = data ^ 1 << 5

说明:最右边位为第0位,用十六进制表示

2、(1)执行语句"k=11>>1"后,变量k的当前值是

11的二进制是1011 右移一位 -> 101 =5

右移一位除以2

(2)请写出程序执行后a,b,c的值分别为多少

d的值为多少并写出原因

a:8 指针为8位

b:10 数组的整个空间大小

c:5 不包括 \0

d:随机值,errInfo3中没有 '/0',计算长度时没有暂停条件

3、系统中有如下三个全局变量,且已经为这些变量分配内存,类型声明为:

extern WinInfo tmpInfo1;

extern BoxInfo tmplnfo2

extern BoxInfo*tmplnof3:

请根据要求写出赋值语句

(1)为tmpInfo1的域height 赋值为1:

tmpInfo1.height = 1

(2)为tmpInfo1的域with 赋值为2:

tmpInfo1.baseInfo.with = 2

(3)为tmpnfo2的域height赋值为1

tmpInfo2.height = 1

(4)为tmpInfo2的域with 赋值为2

tmpInfo2.baseInfo -> with = 2

(5)为tmpInfo3的域height 赋值为1

tmpInfo3 -> height = 1

(6)为tmpInfo3的域with 赋值为2

tmpInfo3 -> baseInfo -> with = 2

4、有如下程序段:

执行函数 UserInit 后b中的值是

将 3 的地址传进fun里
将 3 作为首地址往后访问6个,访问到9

5、(1) A、B两个程序通过首地址为0x80000000的共享内存传递int型数据,A往该地址写值,B从该地址读值。该共享内存空间足够大

请写出A程序将int tmp变量写入地址为0x80000000内存的语句:

*(0x80000000) = temp

请写出B从地址为0x80000000内存读取数据并赋值给int tmp的语句:

temp=*(0x80000000)

(2)有如下语句:

char *buf = (char*)malloc(100);

该缓存用于封装通信数据包,请写出在 buf[4] 开始的四个字节内写入int型变量tmp的语句:

*(buf+4) = temp

(3)有如下程序段:

由于在定义数组时长度不能用变量,因此上述代码无法编译通过。在不改变程序段功能的情况下,请修改上述代码,改正其错误:

char *buf[100] 暂定一个比较大的数

6、假设循环队列用数组实现,其定义如下

队列示例:

循环队列中保存了1、2、3三个数据的状态

(1)假如队列未满,现有变量data需要入队,请写出表达式

seqn[tail]=data; tail=(tail+1+32)%32;

(2)假如队列未空,现在需要从队列取一个元素并赋值给变量data,请写出表达式

data=seqn[head]; head=(head-1+32)%32

(3)请写出队列为空的判断条件

head==tail

(4)请写出队列满的判断条件

head==(tail+1+32)%32

(5)请写出清空队列的表达式

memset(seqn,0,sizeof(seqn));

(6)请写出计算队列中元素个数的表达式

(tail - head +32)%32

(7)队列最多可以存放几个元素:

22,有一个元素是留出来判断是否为满的

7、在某操作系统中用数组unsigned char Rdy[8] 的64个位码来表示64个任务的状态,该数组称为就绪表。就绪表中的每一位表示某一个任务的状态,任务就绪则对应位置为1,任务非就绪则对应位清0。

若任务0就绪,则Rdy[0]中的位0置为1,

若任务1就绪,则Rdy[0]中的位1置为1,

依次类推若任务63就绪,则Rdy[7]中的位7置为1

(1)若任务i就绪,请写出设置就绪表Rdy[ ]的表达式:

任务0-8:Rdy[0]

任务9-16:Rdy[1]

任务17-24:Rdy[2]

Rdy[ i / 8 ] = Rdy[ i / 8 ] | 1 << ( i % 8 )

(2)若任务j从就绪态转为非就绪态,请写出设置就绪表Rdy[ ]的表达式

Ray[ j / 8 ] = Ray[ j / 8 ] & ~(1 << ( i % 8 ))

(3)在某一调度时刻就绪表中有多个任务为就绪态,假设任务0的优先级最高,任务63的优先级最低,请设计一个算法,找出最高优先级任务

cs 复制代码
int fun(unsigned char* rdy)
{
    for(int i=0;i<8;i++){    //控制元素
        for(int j=0;j<8;j++){    //控制位数
            if(rey[i] & 1<<j){    //第i个元素的第j位为1时 return
                return i*8+j;
            }
        }
    }
    return -1;
}

8、有如下程序段:

请分析上述代码存在何种隐患,应如何修改?

只改变了value的值,没有改变外部数据

改为:用 int** value接 ,data[i]=**value

9、有如下程序:

请分析上述代码存在的问题,可能会引发何种后果

char 只能定义字符型变量,程序报错

10、有如下程序:

(1)请分析上述代码存在的bug?

只对p进行了指针指向赋值,没有对str做改变

(2)请修正代码(写上行号与修改后的代码)

//line4 GetMemory(&str) 传址

//line1 void GetMemory(char **p) 用二级指针去接

//line2 *p=(char*)malloc(10); *p访问str的空间 *p=str

相关推荐
VT.馒头9 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
历程里程碑10 小时前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Sheep Shaun10 小时前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制
Pluchon10 小时前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法
小龙报11 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
dllxhcjla11 小时前
数据结构和算法
数据结构
历程里程碑12 小时前
普通数组----轮转数组
java·数据结构·c++·算法·spring·leetcode·eclipse
sin_hielo12 小时前
leetcode 1653
数据结构·算法·leetcode
李日灐12 小时前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
熬夜有啥好12 小时前
数据结构——排序与查找
数据结构