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

一、填空选择题

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");

    }

}

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值