西邮Linux兴趣小组2019面试题总结:

第一题:

unsigned int类型的数值表示范围是0~4294967295 当for循环进行到第三次i=0时再对i减1时,就会发生溢出,i=4294967295,依次类推,该程序将会一直进行下去打印无数个‘=’。

第二题:

(1)、定义一个中间变量记录a的值再将b的值赋给a再将中间变量记录的a的值赋给b。

(2)、第二种是两个变量通过数学方式进行运算得到。

(3)、用异或运算将a与b相应位若相同记为0,不同记为1,其值传给a。再将b与a进行异或运算实现b到a的转变,最后用a与b进行异或运算实现a到b的转换。

第三题:

输出结果为a=1;b=1;

多次执行该程序时,b的值不变,a的值递增。

原因:a时静态变量,函数第二次执行时会跳过对a的初始化,a的值是上一次运行完得到的结果。 

第四题:

该程序段的输出结果为:Xiyou Linux Group2019

printf的嵌套使用的顺序为:从内向外,从左向右执行。先从最里面的printf开始执行,该函数什么都不打印,返回打印的字符数量0;接下来执行中间那个printf函数,打印Xiyou Linux Group20,该函数返回19;接下来执行最外面的函数打印19.

故该程序段的输出结果是:Xiyou Linux Group2019。

第五题:

该程序中没有声明变量a,编译器会报错;

ch:char类型的变量的取值范围是-128~127,255在计算机内用二进制补码表示为1111 1111,它的原码是1000 0001,所以a的值时-1.

第六题:

x = -1, y = 4, t = -1
x = 0, y = 5, t = 1 

|位运算符,其运算法则是1|1 == 1; 1|0 == 1; 0|0 == 0

||逻辑运算符或,其运算法则是1||1 == 1; 1||0 == 1; 0||0 == 0;

第一次t=1111 1111   |   0000 0011   =  1111 1111    =-1;

第二次t=0||5=1;

++x是先自增,再取值做运算,x++是先做计算,后加1。

第七题:

该程序的输出结果为3;

在编译时只是将X*X替换成了a+b*a+b,因此计算结果是3. 

 第八题:

(1)、定义了一个int类型变量val,并将其初始化为2018;

(2)、定义了一个int类型的指针pi并初始化为2019;

(3)、改变指针pi的指向;

(4)、改变pi所指向的空间储存的数据。

第九题: 

 输出结果为Linux Linux

p和q指向的是同一个地址,后来读入的Linux覆盖了前面的Xiyou所以输出是Linux Linux。

第十题:

第一次:

0x7fffffffc850 0x7fffffffc850
0x7fffffffc854 0x7fffffffc860 

第二次:

0x7fffffffc840 0x7fffffffc840
0x7fffffffc844 0x7fffffffc850

每次执行时,输出结果不一致;

a表示数组的首地址,&a表示数组首元素的地址;
a+1表示数组首地址加上一个元素所占的地址大小,这里int是4个字节,所以加上1x4;
&a+1表示加上整个数组的大小,这里数组尺寸是4,所以+1代表的是地址加上4x4。

第十一题:

#include<stdio.h>
int f(int x);
int main()
{
    int x;
    scanf("%d",&x);
    int sum=f(x);
    printf("%d\n",sum);
}
int f(int x)
{
    return (x==2||x==1)?1:(f(x-1)+f(x-2));
}

 第十二题:

该排序算法是选择排序;

每次循环将当前首位数字与后面每一个数字比较大小,如果当前数字大于后面的数字则二者相互交换位置;

将当前位置后移一位,依次类推,可以将这些数字按从小到大的顺序排列好。

改进:

可以只在一次大的循环过后将这个位置的数字与记录下来的最小的一个数字交换一次位置,这样做减少了不必要的交换操作,节省了程序的运行时间。

代码如下:

#include<stdio.h>
int main()
{
    int a[]={1,4,2,6,5,8,3,9,3,6,9,55,77,33,55,11,90}; 
    int len=sizeof(a)/sizeof(int);
    int t;
    int left = 0;
    int right = len - 1;
    while (left < right){
    	//初始化最小值、最大值元素的下标
        int min = left;
        int max = right;
        for (int i = left; i <= right; i++){
        	//标记每趟比较中最大值和最小值的元素对应的下标min、max
            if (a[i] < a[min])
                min = i;
            if (a[i] > a[max])
                max = i;
        }
               //最大值放在最右端
        int t = a[max];
        a[max] = a[right];
        a[right] = t;
               //此处是先排最大值的位置,所以得考虑最小值(a[min])在最大位置(right)的情况
        if (min == right)
            min = max;  //最小值放在最左端
            t = a[min];
            a[min] = a[left];
            a[left] = t;
            left++;
            right--;  //每趟遍历,元素总个数减少2,左右端各减少1,left和right索引分别向内移动1
        }
}

除了选择排序之外,还有冒泡排序,希尔排序,插入排序,桶排序,快速排序等排序方法。

第十三题:

 大端存储模式:是指数据的低位字节序保存在内存的高地址中,而数据的高位字节序保存在内存的低地址中(高位在前)
小端存储模式:是指数据的低位字节序保存在内存的低地址中,而数据的高位字节序保存在内存的高地址中(低位在前)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ω²R

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值