You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改GFG非抢占式SJF调度代码(替换为二维数组)后无输出求助

非抢占式SJF代码无输出问题排查与修复

问题1:变量n未初始化

代码里定义了int n但没赋值,C语言局部未初始化变量会是随机垃圾值,大概率为0或负数,导致所有依赖i < n的循环直接跳过,计算和输出逻辑完全不执行,自然没任何输出。必须给n赋值为进程总数,比如这里是5个进程,要加n = 5;。

问题2:二维数组初始化逻辑错误

你当前的数组把所有进程的运行时间堆在第一行,完全不符合SJF算法的数据结构。算法需要每个进程对应一行数据,存储进程ID、运行时间(BT)、等待时间(WT)、周转时间(TAT)等信息,修正后应该每个进程占一行,前两列分别填进程ID和运行时间,后续列自动初始化为0。

问题3:字符串换行符错误

代码里printf的字符串直接跨行写(比如"P BT WT TAT "),这在C语言中是非法的,必须用\n表示换行,否则编译会报错。


修正后的完整代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
    // 每个进程一行:[进程ID, 运行时间, 等待时间, 周转时间, 预留位]
    int A[5][5] = {
        {1, 8},
        {2, 3},
        {3, 7},
        {4, 5},
        {5, 2}
    }; 
    
    int i, j, n = 5, total = 0, index, temp; // 初始化进程数n=5
    float avg_wt, avg_tat;

    // 按运行时间升序排序(SJF核心逻辑)
    for (i = 0; i < n; i++) {
        index = i;
        for (j = i + 1; j < n; j++)
            if (A[j][1] < A[index][1])
                index = j;
        // 交换运行时间
        temp = A[i][1];
        A[i][1] = A[index][1];
        A[index][1] = temp;
        // 交换对应进程ID
        temp = A[i][0];
        A[i][0] = A[index][0];
        A[index][0] = temp;
    }

    // 计算等待时间
    A[0][2] = 0; // 第一个进程无需等待
    for (i = 1; i < n; i++) {
        A[i][2] = 0;
        for (j = 0; j < i; j++)
            A[i][2] += A[j][1];
        total += A[i][2];
    }
    avg_wt = (float)total / n;
    total = 0;

    // 输出调度结果
    printf("P     BT     WT     TAT\n");
    for (i = 0; i < n; i++) {
        A[i][3] = A[i][1] + A[i][2]; // 计算周转时间
        total += A[i][3];
        printf("P%d     %d     %d      %d\n", A[i][0],
               A[i][1], A[i][2], A[i][3]);
    }

    // 输出平均值
    avg_tat = (float)total / n;
    printf("Average Waiting Time= %f\n", avg_wt);
    printf("Average Turnaround Time= %f\n", avg_tat);
    
    return 0;
}

运行修正后的代码会输出正确的SJF调度结果,包括每个进程的运行时间、等待时间、周转时间,以及对应的平均值。

内容的提问来源于stack exchange,提问作者max1eee -

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:55:25