为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

学渣小白 的学生作业:

// // Created by hua’wei on 2025/12/15. // #include #include #include #define debug 1 #define DEBUG_PRINT(…) do { if(debug) printf(VA_ARGS); } while(0) //#define DEBUG_PRINT(…) do { if(debug) {printf("\033[43;31m");printf(VA_ARGS);printf("\033[0m");} } while(0) typedef int datatype_t; typedef struct node{ datatype_t data;//数据域保持有效数据 struct node * next;//指针域,指向下一个节点(保持下一个节点的地址) }linknode_t; linknode_t * create_empty_linklist(void) { linknode_t * head = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL== head){ printf(“malloc is fail!\n”); return NULL; } memset(head,0,sizeof(linknode_t)); head->next = NULL; return head; } void insert_descending_order_linklist(linknode_t * head,datatype_t data) { linknode_t * newnode = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL== newnode){ printf(“malloc is fail!\n”); return; } newnode->data = data; linknode_t * p= head; while (p->next && p->next->data > data){ p= p->next; } newnode->next = p->next; p->next = newnode; } void print_data_linklist(linknode_t * head) { linknode_t * p = head->next; // while (p!=NULL) while§{ printf("%d “,p->data); p = p->next; } printf(”\n"); } void reverse_data_linklist(linknode_t * head) {//1.保持第二个有效节点的 地址,再把第一个有效节点的指针域设置为NULL linknode_t * p = head->next->next; head->next->next = NULL; linknode_t * q = NULL;//2.从p结点后,利用头插法的思想在头结点后插入数据。 //q保存p后一个结点的地址 while ( p){ q = p->next; p->next = head->next; head->next = p; p = q; } return; } //删除链表中所有的节点 void clean_up_linklist(linknode_t * head) { linknode_t * p = head; linknode_t * q= NULL; while §{ q = p->next; print_data_linklist§; free§; p = q; } } int main(int argc, const char *argv[]){ int target_list[5]={1,5,3,7,9}; linknode_t * head = create_empty_linklist(); for(int i=0;i

得分 100
讨论题

学渣小白 的学生作业:

// 创建一个单向链表,把1,5,3,7,9,5,8,5,3无序数据要求按从大到小的方式利用有序插入的方式插入链表,并输出。然后删除链表中所有值为3的数据 // // Created by hua’wei on 2025/12/15. // #include #include #include #define debug 1 #define DEBUG_PRINT(…) do { if(debug) printf(VA_ARGS); } while(0) //#define DEBUG_PRINT(…) do { if(debug) {printf("\033[43;31m");printf(VA_ARGS);printf("\033[0m");} } while(0) typedef int datatype_t; typedef struct node{ datatype_t data;//数据域保持有效数据 struct node * next;//指针域,指向下一个节点(保持下一个节点的地址) }linknode_t; linknode_t * create_empty_linklist(void) { linknode_t * head = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL== head){ printf(“malloc is fail!\n”); return NULL; } memset(head,0,sizeof(linknode_t)); head->next = NULL; return head; } void insert_descending_order_linklist(linknode_t * head,datatype_t data) { linknode_t * newnode = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL== newnode){ printf(“malloc is fail!\n”); return; } newnode->data = data; linknode_t * p= head; while (p->next && p->next->data > data){ p= p->next; } newnode->next = p->next; p->next = newnode; } void print_data_linklist(linknode_t * head) { linknode_t * p = head->next; // while (p!=NULL) while§{ printf("%d “,p->data); p = p->next; } printf(”\n"); } int delete_data_linklist(linknode_t * head,datatype_t data) { if( head ->next==NULL){ return -1; } linknode_t * p = head; linknode_t * q; int delete_num=0; while (p->next){ if(p->next->data == data){ q = p->next; p->next = q->next; free(q); delete_num++; } else { p = p->next; } } if(delete_num){ printf(“For target:%d ,successfully delete %d numbers data\n”,data,delete_num); } return delete_num; } int main(int argc, const char *argv[]){ int target_list[9]={1,5,3,7,9,5,8,5,3}; linknode_t * head = create_empty_linklist(); for(int i=0;i

得分 100
学习任务

cjozGV 的学生作业:

#include #include #include #include #include /* See NOTES */ #include #include #include #include #include #include #define LOGIN_SUCCESS 1 #define LOGIN_FAILURE 0 typedef struct{ char *ip; unsigned char flag; struct sockaddr_in *peer_addr; }thread_type; void printf_client_info(struct sockaddr_in *addr,char *buf){ printf("===============================\n"); printf("user IP : %s\n",inet_ntoa(addr->sin_addr)); printf("user port : %d\n",ntohs(addr->sin_port)); printf("user data : %s\n",buf); } //1.初始化socket连接 int init_socket(const char *ip,const char *port){ int sockfd = 0; struct sockaddr_in my_addr; socklen_t len = sizeof(my_addr); //1.通过socket创建文件描述符 sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd < 0){ perror("Fail to socket!"); exit(EXIT_FAILURE); } //2.填充服务器自己的ip地址 memset(&my_addr,0,sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(atoi(port)); my_addr.sin_addr.s_addr = inet_addr(ip); if(bind(sockfd,(struct sockaddr *)&my_addr,len) < 0){ perror("Fail to bind"); return -1; } return sockfd; } void recv_data(int new_sockfd){ int n = 0; char buf[1024] = {0}; struct sockaddr_in client_addr; socklen_t len = sizeof(client_addr); while(1){ memset(buf,0,sizeof(buf)); n = recvfrom(new_sockfd,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&len); if(n < 0){ perror("Fail to recvfrom"); exit(EXIT_FAILURE); } printf_client_info(&client_addr,buf); if(strncmp(buf,"quit",4) == 0) break; } close(new_sockfd); return ; } void *message_thread(void *arg){ thread_type *packet = (thread_type *)arg; char *ip = packet->ip; unsigned char login_flag = packet->flag; struct sockaddr_in *addr = packet->peer_addr; int new_sockfd = init_socket(ip,"0"); // 随机端口 sendto(new_sockfd,&login_flag,sizeof(login_flag),0,(struct sockaddr *)addr,sizeof(struct sockaddr_in)); recv_data(new_sockfd); pthread_exit(NULL); } void user_login(const char *ip,const char *port){ int n = 0; char buf[1024] = {0}; struct sockaddr_in client_addr; socklen_t len = sizeof(client_addr); unsigned char login_flag; int sockfd; thread_type packet; pthread_t tid; sockfd = init_socket(ip,port); while(1){ memset(buf,0,sizeof(buf)); n = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&len); if(n < 0){ perror("Fail to recvfrom"); exit(EXIT_FAILURE); } printf("key = %s\n",buf); login_flag = (strncmp(buf,"root",4) == 0) ? LOGIN_SUCCESS : LOGIN_FAILURE; if(login_flag == LOGIN_SUCCESS){ packet.ip = (char *)ip; packet.flag = login_flag; packet.peer_addr = &client_addr; pthread_create(&tid,NULL,message_thread,(void *)&packet); }else{ sendto(sockfd,&login_flag,sizeof(login_flag),0,(struct sockaddr *)&client_addr,len); } pthread_detach(tid); } } int main(int argc,const char *argv[]){ int sockfd; unsigned char login_flag; if(argc < 3){ fprintf(stderr,"Usage : %s ip port!\n",argv[0]); exit(EXIT_FAILURE); } //1.接收用户秘钥准备登录 user_login(argv[1],argv[2]); return 0; }

得分 100
学习任务

慕工程6300203 的学生作业:

sem.h #ifndef IMOOC_EMBEDDED_LEARNING_SEM_H #define IMOOC_EMBEDDED_LEARNING_SEM_H #include #include #include #include #define PATHNAME "./" #define PRO_ID 66 union semun { int val; unsigned short *array; }; /** * 创建信号量集合并初始化 * @param sem_count 信号量数量 * @param array 信号量值 * @return */ extern int sem_create(int sem_count, unsigned short array[]); /** * 删除信号量集合 * @param sem_id * @return */ extern int sem_destroy(int sem_id); /** * 占用信号量 * @param sem_id * @param sem_num * @return */ extern int sem_p(int sem_id, int sem_num); /** * 释放信号量 * @param sem_id * @param sem_num * @return */ extern int sem_v(int sem_id, int sem_num); #endif //IMOOC_EMBEDDED_LEARNING_SEM_H sem.c #include "sem.h" /** * 创建信号量集合并初始化 * @param sem_count 信号量数量 * @param array 信号量值 * @return */ int sem_create(int sem_count, unsigned short array[]) { key_t key; int sem_id; int ret; union semun sem_val; key = ftok(PATHNAME, PRO_ID); if (key == -1) { perror("[ERROR] ftok(): "); return -1; } sem_id = semget(key, sem_count, IPC_CREAT | 0666); if (sem_id == -1) { perror("[ERROR] semget(): "); return -1; } sem_val.array = array; ret = semctl(sem_id, 0, SETALL, sem_val); if (ret == -1) { perror("[ERROR] semctl(): "); return -1; } return sem_id; } /** * 删除信号量集合 * @param sem_id * @return */ int sem_destroy(int sem_id) { return semctl(sem_id, 0, IPC_RMID, NULL); } /** * 占用信号量 * @param sem_id * @param sem_num * @return */ int sem_p(int sem_id, int sem_num) { struct sembuf sops; sops.sem_num = sem_num; sops.sem_op = -1; sops.sem_flg = SEM_UNDO; semop(sem_id, &sops, 1); } /** * 释放信号量 * @param sem_id * @param sem_num * @return */ int sem_v(int sem_id, int sem_num) { struct sembuf sops; sops.sem_num = sem_num; sops.sem_op = 1; sops.sem_flg = SEM_UNDO; semop(sem_id, &sops, 1); } main.c #include #include #include "sem.h" #include #include #define PATHNAME "./" #define PRO_ID 66 void print_time() { time_t t; struct tm *tm; time(&t); tm = localtime(&t); int year = tm->tm_year + 1900; int month = tm->tm_mon + 1; printf("%d-%d-%d %d:%d:%d", year, month, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); } int main(int argc, char* argv[]) { if (argc != 2) { printf("Usage : %s \n", argv[0]); exit(EXIT_FAILURE); } pid_t cpid; int sem_id; unsigned short sem_val[] = {1, 0}; int loop_count; loop_count = atoi(argv[1]); sem_id = sem_create(2, sem_val); if (sem_id == -1) { exit(EXIT_FAILURE); } cpid = fork(); if (cpid == -1) { perror("[ERROR] fork(): "); exit(EXIT_FAILURE); } else if (cpid == 0) { int i = 0; while (i < loop_count) { sem_p(sem_id, 1); print_time(); fflush(stdout); sem_v(sem_id, 0); i++; } exit(EXIT_SUCCESS); } else if (cpid > 0) { int i = 1; while (i

得分 100
讨论题

枝wenz_fpJNR0 的学生作业:

1 #ifndef _JHEAD_H_ 2 #define _JHEAD_H_ 3 4 #include 5 #include 6 #include 7 8 typedef int datatype_t; 9 typedef struct circle 10 { 11 datatype_t id;//声明编号id 12 struct circle *next;//节点指针域 13 }linkcircle_t; 14 15 extern linkcircle_t *create_linkcircle(datatype_t n); 16 extern void josephus(datatype_t n,datatype_t k,datatype_t m); 17 #endif 1 #include"jhead.h" 2 //创建循环链表 3 linkcircle_t *create_linkcircle(datatype_t n) 4 { 5 if(nid=1;//头节点数据域设为1 19 linkcircle_t *p=head;//创建一个当前节点指针,初始指向头节点 20 21 //创建n个节点 22 for(int i=2;iid=i; 26 p->next=temp; 27 p=temp; 28 } 29 p->next=head;//将最后一个节点指向头节点 30 return head; 31 } 32 //约瑟夫问题求解 33 void josephus(datatype_t n,datatype_t k,datatype_t m) 34 { 35 //创建循环链表 36 linkcircle_t *head=create_linkcircle(n); 37 if(NULL==head) 38 { 39 printf("参数错误!\n"); 40 return ; 41 } 42 //找到第k个节点(从1开始计算) 43 linkcircle_t *find=head; 44 linkcircle_t *final=NULL; 45 //如果k1,找到最后一个节点作为final 46 if(k==1) 47 { 48 //循环遍历链表 49 while(find->next!=head) 50 { 51 find=find->next; 52 } 53 final=find; 54 find=head;//find指向第一个节点 55 }else{ 56 //移动到第K个节点 57 for(int i=1;inext; 61 } 62 } 63 printf("出列顺序:"); 64 //循环开始数 65 while(find->next!=find) 66 { 67 //数到第m个人 68 for(int i=1;inext; 72 } 73 //输出并删除当前节点 74 printf("%d ",find->id); 75 final->next=find->next; 76 linkcircle_t *temp=find; 77 find=find->next; 78 free(temp); 79 } 80 //输出最后一个人并清理 81 printf("%d\n",find->id); 82 free(find); 83 } ~

得分 100
学习任务

慕尼黑0001808 的学生作业:

