当前位置: 首页 > news >正文

复试专业课问题

  • 1、数据结构:详细描述归并排序的过程

归并排序是用分治思想,分治模式在每一层递归上有三个步骤:

  • 分解(Divide):将n个元素分成个含n/2个元素的子序列。
  • 解决(Conquer):用合并排序法对两个子序列递归的排序。
  • 合并(Combine):合并两个已排序的子序列已得到排序结果。
  1. 2、操作系统:什么是动态重定位,
  2. 在程序运行过程中要访问数据时再进行逻辑地址与物理地址的变换(即在逐条指令执行时完成地址映射)

3、计算机网络:什么是子网掩码,请简述其原理及其应用。

子网掩码 (subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,是一个应用于 TCP/IP 网络的 32 位二进制值。它可以屏蔽掉 IP 地址中的一部分,从而分离出 IP 地址中的网络部分与主机部分,基于子网掩码,管理员可以将网络进一步划分为若干子网。它必须结合 IP 地址一起使用。

在使用 TCP/IP 协议的两台计算机之间进行通信时,我们通过将本机的子网掩码与接受方主机的 IP 地址进行 ' 与 '运算,即可得到目标主机所在的网络号,又由于每台主机在配置 TCP/IP 协议时都设置了一个本机 IP 地址与子网掩码,所以可以知道本机所在的网络号。

通过比较这两个网络号,就可以知道接受方主机是否在本网络上。如果网络号相同,表明接受方在本网络上,那么可以通过相关的协议把数据包直接发送到目标主机;如果网络号不同,表明目标主机在远程网络上,那么数据包将会发送给本网络上的路由器,由路由器将数据包发送到其他网络,直至到达目的地。

4、

 ①从键盘上输入数字1-7,输出对应的日期。

#include <stdio.h>int main()
{int a;printf("Please input a single numeral(1-7): ");scanf("%d",&a);if (a==1)printf("Sunday\n");else if (a==2)printf("Monday\n");else if (a==3)printf("Tuesday\n");else if (a==4)printf("Wednesday\n");else if (a==5)printf("Thursday\n");else if (a==6)printf("Friday\n");else if (a==7)printf("Saturday\n");elseprintf("Invalid - please input a single numeral(1-7).\n");return 0;
}

②计算从100-500的所有素数个数以及其中所有素数之和。

#include<stdio.h>
int prime(int n) //定义函数判断素数
{
int i,flag=1;
for(i=2;i<n/2;i++)
if(n%i==0)flag=0;
if(flag==0)return 0;
else return 1;
}
void main() //主函数
{
int i,sum=0;
for(i=100;i<=500;i++)
if(prime(i)==1)sum+=i;
printf(">> sum=%d\n",sum);
}

 ③输出5*5矩阵中的最大值和最小值,以及其下标。

#include <stdio.h>void fun(int *p,int n)
{int *pmax,*pmin,*m;int t;pmax = pmin = m = p;	//四个指针均指向一维空间的起始单元//找最大数和最小数for(m=m+1;m<p+n;m++){if(*m > *pmax){pmax = m;}if(*m <	*pmin){pmin = m;}}//把最大数放到中心位置		t = *(p+2*5+2);*(p+12) = *pmax;*pmax = t;//把最小值放到左上角t = *p;*p = *pmin;*pmin = t;//找次小数pmin = p+1;m = p + 2;for(; m<p+n;m++){if(*m < *pmin){pmin = m;}}//把次小数置换到右上角t = *(p+4);*(p+4) = *pmin;*pmin = t;//找次次小数pmin = p+1;m = p+2;for(; m<p+n;m++){if( (*m<*pmin)&&(m!=(p+4)) ){pmin = m;}}//把次次小数置换到左下角	[4][0]——>4*5+0t = *(p+20);*(p+20) = *pmin;*pmin = t;//找出此次次次小数pmin = p+1;m = p+2;for(; m<p+n;m++){if( (*m<*pmin)&&(m!=(p+4))&&(m!=(p+20)) ){pmin = m;}}//把次次次小数置换到右下角	[4][4]——>24t = *(p+24);*(p+24) = *pmin;*pmin = t;
}	int main()
{int a[5][5],i,j;for(i=0;i<5;i++){for(j=0;j<5;j++){scanf("%d",&a[i][j]);}}fun(*a,25);for(i=0;i<5;i++){for(j=0;j<4;j++){printf("%d ",a[i][j]);}printf("%d",a[i][j]);printf("\n");}				return 0;
}						

 ④从输入的字符串中找出数字,并将其删除后输出。

#include<stdio.h>int dele(char x[]){int i = 0; int j = 0;while (x[i] != '\0'){                if (x[i] >= '0'&&x[i] <= '9')    //用ASCII判断x[]数组内容是否为数字i++;                        //只加i变量,相当于剔除当字符串某一字符为数字剔除下标else{x[j] = x[i]; i++; j++;}}x[j] = '\0';                        //末尾的下标是没\0的,需要加进去return x[j];
}int main()
{char str[100];            //char型数组存字符;int型数组存整形printf("Please input a sentence\n");//scanf("%s", str);        //遇到空格\t \n停止gets(str);                //遇到回车停止dele(str);printf("The new string is:%s\n", str);return 0;
}

 ⑤定义结构体 typedef struct { int sno; char name [10]; } 从键盘上输入学生信息,并将其写入文件“student.dat”中,输入学号为0时即停止输入。

