开始笔试训练(一)

记录一些经典笔试题,温习一下 C语言啊

选择与简答

1、在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的后缀是 -p

没啥解释,-p 递归创建

2、UNIX系统中进程由三部分组成:进程控制块,正文段 ,数据段。意味着一个程序的正文与数据是可以分开的,目的是 可共享正文、可共享数据、可重入

3、64位系统以及64位编译器下

struct T

char a;
int *d;
int b;
int c:16;
double e;
};
T *p;

sizeof(p) == 8 指针所占内存空间与系统位数对应,64位的系统指针占8字节 ,32位的4字节
sizeof(*p) == 32 结构体内的字节对齐
sizeof(p->a) == 1 char型占一个字节
sizeof(p->e) == 8 double型占8字节

4、关键字static的作用

修饰函数,限制作用域,只能在本文件中调用
修饰局部变量,只能被定义一次,只能分配一次内存空间,改变变量的生命周期至程序运行结束
修饰全局变量,只能在本文件中调用

5、局部变量能否和全局变量重名

能,局部会屏蔽全局。要用全局变量,需要使用 “:: ”
   局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
  

6、程序的内存分配,即一个有c/c++编译的程序占用的内存分为几个部分

五个部分(3G用户态,另有1G内核态)
BSS段:静态数据区,存放静态变量和未初始化的全局变量
数据段:存放初始化的全局变量
代码段:代码+常量

栈:自定义函数

7、堆和栈的区别

栈由OS管理进行分配空间和释放;堆由开发人员分配空间与释放,程序运行结束后可能由OS回收
栈使用一级缓存,调用完立刻释放;堆使用二级缓存,生命周期由虚拟机的垃圾回收算法决定(孤儿进程不一定被立刻回收,所以堆空间调用速度相对较低)。

程序题

约瑟夫环(数组解与单链表解)

有n个人围成一圈,顺序排号,从第一个报数(1到3),凡报到三的人退出圈子,问最后一个留下的是几号
数组解

#include<stdio.h>

int main()
{
    int n,person,i=0;
    int flag[1000] = {0};
    int k=0;

    printf("please input a number:\n");
    scanf("%d",&n);

    person = n;
    while(person != 1)
    {
        if(flag[i] == 0)
        {
            k++;
            if(k == 3)
            {
                k = 0;
                flag[i] = 1;
                person--;
            }
        }
        i++;
        if(n == i)
        {
            i = 0;
        }
    }

    for(i=0;i<n;i++)
    {
        if(flag[i] != 1)
        {
            printf("the last one is %d\n",i+1);
        }
    }

    return 0;
}

后续更新中….

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值