版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年华为上机考试题库本文借鉴了近年相关经典试题创作而成,力求帮助考生深入理解测试题型,掌握答题技巧,提升应试能力。---2025年华为上机考试题库一、编程语言基础(C/C++)1.选择题:题目1:以下关于C语言变量的描述,正确的是?A.变量必须在使用前声明B.变量可以在任何位置声明C.变量名区分大小写D.以上都是题目2:以下哪个运算符的优先级最高?A.``(乘法)B.`+`(加法)C.`=`(赋值)D.`==`(等于)题目3:以下哪个是正确的自增运算符用法?A.`i++`或`++i`B.`i--`或`--i`C.`++i`或`i++`或`i--`或`--i`D.以上都是题目4:以下哪个是正确的字符串定义?A.`charstr[]="Hello";`B.`charstr="Hello";`C.`charstr={"Hello"};`D.以上都是题目5:以下哪个是正确的指针定义?A.`intp;`B.`intp=NULL;`C.`intp=0;`D.以上都是答案:1.D2.A3.D4.AB5.D解析:1.变量必须在使用前声明,变量可以在任何位置声明,变量名区分大小写,所以选D。2.乘法运算符的优先级最高,其次是加法、赋值、等于,所以选A。3.自增运算符可以是前置或后置,所以选D。4.字符串可以定义为字符数组或指针,所以选AB。5.指针可以定义为整型指针并初始化为NULL或0,所以选D。2.填空题:题目6:`inti=5;intp=&i;printf("%d",p);`输出结果是______。题目7:`charstr[]="Hello";`数组str的长度是______。题目8:`for(inti=0;i<5;i++){printf("");}`输出结果是______。题目9:`intarr[5]={1,2,3,4,5};`访问arr[3]的结果是______。题目10:`chars="Hello";s[0]='h';`修改后`s`的值是______。答案:.410."ello"解析:6.`p`访问的是变量`i`的值,所以输出5。7.字符串的长度包括结尾的`\0`,所以是6。8.循环输出5个``。9.数组索引从0开始,arr[3]是4。10.字符指针`s`指向的是字符串常量,修改`s[0]`会改变字符串的值,但常量字符串通常存储在只读内存,实际效果取决于编译器,但题目假设可以修改,所以输出"ello"。3.编程题:题目11:编写一个C程序,实现判断一个整数是否为偶数,如果是偶数输出"Yes",否则输出"No"。题目12:编写一个C程序,实现将一个字符串翻转,例如输入"Hello",输出"olleH"。题目13:编写一个C程序,实现计算1到100的累加和。题目14:编写一个C程序,实现查找一个数组中的最大值和最小值,并输出。题目15:编写一个C程序,实现冒泡排序算法,对数组进行升序排序。答案:```c//题目11include<stdio.h>intmain(){intnum;printf("Enteraninteger:");scanf("%d",&num);if(num%2==0){printf("Yes\n");}else{printf("No\n");}return0;}``````c//题目12include<stdio.h>include<string.h>intmain(){charstr[100];printf("Enterastring:");scanf("%s",str);intlen=strlen(str);for(inti=0;i<len/2;i++){chartemp=str[i];str[i]=str[len-i-1];str[len-i-1]=temp;}printf("Reversedstring:%s\n",str);return0;}``````c//题目13include<stdio.h>intmain(){intsum=0;for(inti=1;i<=100;i++){sum+=i;}printf("Sumof1to100is:%d\n",sum);return0;}``````c//题目14include<stdio.h>intmain(){intarr[100];printf("Enter100integers:\n");for(inti=0;i<100;i++){scanf("%d",&arr[i]);}intmax=arr[0],min=arr[0];for(inti=1;i<100;i++){if(arr[i]>max)max=arr[i];if(arr[i]<min)min=arr[i];}printf("Max:%d,Min:%d\n",max,min);return0;}``````c//题目15include<stdio.h>voidbubbleSort(intarr[],intn){for(inti=0;i<n-1;i++){for(intj=0;j<n-i-1;j++){if(arr[j]>arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}intmain(){intarr[100];printf("Enter100integers:\n");for(inti=0;i<100;i++){scanf("%d",&arr[i]);}bubbleSort(arr,100);printf("Sortedarray:\n");for(inti=0;i<100;i++){printf("%d",arr[i]);}printf("\n");return0;}```---二、算法与数据结构1.选择题:题目16:以下哪个数据结构适合表示树?A.队列B.栈C.链表D.二叉树题目17:快速排序的平均时间复杂度是?A.O(n)B.O(nlogn)C.O(n^2)D.O(logn)题目18:二分查找的时间复杂度是?A.O(n)B.O(nlogn)C.O(n^2)D.O(logn)题目19:以下哪个算法适合解决最短路径问题?A.冒泡排序B.快速排序C.Dijkstra算法D.二分查找题目20:以下哪个算法适合解决拓扑排序问题?A.深度优先搜索B.广度优先搜索C.Dijkstra算法D.二分查找答案:16.D17.B18.D19.C20.A解析:16.二叉树是树的一种常见表示方式,适合表示树结构。17.快速排序的平均时间复杂度是O(nlogn)。18.二分查找的时间复杂度是O(logn)。19.Dijkstra算法适合解决最短路径问题。20.深度优先搜索适合解决拓扑排序问题。2.填空题:题目21:在一个长度为n的数组中查找一个元素的最坏情况时间复杂度是______。题目22:一个栈的最大容量是m,栈的初始状态为空,经过一系列的push和pop操作后,栈的容量为k,栈的最大深度是______。题目23:在一个无向图中,每个顶点的度数是k,该图有n个顶点,图中的边数是______。题目24:堆是一种特殊的______树,分为最大堆和最小堆。题目25:在一个长度为n的数组中查找一个元素的最佳情况时间复杂度是______。答案:21.O(n)22.m23.nk/224.二叉25.O(1)解析:21.最坏情况下需要遍历整个数组,时间复杂度是O(n)。22.栈的最大深度等于初始容量,即m。23.无向图中,边数是顶点度数之和的一半,即nk/2。24.堆是一种特殊的二叉树。25.最佳情况下可以直接找到元素,时间复杂度是O(1)。3.编程题:题目26:编写一个C程序,实现二分查找算法,在一个有序数组中查找一个元素,如果找到返回其索引,否则返回-1。题目27:编写一个C程序,实现深度优先搜索(DFS)遍历一个无向图,使用邻接矩阵表示图。题目28:编写一个C程序,实现计算一个无向图的度数,使用邻接矩阵表示图。题目29:编写一个C程序,实现堆排序算法,对数组进行升序排序。题目30:编写一个C程序,实现将一个数组转换为最小堆。答案:```c//题目26include<stdio.h>intbinarySearch(intarr[],intl,intr,intx){while(l<=r){intm=l+(r-l)/2;if(arr[m]==x)returnm;if(arr[m]<x)l=m+1;elser=m-1;}return-1;}intmain(){intarr[]={2,3,4,10,40};intn=sizeof(arr)/sizeof(arr[0]);intx=10;intresult=binarySearch(arr,0,n-1,x);if(result==-1){printf("Elementisnotpresentinarray");}else{printf("Elementispresentatindex%d",result);}return0;}``````c//题目27include<stdio.h>voidDFS(intadjMatrix[][5],intvisited[],intcurrentVertex){visited[currentVertex]=1;printf("%d",currentVertex);for(inti=0;i<5;i++){if(adjMatrix[currentVertex][i]==1&&!visited[i]){DFS(adjMatrix,visited,i);}}}intmain(){intadjMatrix[5][5]={{0,1,1,0,0},{1,0,1,1,0},{1,1,0,1,0},{0,1,1,0,1},{0,0,0,1,0}};intvisited[5]={0};DFS(adjMatrix,visited,0);return0;}``````c//题目28include<stdio.h>voidcalculateDegree(intadjMatrix[][5],intn){for(inti=0;i<n;i++){intdegree=0;for(intj=0;j<n;j++){degree+=adjMatrix[i][j];}printf("Degreeofvertex%dis%d\n",i,degree);}}intmain(){intadjMatrix[5][5]={{0,1,1,0,0},{1,0,1,1,0},{1,1,0,1,0},{0,1,1,0,1},{0,0,0,1,0}};calculateDegree(adjMatrix,5);return0;}``````c//题目29include<stdio.h>voidheapify(intarr[],intn,inti){intlargest=i;intleft=2i+1;intright=2i+2;if(left<n&&arr[left]>arr[largest])largest=left;if(right<n&&arr[right]>arr[largest])largest=right;if(largest!=i){inttemp=arr[i];arr[i]=arr[largest];arr[largest]=temp;heapify(arr,n,largest);}}voidheapSort(intarr[],intn){for(inti=n/2-1;i>=0;i--){heapify(arr,n,i);}for(inti=n-1;i>=0;i--){inttemp=arr[0];arr[0]=arr[i];arr[i]=temp;heapify(arr,i,0);}}intmain(){intarr[]={12,11,13,5,6,7};intn=sizeof(arr)/sizeof(arr[0]);heapSort(arr,n);printf("Sortedarrayis\n");for(inti=0;i<n;++i)printf("%d",arr[i]);printf("\n");return0;}``````c//题目30include<stdio.h>voidswap(inta,intb){inttemp=a;a=b;b=temp;}voidheapify(intarr[],intn,inti){intlargest=i;intleft=2i+1;intright=2i+2;if(left<n&&arr[left]>arr[largest])largest=left;if(right<n&&arr[right]>arr[largest])largest=right;if(largest!=i){swap(&arr[i],&arr[largest]);heapify(arr,n,largest);}}voidbuildHeap(intarr[],intn){for(inti=n/2-1;i>=0;i--){heapify(arr,n,i);}}intmain(){intarr[]={12,11,13,5,6,7};intn=sizeof(arr)/sizeof(arr[0]);buildHeap(arr,n);printf("MinHeaparrayis\n");for(inti=0;i<n;++i)printf("%d",arr[i]);printf("\n");return0;}```---三、数据库(SQL)1.选择题:题目31:以下哪个是正确的SQL查询语句?A.`SELECTFROMtable;`B.`SELECTcolumn1,column2FROMtableWHEREcolumn1='value';`C.`SELECTCOUNT()FROMtable;`D.以上都是题目32:以下哪个是正确的SQL插入语句?A.`INSERTINTOtable(column1,column2)VALUES('value1','value2');`B.`INSERTINTOtableVALUES('value1','value2');`C.`INSERTFROMtable2;`D.以上都是题目33:以下哪个是正确的SQL更新语句?A.`UPDATEtableSETcolumn1='value1'WHEREcolumn2='value2';`B.`UPDATEtableSETcolumn1='value1';`C.`UPDATEFROMtable2;`D.以上都是题目34:以下哪个是正确的SQL删除语句?A.`DELETEFROMtableWHEREcolumn1='value1';`B.`DELETEtable;`C.`DELETEFROMtable;`D.以上都是题目35:以下哪个是正确的SQL连接查询?A.`SELECTFROMtable1JOINtable2ONtable1.id=table2.id;`B.`SELECTFROMtable1,table2WHEREtable1.id=table2.id;`C.以上都是D.以上都不是答案:31.D32.A33.A34.A35.C解析:31.三个选项都是正确的SQL查询语句。32.正确的插入语句是A。33.正确的更新语句是A。34.正确的删除语句是A。35.两个选项都是正确的SQL连接查询。2.填空题:题目36:`SELECTDISTINCTcolumn1FROMtable;`查询的结果是______。题目37:`SELECTcolumn1FROMtableWHEREcolumn1>10ANDcolumn1<20;`查询的结果是______。题目38:`SELECTCOUNT(column1)FROMtable;`查询的结果是______。题目39:`SELECTcolumn1,column2FROMtableORDERBYcolumn1DESC;`查询的结果是______。题目40:`SELECTtable1.column1,table2.column2FROMtable1JOINtable2ONtable1.id=table2.id;`查询的结果是______。答案:36.column1的唯一值37.column1在10和20之间的值38.column1的计数39.按column1降序排列的结果40.table1.column1和table2.column2的连接结果3.编程题:题目41:编写一个SQL查询语句,查询表`students`中所有学生的姓名和年龄,年龄大于18岁的学生。题目42:编写一个SQL查询语句,查询表`orders`中所有订单的总金额,并按总金额降序排列。题目43:编写一个SQL查询语句,查询表`employees`中每个部门的员工人数。题目44:编写一个SQL查询语句,查询表`products`中每个产品的总库存量。题目45:编写一个SQL查询语句,查询表`customers`和`orders`的连接结果,显示客户姓名、订单日期和订单金额。答案:```sql--题目41SELECTname,ageFROMstudentsWHEREage>18;``````sql--题目42SELECTorder_id,SUM(amount)AStotal_amountFROMordersGROUPBYorder_idORDERBYtotal_amountDESC;``````sql--题目43SELECTdepartment,COUNT()ASemployee_countFROMemployeesGROUPBYdepartment;``````sql--题目44SELECTproduct_id,SUM(stock)AStotal_stockFROMproductsGROUPBYproduct_id;``````sql--题目45SELECT,orders.order_date,orders.amountFROMcustomersJOINordersONcustomers.customer_id=orders.customer_id;```---四、网络编程1.选择题:题目46:以下哪个协议用于传输超文本?A.FTPB.HTTPC.SMTPD.DNS题目47:以下哪个协议用于电子邮件传输?A.FTPB.HTTPC.SMTPD.DNS题目48:以下哪个协议用于域名解析?A.FTPB.HTTPC.SMTPD.DNS题目49:以下哪个协议用于文件传输?A.FTPB.HTTPC.SMTPD.DNS题目50:以下哪个协议用于实时通信?A.FTPB.HTTPC.SIPD.DNS答案:46.B47.C48.D49.A50.C解析:46.HTTP用于传输超文本。47.SMTP用于电子邮件传输。48.DNS用于域名解析。49.FTP用于文件传输。50.SIP用于实时通信。2.填空题:题目51:TCP协议提供______连接。题目52:UDP协议提供______连接。题目53:IP协议负责______。题目54:HTTP协议的默认端口号是______。题目55:DNS协议的默认端口号是______。答案:51.可靠52.无连接53.数据包传输54.8055.533.编程题:题目56:编写一个C程序,使用socket编程实现客户端和服务器之间的简单通信,客户端发送一条消息给服务器,服务器回复一条消息给客户端。题目57:编写一个C程序,使用socket编程实现HTTP请求和响应,客户端发送一个简单的HTTPGET请求,服务器回复一个简单的HTTP响应。题目58:编写一个C程序,使用socket编程实现UDP客户端和服务器之间的简单通信,客户端发送一条消息给服务器,服务器回复一条消息给客户端。题目59:编写一个C程序,使用socket编程实现DNS查询,客户端发送一个DNS查询请求,服务器回复一个DNS查询结果。题目60:编写一个C程序,使用socket编程实现FTP客户端,客户端连接到FTP服务器,并发送一个简单的FTP命令。答案:```c//题目56include<stdio.h>include<stdlib.h>include<string.h>include<unistd.h>include<sys/types.h>include<sys/socket.h>include<netinet/in.h>voiderror(constcharmsg){perror(msg);exit(1);}intmain(){intsockfd,portno,n;structsockaddr_inserv_addr;charbuffer[256];sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0)error("ERRORopeningsocket");portno=8080;memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(portno);if(connect(sockfd,(structsockaddr)&serv_addr,sizeof(serv_addr))<0)error("ERRORconnecting");printf("Pleaseenterthemessage:");bzero(buffer,256);fgets(buffer,255,stdin);n=write(sockfd,buffer,strlen(buffer));if(n<0)error("ERRORwritingtosocket");bzero(buffer,256);n=read(sockfd,buffer,255);if(n<0)error("ERRORreadingfromsocket");printf("%s\n",buffer);close(sockfd);return0;}``````c//题目57include<stdio.h>include<stdlib.h>include<string.h>include<unistd.h>include<sys/types.h>include<sys/socket.h>include<netinet/in.h>voiderror(constcharmsg){perror(msg);exit(1);}intmain(){intsockfd,portno,n;structsockaddr_inserv_addr;charbuffer[256];sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0)error("ERRORopeningsocket");portno=8080;memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(portno);if(connect(sockfd,(structsockaddr)&serv_addr,sizeof(serv_addr))<0)error("ERRORconnecting");strcpy(buffer,"GET/HTTP/1.1\r\nHost:localhost\r\n\r\n");n=write(sockfd,buffer,strlen(buffer));if(n<0)error("ERRORwritingtosocket");bzero(buffer,256);n=read(sockfd,buffer,255);if(n<0)error("ERRORreadingfromsocket");printf("%s\n",buffer);close(sockfd);return0;}``````c//题目58include<stdio.h>include<stdlib.h>include<string.h>include<unistd.h>include<sys/types.h>include<sys/socket.h>include<netinet/in.h>voiderror(constcharmsg){perror(msg);exit(1);}intmain(){intsockfd,portno;structsockaddr_inserv_addr;charbuffer[256];sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0)error("ERRORopeningsocket");portno=8080;memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(portno);serv_addr.sin_addr.s_addr=INADDR_ANY;if(bind(sockfd,(structsockaddr)&serv_addr,sizeof(serv_addr))<0)error("ERRORonbinding");printf("Pleaseenterthemessage:");bzero(buffer,256);fgets(buffer,255,stdin);sendto(sockfd,buffer,strlen(buffer),0,(structsockaddr)&serv_addr,sizeof(serv_addr));bzero(buffer,256);socklen_tlen=sizeof(serv_addr);n=recvfrom(sockfd,buffer,255,0,(structsockaddr)&serv_addr,&len);if(n<0)error("ERRORreadingfromsocket");printf("%s\n",buffer);close(sockfd);return0;}``````c//题目59include<stdio.h>include<stdlib.h>include<string.h>include<unistd.h>include<sys/types.h>include<sys/socket.h>include<netinet/in.h>voiderror(constcharmsg){perror(msg);exit(1);}intmain(){intsockfd,portno;structsockaddr_inserv_addr;charbuffer[256];sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0)error("ERRORopeningsocket");portno=53;memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(portno);serv_addr.sin_addr.s_addr=INADDR_ANY;if(connect(sockfd,(structsockaddr)&serv_addr,sizeof(serv_addr))<0)error("ERRORconnecting");strcpy(buffer,"\n");n=write(sockfd,buffer,strlen(buffer));if(n<0)error("ERRORwritingtosocket");bzero(buffer,256);n=read(sockfd,buffer,255);if(n<0)error("ERRORreadingfromsocket");printf("%s\n",buffer);close(sockfd);return0;}``````c//题目60include<stdio.h>include<stdlib.h>include<string.h>include<unistd.h>include<sys/types.h>include<sys/socket.h>include<netinet/in.h>voiderror(constcharmsg){perror(msg);exit(1);}intmain(){intsockfd,portno;structsockaddr_inserv_addr;charbuffer[256];sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0)error("ERRORopeningsocket");portno=21;memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(portno);serv_addr.sin_addr.s_addr=INADDR_ANY;if(connect(sockfd,(structsockaddr)&serv_addr,sizeof(serv_addr))<0)error("ERRORconnecting");strcpy(buffer,"USERanonymous\r\n");n=write(sockfd,buffer,strlen(buffer));if(n<0)error("ERRORwritingtosocket");bzero(buffer,256);n=read(sockfd,buffer,255);if(n<0)error("ERRORreadingfromsocket");printf("%s\n",buffer);close(sockfd);return0;}```---五、操作系统1.选择题:题目61:以下哪个是进程的状态?A.创建B.就绪C.运行D.以上都是题目62:以下哪个是线程的状态?A.创建B.就绪C.运行D.以上都是题目63:以下哪个是进程的调度算法?A.先来先服务B.短作业优先C.时间片轮转D.以上都是题目64:以下哪个是内存管理的技术?A.分段B.分页C.虚拟内存D.以上都是题目65:以下哪个是文件系统的类型?A.FAT32B.NTFSC.ext4D.以上都是答案:61.D62.D63.D64.D65.D解析:61.进程的状态包括创建、就绪、运行等。62.线程的状态包括创建、就绪、运行等。63.进程的调度算法包括先来先服务、短作业优先、时间片轮转等。64.内存管理的技术包括分段、分页、虚拟内存等。65.文件系统的类型包括FAT32、NTFS、ext4等。2.填空题:题目66:进程是______的实例。题目67:线程是______的实例。题目68:死锁是指两个或两个以上的进程在______状态。题目69:内存分段的目的是______。题目70:虚拟内存的目的是______。答案:66.操作系统67.进程68.互相等待69.提高内存利用率70.扩展内存寻址空间3.编程题:题目71:编写一个C程序,使用多进程编程实现并发打印数字1到10,每个进程打印一个数字。题目72:编写一个C程序,使用多线程编程实现并发打印数字1到10,每个线程打印一个数字。题目73:编写一个C程序,使用互斥锁实现多线程安全打印数字1到10,每个线程打印一个数字。题目74:编写一个C程序,使用信号量实现多线程安全打印数字1到10,每个线程打印一个数字。题目75:编写一个C程序,使用条件变量实现多线程同步,一个线程等待一个条件,另一个线程通知条件。答案:```c//题目71include<stdio.h>include<stdlib.h>include<sys/types.h>include<sys/wait.h>include<unistd.h>intmain(){for(inti=1;i<=10;i++){pid_tpid=fork();if(pid==0){printf("%d",i);exit(0);}}while(wait(NULL)>0);printf("\n");return0;}``````c//题目72include<stdio.h>include<stdlib.h>include<pthread.h>voidprint_number(voidarg){intnumber=((int)arg);printf("%d",number);returnNULL;}intmain(){pthread_tthreads[10];intnumbers[10];for(inti=0;i<10;i++){numbers[i]=i+1;if(pthread_create(&threads[i],NULL,print_number,&numbers[i])){fprintf(stderr,"Errorcreatingthread\n");return1;}}for(inti=0;i<10;i++){if(pthread_join(threads[i],NULL)){fprintf(stderr,"Errorjoiningthread\n");return2;}}printf("\n");return0;}``````c//题目73include<stdio.h>include<stdlib.h>include<pthread.h>pthread_mutex_tlock;intcounter=1;voidprint_number(voidarg){pthread_mutex_lock(&lock);intnumber=counter++;printf("%d",number);pthread_mutex_unlock(&lock);returnNULL;}intmain(){pthread_tthreads[10];pthread_mutex_init(&lock,NULL);for(inti=0;i<10;i++){if(pthread_create(&threads[i],NULL,print_number,NULL)){fprintf(stderr,"Errorcreatingthread\n");return1;}}for(inti=0;i<10;i++){if(pthread_join(threads[i],NULL)){fprintf(stderr,"Errorjoiningthread\n");return2;}}pthread_mutex_destroy(&lock);printf("\n");return0;}``````c//题目74include<stdio.h>include<stdlib.h>include<pthread.h>pthread_mutex_tlock;pthread_cond_tcond;intcounter=1;voidprint_number(voidarg){pthread_mutex_lock(&lock);while(counter<=10){pthread_cond_wait(&cond,&lock);intnumber=counter++;printf("%d",number);pthread_cond_signal(&cond);}pthread_mutex_unlock(&lock);returnNULL;}intmain(){pthread_tthreads[10];pthread_mutex_init(&lock,NULL);pthread_cond_init(&cond,NULL);for(inti=0;i<10;i++){if(pthread_create(&threads[i],NULL,print_number,NULL)){fprintf(stderr,"Errorcreatingthread\n");return1;}}pthread_cond_broadcast(&cond);for(inti=0;i<10;i++){if(pthread_join(threads[i],NULL)){fprintf(stderr,"Errorjoiningthread\n");return2;}}pthread_mutex_destroy(&lock);pthread_cond_destroy(&cond);printf("\n");return0;}``````c//题目75include<stdio.h>include<stdlib.h>include<pthread.h>pthread_mutex_tlock;pthread_cond_tcond;intflag=0;voidwaiter(voidarg){pthread_mutex_lock(&lock);while(!flag){pthread_cond_wait(&cond,&lock);}printf("Flagissetto1\n");pthread_mutex_unlock(&lock);returnNULL;}voidnotifier(voidarg){pthread_mutex_lock(&lock);printf("Flagissetto0\n");flag=1;pthread_cond_signal(&cond);pthread_mutex_unlock(&lock);returnNULL;}intmain(){pthread_twaiter_thread,notifier_thread;pthread_mutex_init(&lock,NULL);pthread_cond_init(&cond,NULL);if(pthread_create(&waiter_thread,NULL,waiter,NULL)){fprintf(stderr,"Errorcreatingwaiterthread\n");return1;}if(pthread_create(¬ifier_thread,NULL,notifier,NULL)){fprintf(stderr,"Errorcreatingnotifierthread\n");return2;}pthread_join(waiter_thread,NULL);pthread_join(notifier_thread,NULL);pthread_mutex_destroy(&lock);pthread_cond_destroy(&cond);return0;}```---六、信息安全1.选择题:题目76:以下哪个是加密算法?A.AESB.RSAC.SHA-256D.以上都是题目77:以下哪个是散列算法?A.AESB.RSAC.SHA-256D.以上都是题目78:以下哪个是对称加密算法?A.AESB.RSAC.SHA-256D.以上都是题目79:以下哪个是非对称加密算法?A.AESB.RSAC.SHA-256D.以上都是题目80:以下哪个是数字签名算法?A.AESB.RSAC.SHA-256D.以上都是答案:76.D77.C78.A79.B80.B解析:76.AES、RSA和SHA-256都是加密算法。77.SHA-256是散列算法。78.AES是对称加密算法。79.RSA是非对称加密算法。80.RSA是数字签名算法。2.填空题:题目81:加密算法分为______和______。题目82:散列算法的特点是______。题目83:对称加密算法的密钥长度通常为______。题目84:非对称加密算法的密钥分为______和______。题目85:数字签名的目的是______。答案:81.对称加密82.单向性83.128位或256位84.公钥85.证明数据的完整性和真实性3.编程题:题目86:编写一个C程序,使用AES加密算法加密一条消息。题目87:编写一个C程序,使用RSA加密算法加密一条消息。题目88:编写一个C程序,使用SHA-256散列算法计算一条消息的散列值。题目89:编写一个C程序,使用RSA非对称加密算法生成密钥对,并使用公钥加密一条消息。题目90:编写一个C程序,使用RSA数字签名算法对一条消息进行签名,并验证签名。答案:```c//题目86include<stdio.h>include<stdlib.h>include<string.h>include<openssl/aes.h>voidaes_encrypt(constcharinput,constcharkey,unsignedcharoutput){AES_KEYaes_key;unsignedcharivec[AES_BLOCK_SIZE];memset(ivec,0,AES_BLOCK_SIZE);if(AES_set_encrypt_key((unsignedchar)key,256,&aes_key)<0){fprintf(stderr,"Errorsettingencryptionkey\n");exit(1);}AES_cbc_encrypt((unsignedchar)input,output,strlen(input),&aes_key,ivec,AES_ENCRYPT);}intmain(){constcharinput="Hello,World!";constcharkey="0123456789abcdef0123456789abcdef";unsignedcharoutput[1024];aes_encrypt(input,key,output);printf("Encryptedmessage:");for(inti=0;i<strlen(input);i++){printf("%02x",output[i]);}printf("\n");return0;}``````c//题目87include<stdio.h>include<stdlib.h>include<string.h>include<openssl/rsa.h>include<openssl/pem.h>voidrsa_encrypt(constcharinput,RSArsa,unsignedcharoutput){if(RSA_public_encrypt(strlen(input),(unsignedchar)input,output,rsa,RSA_PKCS1_OAEP_PADDING)!=RSA_PKCS1_OAEP_PADDING){fprintf(stderr,"ErrorencryptingwithRSA\n");exit(1);}}intmain(){constcharinput="Hello,World!";RSArsa;unsignedcharoutput;BIGNUMbn=BN_new();BN_set_word(bn,65537);if(!RSA_new()){fprintf(stderr,"ErrorcreatingRSAkey\n");exit(1);}if(!RSA_generate_key_ex(rsa,2048,bn,NULL)){fprintf(stderr,"ErrorgeneratingRSAkey\n");exit(1);}output=(unsignedchar)malloc(RSA_size(rsa)2);rsa_encrypt(input,rsa,output);printf("Encryptedmessage:");for(inti=0;i<RSA_size(rsa);i++){printf("%02x",output[i]);}printf("\n");RSA_free(rsa);BN_free(bn);free(output);return0;}``````c//题目88include<stdio.h>include<stdlib.h>include<string.h>include<openssl/sha.h>voidsha256(constcharinput,unsignedcharoutput){SHA256_CTXsha256;unsignedcharhash[SHA256_DIGEST_LENGTH];SHA256_Init(&sha256);SHA256_Update(&sha256,input,strlen(input));SHA256_Final(hash,&sha256);memcpy(output,hash,SHA256_DIGEST_LENGTH);}intmain(){constcharinput="Hello,World!";unsignedcharoutput[SHA256_DIGEST_LENGTH];sha256(input,output);printf("SHA-256hash:");for(inti=0;i<SHA256_DIGEST_LENGTH;i++){printf("%02x",output[i]);}printf("\n");return0;}``````c//题目89include<stdio.h>include<stdlib.h>include<string.h>include<openssl/rsa.h>include<openssl/pem.h>voidrsa_encrypt(constcharinput,RSArsa,unsignedcharoutput){if(RSA_public_encrypt(strlen(input),(unsignedchar)input,output,rsa,RSA_PKCS1_OAEP_PADDING)!=RSA_PKCS1_OAEP_PADDING){fprintf(stderr,"ErrorencryptingwithRSA\n");exit(1);}}intmain(){constcharinput="Hello,World!"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能合约应用研究-第3篇
- 2026气泡果酒女性消费行为洞察报告
- 2026年农业现代化推进报告及可持续发展战略分析
- 2026年汽车变速器行业管理系统创新报告
- 2026年口腔颌面外科常见颌骨骨折处理模拟考试试题及答案解析
- JS散度中的对称化极限四则处理
- 湖南2026年高考化学试题评析及2026复习建议
- 班级管理理念
- (部编教材)六年级语文上册第二单元课内外融合教学计划
- 光纤光栅:从基础原理到多元应用的深度剖析
- 引言第2节物理学与科技强国苏科版八年级上册物理
- (高清版)DB36∕T 1324-2020 公路建设项目档案管理规范
- 复方聚乙二醇(3350)电解质散-临床用药解读
- 可摘局部义齿的组成
- 九年级生命与健康常识教案
- 《进一步规范管理燃煤自备电厂工作方案》发改体改〔2021〕1624号
- YDT 5206-2023宽带光纤接入工程技术规范
- 足球教练劳务合同模板
- 【CMMI】6. EST、PLAN、MC、RSK、MPM、CAR、DAR 访谈问题 -项目经理 -(含答案)
- 我国细菌性食源性疾病暴发事件分析
- 高速铁路乘务人员化妆技巧高职PPT完整全套教学课件
评论
0/150
提交评论