#include <stdio.h>
#include <string.h>typedef struct {int sno;char name[10];
} Student;int main() {Student student;printf("请输入学生的学号和姓名(学号和姓名之间用空格隔开):");scanf("%d %9s", &student.sno, student.name); // 使用%9s限制字符串长度为9,避免溢出printf("学号: %d, 姓名: %s\n", student.sno, student.name);return 0;
}

 ⑥递归方法写出直接插入排序。

public static void sort(int []arr,int k) {if(k==0) {					//递归的出口return;								//第一个元素不用去排序}sort(arr,k-1);					//对从0到倒数第二个元素排序int x=arr[k];					int index=k-1;						//设置指针while(index>-1&& x<arr[index]) {			//对最后一个元素进行插入arr[index+1]=arr[index];					//交换index--;}arr[index+1]=x;											//指针的边界}

5、

(1)关于链表的大题

①初始化带头结点的链表A

void initList(LinkList &L) {// 1、要给头指针分配一个存储空间,注意:一个单链表哪怕他是空的,他都必须有个头指针L = (LNode *)malloc(sizeof(LNode));// 2、此处是初始化带头结点的单链表,所以头指针L是指向头结点,而L->next的意思是头指针指向头结点的指针域,而头结点的指针域存储着下一节点的地址,所以给L->next赋值为null就表示头结点后面没有结点,单链表是空的L->next=NULL;
}

 ②构造有N个节点的非递减链表

//有序单链表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Node
{int data;struct Node *next;
};
//顺序插入
void Insert(Node *p,int n)
{//利用两个指针Node *p1=p;//指向头 ,因为这是有序单链表 所以每次插入前都得先从头来 Node *p2=p->next; //指向头节点之后 之后也用它来判断是否位只含有头节点的空链表 Node *s=(Node *)malloc(sizeof(Node));s->data=n;//写入数据while(p2&&p2->data>n){p1=p2;p2=p2->next;//这样同时往后移的话 插入的时候好插入	}s->next=p2;p1->next=s;//插入节点 
} //遍历列表void traversal(Node *p){Node *p3=p->next;//不能从p开始遍历因为p是头节点没存东西while(p3){printf("%d\n",p3->data);p3=p3->next;}} 
int main()
{Node *p;int i,j,k;p=(Node *)malloc(sizeof(Node));p->next=NULL;//创建头节点 for(i=0;i<3;i++){printf("Please input the number you want to insert");scanf("%d",&k);Insert(p,k);}traversal(p);return 0; 
}

③将链表A中不重复的数字复制到链表B中

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node* next;
} Node, *LinkedList;// 创建一个新节点
Node* createNode(int data) {Node* newNode = (Node*)malloc(sizeof(Node));if (newNode == NULL) {printf("内存分配失败\n");exit(0);}newNode->data = data;newNode->next = NULL;return newNode;
}// 向链表中插入数据
void insertData(LinkedList* head, int data) {Node* newNode = createNode(data);if (*head == NULL) {*head = newNode;} else {Node* temp = *head;while (temp->next != NULL) {temp = temp->next;}temp->next = newNode;}
}// 打印链表
void printList(LinkedList head) {while (head != NULL) {printf("%d ", head->data);head = head->next;}printf("\n");
}// 将链表a中的不重复元素复制到链表b中
void copyUniqueToLinkedList(LinkedList a, LinkedList* b) {Node* currentA = a;Node* currentB = *b;while (currentA != NULL) {int isUnique = 1; // 假设是唯一的Node* tempA = a;while (tempA != currentA) {if (tempA->data == currentA->data) {isUnique = 0; // 发现重复break;}tempA = tempA->next;}if (isUnique) {Node* newNode = createNode(currentA->data);if (*b == NULL) {*b = newNode;} else {currentB->next = newNode;}currentB = newNode;}currentA = currentA->next;}
}int main() {LinkedList headA = NULL;LinkedList headB = NULL;// 示例数据insertData(&headA, 1);insertData(&headA, 2);insertData(&headA, 3);insertData(&headA, 2);insertData(&headA, 4);insertData(&headA, 1);printf("链表A: ");printList(headA);copyUniqueToLinkedList(headA, &headB);printf("链表B(不重复元素): ");printList(headB);return 0;
}

(2)关于双端队列的大题

 ①初始化队列

void Init(QUEUE *Q)
{(*Q).front = (struct celltype *)malloc(sizeof(struct celltype));(*Q).front->next=NULL; //创建一个空节点,并将其作为队列的头(*Q).rear = (*Q).front; //将尾指针指向头指针
}

②关于从队头队尾插入元素的问题

typedef struct Node {int data;struct Node* next;
} Node;
typedef struct LinkedList {Node* head;Node* tail;
} LinkedList;
void insert_to_head(LinkedList* list, int value) {Node* new_node = (Node*)malloc(sizeof(Node));new_node->data = value;new_node->next = list->head;list->head = new_node;if (list->tail == NULL) {list->tail = new_node;}
}void insert_to_tail(LinkedList* list, int value) {Node* new_node = (Node*)malloc(sizeof(Node));new_node->data = value;new_node->next = NULL;if (list->tail == NULL) {list->head = list->tail = new_node;} else {list->tail->next = new_node;list->tail = new_node;}
}
void print_list(LinkedList* list) {Node* current = list->head;while (current != NULL) {printf("%d ", current->data);current = current->next;}printf("\n");
}
int main() {LinkedList list;list.head = list.tail = NULL;insert_to_head(&list, 1);insert_to_tail(&list, 2);insert_to_head(&list, 3);insert_to_tail(&list, 4);print_list(&list); // 输出: 3 1 2 4return 0;
}

 ③关于从队头队尾删除元素的问题

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node *next;
} Node;typedef struct Queue {Node *front;Node *rear;
} Queue;// 初始化队列
void init(Queue *q) {q->front = NULL;q->rear = NULL;
}// 在队尾插入元素
void enqueue(Queue *q, int data) {Node *newNode = (Node *)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;if (q->rear == NULL) {q->front = q->rear = newNode;} else {q->rear->next = newNode;q->rear = newNode;}
}// 从队头删除元素
void dequeueFromFront(Queue *q) {if (q->front == NULL) {printf("Queue is empty\n");return;}Node *temp = q->front;q->front = q->front->next;free(temp);if (q->front == NULL) {q->rear = NULL;}
}// 从队尾删除元素
void dequeueFromRear(Queue *q) {if (q->front == NULL) {printf("Queue is empty\n");return;}Node *current = q->front;if (current->next == NULL) {free(current);q->front = q->rear = NULL;} else {while (current->next != q->rear) {current = current->next;}free(q->rear);q->rear = current;q->rear->next = NULL;}
}int main() {Queue q;init(&q);// 添加元素enqueue(&q, 10);enqueue(&q, 20);enqueue(&q, 30);// 从队头删除元素dequeueFromFront(&q);// 从队尾删除元素dequeueFromRear(&q);return 0;
}

相关文章:

复试专业课问题

1、数据结构&#xff1a;详细描述归并排序的过程 归并排序是用分治思想&#xff0c;分治模式在每一层递归上有三个步骤&#xff1a; 分解&#xff08;Divide&#xff09;&#xff1a;将n个元素分成个含n/2个元素的子序列。解决&#xff08;Conquer&#xff09;&#xff1a;用…...

比特币革命:刚刚开始

作者&#xff1a;Marius Farashi Tasooji 编译&#xff1a;秦晋 要充分理解比特币及其含义&#xff0c;首先必须理解什么是价值&#xff0c;什么是货币。以及是什么赋予资产价值&#xff1f; 这个问题看似愚蠢&#xff0c;但实际上非常有趣。我们的生活是由我们消费或出售的物品…...

淘宝店商家电话提取软件操作经验

淘宝爬虫工具是一种用于自动化获取淘宝网站数据的程序。以下是一个简单的淘宝爬虫工具的代码示例&#xff1a; import requests from bs4 import BeautifulSoupdef get_taobao_data(keyword):url fhttps://s.taobao.com/search?q{keyword}headers {User-Agent: Mozilla/5.0…...

【进阶六】Python实现SDVRPTW常见求解算法——遗传算法(GA)

基于python语言&#xff0c;采用经典蚁群算法&#xff08;ACO&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码片段…...

【Android】App通信基础架构相关类源码解析

应用通信基础架构相关类源码解析 这里主要对Android App开发时&#xff0c;常用到的一些通信基础类进行一下源码的简单分析&#xff0c;包括&#xff1a; Handler&#xff1a;处理器&#xff0c;与某个Looper&#xff08;一个线程对应一个Looper&#xff09;进行关联。用于接…...

06-kafka配置

生产者配置 NAMEDESCRIPTIONTYPEDEFAULTVALID VALUESIMPORTANCEbootstrap.servershost/port列表&#xff0c;用于初始化建立和Kafka集群的连接。列表格式为host1:port1,host2:port2,…&#xff0c;无需添加所有的集群地址&#xff0c;kafka会根据提供的地址发现其他的地址&…...

Git、TortoiseGit、SVN、TortoiseSVN 的关系和区别

Git、TortoiseGit、SVN、TortoiseSVN 的关系和区别 &#xff08;一&#xff09;Git&#xff08;分布式版本控制系统&#xff09;:&#xff08;二&#xff09;SVN&#xff08;集中式版本控制系统&#xff09;&#xff08;三&#xff09;TortoiseGit一、下载安装 git二、安装过程…...

4月5日排序算法总结(1)

冒泡排序 利用每趟都确定出一个最大值或者最小值 如果需要排一个从小到大的数组&#xff0c;那么我们每一趟都要确定一个最大值放在最后&#xff0c;一共有n个数&#xff0c;我们最多需要排列n-1趟就可以了&#xff0c;我们可以改进自己的代码&#xff0c;利用一个flag标记&a…...

Pandas追加写入文件的时候写入到了第一行

# 原代码 def find_money(file_path, account, b_account, money, type_word, time):file pd.read_excel(file_path)with open(money.csv, a, newline, encodingutf-8) as f:for i in file.index:省略中间的代码if 省略中间的代码:file.loc[[i]].to_csv(f,indexFalse)find_sam…...

04---webpack编写可维护的构建配置

01 构建配置抽离成npm包&#xff1b; 意义&#xff1a;通用性&#xff1a; 业务开发者无需关注构建配置 统一团队构建脚本可维护性&#xff1a;构建配置合理的拆分 质量&#xff1a;冒烟测试 单元测试 持续集成构建配置管理的可选方案&#xff1a;1 通过多个配置文件管理不同…...

【云计算】云数据中心网络(一):VPC

云数据中心网络&#xff08;一&#xff09;&#xff1a;VPC 1.什么是 VPC2.VPC 的组成2.1 虚拟交换机2.2 虚拟路由器 3.VPC 网络规划3.1 VPC 数量规划3.2 交换机数量规划3.3 地址空间规划3.4 不同规模企业地址空间规划实践 4.VPC 网络高可靠设计4.1 单地域单可用区部署4.2 单地…...

自动驾驶中的多目标跟踪_第一篇

自动驾驶中的多目标跟踪:第一篇 多目标跟踪(multi-object/multi-target tracking)的任务包括估计场景中目标的数目、位置&#xff08;状态&#xff09;或其他属性&#xff0c;最关键的是需要在一段时间内持续地进行估计。 附赠自动驾驶学习资料和量产经验&#xff1a;链接 应…...

AI爆款文案 巧用AI大模型让文案变现插上翅膀

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…...

Python入门的60个基础练习(一)

01-Hello World python的语法逻辑完全靠缩进&#xff0c;建议缩进4个空格。如果是顶级代码&#xff0c;那么必须顶格书写&#xff0c;哪怕只有一个空格也会有语法错误。下面示例中&#xff0c;满足if条件要输出两行内容&#xff0c;这两行内容必须都缩进&#xff0c;而且具有相…...

微软云学习环境

微软公有云 - Microsoft Azure 本文介绍通过微软学习中心Microsoft Learn来免费试用Azure上的服务&#xff0c;也不需要绑定信用卡。不过每天只有几个小时的时间。 官网 https://docs.microsoft.com/zh-cn/learn/ 实践 比如创建虚拟机&#xff0c;看到自己的账号下多了Learn的…...

大厂面试:找出数组中第k大的数的最佳算法

一.前置条件 假如数组为a,大小为n&#xff0c;要找到数组a中第k大的数。 二.解决方案 1.使用任意一种排序算法&#xff08;例如快速排序&#xff09;将数组a进行从大到小的排序&#xff0c;则第n-k个数即为答案。 2.构造一个长度为k的数组&#xff0c;将前k个数复制过来并降序…...

爬取高校专业信息的Python爬虫简介与实践

1. 介绍 在当前高校专业信息繁多的情况下&#xff0c;选择适合自己的专业成为了许多学生面临的挑战。为了帮助学生更好地了解各高校专业情况&#xff0c;我们开发了一个Python爬虫程序&#xff0c;用于爬取高校专业信息并保存到Excel文件中。本文将详细介绍该爬虫的实现过程以…...

redis 集群模式(redis cluster)介绍

目录 一 redis cluster 相关定义 1&#xff0c; redis cluster 是什么 2&#xff0c;redis 集群的组成 3&#xff0c;集群的作用 4&#xff0c;集群架构图 二 Redis集群的数据分片 1&#xff0c;哈希槽是什么 2&#xff0c;哈希槽如何排布 3&#xff0c;Redis集…...

python实现网络爬虫

网络爬虫是一个自动从互联网上抓取数据的程序。Python有很多库可以帮助我们实现网络爬虫&#xff0c;其中最常用的是requests&#xff08;用于发送HTTP请求&#xff09;和BeautifulSoup&#xff08;用于解析HTML或XML文档&#xff09;。 以下是一个简单的Python网络爬虫示例&a…...

LeetCode 836. 矩形重叠

解题思路 相关代码 class Solution {public boolean isRectangleOverlap(int[] rec1, int[] rec2) {int x1 rec1[0];int y1 rec1[1];int x2 rec1[2];int y2 rec1[3];int a1 rec2[0];int b1 rec2[1];int a2 rec2[2];int b2 rec2[3];return Math.min(y2,b2)>Math.max…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

41道Django高频题整理(附答案背诵版)

解释一下 Django 和 Tornado 的关系&#xff1f; Django和Tornado都是Python的web框架&#xff0c;但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架&#xff0c;鼓励快速开发和干净、实用的设计。它遵循MVC设计&#xff0c;并强调代码复用。Django有…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…...