华为C/C++笔试题一

1. static有什么用途?(请至少说明两种)
    1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。(局部静态变量)
    2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。(外部静态变量)

    3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。(外部静态函数)

 

2. 引用与指针有什么区别?

  1)引用被创建的同时必须被初始化,指针则可以在任何时候被初始化。
  2)不存在指向空值的引用,引用必须与合法的存储单元关联,指针则可以指向NULL。
  3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

 

3. 描述实时系统的基本特性

  1)对外部事件的响应必须在一定时间内完成。

  2)必须满足—定的峰值负荷要求,即在负载重,甚至超负荷的情况下,某些关键任务一定要得到满足。

  3)实时系统的可靠性至关重要。

 

4. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

   全局变量存放在内存的全局数据区,局部变量放在堆栈区。 

  ps:

       程序内存空间  

 

   一个程序将操作系统分配给其运行的内存块分为4个区域:
  (1)代码区,存放程序的代码,即程序中的各个函数代码块。
  (2)全局数据区,存放程序的全局数据和静态数据。
  (3)堆区,存放程序的动态数据。
  (4)栈区,存放程序的局部数据,即各个函数中的数据。

 

5. 什么是平衡二叉树?

   平衡二叉树,又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。

 

6. 堆栈溢出一般是由什么原因导致的?
     没有回收垃圾资源。


7. 什么函数不能声明为虚函数?
      constructor函数不能声明为虚函数。

 

8. 冒泡排序算法的时间复杂度是什么?
      时间复杂度是O(n^2)。
     
9. 写出float x 与“零值”比较的if语句。
      if(x>0.000001&&x<-0.000001)
     
10. Internet采用哪种网络协议?该协议的主要层次结构?
      Tcp/Ip协议
      主要层次结构为: 应用层/传输层/网络层/数据链路层/物理层。
     
11. Internet物理地址和IP地址转换采用什么协议?
      ARP (Address Resolution Protocol)(地址解析协议 )
     
12. IP地址的编码分为哪俩部分?
     IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
    
13. 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。
     循环链表,用取余操作做

    ps:#include <stdio.h>
         #include <stdlib.h>

        typedef struct Node
       {
         int data;
         struct Node* next;
        }LNode, *LinkList;

 

       LinkList list = NULL;
       int n; //人数
       int m; //报数号

      //n为总人数,k为第一个开始报数的人,m为出列者喊到的数
      void JosephRing(int n, int k, int m)
      {
          LinkList p, r;  /* p为当前结点,r为辅助结点,指向p的前驱结点*/


           for(int i = 1; i <= n; i++) /*建立循环链表*/
          {
              p = (LinkList)malloc(sizeof(LNode));
              p->data = i;

              if(list == NULL)
                          list = p;
              else 
                   r->next = p;

             r = p;
         }

        p->next = list;  /*使链表循环起来*/
        p = list;   /*使p指向头节点*/
 
       /*把当前指针移动到第一个报数的人*/
       for(i = 1; i < k; i++)
      {
           r = p;
           p = p->next;
      }

 
      /*循环地删除队列结点*/
      while(p->next != p)
     {
         for(i = 1; i < m; i++)
        {
           r = p;
           p = p->next;
         }

         r->next=p->next;
         printf("%4d ",p->data);
         free(p);
         p=r->next;
     }
      printf("%4d/n",p->data);
    }

 

 void main()
{
   printf("please input n:");
   scanf("%d", &n);
 
   printf("please input m:");
   scanf("%d", &m);
 
   JosephRing(n, 1, m);
 }


    
14. 不能做switch()的参数类型是:
     switch的参数不能为实型

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值