//使用 epoll 监听有名管道,当有名管道有数据时,读取数据并打印 #include #include #include #include #include #include #include #define FIFO_NAME "./fifo" #define MAXEVENTS 10 int main(int argc, char *argv[]) { int epfd; if(access(FIFO_NAME,F_OK) == -1){ if(mkfifo(FIFO_NAME,0666) == -1){ perror("mkfifo()"); exit(EXIT_FAILURE); } } int fd = open(FIFO_NAME,O_RDWR); if(-1 == fd){ perror("open()"); exit(EXIT_FAILURE); } epfd = epoll_create(1); if(-1 == epfd){ perror("epoll_create()"); exit(EXIT_FAILURE); } struct epoll_event ev; struct epoll_event ret_ev[MAXEVENTS]; ev.data.fd = fd; ev.events = EPOLLIN; if(epoll_ctl(epfd,EPOLL_CTL_ADD,fd,&ev) == -1){ perror("epoll_ctl()"); exit(EXIT_FAILURE); } int ret,should_exit; for(;;){ should_exit = 0; ret = epoll_wait(epfd,ret_ev,MAXEVENTS,2000); if(-1 == ret){ perror("epoll_wait()"); exit(EXIT_FAILURE); }else if(0 == ret){ printf("time out .\n"); }else if(ret > 0){ char buffer[32] = {0}; for(int i = 0;i < ret;i++){ if(ret_ev[i].data.fd == fd){ if(read(fd,buffer,sizeof(buffer))>0){ printf("buffer:%s\n",buffer); if(strncmp(buffer,"quit",4) == 0){ should_exit = 1; break; } } } } } if(should_exit == 1) break; } close(fd); unlink(FIFO_NAME); return 0; } 运行结果: linux@linux-VMware-Virtual-Platform:~/study/homework/101211$ gcc main.c linux@linux-VMware-Virtual-Platform:~/study/homework/101211$ ./a.out time out . time out . time out . buffer:hello time out . time out . time out . time out . buffer:quit linux@linux-VMware-Virtual-Platform:~/study/homework/101211$ 用户输入 linux@linux-VMware-Virtual-Platform:~/study/homework/101211$ echo "hello" > ./fifo linux@linux-VMware-Virtual-Platform:~/study/homework/101211$ echo "quit" > ./fifo linux@linux-VMware-Virtual-Platform:~/study/homework/101211$

得分 100
学习任务

慕工程6300203 的学生作业:

write.c #include #include #include #include #include #include #define PATHNAME "./" #define PRO_ID 66 #define SIZE 128 int main(int argc, char* argv[]) { key_t key; int shmid, ret; void *addr; key = ftok(PATHNAME, PRO_ID); if (key == -1) { perror("[ERROR] ftok(): "); exit(EXIT_FAILURE); } shmid = shmget(key, SIZE, IPC_CREAT|0666); if (shmid == -1) { perror("[ERROR] shmget(): "); exit(EXIT_FAILURE); } addr = shmat(shmid, NULL, 0); if (addr == (void*)-1) { perror("[ERROR] shmat(): "); exit(EXIT_FAILURE); } memset(addr, 'A', 20); shmdt(addr); // printf("shmid key : %d\n", shmid); // ret = shmctl(shmid, IPC_RMID, NULL); // if (ret == -1) // { // perror("[ERROR] shmctl(): "); // exit(EXIT_FAILURE); // } return 0; } read.c #include #include #include #include #include #include #define PATHNAME "./" #define PRO_ID 66 #define SIZE 128 int main(int argc, char* argv[]) { key_t key; int shmid, ret; void *addr; char buffer[20] = {0}; key = ftok(PATHNAME, PRO_ID); if (key == -1) { perror("[ERROR] ftok(): "); exit(EXIT_FAILURE); } shmid = shmget(key, SIZE, IPC_CREAT|0666); if (shmid == -1) { perror("[ERROR] shmget(): "); exit(EXIT_FAILURE); } addr = shmat(shmid, NULL, 0); if (addr == (void*)-1) { perror("[ERROR] shmat(): "); exit(EXIT_FAILURE); } memcpy(buffer, addr, 20); for (int i = 0; i < 20; i++) { printf("%c", buffer[i]); } printf("\n"); shmdt(addr); // printf("shmid key : %d\n", shmid); // ret = shmctl(shmid, IPC_RMID, NULL); // if (ret == -1) // { // perror("[ERROR] shmctl(): "); // exit(EXIT_FAILURE); // } return 0; }

首页上一页1234567下一页尾页
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号