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

作业社区

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

0 提交作业
0 布置作业
0 满分作业
得分 100
讨论题

浪潮君 的学生作业:

#include #include // ============================== // 结构体定义:单向链表节点结构 // ============================== typedef struct Node { int id; // 当前人的编号 struct Node* next; // 指向下一个人的指针 } Node; // ===================================================== // 函数:创建一个长度为 n 的单向循环链表(不带头结点) // 返回值:指向第一个节点(编号为 1)的指针 // ===================================================== Node* create_circle(int n) { Node *head = NULL, *prev = NULL; for (int i = 1; i id = i; // 设置编号 node->next = NULL; // 初始化 next if (!head) { head = node; // 第一个节点作为头指针 } else { prev->next = node; // 前一个节点指向当前节点 } prev = node; // 更新 prev 指针 } prev->next = head; // 构成循环链表(最后一个节点指向头节点) return head; } // ===================================================== // 函数:实现约瑟夫问题出列逻辑 // 参数: // n - 总人数 // k - 从第几个人开始数 // m - 每次报数到第几个人出列 // ===================================================== void josephus(int n, int k, int m) { Node* head = create_circle(n); // 创建循环链表 Node* prev = head; // 找到起始编号为 k 的节点:prev->next->id == k while (prev->next->id != k) { prev = prev->next; } Node* curr = prev->next; // curr 指向编号为 k 的节点 printf("出列顺序: "); while (n--) { // 从 curr 开始数 m-1 个,找到第 m 个出列者 for (int i = 1; i < m; i++) { prev = curr; curr = curr->next; } // 打印出列编号 printf("%d ", curr->id); // 删除 curr 节点(即出列的人) prev->next = curr->next; // 断开当前节点 free(curr); // 释放内存 curr = prev->next; // 继续从下一个人开始数 } printf("\n"); } // ================ // 程序主函数入口 // ================ int main() { int n = 8; // 总人数 int k = 3; // 从编号 3 开始数 int m = 4; // 数到第 4 个出列 josephus(n, k, m); // 执行约瑟夫出列过程 return 0; }

得分 100
学习任务

浪潮君 的学生作业:

#include // 标准输入输出 #include // exit、malloc 等函数 #include // 字符串处理 #include // close、read、write 等系统调用 #include // socket 地址结构与转换函数 #include // 文件控制(未用到可选) #include // socket 编程核心头文件 #define PORT 8080 // 服务器监听端口号 #define BUFFER_SIZE 4096 // 缓冲区大小 int main() { int server_fd, client_fd; struct sockaddr_in addr; // 服务器地址结构 socklen_t addrlen = sizeof(addr); char buffer[BUFFER_SIZE]; // 用于接收请求、读取文件的缓冲区 // 1. 创建 TCP socket,AF_INET: IPv4,SOCK_STREAM: 面向连接 server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd < 0) { perror("socket 创建失败"); exit(1); } // 2. 设置地址端口复用(防止端口 TIME_WAIT 占用) int opt = 1; setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); // 3. 设置服务器地址信息 memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; // IPv4 addr.sin_addr.s_addr = INADDR_ANY; // 本地任意地址 0.0.0.0 addr.sin_port = htons(PORT); // 端口转为网络字节序 // 4. 绑定 socket 到地址和端口 if (bind(server_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) { perror("bind 失败"); close(server_fd); exit(1); } // 5. 开始监听端口,最大连接队列长度为 10 if (listen(server_fd, 10) < 0) { perror("listen 失败"); close(server_fd); exit(1); } printf("服务器启动成功,监听端口 %d...\n", PORT); // 6. 主循环:不断接收客户端连接 while (1) { client_fd = accept(server_fd, (struct sockaddr*)&addr, &addrlen); if (client_fd < 0) { perror("accept 失败"); continue; } // 7. 接收客户端发送的 HTTP 请求 ssize_t len = recv(client_fd, buffer, BUFFER_SIZE - 1, 0); if (len 0) { send(client_fd, buffer, len, 0); // 按块发送文件内容 } // 11. 清理资源 fclose(fp); close(client_fd); } // 12. 关闭服务器 socket close(server_fd); return 0; }

得分 100
学习任务

浪潮君 的学生作业:

#include #include #include #include #include #include #include void print_pixel_format(__u32 pixelformat) { char fmt[5] = {0}; fmt[0] = pixelformat & 0xff; fmt[1] = (pixelformat >> 8) & 0xff; fmt[2] = (pixelformat >> 16) & 0xff; fmt[3] = (pixelformat >> 24) & 0xff; printf("像素格式: %s\n", fmt); } int main() { const char *device = "/dev/video0"; int fd = open(device, O_RDWR); if (fd < 0) { perror("打开摄像头失败"); return 1; } // 查询摄像头能力集 struct v4l2_capability cap; if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) { perror("查询摄像头能力失败"); close(fd); return 1; } printf("摄像头名称: %s\n", cap.card); printf("驱动名称: %s\n", cap.driver); printf("总线信息: %s\n", cap.bus_info); if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) { printf("该设备不支持视频采集。\n"); close(fd); return 1; } // 查询支持的像素格式 printf("\n支持的像素格式与分辨率:\n"); struct v4l2_fmtdesc fmt; memset(&fmt, 0, sizeof(fmt)); fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; while (ioctl(fd, VIDIOC_ENUM_FMT, &fmt) == 0) { print_pixel_format(fmt.pixelformat); printf("说明: %s\n", fmt.description); // 查询该像素格式下支持的分辨率 struct v4l2_frmsizeenum frmsize; memset(&frmsize, 0, sizeof(frmsize)); frmsize.pixel_format = fmt.pixelformat; while (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) == 0) { if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) { printf(" %ux%u\n", frmsize.discrete.width, frmsize.discrete.height); } frmsize.index++; } fmt.index++; printf("-------------------------\n"); } close(fd); return 0; }

微信客服

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

帮助反馈 APP下载

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

公众号

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