数据结构第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

相关推荐
南宫生29 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
weixin_432702261 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
passer__jw7672 小时前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
爱吃生蚝的于勒3 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~3 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
脉牛杂德3 小时前
多项式加法——C语言
数据结构·c++·算法
一直学习永不止步4 小时前
LeetCode题练习与总结:赎金信--383
java·数据结构·算法·leetcode·字符串·哈希表·计数
wheeldown12 小时前
【数据结构】选择排序
数据结构·算法·排序算法
躺不平的理查德16 小时前
数据结构-链表【chapter1】【c语言版】
c语言·开发语言·数据结构·链表·visual studio
阿洵Rain16 小时前
【C++】哈希
数据结构·c++·算法·list·哈希算法