简单的时间模拟(C)

#include <stdio.h>
//结构体,并起别名
typedef struct student
{
    int second;
    int minute;
    int hour;
};
void Update(struct student *p);
void Display(struct student *p);
void Delay();
//主函数
int main()
{
    //long i;
    struct student a,*p;
    a.second=-1;
    a.minute=0;
    a.hour=0;
    p=&a;
    Update(p);
    return 0;
}
//时间更新,并判断是否在正常值以内
void Update(struct student *p)
{
    struct student a;
    while (p->second<61)
    {if (p->second>=59)
    {
        p->second=p->second-60;
        p->minute=p->minute+1;
    }
    if (p->minute>=59)
    {
       p->minute=p->minute-60;
        p->hour=p->hour+1;
    }
    if (p->hour>=23)
        p->hour=p->hour-24;
        p->second=p->second+1;
        Display(p);
        Delay();
    }
}
//输出时间
void Display(struct student *p)
{
    printf ("%2d:%2d:%2d\r",p->hour,p->minute,p->second);
}
//时间更新一秒,进行300000000次空语句循环
void Delay()
{
    long h=0;
    while (h!=300000000)
    {h++;
    }
}

转载于:https://my.oschina.net/GodStaff/blog/210528

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给您提供一个时间片轮转进程调度算法的模拟程序,使用C语言编写,如下所示: ``` #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 // 进程控制块 typedef struct { int pid; // 进程ID int burst_time; // 进程执行时间 int remain_time; // 进程剩余执行时间 int arrival_time; // 进程到达时间 int waiting_time; // 进程等待时间 } PCB; // 队列 typedef struct { PCB *items[MAX_SIZE]; int front, rear; } Queue; // 初始化队列 void init_queue(Queue *q) { q->front = q->rear = 0; } // 判断队列是否为空 int is_empty(Queue *q) { return q->front == q->rear; } // 入队 void enqueue(Queue *q, PCB *p) { q->items[q->rear++] = p; } // 出队 PCB *dequeue(Queue *q) { return q->items[q->front++]; } // 获取队首元素 PCB *front(Queue *q) { return q->items[q->front]; } // 时间片轮转算法 void round_robin(PCB **processes, int num_processes, int quantum) { Queue ready_queue; init_queue(&ready_queue); int current_time = 0; int completed = 0; while (completed < num_processes) { // 将到达时间小于当前时间的进程加入就绪队列 for (int i = 0; i < num_processes; i++) { if (processes[i]->arrival_time <= current_time && processes[i]->remain_time > 0) { enqueue(&ready_queue, processes[i]); } } // 如果就绪队列为空,则时间跳到下一个进程到达时间 if (is_empty(&ready_queue)) { current_time++; continue; } // 从队首取出一个进程 PCB *current_process = dequeue(&ready_queue); // 如果进程剩余执行时间小于时间片,则执行完该进程 if (current_process->remain_time <= quantum) { current_time += current_process->remain_time; current_process->remain_time = 0; current_process->waiting_time = current_time - current_process->burst_time - current_process->arrival_time; completed++; } // 否则执行一段时间后放回队尾 else { current_time += quantum; current_process->remain_time -= quantum; enqueue(&ready_queue, current_process); } } } int main() { int num_processes, quantum; printf("请输入进程数量和时间片大小:"); scanf("%d %d", &num_processes, &quantum); PCB **processes = malloc(num_processes * sizeof(PCB *)); printf("请输入每个进程的到达时间和执行时间:\n"); for (int i = 0; i < num_processes; i++) { processes[i] = malloc(sizeof(PCB)); printf("进程 %d:", i + 1); scanf("%d %d", &processes[i]->arrival_time, &processes[i]->burst_time); processes[i]->pid = i + 1; processes[i]->remain_time = processes[i]->burst_time; } round_robin(processes, num_processes, quantum); printf("进程\t等待时间\n"); int total_waiting_time = 0; for (int i = 0; i < num_processes; i++) { total_waiting_time += processes[i]->waiting_time; printf("%d\t%d\n", processes[i]->pid, processes[i]->waiting_time); } printf("平均等待时间:%f\n", (float)total_waiting_time / num_processes); return 0; } ``` 该程序实现了时间片轮转算法的模拟,用户可以输入进程数量和时间片大小,以及每个进程的到达时间和执行时间。程序根据输入的信息模拟进程的执行过程,并输出每个进程的等待时间和平均等待时间。 注意,为了避免重复,我在程序中没有使用您提供的那段话。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值