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

作业社区

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

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

童垚 的学生作业:

#include #include #include #include #include #include #include void self_do_handler(int sig){ printf(“receive = %s =\n”,strsignal(sig)); return ; } void self_do_handler1(int sig){ printf(“receive default = %s =\n”,strsignal(sig)); return ; } int main(void){ pid_t pid; pid = fork(); __sighandler_t ret; __sighandler_t defret; // defret = signal(SIGUSR1,self_do_handler1); defret = signal(SIGUSR1,SIG_DFL); ret = signal(SIGUSR2,self_do_handler);if(ret == SIG_ERR){ perror(“signal is error”); exit(EXIT_FAILURE); } if(pid == -1){ perror(“create fork is fail.”); exit(EXIT_FAILURE); }else if(pid == 0){ fprintf(stdout,“the A child is %d start\n”,getpid()); pause(); fprintf(stdout,“the A child is %d end\n”,getpid()); exit(EXIT_SUCCESS); }else if(pid >0 ){ pid_t ppid; ppid = fork(); if(ppid == -1){ perror(“the B fork is fail.”); exit(EXIT_FAILURE); }else if(ppid == 0){ fprintf(stdout,“the B child is %d start\n”,getpid()); pause(); fprintf(stdout,“the B child is %d end\n”,getpid()); exit(EXIT_SUCCESS); }else if(ppid>0){ fprintf(stdout,“the parent is %d start\n”,getppid()); int ret; sleep(3); ret = kill(ppid,SIGUSR2); wait(NULL); } int ret ; sleep(1); ret = kill(pid,SIGUSR1); if(ret == 0){ fprintf(stdout,“the parent is %d,the one child is %d\n”,getppid(),pid); } wait(NULL); } return 0; } the parent is 3712 start the A child is 11000 start the B child is 11001 start receive = User defined signal 2 = the B child is 11001 end the parent is 3712,the one child is 11000

得分 100
学习任务

慕粉3149657 的学生作业:

head.h #ifndef __HEAD_H__ #define __HEAD_H__ #include #include #include typedef int datatype_linknode; //结点 typedef struct node_linkqueue { datatype_linknode data; struct node_linkqueue *next; }linknode_t; //=========================链式队列================================== //队列头 typedef struct { linknode_t *front; linknode_t *rear; }linkqueue_t; extern linkqueue_t *create_empty_linkqueue(); //创建空链式队列 extern int is_empty_linkqueue(linkqueue_t *q); //判断队列是否为空 extern void enter_linkqueue(linkqueue_t *q,datatype_linknode data); //向队列添加数据 extern datatype_linknode out_linkqueue(linkqueue_t *q); //从队列取出数据 //==============================链式栈============================ //栈头 typedef struct { linknode_t *top; int n; }linkstack_t; extern linkstack_t *create_empty_linkstack(); //创建空链式栈 extern int is_empty_linkstack(linkstack_t *s); //判断链式栈是否为空 extern void push_linkstack(linkstack_t *s,datatype_linknode data); //压入数据 extern datatype_linknode pop_linkstack(linkstack_t *s); //弹出数据 extern datatype_linknode get_top_data(linkstack_t *s); //取得栈头数据 #endif head.c #include "head.h" //================================链式队列=================== //创建空链式队列 linkqueue_t *create_empty_linkqueue() { //创建队列头 linkqueue_t *q = NULL; q = (linkqueue_t *)malloc(sizeof(linkqueue_t)); if(NULL == q) { printf("malloc is fail!"); return NULL; } memset(q,0,sizeof(linkqueue_t)); //创建头结点 linknode_t *head = NULL; head = (linknode_t *)malloc(sizeof(linknode_t)); memset(head,0,sizeof(linknode_t)); head->next = NULL; //使头指针和尾指针指向头结点 q->front = head; q->rear = head; return q; } //判断队列是否为空 int is_empty_linkqueue(linkqueue_t *q) { return q->front == q->rear ? 1 : 0; } //向队列添加数据 void enter_linkqueue(linkqueue_t *q,datatype_linknode data) { //创建新结点 linknode_t *p_new_node = NULL; p_new_node = (linknode_t *)malloc(sizeof(linknode_t)); //将数据赋给新结点 p_new_node->data = data; //将新结点添加为队列尾结点 p_new_node->next = q->rear->next; q->rear->next = p_new_node; //更新尾指针 q->rear = p_new_node; return; } //从队列取出数据 datatype_linknode out_linkqueue(linkqueue_t *q) { //新建指向头结点下一结点的指针 linknode_t *p_node = q->front->next; //保存队列头结点下一结点的数据 datatype_linknode data = p_node->data; //更新头指针 q->front->next = p_node->next; if(NULL == q->front->next) q->rear = q->front; //释放原头结点下一结点的内存 free(p_node),p_node = NULL; //返回数据 return data; } //===========================链式栈========================== //创建空链式栈 linkstack_t *create_empty_linkstack() { //创建栈头 linkstack_t *s = NULL; s = (linkstack_t *)malloc(sizeof(linkstack_t)); if(NULL == s) { printf("malloc is fail!"); return NULL; } memset(s,0,sizeof(linkstack_t)); s->top = NULL; s->n = 0; return s; } //判断链式栈是否为空 int is_empty_linkstack(linkstack_t *s) { return s->top == NULL ? 1 : 0; } //压入数据 void push_linkstack(linkstack_t *s,datatype_linknode data) { //创建新结点 linknode_t *p_new_node = NULL; p_new_node = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL == p_new_node){ printf("malloc is fail!"); return; } //更新头结点 p_new_node->data = data; p_new_node->next = s->top; s->top = p_new_node; s->n++; } //弹出数据 datatype_linknode pop_linkstack(linkstack_t *s) { //创建指向栈头的指针 linknode_t *temp; temp = s->top; //保存栈头数据 datatype_linknode data; data = temp->data; //释放栈头 s->top = temp->next; free(temp),temp = NULL; s->n--; return data; } //取得栈头数据 datatype_linknode get_top_data(linkstack_t *s) { return s->top->data; } main.c #include "head.h" #define MAX_MIN_STACK 5 #define MAX_MIN5_STACK 12 #define MAX_HOUR_STACK 12 int max_ball_queue = 0; int ball[100] = {0}; int half_day = 0; linkqueue_t *ball_queue = NULL; linkstack_t *min_stack = NULL; linkstack_t *min5_stack = NULL; linkstack_t *hour_stack = NULL; void init_ball_clock() { half_day = 0; ball_queue = create_empty_linkqueue(); min_stack = create_empty_linkstack(); min5_stack = create_empty_linkstack(); hour_stack = create_empty_linkstack(); } datatype_linknode pop_to_ball_queue(linkstack_t *s) { datatype_linknode data = pop_linkstack(s); while(!is_empty_linkstack(s)) enter_linkqueue(ball_queue,pop_linkstack(s)); return data; } void do_ball_clock() { if(is_empty_linkqueue(ball_queue)) enter_linkqueue(ball_queue,++max_ball_queue); push_linkstack(min_stack,out_linkqueue(ball_queue)); if(MAX_MIN_STACK == min_stack->n) push_linkstack(min5_stack,pop_to_ball_queue(min_stack)); if(MAX_MIN5_STACK == min5_stack->n) push_linkstack(hour_stack,pop_to_ball_queue(min5_stack)); if(MAX_HOUR_STACK == hour_stack->n) { enter_linkqueue(ball_queue,pop_to_ball_queue(hour_stack)); half_day++; } } void print_ball_clock() { int day = half_day / 2; int hour = hour_stack->n + 12*(half_day % 2); int min = min_stack->n + min5_stack->n * 5; printf("day %d %02d:%02d\n",day,hour,min); } void store_ball_seq() { int n = 0; linknode_t *p = NULL; p = ball_queue->front->next; while(NULL != p) { ball[n++] = p->data; p = p->next; } } int check_ball_seq() { int n = 0; linknode_t *p = NULL; p = ball_queue->front->next; while(NULL != p) { if(ball[n++] != p->data) break; p = p->next; } if(n == max_ball_queue) return 1; return 0; } int main() { //question 1 //每分钟计数若球不够自动添加球,循环60×12次,即12小时,最终得到所需球数量 init_ball_clock(); for(int i = 0;i < 60*12;i++){ do_ball_clock(); } printf("最少需要球数 = %d\n",max_ball_queue); //question 2 //根据question1得到的结果,按编号0-26依次加入球队列,并记录其顺序 //每分钟时间计数检查是否与最初顺序相同,否则继续时间计数,最终得出所需时间 init_ball_clock(); for(int i = 0;i < max_ball_queue;i++) enter_linkqueue(ball_queue,i); store_ball_seq(); do{ do_ball_clock(); }while(!check_ball_seq()); printf("最少需要时间: "); print_ball_clock(); return 0; } 【图片】

