编辑代码

#include <stdio.h>

typedef struct {
    int arrival_time;  // 到达时间
    int service_time;      // service时间
} Process;

void process_scheduling(int N, Process processes[]) {
    int total_wait_time = 0;              // 累计等待时间
    int total_turnaround_time = 0;        // 累计周转时间
    double total_weighted_turnaround_time = 0;  // 累计带权周转时间
    int current_time = 0;  // 当前时间,初始为0

    for (int i = 0; i < N; i++) {
        // 计算当前进程的等待时间
        int wait_time = current_time - processes[i].arrival_time;
        if (wait_time < 0) wait_time = 0;  // 等待时间不能为负
        
        total_wait_time += wait_time;  // 累加等待时间
        
        // 计算周转时间
        int turnaround_time = wait_time + processes[i].service_time;
        total_turnaround_time += turnaround_time;  // 累加周转时间
        
        // 计算带权周转时间
        double weighted_turnaround_time = (double)turnaround_time / processes[i].service_time;
        total_weighted_turnaround_time += weighted_turnaround_time;  // 累加带权周转时间
        
        // 更新当前时间
        current_time = current_time > processes[i].arrival_time ? 
                       current_time + processes[i].service_time : 
                       processes[i].arrival_time + processes[i].service_time;
    }

    // 计算并输出平均等待时间,平均周转时间,平均带权周转时间
    double avg_wait_time = (double)total_wait_time / N;
    double avg_turnaround_time = (double)total_turnaround_time / N;
    double avg_weighted_turnaround_time = total_weighted_turnaround_time / N;

    printf("%.2f\n", avg_wait_time);
    printf("%.2f\n", avg_turnaround_time);
    printf("%.2f\n", avg_weighted_turnaround_time);
}

int main() {
    int N;
    printf("请输入进程个数");
    scanf("%d", &N);  // 输入进程数量
    
    Process processes[N];
    
    // 输入每个进程的到达时间和服务时间
    for (int i = 0; i < N; i++) {
        printf("输入每个进程的到达时间和服务时间\n");
        scanf("%d %d", &processes[i].arrival_time, &processes[i].service_time);
    }

    // 调用调度模拟函数
    process_scheduling(N, processes);

    return 0;
}