栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

西邮Linux兴趣小组2020年纳新面试题简析

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

西邮Linux兴趣小组2020年纳新面试题简析

1.运行下面的代码,输出结果是什么,请解释说明。
int i;
int main(int argc, char *argv[])
{
    i--;
    if (i > sizeof(i))
    {
        printf(">n");
    }
    else
    {
        printf(" 

结果为:>     

全局变量i未初始化,默认为0,i–变成-1,sizeof(int)的结果为无符号整数4,i为有符号整数-1。

有符号整数和无符号整数比较时,有符号整数会按无符号整数来处理。

-1的补码为11111111 11111111 11111111 11111111,按无符号整数来看为4294967297,显然大于4,所以输出为  >。

2.有关宏,略

3.sizeof和strlen,略

4.函数中的静态局部变量,略

5.分析以下程序,推测并验证其作用。
#include
int main(int argc,char*argv[])
{
    int number;
    unsigned mask;
    mask=1u<<31;//结果mask为2的31次幂,二进制补码为1000....(31个0)
    scanf("%d",&number);
    while(mask)
    {
        printf("%d",(number&mask)?1:0);//第一次循环中判断number的二进制形式的最高位(最左边),是0打印0,是1打印1
        mask>>=1;//第一轮循环mask变为01000....(30个0)
    }
    return 0;
}

移位运算符>>和<<,以及其它按位运算符,略,转载:

六种位运算符_朝闻道_的博客-CSDN博客_位运算符

作用是打印输入的number的二进制补码。

6.字符数组和指针运算,略

7.以下程序段的运行结果是什么,你知道怎么判断两个浮点数是否相同吗?
#include
int main(int argc,char*argv[])
{
    double a=3.14;
    float b=a;
    if((float)a==b)
    {
        printf("xiyou ");
    }
    if(a!=b)
    {
        printf("linuxgroupn");
    }
    return 0;
}

计算机并不能准确的表达浮点数,只能表达一定精度的近似.(有关double和float表示浮点数的精度)

本题中,在执行完a = 3.14;这一条语句后,a的值实际上为3.1400000000000001(本机),但是在精度要求不是很高时,近似表示3.14。执行完float b=a;这一条语句后,a被强制类型转换为float类型,b的值实际为3.1400001(本机)。

因此,(foat)a的结果也为3.1400001,等于b,打印 Xiyou ,而a和b实际上并不相等,打印linuxgroup。

转载:

如何判断两个浮点数是否相等_yyyyeahhhhhh的博客-CSDN博客_如何判断两个浮点数是否相等

8.运行下列代码,解释运行结果并谈谈自己的理解。
#include
int main(int argc,char*argv[])
{
    int a[6]={0x6f796958,0x694c2075,0x2078756e,0x756f7247,0x30322070,0};
    printf("%dn",printf("%s",(char*)a));
    return 0;
}

输出为:

Xiyou Linux Group 2020              (并且光标换行)

涉及数组元素的存储和字节序,大小端等知识。

大端法与小端法_u012861978的专栏-CSDN博客_小端法

本题为小端法存储,所以该数组在内存中由低地址端到高地址端存储为:

0x58 0x69 0x79 0x6f 0x75 0x20    0x4c 0x69 0x6e 0x75 0x78 0x20     0x47 0x72 0x6f 0x75 0x70 0x20     0x32 0x30 0x32 0x30    0x0

由于数组名就是数组首元素的地址,所以(char*)a即为指向数组首元0x58的指针,并且把0x58视为char类型。综上,按照转换说明%s进行打印,会依次打印0x58 0x69 0x79 0x6f.....对在ANSII表中对应的字符,最终打印:Xiyou Linux Group 2020,并让光标换行。

9.二维数组初始化:

int a[2][3]={{5,7},{5,2}};按照给定格式进行元素分配,空余位置补0.

int b[2][3]={5,7,5,2};按照顺序分配,一行满了再换下一行,剩下位置补0.

10.指针运算相关:

int a = 1;

*(char*)&a;

对a取地址得到1的地址,并转换为指向char类型变量的指针,再取此指针指向的地址就是a的第一个字节,取出来为1.

    

11.下面程序段的输出结果是什么,若取消第三行的const注释,a数组还能被修改吗?如果取
消第6、8行的注释,程序还能正常运行吗,试着解释其原因。
int main(int argc, char *argv[])
{
 char a[] = "XiyouLinux";
char *b = "XiyouLinux";
a[5] = '';
// b[5] = '';
printf("%sn", a);
// printf("%sn",b);
return 0;
}

 const后不能被修改。

char *b = "XiyouLinux";

这句话是说,b是一个指针,初始化为指向一个字符串常量。但由于这个常量所在的地方(地址较小),所以实际上b是一个const char *b,是不可以被修改的。但由于历史原因,编译器接受不带const的写法,但是试图对b所指的字符串做写入会导致严重的后果。

总之,char *b = "XiyouLinux";此类字符串是不可以修改的,想修改,应该用数组。

详细内容见转载:

谈谈C语言从源文件变为可执行文件之间发生的过程详解(C程序的编译链接运行)_呋喃吖的博客-CSDN博客_c文件编译可执行文件

冒泡排序(由小到大),改进如下(加入一个判断量change):

#include
int main()
{
	int s[100];
	int i, j, n, t;
    int change=1;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", &s[i]); 
	for (i = 0; i < n&&change; i++)
	{
        change=0;
		for (j = 0; j < n - i - 1; j++)
		{
			if (s[j] > s[j + 1])
			{
				t = s[j];
				s[j] = s[j + 1];
				s[j + 1] = t;
                change=1;
		}
	}
    printf("%lf secondsn", Times);
	for (i = 0; i < n; i++)
		printf("%d ", s[i]);
}

(1)(2):

命令:ls [-al]

ls                查看当前目录下的所有目录和文件
ls -a            查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l 或 ll       列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
ls /dir            查看指定目录下的所有目录和文件   如:ls /usr

(3):touch 1.c

(4):三、拷贝目录

    命令:cp -r 目录名称 目录拷贝的目标位置   -r代表递归
    示例:将/usr/tmp目录下的aaa目录复制到 /usr目录下面     cp /usr/tmp/aaa  /usr
    注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不    用写-r递归

转载自:Linux常用命令_Demon的博客-CSDN博客_linux常用命令

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/642197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号