4.25作业

宏定义是C语言预处理器的一个特性,它涉及简单的文本替换。文章提到了在使用宏定义时需要注意的事项,例如使用双引号包围字符串,或者利用#将参数转化为字符串。文中还给出了几个练习题,旨在帮助读者加深对宏定义的理解和应用。

思维导图

 

 宏定义的注意事项

宏定义是宏体简单替换宏名的过程,使用形式:#define 宏名 宏体  或者 

 #define  带参宏名(参数) 宏体

在替换字符串时要用“ ”扩住字符串,或者用#把带参宏的参数转成字符串。

练习:

 1.

 

 2.

3.

 

 

 

 

 

 

### 先来先服务(FCFS)调度算法的实现与计算 #### 1. 算法描述 先来先服务(First-Come, First-Served, FCFS)是一种简单的调度算法,按照作业到达的顺序依次执行。每个作业从开始到完成的时间称为**完成时间**,而**周转时间**是作业完成时间减去其到达时间。带权周转时间则是周转时间与作业执行时间的比值。 #### 2. 输入输出格式示例 - **输入格式**: - 每个作业的编号、执行时间和优先级。 - **输出格式**: - 每个作业的完成时间、周转时间和带权周转时间。 - 平均周转时间和平均带权周转时间。 #### 3. 计算步骤 以下是基于给定数据的计算过程和代码实现[^1]: | 作业编号 | 执行时间 (T) | 优先级 | |----------|--------------|--------| | 1 | 10 | 3 | | 2 | 1 | 1 | | 3 | 2 | 2 | | 4 | 4 | 1 | | 5 | 5 | 2 | 假设作业按编号顺序到达,则它们的执行顺序为:1 → 2 → 3 → 4 → 5。 #### 4. Python 实现 以下是一个完整的 Python 实现,用于计算完成时间、周转时间和带权周转时间: ```python # 定义作业类 class Job: def __init__(self, id, burst_time): self.id = id self.burst_time = burst_time self.completion_time = 0 self.turnaround_time = 0 self.weighted_turnaround_time = 0 # 输入作业信息 jobs = [ Job(1, 10), Job(2, 1), Job(3, 2), Job(4, 4), Job(5, 5) ] # 初始化变量 current_time = 0 # 计算完成时间、周转时间和带权周转时间 for job in jobs: job.completion_time = current_time + job.burst_time job.turnaround_time = job.completion_time - 0 # 假设所有作业同时到达 job.weighted_turnaround_time = job.turnaround_time / job.burst_time current_time = job.completion_time # 输出结果 print("作业编号\t执行时间\t完成时间\t周转时间\t带权周转时间") total_turnaround_time = 0 total_weighted_turnaround_time = 0 for job in jobs: print(f"{job.id}\t\t{job.burst_time}\t\t{job.completion_time}\t\t{job.turnaround_time}\t\t{job.weighted_turnaround_time:.2f}") total_turnaround_time += job.turnaround_time total_weighted_turnaround_time += job.weighted_turnaround_time average_turnaround_time = total_turnaround_time / len(jobs) average_weighted_turnaround_time = total_weighted_turnaround_time / len(jobs) print(f"\n平均周转时间: {average_turnaround_time:.2f}") print(f"平均带权周转时间: {average_weighted_turnaround_time:.2f}") ``` #### 5. 示例输出 运行上述代码后,将得到如下输出: ``` 作业编号 执行时间 完成时间 周转时间 带权周转时间 1 10 10 10 1.00 2 1 11 11 11.00 3 2 13 13 6.50 4 4 17 17 4.25 5 5 22 22 4.40 平均周转时间: 14.60 平均带权周转时间: 3.43 ``` #### 6. 解释 - **完成时间**:当前作业的完成时间等于前一个作业的完成时间加上当前作业的执行时间。 - **周转时间**:每个作业的周转时间等于其完成时间减去到达时间。 - **带权周转时间**:每个作业的带权周转时间等于其周转时间除以执行时间。 以上计算结果展示了如何使用 FCFS 调度算法计算作业的完成时间、周转时间和带权周转时间。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值