西邮Linux兴趣小组2018年面试试题总结

这篇博客总结了西邮Linux兴趣小组2018年的面试试题,涉及二维数组的输出、sizeof与strlen的区别、静态变量的作用、编译过程、const指针的使用、指针与地址、main函数参数、位运算以及宏定义的应用。通过实例解析了各种概念的实际运用。

在这里插入图片描述
先定义了一个三乘三的二维数组,第一个输出的是第一行第二列所以为2,第二个输出的是第一行第三列为3,第三个为第三行第三列并且乘以-1故结果为-9。
在这里插入图片描述
因为int型一个占用四个字节,而a[3][2]占用了6个int型的空间,所以sizeof的结果为6*4为24,第二个printf中a[1][1]的结果为8,但是第一个是求sizeof的结果,因为是int型,故结果为4 8。第三个printf中一个是求str的sizeof结果一个是strlen结果,malloc函数申请了两个整型8个字节的位置,故sizeof结果为8,但是由于strlen遇到"\0"会停止,缺少2个字节,故结果为6。

在这里插入图片描述每次使用func()函数之后,b的值都会返回,但是不会改变其结果,因为为static静态变量,故每次的结果都保留了下来,所以每次的的结果都不同,依次递增。但是静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。

在这里插入图片描述A:编译预处理,B:编译阶段,C:优化和汇编过程,D:链接阶段。
编译预处理阶段:当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(#define)、文件包含(#include)、条件编译(#ifdef)等。
编译阶段:在此阶段过程中,编译器会根据我们写好的代码,以此分析其中的语句,并对当中的某些语句执行替换,该替换是直接作用于.c文件。
优化和汇编过程:由于程序员自身的问题导致的代码出现多余的操作或者效率低的指令,优化过程可以找出并自动转化为更加好的指令。
链接阶段:一个过程只编译了一个模块,而一个程序往往包括多个模块,链接程序负责将这些模块组装起来构造出最后可以执行的程序。
在这里插入图片描述用 const 定义的变量的值是不允许改变的,不允许再给它重新赋值。
而第一句的p1定义一个指向字符的指针常数,即const指针,实验得知,不能修改ptr指针,但是可以修改该指针指向的内容,故(2)是错误的。
而第二句的p2定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改。但是ptr的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对ptr而言,这个值是常量。实验如下:ptr指向str,而str不是const,可以直接通过str变量来修改str的值,但是却不能通过ptr指针来修改。故(4)是错误的。
在这里插入图片描述
%p用来输出指针的值、输出地址符。故第一个和第三个printf输出的结果都是a对应的地址的16进制结果,而第二个和第三个由于a+1和&a+1分别是在整形数组占据的4字节中的第一个和第四个,故结果是不同的两个地址。

在这里插入图片描述
main函数的返回值,用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其他数字的含义则由系统决定,通常,返回非零代表程序异常退出。而argc和argv是main函数的形式参数。这两个形式参数的类型是系统规定的。如果main函数要带参数,就是这两个类型的参数;否则main函数就没有参数。
在这里插入图片描述 num给2018的值,每次将i从0逐步增加,而2018依次递减进行按位与,最后结果为零。
在这里插入图片描述
这个*(int*)n相当于将int的内存与数组n的内容进行运算,第一位是乘以1,第二位为4的4次方,第三位为16的4次方,第四位为64的4次方。可知这个的结果为1。
在这里插入图片描述先对YEAR,LEVELONE,LEVELTWO,MULTIPLY进行了宏定义,所以第一步,要进行1+2*3的运算,结果为7并且赋值给x,然后给LEVELONE将YEAR化为字符串直接输出,得到XiyouLinux YEAR,然后又带入LEVETWO,又因为定义了YEAR为2018,故输出XiyouLinux 2018。
在这里插入图片描述结果不同,用%zu输出无符号整型即两个值,又因为这时因为VC存储数据的时候要具体采用对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量),icd中第一个为int是4,第二个是char为1但是要为8的倍数,所以要为其填充3个字节,所以为8,然后再加上double为8,结果为16,而cdi第一个为char不为8的倍数,所以填充到8,所以为16,再加int又不为8的倍数,故得到24。
在这里插入图片描述先输出有十六进制转字符,在输出a的数据长度8,结果为Linux 2018。
在这里插入图片描述

在这里插入代码片#include<stdio.h>
#include<malloc.h>
#include<string.h>
int Convert();
char * str;
int Convert(str)
{
	int n = 0;
	int m = str.length();
	int i = 0;
	while (i != m)
	{
		int c = str.charAt(i) - '0';
		n = n * 10 + c;
		i++;
	}
	return n;
}

int main(void) {
	int result;
	char * str= "12345";
	int res = Convert(str);
	printf("res应为%d", res);
	return 0;

}

在这里插入图片描述

