1. 有一个变量 unsigned char data;
请写出将 data 第6位置1的表达式:
data=data | (1<<6)
请写出将 data 第6位清0的表达式:
data=data & (0<<6)
请写出将 data 第6位取反的表达式:
data=data ^ (1<<6)
说明:最右边位为第0位,用十六进制表示。
2. (1)执行语句"k=11>>1;”后,变量k的当前值是
(2)有如下程序段:
int i,a,b,c,d;
char*errinfol="error";
char errinfo2[10];
char errinfo3[5];
memcpy(errinfo2,"error",strlen("error");
for(i-0;i<5;i++)
errinfo3[i]=errinfo2[i];
a=sizeof(errinfo1);
b=sizeof(errinfo2);
c=strlen(errinfol);
d=strlen(errinfo3);
请写出程序执行后a,b,c的值分别为多少:
d的值为多少井写出原因:
(1)、k=22
(2)、a=8,b=20,c=1,d=6
3、typedef struct
{
short with;
typedef struct
short lenth;
{
}base;
base* baseInfo;
short height;
typedef struct
}BoxInfo;
{
base baselnfo;
short height;
}WinInfo;
系统中有如下三个全局变量,且已经为这些变量分配内存,类型声明为:
extern WinInfo tmpInfol;
extern BoxInfo tmpInfo2;
extern BoxInfo* tmpInof3;
请根据要求写出赋值语句:
(1)为tmpInfo1的域 height赋值为1:
(2)为tmpInfo1的域 with 赋值为2:
(3)为tmpInfo2的域height赋值为1:
(4)为tmpInfo2的域with赋值为2:
(5)为tmpInfo3的域height赋值为1:
(6)为tmpInfo3的域 with赋值为2:
tmpInfo1.height == 1
tmpInfo1.baseInfo.with == 2
tmpInfo2.height == 1
tmpInfo2.baseInfo->with == 2
tmpInfo3.height == 1
tmpInfo3.baseInfo->with == 2
4.有如下程序段:
int fun(int*p){
return p[6];
void UserInit(void){
nt a[10]={1,2,3,4,5,6,7,8,9,10}
int b;
b=fun(&a[2])
执行函数 UserInit后b中的值是
9
5.(1)A、B两个程序通过首地址为0x80000000的共享内存传递int型数据,A往该地址写值,B从该地址读值。该共享内存空间足够大。
请写出A程序将int tmp 变量写入地址为0x80000000内存的语句:
请写出B从地址为0x80000000内存读取数据并赋值给 int tmp的语句:
(2)有如下语句:
char * buf=(char *)malloc(1*)malloc(100);
该缓存用于封装通信数据包,请写出在buf[4]开始的四个字节内写入int 型变量 tmp的语句:
有如下程序段:
队列示例:
循环队列中保存
unsigned int countunt=getNum();
//调用函数获得所需缓存个数
char*buf[count];
//buf数组用来保存缓存地址
int i;
for(i=0;i
//分配100字节缓存
由于在定义数组时长度不能用变量,因此上述代码无法编译通过。在不改变程序段功能的情况下,请修改上述代码,改正其错误:
int *tmp = 0x80000000
int tmp = *0x80000000
memset(4,tmp,sizeof(int))
#define COUNT 100
6.假设循环队列用数组实现,其定义如下:
#define SEQLEN 32
:[N37O3S ] ubes iu!
/*用于存放队列数据的数组*/
int head;/*数组下标索引,指向队列头部,若队列不空,指向队列头元素*/
int tail ;/*数组下标索引,指向队列尾部,若队列不空,指向队列空元素*/
队列示例:
循环队列中保存了1、2、3三个数据的状态。
seqn
1
2
3
head=1
tail=4
(1)假如队列未满,现有变量data需要入队,请写出表达式;
(2)假如队列未空,现在需要从队列取一个元素并赋值给变量data,请写出表达式;
(3)请写出队列为空的判断条件:
(4)请写出队列满的判断条件:
(5)请写出清空队列的表达式:
(6)请写出计算队列中元素个数的表达式:
(7)队列最多可以存放几个元素:
seqn[tail] = data,tail = (tail+1+32)%32
data = seqn[head];head = (head-1+32)%32
head = = tail
head == (tail+1+32)%32
memset(seqn,0,sizeof(seqn))
(tail-head+32)%32
7.在某操作系统中,用数组 unsigned char Rdy[8]的64个位码来表示64个任务的状态,该数组称为就绪表。就绪表中的每一位表示某一个任务的状态,任务就绪则对应位置为1,任务非就绪则对应位清0。若任务0就绪,则Rdy[O]中的位0置为1,若任务1就绪,则Rdy[0]中的位1置为1,依次类推,若任务63就绪,则Rdy[7]中的位7置为1。
(1)若任务i就绪,请写出设置就绪表Rdy[]的表达式:
(2)若任务j从就绪态转为非就绪态,请写出设置就绪表Rdy[的表达式:
(3)在某一调度时刻就绪表中有多个任务为就绪态,假设任务0的优先级最高,任务63的优先级最低,请设计一个算法,找出最高优先级任务。
Rdy[i/8]中的位i%8置1
Rdy[j/8]中的位i%8置0
8.有如下程序段:
static int data[100];
void fun(int i,int*value){
data[i]=* value;
*value=0;
请分析上述代码存在何种隐患,应如何修改?
答:
void fun(int i, int* value)。
9.有如下程序:
#include
void fun(int *);
//库函数声明
main(){
char m=15;char m=15;
fun(&m);
//调用库函数fun
printf(“%d\n”,m);
请分析上述代码存在的问题,可能会引发何种后果:
fun的声明缺少返回类型和参数列表
10.有如下程序段:
void GetMemory(char *p)
//line 1
{
p=(char*)malloc(10);
//line 2
{
void Test(void)
{
char *str = NULL;
//line 3
GetMemory(str);
//line 4
strcpy(str, "hello world");
//line 5
printf(str);
//line 6
free(str);
//line 7
(1)请分析上述代码存在的bug?
答:
(2)请修正代码(写上行号与修改后的代码):
答:
void GetMemory(char **p) {
*p = (char *)malloc(10);
}