得分 100
讨论题

慕粉3149657 的学生作业:

looplist.h: #ifndef __LOOPLIST__H #define __LOOPLIST__H #include #include #include typedef int datatype_t; typedef struct node{ datatype_t data; struct node *next; }loopnode_t; extern void insert_tail_looplist(loopnode_t *head, datatype_t data); extern loopnode_t *create_node(); extern void Josephu(int n, int k, int m); #endif looplist.c: #include "looplist.h" loopnode_t *create_node() { loopnode_t *temp = NULL; temp = (loopnode_t *)malloc(sizeof(loopnode_t)); if(NULL == temp){ printf("malloc is failed\n"); return NULL; } memset(temp,0,sizeof(loopnode_t)); return temp; } void insert_tail_looplist(loopnode_t *head, datatype_t data) { loopnode_t *temp = create_node(); loopnode_t *p = head; //注释,从第一个元素head开始判断,如果.next的值不为NULL 就把下一个元素赋值给p p=p->next 继续循环,直到p为最后一个元素 while(p->next!=head) { p = p->next; } //找到最后一个元素后要注意,第一步一定是先往要插入的元素存原来位置的元素地址(虽然是NULL), temp->next = p->next //第二步才是把要插入的元素地址存储到最后一个元素next上 p->next = temp; temp->data = data; temp->next = p->next; p->next = temp; } void Josephu(int n, int k, int m) { loopnode_t *head = create_node(); loopnode_t *cur_node = NULL; loopnode_t *target_node= NULL; loopnode_t *pre_node = NULL; int total = 0; head->data = 1; head->next = head; cur_node = head; total ++; for(int i=2; inext = cur_node->next; printf("%d ", target_node->data); cur_node = cur_node->next; free(target_node); target_node = NULL; total--; } printf("\n"); } main.c: #include "looplist.h" int main() { int n,k,m; printf("请输入[成员数,开始序号,报名数]:\n"); scanf("%d%d%d",&n,&k,&m); Josephu(n, k, m); return 0; }

微信客服

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

帮助反馈 APP下载

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

公众号

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