C/C++笔试题汇总03

目录

1.某32位系统下,C程序,请写出输岀结果:(基础题)

2.请简述以下两段关于循环的程序的优缺点: (中等难度)

3.请问运行下面的Test函数会有什么样的结果?(中等难度)

4. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。(中等难度)

5. 用变量a给出下面的定义 (基础题)

6. C++中,分配在栈和堆中的分别是什么数据?(基础题)

7. 请简单描述一下“内存对齐”的问题(什么是“内存对齐”?为什么要这样做?(基础题)

8. 程序什么时候应该使用多线程,什么时候应该使用单线程?(基础题)

9. 请编程实现一个函数:传入一个八位无符号整数,生成并返回此数的二进制数倒序字符串。(中等难度)

10. 对右图中的二叉树,按中根次序遍历得到的结点序列为:  B  (基础题)

11. 在数据结构中,结点及结点间的相互关系是数据的逻辑结构,数据结构按逻辑关系的不 同,通常可分为  A   两类    (基础题)

12. 与单向链表相比,双向链表的优点是(多选)  C (基础题)

13. 在文件存储设备管理中,有三类常用字的空闲块管理方法,即位图向量法,空闲块链表法和   C   (基础题)

14. 程序填充题,根据注释在横线上填写合适的内容。(基础题)

15. 封装是将数据和代码   捆绑到一起   ,避免了  外界的干扰   和  不确定性  。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的  访问和权限   。(基础题)

16. 继承是让某个类型的对象获得另一个类型的对象的  特征   。通过继承可以实现代码的 复用    :从已存在的类派生出的一个新类将自动具有原来那个类的   类的特性  ,同时,它还可以拥有自己的  新的特性   。(基础题)

17. 嵌入式软件的体系结构通常包括:   驱动层  、  操作系统层   、  中间件层   和  应用层  。(基础题)

18. 评价实时操作系统的主要指标有:   上下文切换时间  、  抢占时间   、   中断延迟  等。

19. 信号量的物理意义是当信号量值大于零时表示   可用资源的数目  的个数;当信号量值小于零时表示 的 因请求资源而被阻塞的进程数目   个数。(基础题)


1.某32位系统下,C程序,请写出输岀结果:(基础题)

void Foo(char str[100])
{
    printf("%d\n", sizeof(str));
}

int main(int argc, char **argv)
{

    char str[] = "http://localhost";

    char *p1 = str;

    void *p2 = malloc(100);

    int n = 10;

    struct A
    {

        int n;
        char str[10];

    } struct_a;

    printf("%d\n", sizeof(str));

    printf("%d\n", sizeof(p1));

    printf("%d\n", sizeof(p2));

    printf("%d\n", sizeof(n));

    printf("%d\n", sizeof(struct_a));

    Foo(str);

    return 0;
}

16,8,8,4,12,8

2.请简述以下两段关于循环的程序的优缺点: (中等难度)

// 第一个
for (i = 0; i < N; i++)
{
    if (condition)
        DoSomething();
    else
        DoOtherthing();
}


// 第二个
if (condition)
(
    for (i=0;i<N;i++)
    DoSomething();
}
else
{
    for (i = 0; i < N; i++)
        DoOtherthing();
}

1. 代码简洁,效率低(打断了循环的“流水线”作业,使得编译器无法对循环的效率优化)

2. 程序效率高,代码不简洁。

3.请问运行下面的Test函数会有什么样的结果?(中等难度)

char *GetMemory(void)
{
    char p[] = "hello world";

    return p;
}

void Test(void)
{
    char *str = NULL;
    str = GetMemory();
    printf(str);
}

返回了局部变量的地址,因此是非法的地址,强行访问可能会发生段错误

4. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。(中等难度)

// 该结果超过了整数的表示范围,为了避免溢出,需要告诉编译器他是无符号长整型
#define SEC4YEAR (365*24*60*60)UL

5. 用变量a给出下面的定义 (基础题)

(1)一个整型数;             

(2)一个指向整型数的指针;   

(3)一个指向指针的指针,它指向的指针是指向一个整型数;  

(4)一个有10个整型数的数组;    

(5)一个指向函数的指针,它指向的函数的参数只有一个,类型是:字符串,且返回类   型是整型。  

int a;

int *a;

int **a;

int a[10];

int((*a)(char *))    

6. C++中,分配在栈和堆中的分别是什么数据?(基础题)

(1) 栈:在栈中的是局部变量的值,函数的参数值;

(2) 堆:堆中的是存放由new分配的内存块的;

(3) 自由存储区:用于存放由malloc分配的内存块;

(4) 静态存储区:用于存放全局变量和静态变量(C语言中全局变量又划分为初始化和未初始化);

(5) 常量存储区:用于存放常量,不允许修改。

7. 请简单描述一下“内存对齐”的问题(什么是“内存对齐”?为什么要这样做?(基础题)

(1) 内存对齐指的是编译器为程序中的每个数据安排在适当的位置上。

(2.1) 移植原因:由于并不是所有的硬件平台都能访问任意地址上的任意数据的,某些硬件平台只能在某些地址处取某些特定类型数据,否则抛出硬件异常

(2.2) 性能原因:处理器在访问未对齐的内存时需要的访问次数比对齐时的内存访问次数多,所以出于为了提高系统性能的原因也要进行内存对齐

8. 程序什么时候应该使用多线程,什么时候应该使用单线程?(基础题)

(1) 在需要大量计算,频繁创建销毁的优先使用多线程

(2) 耗时的操作使用多线程可以提高应用程序的响应

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值