非抢占式短进程优先计算平均周转时间

#include <stdio.h> 
#include <stdlib.h>

typedef struct {
    int id;       //id执行顺序 
    float ready;  //ready到达时间 
    float run;    //run运行时间 
    float finish; //finish完成时间 
    float around; //around周转时间 
} Process;

int compare(const void *a, const void *b) {
    const Process *p1 = (const Process *)a;
    const Process *p2 = (const Process *)b;
    return p1->run - p2->run;
}

int main() {
    int i, j, n;
    float sum = 0;//总周转时间 

    printf("输入进程的个数: ");
    scanf("%d", &n);
    //动态分配内存以存储进程
    Process *processes = (Process *)malloc(n * sizeof(Process));

    for (i = 0; i < n; i++) {
        printf("请输入第%d个进程的到达时间和执行时间:\n", i + 1);
        printf("到达时间: ");
        scanf("%f", &processes[i].ready);
        printf("执行时间: ");
        scanf("%f", &processes[i].run);
        processes[i].id = i + 1;
    }

    // 执行第一个到达的进程
    processes[0].finish = processes[0].ready + processes[0].run;
    processes[0].around = processes[0].finish - processes[0].ready;
    sum += processes[0].around;

    // 用qsort函数按照执行时间进行排序
    qsort(processes + 1, n - 1, sizeof(Process), compare);

    // 继续执行剩余进程
    for (i = 1; i < n; i++) {
        if (processes[i].ready > processes[i - 1].finish) {
            processes[i].finish = processes[i].ready + processes[i].run;
        } else {
            processes[i].finish = processes[i - 1].finish +
			 processes[i].run;
        }
        processes[i].around = processes[i].finish - processes[i].ready;
        sum += processes[i].around;
    }

    printf("进程\t到达时间\t执行时间\t完成时间\t周转时间\n");
    for (i = 0; i < n; i++) {
        printf("%d\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", processes[i].id, 
		processes[i].ready, processes[i].run, processes[i].finish, 
		processes[i].around);
    }

    printf("平均周转时间为: %.2f\n", sum / n);

    free(processes);

    return 0;
}
到达时间执行时间开始时间结束时间周转时间
03033
1571211
24375


周转时间 = 结束时间 - 到达时间

等待时间 = 周转时间 - 执行时间

执行时间 = 周转时间 - 等待时间

响应时间 = 开始时间 - 到达时间

响应比 = 1 +等待时间/执行时间

带权周转时间 = 周转时间 / 执行时间


到达时间执行时间开始时间结束时间周转时间
09099
0.44121615.6
119109
5.54162014.5
7210125

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值