当前位置: 首页 > news >正文

HYCX笔试

C语言和嵌入式软件 面试题(共10题 时间30分钟)

1. 请写出下面声明的含义。

  • int(*s[10])(int);
定义了一个数组为s包含十个元素,每个元素都是函数指针,函数的参数为一个int类型,返回值也是int类型

2. 选择题

  1. 设有一台计算机,它有一条加法指令,每次可计算三个数的和。如果要计算79个数的和,至少要执行的加法指令次数为____。
    A. 37 B. 38 C. 39 D. 40
    D
    
  2. 为了向二进制文件尾部增加数据,打开文件的方式应采用____。
    A. “ab” B. “rb+” C. “wb” D. “wb+”
    ab:追加二进制
    rb+:读写二进制
    wb:只写二进制
    wb+:读写二进制
    所以选:A
    
  3. 执行语句“k=7>1;”后,变量k的当前值是____。
    A. 15 B. 31 C. 3 D. 1
    D
    
  4. typedef struct
    {
        short a;
        char b;
        float c;
    } cs;
    
    则在考虑字节对齐和声明紧缩的不同情况下,sizeof(cs)的值分别是____和____。
    A. 4 B. 5 C. 6 D. 7 E. 8
    E,C
    
  5. 若定义了char ch[]={“abc\0def”},p=ch;则执行printf(“%c”,(p+4));语句的输出结果是____。
    A. def B. d C. e D. 0
    B
    

3. 请写出下面一段程序的计算结果。

  • 左侧代码:

    int sum(int a)
    {
        int c = 2;
        static int b = 2;
        if (c == 2)
            a += 2;
        if (b != 6)
            b += 2;
        return (a + b + c);
    }
    
  • 右侧代码:

    #include <stdio.h>
    #include <string.h>
    void main()
    {
        int i;
        for (i = 0; i < 3; ++i)
            printf("%d ", sum(i));
        printf("\n");
    }
    
    sum(0):8
    sum(1):11
    sum(2):12
    			
    

4. 假设以数组seqn[m]存放循环队列的元素,设变量rear和quelen分别指示循环队列中队尾元素的位置和元素的个数。

  1. 写出队满的条件表达式。
  2. 写出队空的条件表达式。
  3. 设m = 40, rear = 13, quelen = 19,求队头元素的位置。
  4. 写出一般情况下队头元素位置的表达式。
1.rear==m-1
2.quelen==0
3.(rear+m-quelen+1)%m=(13+40-19+1)%40=35
4.(rear+m-quelen+1)%m

5. 用P表示入栈操作,D表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的P和D的操作串为____。

PDPPDPDD

6. 用边界值分析法,假定10 < X < 30,那么X在测试中应取的边界值是____。

10.000001和10与29.999999和30

7. 两个正整数,它们可能相等也可能不相等。把它们的和告诉了甲,把它们的积告诉了乙。

  • 乙说:“我不知这两个数是多少。”
  • 甲说:“我不知这两个数是多少。”
  • 乙说:“我现在知道了。”
    问:这两个数是多少?
答案:1 1

8. 给你一个由陆地(“1”)和水(“0”)组成的二维网格,请编程计算网格中岛屿的数量。假设该网格的四条边均被水包围,而岛屿是被水包围的,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

  • 示例1:
    • 输入:
      grid = [
          ["1","1","0"],
          ["1","1","0"],
          ["0","0","0"]
      ]
      
    • 输出:1
  • 示例2:
    • 输入:
      grid = [
          ["1","1","0","0","0"],
          ["1","1","0","0","0"],
          ["0","0","1","0","0"],
          ["0","0","0","1","1"]
      ]
      
    • 输出:3

9. 在操作系统的虚拟内存管理中,内存地址由页目录号、页号和页内偏移3个部分组成。如果页目录号占10位、页号占10位、页内偏移占12位。请问:

  1. 一个页目录最多____页。
  2. 一个页面最多____页。
(1)2^10=1024
(2)2^12=4069=4kb

10. 用预处理指令#define声明宏NELEMENTS,求出数组array中的元素个数。

```c
#define NELEMENTS(array) 
```
    #define NELEMENTS(array)     (sizeof(array)/sizeof(array[0]))

11. 简述大端(big endian)和小端(little endian)字节顺序的区别。

大端字节顺序:也称作大端序或大端法,数据的高位字节存于低地址,低位字节存于高地址。这就如同我们日常书写数字,从高位到低位依次排列。
小端字节顺序:又称小端序或小端法,与大端序相反,数据的低位字节存于低地址,高位字节存于高地址

12. 指出有关内存方面的编程错误,后果及改正方法。

       - 左侧代码:
      void GetMemory(char **p)
      {
          p = (char *)malloc(100);
      }
      void Test(void)
      {
          char *str = NULL;
          GetMemory(&str);
          strcpy(str, "hello world");
          printf(str);
      }
  • (1) 请指出编程错误。

  • (2) 请指出错误后果。

(1)printf()没有%s
(2)编译报错
- 右侧代码:
      char *GetMemory(void)
      {
          char p[] = "hello world";
          return p;
      }
      void Test(void)
      {
          char *str = NULL;
          str = GetMemory();
          printf(str);
      }
  • (1) 请指出编程错误。
  • (2) 请指出错误后果。
(1)返回了临时空间的地址
(2)可能输出乱码

相关文章:

  • GNSS有源天线和无源天线
  • 【每日一个知识点】多项式回归(Polynomial Regression)
  • Scala的集合(二)
  • Shopify全栈开发指南:技术架构、API集成与主题定制实战
  • 基于猜想的矢量场和标量场和暗旋量场
  • 中断嵌套、中断咬尾、中断晚到
  • 基于分布式指纹引擎的矩阵运营技术实践:突破平台风控的工程化解决方案
  • 设计模式-单例设计模式
  • 【学习笔记】RL4LLM
  • 新能源汽车动力性与经济性优化中的经典数学模型
  • 从盲目清运到精准调度:一个AI芯片引发的智慧环卫升级
  • 用 Python 构建一个简单的本地视频流媒体服务器
  • Wallaby‘s: Nightmare (v1.0.2)靶场渗透
  • RuntimeError: Error(s) in loading state_dict for ChartParser
  • 太阳帆板测试#卫星工程系列
  • Python魔法方法:深入理解__repr__方法
  • 53. 评论日记
  • 彩虹表是什么
  • 0401react中使用css-react-css-仿低代码平台项目
  • 作者介绍 checkcode
  • 富家罹盗与财富迷思:《西游记》与《蜃楼志》中的强盗案
  • 王毅同巴基斯坦副总理兼外长达尔通电话
  • 中国证监会印发2025年度立法工作计划
  • 新买宝马竟是“维修车”,男子发视频维权被4S店索赔100万
  • 司法部谈民营经济促进法:对违规异地执法问题作出禁止性规定
  • 网民反映“潜水时遭遇服务质量不佳”,三亚开展核查调查