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

作业社区

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

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

cjozGV 的学生作业:

#include #include #include #include #include #define PATHNAME "." // 用于生成key的路径 #define PRO_ID 100 // 用于生成key的ID #define SZ 1024 // 每次传输缓冲区大小 1kb typedef struct { int data_size; // 当前写入数据的长度 int finished; // 是否传输结束标志 1 表示结束 char buffer[SZ]; // 实际存放文件的缓冲区 } shm_block; int main(){ // 1. 生成共享内存的key 必须和写进程一致 key_t key = ftok(PATHNAME,PRO_ID); // 2. 获取共享内存 int shmid = shmget(key, sizeof(shm_block),IPC_CREAT | 0666); // 3. 将共享内存挂接到当前进程地址空间 shm_block *shm = (shm_block*)shmat(shmid,NULL,0); // 4. 打开输入文件,用于保存接收到的数据 FILE *fp = fopen("output.txt","wb"); if (!fp){ perror("fopen"); exit(1); } // 5. 循环从共享内存读取数据 while (1){ // 如果写进程写入数据 (data_size > 0) if (shm->data_size > 0) { // 把数据写入到文件 fwrite(shm->buffer,1,shm->data_size,fp); // 标记数据已经消费,通知写进程可以继续写 shm->data_size = 0; } // 如果写进程已经结束 (finished=1 且 data_size = 0),退出循环 if (shm->finished && shm->data_size == 0) { break; } // 避免cpu空转,稍微休眠一下 usleep(1000); } // 6. 关闭文件 fclose(fp); // 7. 将共享内存从当前进程分离 shmdt(shm); // 8. 删除共享内存(释放系统资源) shmctl(shmid,IPC_RMID,NULL); return 0; } #include #include #include #include #include #include #define PATHNAME "." // 用于生成key的路径 #define PRO_ID 100 // 用于生成key的ID #define SZ 1024 // 每次传输缓冲区的大小 typedef struct { int data_size; // 当前写入数据的长度 int finished; // 是否传输结束标志 char buffer[SZ]; // 实际存放文件的缓冲区 }shm_block; int main(){ // 1. 生成共享内存的 key key_t key = ftok(PATHNAME,PRO_ID); // 2. 创建/获取共享内存 int shmid = shmget(key, sizeof(shm_block),IPC_CREAT | 0666); //3. 将共享内存挂接到当前进程地址空间 shm_block *shm = (shm_block*)shmat(shmid,NULL,0); //4. 打开传输文件 FILE *fp = fopen("input.txt","rb"); if (!fp){ perror("fopen"); exit(1); } // 5. 循环读取文件并写入共享内存 while (1) { int n = fread(shm->buffer,1,SZ,fp); // 把实际读取字节数写 data_size shm->data_size = n; shm->finished = 0; if (n == 0){ shm->finished = 1; // 设置结束标志 break; } // 等待读进程消费数据 // 读进程会在读完后把 data_size 置为 0 while (shm->data_size != 0) usleep(1000); // 每次休眠 1ms,避免 CPU 空转 } // 6. 关闭文件 fclose(fp); // 7. 将共享内存从当前进程分离 shmdt(shm); return 0; } 【图片】

得分 100
学习任务

慕少6127043 的学生作业:

#include int main() { int a[2][3] = { 10, 20, 30, 40, 50, 60 }; int (*p)[3] = a; // 指向包含3个int元素的数组的指针 printf("二维数组内容:\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("%d ", a[i][j]); } printf("\n"); } printf("\n通过多种方式输出数组数据:\n"); // 方式1: 通过数组名和下标访问 printf("1. 通过a[i][j]访问:\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("a[%d][%d] = %d\n", i, j, a[i][j]); } } // 方式2: 通过指针p访问 printf("\n2. 通过p[i][j]访问:\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("p[%d][%d] = %d\n", i, j, p[i][j]); } } // 方式3: 通过指针算术运算访问 printf("\n3. 通过*(*(p+i)+j)访问:\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("*(*(p+%d)+%d) = %d\n", i, j, *(*(p + i) + j)); } } // 方式4: 通过数组名指针运算访问 printf("\n4. 通过*(*(a+i)+j)访问:\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("*(*(a+%d)+%d) = %d\n", i, j, *(*(a + i) + j)); } } // 方式5: 通过一维视角访问 printf("\n5. 通过一维数组视角 *(p[0]+i) 和 *(p[1]+i)访问:\n"); for (int i = 0; i < 3; i++) { printf("*(p[0]+%d) = %d\n", i, *(p[0] + i)); // 第一行 } for (int i = 0; i < 3; i++) { printf("*(p[1]+%d) = %d\n", i, *(p[1] + i)); // 第二行 } // 方式6: 通过地址计算访问 printf("\n6. 通过地址计算 *((int*)p + i)访问:\n"); for (int i = 0; i < 6; i++) { printf("*((int*)p + %d) = %d\n", i, *((int*)p + i)); } return 0; }

得分 99
讨论题

慕仔0473111 的学生作业:

