C语言实现SJF算法:控制台输入进程信息并输出周转时间
短作业优先(Shortest Job First, SJF)调度算法是一种基于进程执行时间的调度算法。下面是一个使用C语言实现SJF算法的示例程序。该程序会从控制台读取进程ID、到达时间和CPU执行时间,并按输入顺序输出每个进程的周转时间。 ```c #include <stdio.h> #include <stdlib.h> // 定义进程结构体 typedef struct { int id; int arrival_time; int burst_time; int completion_time; int turnaround_time; } Process; // 比较函数,用于qsort排序 int compare(const void *a, const void *b) { Process *p1 = (Process *)a; Process *p2 = (Process *)b; return p1->burst_time - p2->burst_time; } int main() { int n; printf("请输入进程的数量: "); scanf("%d", &n); // 动态分配内存以存储进程信息 Process *processes = (Process *)malloc(n * sizeof(Process)); // 读取进程信息 for (int i = 0; i < n; i++) { printf("请输入进程 %d 的ID, 到达时间和CPU执行时间: ", i + 1); scanf("%d %d %d", &processes[i].id, &processes[i].arrival_time, &processes[i].burst_time); } // 按照到达时间排序 qsort(processes, n, sizeof(Process), (int (*)(const void *, const void *))compare); // 计算完成时间和周转时间 int current_time = 0; for (int i = 0; i < n; i++) { if (processes[i].arrival_time > current_time) { current_time = processes[i].arrival_time; } current_time += processes[i].burst_time; processes[i].completion_time = current_time; processes[i].turnaround_time = processes[i].completion_time - processes[i].arrival_time; } // 输出结果 printf("\n进程ID\t到达时间\tCPU执行时间\t完成时间\t周转时间\n"); for (int i = 0; i < n; i++) { printf("%d\t%d\t\t%d\t\t%d\t\t%d\n", processes[i].id, processes[i].arrival_time, processes[i].burst_time, processes[i].completion_time, processes[i].turnaround_time); } // 释放内存 free(processes); return 0; } ``` 说明 1. 进程结构体:定义了一个包含进程ID、到达时间、CPU执行时间、完成时间和周转时间的结构体。 2. 比较函数:用于`qsort`函数,按进程的CPU执行时间进行排序。 3. 主函数: - 读取进程数量和每个进程的信息。 - 使用`qsort`函数按CPU执行时间对进程进行排序。 - 计算每个进程的完成时间和周转时间。 - 输出每个进程的详细信息。 运行示例 假设输入如下: ``` 请输入进程的数量: 3 请输入进程 1 的ID, 到达时间和CPU执行时间: 1 0 24 请输入进程 2 的ID, 到达时间和CPU执行时间: 2 0 3 请输入进程 3 的ID, 到达时间和CPU执行时间: 3 0 3 ``` 输出结果可能如下: ``` 进程ID 到达时间 CPU执行时间 完成时间 周转时间 2 0 3 3 3 3 0 3 6 6 1 0 24 30 30 ``` 这个程序实现了SJF调度算法,并按输入顺序输出每个进程的周转时间。 ######[AI写代码神器 | 842点数解答 | 2024-11-05 09:13:52]
- Java:抽象类 Vehicle 及子类 Car、MotorBike 实战演示(讯飞星火 | 440点数解答 | 2024-06-06 23:18:54)334
- 用 Pandas 深度剖析数据:从读取到统计分析全流程实战(GPT | 642点数解答 | 2024-06-30 15:39:49)382
- 用 Pandas 深入分析招聘数据:从数据读取到可视化全流程解析(GPT | 1539点数解答 | 2024-06-30 15:56:50)394
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)382
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)261
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)259
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)352
- Java 递归爬取国家统计局地区 <tr><td> 信息:附完整代码与实现解析( | 1006点数解答 | 2024-05-20 14:15:53)282
- Python实现数组创建、操作及元素查找的多功能程序(阿里通义 | 903点数解答 | 2024-10-21 23:43:14)252
- 多功能数组操作:创建、打印、插入、删除、判断及退出功能全解析(GPT | 64点数解答 | 2024-10-21 23:45:42)273
- Java实体类与Mysql表设计:优化表名、字段长度及索引提升性能 (字节豆包 | 212点数解答 | 2024-12-24 10:11:54)297
- C 语言实现:输入出生日期与身高并按格式输出及注意要点(字节豆包 | 235点数解答 | 2025-01-07 08:55:58)236