笔试题目(1)

1、写一个宏,这个宏输入两个参数并返回较大的一个。
  答:#define MAX(a,b) ( (a)>(b)? ( a): (b) ) 
      注意: a,b没有参数类型,ab需要加括号

2、指出下列表达式各表示什么?
  答:int *p[n]表示指针数组
       int(*)p[n] 表示数组指针
       int *p()  表示指针函数
        int (*)p()表示函数指针

3、数组和链表的区别?
   答:1基于空间的考虑,数组的存储空间是静态,连续分布的。而链表的存储空间是动态分布的,只要内存空间尚有空闲,就不会产生溢出。
       2基于时间的考虑,数组中任意节点都可以在O1)内直接存储访问,而链表中的节点,需从头指针顺着链表扫描才能取得;

4const有什么用途?
  答:1、可以定义const常量,具有不可变性。
         2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
       3、可以避免意义模糊的数字出现,同样可以方便地进行参数的调整和修改。
       4、可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。

5、程序的局部变量存在于()中,全局变量存在于()中,动态申请的数据存在于()中。
  答:栈,全局静态区,堆。

6、进程之间的通信的途径?进程死锁的原因?死锁的4个必要条件?死锁的处理?
  答:管道,信号,信号量,消息队列,共享内存,套接字。
         原因:1、竞争资源引起进程死锁。 2、进程推进顺序不当引起死锁。
      条件:互斥条件,请求和保持条件,不剥夺条件,环路等待条件。
     方法:预防死锁,避免死锁,检测死锁,解除死锁。

7、请简单介绍下嵌入式操作系统的主要特点?嵌入式操作系统和通用操作系统有什么差别?列举出自己知道的嵌入式操作系统。
  答:嵌入式系统EOSEmbedded OperatingSystem的定义是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。主要特点:实时性,裁剪性,可靠性。
   区别:EOS是相对于一般 操作系统而言的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等外,还有以下特点
 (1)可装卸性。开放性、可伸缩性的体系结构。 
 (2)强实时性。EOS实时性一般较强,可用于各种设备控制当中。 
 (3)统一的接口。提供各种设备驱动接日. 
 (4)操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用. 
 (5)提供强大的网络功能,支持TCPP协议及其它协议,提供TCPUDPIPPPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口.
 (6)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预,这就要负责系统管理的EOS臭有较强的稳定性。嵌入式操作系统的用户接日一般不提供操作命令,它通过系统调用命令向用户程序提供服务。 
 (7)固化代码。在嵌入系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统. 
 (8)更好的硬件适应性,也就是良好的移植性.

嵌入式操作系统:Linuxucosiiuclinuxvxworkswinceqnx


8、请列出自己有研究过或有使用过的第三方组件库名称,或列出自己有研究过或使用过的网络上源码名称。

答:QTNcurnes


9、请列举出OSI的七层网络结构图中的至少四层?tcp/udp是属于哪一层?tcp/udp有何优缺点?

答:应用程、表示层、会话层、传输层、网络层、数据链路层、物理层。Tcp属于传输层


10、交换两个变量的值,不使用第三个变量。即a=3,b=5交换之后b=3a=5

答:a ^= b; b = a ^ b; a = a ^ b;

1.算术运算:

    int a = 3, int b = 5;

    a = a +b;

    b = a –b;

    a = a – b;

2.指针地址操作

     int *a,*b; //假设
    *a=new int(10);
    *b=new int(20); //&a=0x00001000h,&b=0x00001200h
    a=(int*)(b-a); //&a=0x00000200h,&b=0x00001200h
    b=(int*)(b-a); //&a=0x00000200h,&b=0x00001000h
    a=(int*)(b+int(a)); //&a=0x00001200h,&b=0x00001000h

 

   if(a < b)
  {
       a = (int*)(b-a);
       b = (int*)(b-(int(a)&0x0000ffff));
       a = (int*)(b+(int(a)&0x0000ffff));
   }
   else
  {
      b = (int*)(a-b);
     a = (int*)(a-(int(b)&0x0000ffff));
     b =  (int*)(a+(int(b)&0x0000ffff));
   }

3.位运算

    int a=10,b=12; //a=1010^b=1100;
    a=a^b; //a=0110^b=1100;
    b=a^b; //a=0110^b=1010;
    a=a^b; //a=1100=12;b=1010;

 

11、下面这个程序执行后会有什么结果;

#define MAX 255

Int main()

{

      unsignedchar A[MAX];

      for (i = 0; i <= MAX; i++)

             A[i]= i;

}

答:数组越界。


12、以下为Windows NT下的32C++程序,请计算sizeof的值

Void Func(char str[100])

{

      charstr1[] = “Hello”;

      char *p =str1;

      int n =10;

      void *p1 =malloc (100);

 

      sizeof(str)=  4;指针4个字节

      sizeof(str1)= 6//包括\0字符

      sizeof(p)=  4//指针4个字节

      sizeof(n)=  4//整型4个字节

      sizeof(p1)=  4//指针4个字节

}

 

13、请写出下列代码的输出内容:

#include <stdio.h>

Main()

{

      int a,b,c,d;

      a = 10; b= a++;

      c = ++a;

      d =10*a++;

      printf(“b,c, d : %d, %d, %d”, b, c, d);

      return 0;

}

答:1012130

 

14、以下这段代码对xn完成什么样的功能(操作)?

Int foo (int x, int n)

{

      int val;

      Val = 1;

      If (n >0)

      {

             If(n % 2 == 1)

                    Val= val * x;

             Val= val * foo(x*x, n/2);

}

return val;

}

答:n是判断奇数次和偶数次的,如果为奇数则执行递归。x应该是实现一个幂指数的功能吧。

 

15、编写strcpy函数,已知strcpy函数的原型是 char *strcpy(char * strDest, constchar* strSrc); 其中strDest是目的字符串,strSrc是源字符串。

(1)、不调用C++/C的字符串库函数,请编写函数strcpy

(2)、Strcpy能把strSrc的内容赋值到strDest,为什么要char*类型的。

答:1

#include <assert.h>

char *strcpy1(char * strDest ,constchar *strSrc)

{

      char  *strDestCopy = strDest;

       assert((strDest != NULL) && (strSrc !=NULL));  //错误的判断异常处理

    while((*strDest++=*strSrc++) != '\0');

        return strDestCopy;

}  

2.返回strDest的原始值使函数能够支持链式表达,增加了函数的附加值。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。链式表达式的形式如:intiLength=strlen(strcpy(strA,strB));


16、编程实现一个链表逆序。 

  1. #include <stdio.h>

    #include <malloc.h>

    #include <assert.h>

     

    struct Link_T  //定义通用链表结构体

    {

          void*Data;

          structLink_T *pNext;

    };

    typedef struct Link_T pNode; //结构体重命名

     

    /********************************************************************/

    * 函数名称:pNode *List_inverted(pNode *head)

    * 功能描述:

    *   实现链表的逆序排列(注意头结点不存数据)

    * 参数说明:

    *   pNode*head      链表的头结点

    * 返回值:

    *   转换后的链表头指针

    *******************************************************************/

    pNode *List_inverted(pNode *head)

    {

          pNode*p_front = NULL;  //前指针

          pNode*p_next = NULL;    //下一个指针

          pNode*p_temp = NULL;   //中间变量指针n

     

          assert(head!= NULL);  //空链表异常处理

          p_temp =head->pNext;

          while(p_temp!= NULL)

          {

                 p_next= p_temp->pNext;   //保存下一节点指针

                 p_temp->pNext= p_front;  //当前节点的下一节点

                 p_front= p_temp;  

                 p_temp= p_next;

          }

     

          head->pNext= p_front;

          returnhead;  //返回转换后的链表头指针

    }

     


     

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值