2019西邮linux小组面试题补录

2019西邮linux小组面试题补录,第1张

2019西邮linux小组面试题补录

1.第一题是一个输入判断,其中使用到了ASCLL码,和地址有关的东西

#include
#include
struct A{
	long a;
	int b;
};
int main(){
	struct A num ={0x6e694c756f796978};
	char ch='0';
	for(int i=0;ch;i++){
		ch=*((char *)&num+i);
		printf("%c",ch);

	}
	printf("n");
	return 0;
}

我进行了一个修改,用来判断会不会反向(类似今年的题。。。)结果没有,那就说明是正常的正序输入 ,输入的是字符的ASClL码

2.改写程序,在不改变const的情况下使用更多的方法改变b

#include
int main(){
	const int b=10;
	
	return 0;
}

#include 
 
int main()
{
    const int a = 10;
     int *p =(int *) &a;
    (*p)++;
    printf("%dn", a);
    return 0;
}

指针本身是常量的话是不可以被修改的,指针指向的内容是常量也是不可以被修改的。

那么我可以给其地址的地址进行改变,这里要注意把a的地址赋给指针时要进行类型转化,不然会报错。

即可能会说初始化丢失了指针目标类型的限定

3. 

struct node {
*(int*)((char*)a+2*sizeof(structn))=100;
};

struct n{
char  a;
int b;
};

intmain(intargc,char*argv[]){
struct node a[2]={{1,2,3},{4,5,6}};
*(int *)((char *)a+2*sizeof(struct n))=100;
return 0;
}

程序拥有两个结构体变量,    struct node a[2] = {{1,2,3},{4,5,6}};这一句是定义了一个结构体数组,在下一句中生成了48个字节的空间,然后对三十二位以后的a进行修改,使其改变,所以

a中的最后一位发生改变,即变成了{{1,2,3},{4,5,100}}

4.j解释函数调用的问题

#include
#define f(a,b) a##b 
#define g(a) #a
 #define h(a) g(a) 
 int main(int argc, char* argv[]) {
  printf("%sn", h(f(1,2)));
   printf("%sn", g(f(1,2)));
    return 0;
	 }

这个程序重要的是开始定义的三个宏,即

 #define f(a,b) a##b 
#define g(a) #a
 #define h(a) g(a) 

在这里通过分析可以得到,第一个是将后期遇到的类似于f(a,b)这样形式的存在都改成为ab的形式,第二个是说定义一个g(A)这样的存在,只要遇到便将其中数据放出,最后定义了g(a),h(a)两个函数。也是可以得到,在第一个输出时,外部不是g(a)所以将里面的输出,同时因为##的存在,所以将其中所有的符号删除,只输出12,第二个printf里面为第一个相同的情况,但外部为g(x)所以会进行一个修改,按照格式输出所以得到f(1,2)

5.

. lala 和 nini 是好朋友。有一天 lala 获得了 n 个质量不同的蛋糕,lala 想和 nini 一起分 享,让两个人都吃到相同质量的蛋糕。但是有强迫症的 lala 不想破坏每块蛋糕的完整 性,请编写程序判断这 n 个蛋糕是否符合 lala 的要求。 这个题可以先对其进行排序,时期从小到大排序,然后只需要对其中的元素进行部分的求和,在使用函数的情况下,可以对其进行多轮的求和,在其中出现总质量一半的情况时便可以退出循环。进行输出,当然也可以设定一个变量,在判断成立的时候进行累加,这样就可以根据变量的大小判断是否出现我所需要的情况。 6. 编写函数实现以下功能: 输入: 一行字符串 输出:逆序输出字符串中的单词,不保留开头与结尾的空格,相邻单词间仅保留一个 空格 样例( ❐ 代表空格): 输入 ❐❐❐❐ Hello ❐❐ everyone, ❐ we ❐ are ❐ xiyouLinuxer ❐ 输出 xiyouLinuxer ❐ are ❐ we ❐ everyone, ❐ Hello
#include 
#include

void reserveworld(char* str,int s,int e) {
	while (s < e) {
		char c = str[s];
		str[s] = str[e];
		str[e] = c;
		s++;
		e--;
	}
}


void reserve(char *str,int n) {
	int t = 0;  
	for (int i = 0; i <= n; i++) {
		if (str[i] == ' ' || str[i] == '') {
			reserveworld(str, t, i - 1);
			t = i + 1;
		}
	}
}

int main() {
	char str[100] = "";
	gets(str);
	reserveworld(str, 0, strlen(str)-1);	
	reserve(str, strlen(str));	
	printf("%s", str);

	return 0;	
}

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5634865.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存