1、请用1-2分钟时间,简要介绍Agent的核心能力是什么? ⭐Agent=感知+记忆+规划+工具调用 ①感知,是Agent获取外部世界信息的入口,其核心是“理解+解析”。Agent通过大语言模型,获取用户提供的文本/音频/图片等多模态信息,正确理解用户的意图,将用户的输入解析为系统能够处理的信息。为后续的思考和行动提供了必要的依据。 ②记忆,是Agent的经验库与知识储备,其核心是“记录与回想”。记忆分为长期记忆(历史经验、用户偏好等)和短期记忆(对话上下文),Agent通过长期记忆奠定行为基调,并成为“领域专家”,通过短期记忆理解当前对话所在场景,并维持对话的连贯性。记忆为Agent的决策提供了关键的信息依据和参考。 ③规划,是Agent的“大脑”,其核心是“规划+决策”,Agent通过用户的意图+模型的记忆,综合判断出应该如何规划任务、拆分任务、执行什么动作(如调用工具、函数、模型等)去完成本次任务。 ④工具调用,是Agent的“手脚”,其核心是“执行与闭环”,Agent根据决策结果,调用对应的工具完成任务,并给大模型返回任务执行的结果。大模型获取结果后重新组织语言,反馈给用户,完成闭环。 总的来说,传统的AI只具备一个强大的大脑,而Agent是一个四肢健全的高知人员,他能够理解用户意图、拆分与规划任务、自我学习与调节、自主调用工具完成任务。 2、请介绍Function Call的原理是什么? ⭐Function Call是大模型与工具之间的连接桥梁。大模型本身只能生成文本,无法进行工具调用。而Function Call则是大语言模型调用工具/函数/模型的一个关键应用,能够根据大模型生成的调用指令,自主查找并调用合适的工具,使AI“长出手脚”。 3、如果执行一个Function需要多个输入参数,在提示词设计时有何注意事项? ⭐提示大模型,如果用户的输入信息遗留了关键参数,请主动提示用户,提供必要参数。 4、什么是MCP?请说明MCP的原理? ⭐MCP是一套建立在工具、数据源、AI应用服务之间的连接协议。 ⭐在MCP这个概念出来之前,当AI应用需要调用工具的时候,需要给每一个工具定制开发一套对接标准。如此以来,若有M个AI应用想要调用N个工具的时候,就需要定制开发M*N次;且当工具进行升级或调整的时候,AI应用侧也需要一并进行调整。开发效率低且成本高昂。 ⭐MCP协议开放后,每个新的AI应用、新的工具,均只需要与MCP服务器进行一次对接,完成对接后的AI应用可调用MCP服务器里的所有工具,反过来说,完成对接的工具亦可被所有支持MCP协议的AI应用发现和使用。若有M个AI应用想要调用N个工具,这时候只需要对接M+N次。而且,当工具接口进行了迭代,只要保持协议层的稳定,即使工具内部逻辑或参数语义微调,集成该工具的AI应用也无需修改模型配置或重构提示词工程。极大降低了开发工作量以及维护成本。 5、MCP能带来哪些价值? ⭐产品设计环节:MCP商城的工具池,给产品设计带来了更多的想象空间,提高了产品的扩展性。 ⭐开发效率:减少了重复开发的工作量,提升了开发效率,降低了维护成本,提升了模型的协助效率。

得分 100
学习任务

weixin_慕九州3042664 的学生作业:

代码如下: #include #include #include #include #include #include #include #include #define MSG_SZ 64 #define MSG1_TYPE 100 #define MSG2_TYPE 200 #define QUIT_TYPE 300 typedef struct msgbuf{ long type; char buf[MSG_SZ]; }msgbuf; int main(void) { key_t key = ftok(".", 0xDAD); if(key == -1) { perror("ftok"); exit(-1); } int id = msgget(key, IPC_CREAT | 0666); if(id < 0) { perror("msgget"); exit(-1); } int pid1 = fork(); if(pid1 == -1) { perror("process 1 fork():"); exit(EXIT_FAILURE); } else if(pid1 == 0) { msgbuf msg; int running = 1; while(running) { if(msgrcv(id, &msg, MSG_SZ, 0, 0) == -1) { perror("process 1 msgrcv():"); exit(EXIT_FAILURE); } else { printf("process 1 received %s for type %d\n", msg.buf, msg.type); if(msg.type == QUIT_TYPE) { running = 0; } } } } else if(pid1 > 0) { int pid2 = fork(); if(pid2 == -1) { perror("process 2 fork():"); exit(EXIT_FAILURE); } else if(pid2 == 0) { msgbuf msg; int running = 1; while(running) { if(msgrcv(id, &msg, MSG_SZ, MSG2_TYPE, 0) == -1) { perror("process 2 msgrcv():"); exit(EXIT_FAILURE); } else { printf("process 2 received %s for type %d\n", msg.buf, msg.type); if(msg.type == QUIT_TYPE) { running = 0; } } } } else if(pid2 > 0) { char buf[MSG_SZ] = ""; msgbuf msg1, msg2; while(1) { printf("Please input a string:\n"); fflush(stdout); if(fgets(buf, MSG_SZ, stdin) == NULL) { perror("Failed to get input\n"); exit(EXIT_FAILURE); } buf[strlen(buf) - 1] = '\0'; strcpy(msg1.buf, buf); strcpy(msg2.buf, buf); if(strcmp(buf, "quit") == 0) { break; } msg1.type = MSG1_TYPE; msg2.type = MSG2_TYPE; msgsnd(id, &msg1, MSG_SZ, 0); msgsnd(id, &msg2, MSG_SZ, 0); } msg1.type = QUIT_TYPE; msgsnd(id, &msg1, MSG_SZ, 0); msg2.type = QUIT_TYPE; msgsnd(id, &msg2, MSG_SZ, 0); wait(NULL); wait(NULL); } } msgctl(id, IPC_RMID, NULL); return 0; }

微信客服

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

帮助反馈 APP下载

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

公众号

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