#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); }
结果: