您的位置:首页 > 编程语言 > C语言/C++

c语言试题整理(如有错误还望指正)

2016-12-19 23:20 141 查看
一、填空选择题

1、请写出输出结果 ~A = 4294967285

c=-128

unsigned short A = 10;

printf("~A = %u\n", ~A);

char c=128;

printf("c=%d\n",c);

2、写出输出结果____>6_______

void foo(void)

{

unsigned int a = 6;

int b = -20;

(a+b > 6) ? puts("> 6") :puts("<= 6");

}

解析:当一个运算中一个运算数为有符号,一个运算数为无符号数,C语言会隐式地将有符号数强制类型转换为无符号数,然后执行两个无符号数之间的运算。

3、 已知一个数组table,用一个宏定义,求出数据的元素个数__________________________ ___#define_Elem_Num()_sizeof(table)/sizeof(table[0])___________________________

4、进程在系统中是否存在的唯一标识是(D)

A、数据集合 B、目标程序

C、源程序 D、进程控制块

5、32位机器上定义以下结构体:
struct x
{
long long _x1;
char _x2;
int _x3;
char _x4[2];
static int _x5;
};
请问sizeof(x)的大小是多少______24__________
解析:
32位机器:
longlong _x1; 8字节 8
char_x2; 1字节 1+3(考虑内存对齐,下一个占4字节,此处应加3,保证下一个从4的倍数内存开始)
int_x3; 4字节 4
char_x4[2]; 2*1字节 2 + 2 (保证内存总数是8的倍数,加6)
staticint _x5; 在静态区,不在栈中,不考虑
总共8+8+4+4=24

二、简答题

1、给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。

答:

(1)int set_bit3(int a

{

int mask = 0xfff4;

a = a || mask;

return a;

}

(2)int clear_bit3(int a)

{

int mask = 0xfffb

a = a && mask;

return a;

}

2、什么是进程死锁?造成进程死锁的原因?

(1)进程死锁

两个或两个以上进程在执行过程中,由于竞争资源或通信造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。

(2)原因

a.系统资源不足

b.进程运行推进的顺序不合适

c.资源分配不当

(解析:如果系统资源充足,进程资源请求能够得到满足,死锁的可能性就会降低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序速度不同,也可能产生死锁)

(3)解决方法

a.互斥条件:一个资源每次只能被一个进程使用;

b.请求与保持条件:一个进程因请求资源而阻塞是,对已获得的资源保持不放;

c.不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺;

d.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

(解析:这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,只要上述条件之一不成立,就不会发生死锁。)

三、程序题

1、用递归算法判断数组是否为一个递增数组

void Is_Increase(int *arr, int len)

{

static int i = 0;

if((*(arr + 1) > *arr) && (i < len)) //数组后一个元素大于前一个成立

{

i++;

Is_Increase(++arr, len);

return;

}

if((len - 1) == i)

{

printf("Is increase array\n");

}

else

{

printf("Not increase array\n");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