1. 头文件
#include <stdio.h>
#include <stdlib.h>
2. 进程结构体
struct Process {
int process_id; // 进程的唯一标识符。
int arrival_time; // 进程准备就绪的时间。
int burst_time; // 执行该进程所需的时间。
};
3. FCFS调度算法
void fcfs() {
int completion_time = 0; // 完成时间
double total_completion_time = 0; // total完成时间
double average_completion_time = 0; // average完成时间
printf("\nFCFS\n");
printf("Process\tArrival Time\tBurst Time\tCompletion Time\tTurnaround Time\n");
// 遍历所有进程
for (int i = 0; i < num_processes; i++) {
completion_time += processes[i].burst_time; // 计算完成时间
total_completion_time += completion_time - processes[i].arrival_time; // 计算total完成时间
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n",
processes[i].process_id,
processes[i].arrival_time,
processes[i].burst_time,
completion_time,
completion_time - processes[i].arrival_time);
}
}
4. SJN调度算法
void sjn() {
int completion_time = 0; // 完成时间
double total_completion_time = 0; // total完成时间
double average_completion_time = 0; // average完成时间
printf("\nSJN\n");
printf("Process\tArrival Time\tBurst Time\tCompletion Time\tTurnaround Time\n");
// 对进程按照burst_time进行排序
for (int i = 1; i < num_processes - 1; i++) {
for (int j = i + 1; j < num_processes; j++) {
if (processes[i].burst_time > processes[j].burst_time) {
// 交换两个进程的信息
struct Process temp = processes[i];
processes[i] = processes[j];
processes[j] = temp;
}
}
}
// 遍历所有进程
for (int i = 0; i < num_processes; i++) {
completion_time += processes[i].burst_time; // 计算完成时间
total_completion_time += completion_time - processes[i].arrival_time; // 计算total完成时间
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n",
processes[i].process_id,
processes[i].arrival_time,
processes[i].burst_time,
completion_time,
completion_time - processes[i].arrival_time); // 输出进程信息
}
}
5. 主函数
int main() {
// 输入进程数量
printf("Enter the number of processes (maximum %d): ", 100);
scanf("%d", &num_processes);
// 输入每个进程的信息
for (int i = 0; i < num_processes; i++) {
printf("\nEnter the arrival tme and burst time of process %d: ", i + 1);
scanf("%d %d", &processes[i].arrival_time, &processes[i].burst_time);
processes[i].process_id = i + 1; // 设置进程的唯一标识符
}
// 执行FCFS调度算法
fcfs();
// 执行SJN调度算法
sjn();
return 0;
}
6. 完整代码
#include <stdio.h>
#include <stdlib.h>
// 进程结构体
struct Process {
int process_id; // 进程的唯一标识符。
int arrival_time; // 进程准备就绪的时间。
int burst_time; // 执行该进程所需的时间。
};
// 全局变量
struct Process processes[10]; // 存储所有进程的信息
int num_processes; // 进程数量
// FCFS调度算法
void fcfs() {
int completion_time = 0; // 完成时间
double total_completion_time = 0; // total完成时间
double average_completion_time = 0; // average完成时间
printf("\nFCFS\n");
printf("Process\tArrival Time\tBurst Time\tCompletion Time\tTurnaround Time\n");
// 遍历所有进程
for (int i = 0; i < num_processes; i++) {
completion_time += processes[i].burst_time; // 计算完成时间
total_completion_time += completion_time - processes[i].arrival_time; // 计算total完成时间
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n",
processes[i].process_id,
processes[i].arrival_time,
processes[i].burst_time,
completion_time,
completion_time - processes[i].arrival_time);
}
}
// SJN调度算法
void sjn() {
int completion_time = 0; // 完成时间
double total_completion_time = 0; // total完成时间
double average_completion_time = 0; // average完成时间
printf("\nSJN\n");
printf("Process\tArrival Time\tBurst Time\tCompletion Time\tTurnaround Time\n");
// 对进程按照burst_time进行排序
for (int i = 1; i < num_processes - 1; i++) {
for (int j = i + 1; j < num_processes; j++) {
if (processes[i].burst_time > processes[j].burst_time) {
// 交换两个进程的信息
struct Process temp = processes[i];
processes[i] = processes[j];
processes[j] = temp;
}
}
}
// 遍历所有进程
for (int i = 0; i < num_processes; i++) {
completion_time += processes[i].burst_time; // 计算完成时间
total_completion_time += completion_time - processes[i].arrival_time; // 计算total完成时间
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n",
processes[i].process_id,
processes[i].arrival_time,
processes[i].burst_time,
completion_time,
completion_time - processes[i].arrival_time); // 输出进程信息
}
}
int main() {
// 输入进程数量
printf("Enter the number of processes (maximum %d): ", 100);
scanf("%d", &num_processes);
// 输入每个进程的信息
for (int i = 0; i < num_processes; i++) {
printf("\nEnter the arrival tme and burst time of process %d: ", i + 1);
scanf("%d %d", &processes[i].arrival_time, &processes[i].burst_time);
processes[i].process_id = i + 1; // 设置进程的唯一标识符
}
// 执行FCFS调度算法
fcfs();
// 执行SJN调度算法
sjn();
return 0;
}