#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 12//取20个字符串
#define P 4//cach为3
int a[P]; 
int arr[N];
int page[N];
    int error = 1;
void getrand(int n,int size){
    srand((unsigned) (time(NULL)));
    for(int i=0;i<n;i++){
    arr[i]=rand()%size;
    }
}
void arr_print(){
    for(int i=0;i<N;i++){
        printf("%d ",arr[i]);
    }
        printf("\n");
}
void a_print(){
    for(int i=0;i<P;i++){
        if(a[i]!=-1)
        printf("%d ",a[i]);
    }
        printf("\n");
}
int if_a(int value){
    for(int i=0;i<P;i++){
        if(a[i]==value){
            return 1;
        }
    }
    return 0;
}
void a_init(){

    for(int i=0;i<P;i++){
        a[i]=-1;
    }
    for(int i=0;i<N;i++){
        page[i]=-1;
    }
}
void page_print(){
    printf("缺少的页数是:");
    for(int i=0;i<N;i++){
        if(page[i]!=-1)
        printf("%d ",page[i]);
    }
}
void fun(){
    int a_index = 0;
    int arr_index = 0;

    int page_index=0;
    for(int i=0;i<N;i++){
        if(a[a_index]==-1){
            //如果数组没有存放内容
            // 将内容存入arr[(index++%3)]
            if(if_a(arr[arr_index])==1){
                printf("%d已在页中\t\t未发生错误\t\t",arr[arr_index]);
                arr_index++;
            }else{
                a[a_index]=arr[arr_index++];
                a_index++;
                a_index=a_index%P;
                error++;
                printf("页中未满,%d被引用\t出现第%d次错误\t\t",arr[arr_index-1],error-1);
            } 

        }else{
             //如果存在内容
            //判断数字是否在数组中
            if(if_a(arr[arr_index])==1){//是则不加入
                printf("%d已在页中\t\t未发生错误\t\t",arr[arr_index]);
                arr_index++;
            }else{//不是则加入arr[(index++%3)]
                int temp = a[a_index];
                page[page_index++]=temp;
                a[a_index]=arr[arr_index++];
                a_index++;
                a_index=a_index%P;
                error++;
            printf("%d被引用,%d被替换\t出现第%d次错误\t\t",arr[arr_index-1], temp,error-1);
            }
        }
        a_print();
    }

}

int main(){
    //1、随机生成20个小于10的数
    getrand(N,10);
        //初始化a与arr
    a_init();
        //输出arr的内容
    arr_print();
    printf("\n");
        //调度函数
    fun();
    printf("\n");
        //输出缺少页面、错误次数与缺页率
    page_print(); 
    printf("\n");
    printf("错误的次数是:%d 缺页率是:%.2f%%",error-1,(error-1)*100.0/N);

} 

结果:
图片说明
图片说明