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

京公网安备 11010502036488号