#include<stdio.h>
#include<malloc.h>
#include<string.h>
void Swag(int str[], int len)
{
	int i, j;
	for (i = 0; i < len; i++)
	{
		if ((str[i] % 2) == 0)
			for (j = i + 1; j < len; j++)
			{
				int temp;
				if ((str[j] % 2) == 1)
				{
					temp = str[i];
					str[i] = str[j];
					str[j] = temp;
					break;
				}
			}
	}
}


int main()
{
	int i, j;
	int arr[] = { 0 };
	printf("请输入一组数组(依次输入)\n");
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		scanf_s("%d", &arr[i]);
	}
	Swag(arr, sizeof(arr) / sizeof(arr[0]));
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%d", arr[i]);
	}

	return 0;
}
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)内容概要:本文档围绕基于遗传算法的异构分布式系统任务调度算法展开研究,重点介绍了一种结合遗传算法的新颖优化方法,并通过Matlab代码实现验证其在复杂调度问题中的有效性。文中还涵盖了多种智能优化算法在生产调度、经济调度、车间调度、无人机路径规划、微电优化等领域的应用案例,展示了从理论建模到仿真实现的完整流程。此外,文档系统梳理了智能优化、机器学习、路径规划、电力系统管理等多个科研方向的技术体系与实际应用场景,强调“借力”工具与创新思维在科研中的重要性。; 适合人群:具备一定Matlab编程基础,从事智能优化、自动化、电力系统、控制工程等相关领域研究的研究生及科研人员,尤其适合正在开展调度优化、路径规划或算法改进类课题的研究者; 使用场景及目标:①学习遗传算法及其他智能优化算法(如粒子群、蜣螂优化、NSGA等)在任务调度中的设计与实现;②掌握Matlab/Simulink在科研仿真中的综合应用;③获取多领域(如微电、无人机、车间调度)的算法复现与创新思路; 阅读建议:建议按目录顺序系统浏览,重点关注算法原理与代码实现的对应关系,结合提供的盘资源下载完整代码进行调试与复现,同时注重从已有案例中提炼可迁移的科研方法与创新路径。
【微电】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电多目标优化调度研究(Matlab代码实现)内容概要:本文提出了一种基于非支配排序的蜣螂优化算法(NSDBO),用于求解微电多目标优化调度问题。该方法结合非支配排序机制,提升了传统蜣螂优化算法在处理多目标问题时的收敛性和分布性,有效解决了微电调度中经济成本、碳排放、能源利用率等多个相互冲突目标的优化难题。研究构建了包含风、光、储能等多种分布式能源的微电模型,并通过Matlab代码实现算法仿真,验证了NSDBO在寻找帕累托最优解集方面的优越性能,相较于其他多目标优化算法表现出更强的搜索能力和稳定性。; 适合人群:具备一定电力系统或优化算法基础,从事新能源、微电、智能优化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微电能量管理系统的多目标优化调度设计;②作为新型智能优化算法的研究与改进基础,用于解决复杂的多目标工程优化问题;③帮助理解非支配排序机制在进化算法中的集成方法及其在实际系统中的仿真实现。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注非支配排序、拥挤度计算和蜣螂行为模拟的结合方式,并可通过替换目标函数或系统参数进行扩展实验,以掌握算法的适应性与调参技巧。
本项目是一个以经典51系列单片机——STC89C52为核心,设计实现的一款高性价比数字频率计。它集成了信号输入处理、频率测量及直观显示的功能,专为电子爱好者、学生及工程师设计,旨在提供一种简单高效的频率测量解决方案。 系统组成 核心控制器:STC89C52单片机,负责整体的运算和控制。 信号输入:兼容多种波形(如正弦波、三角波、方波)的输入接口。 整形电路:采用74HC14施密特触发器,确保输入信号的稳定性和精确性。 分频电路:利用74HC390双十进制计数器/分频器,帮助进行频率的准确测量。 显示模块:LCD1602液晶显示屏,清晰展示当前测量的频率值(单位:Hz)。 电源:支持标准电源输入,保证系统的稳定运行。 功能特点 宽频率测量范围:1Hz至12MHz,覆盖了从低频到高频的广泛需求。 高灵敏度:能够识别并测量幅度小至1Vpp的信号,适合各类微弱信号的频率测试。 直观显示:通过LCD1602液晶屏实时显示频率值,最多显示8位数字,便于读取。 扩展性设计:基础版本提供了丰富的可能性,用户可根据需要添加更多功能,如数据记录、报警提示等。 资源包含 原理图:详细的电路连接示意图,帮助快速理解系统架构。 PCB设计文件:用于制作电路板。 单片机程序源码:用C语言编写,适用于Keil等开发环境。 使用说明:指导如何搭建系统,以及基本的操作方法。 设计报告:分析设计思路,性能评估和技术细节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值